Skip to content

Commit 3ea5d34

Browse files
committed
refactor!: Update StructType constructors
1 parent 3c3b650 commit 3ea5d34

File tree

41 files changed

+480
-393
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+480
-393
lines changed

derive-macros/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ pub fn derive_to_schema(input: proc_macro::TokenStream) -> proc_macro::TokenStre
5151
use delta_kernel::schema::derive_macro_utils::{
5252
ToDataType as _, GetStructField as _, GetNullableContainerStructField as _,
5353
};
54-
delta_kernel::schema::StructType::new([
54+
delta_kernel::schema::StructType::new_unchecked([
5555
#schema_fields
5656
])
5757
}

ffi/src/engine_funcs.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -225,11 +225,9 @@ mod tests {
225225
#[test]
226226
fn test_new_expression_evaluator() {
227227
let engine = get_default_engine("memory:///doesntmatter/foo");
228-
let in_schema = Arc::new(StructType::new(vec![StructField::new(
229-
"a",
230-
DataType::LONG,
231-
true,
232-
)]));
228+
let in_schema = Arc::new(
229+
StructType::try_new(vec![StructField::new("a", DataType::LONG, true)]).unwrap(),
230+
);
233231
let expr = Expression::literal(1);
234232
let output_type: Handle<SharedSchema> = in_schema.clone().into();
235233
let in_schema_handle: Handle<SharedSchema> = in_schema.into();

ffi/src/test_ffi.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ pub unsafe extern "C" fn get_testing_kernel_expression() -> Handle<SharedExpress
9797
];
9898
let nested_values = vec![Scalar::Integer(500), Scalar::Array(array_data.clone())];
9999
let nested_struct = StructData::try_new(nested_fields.clone(), nested_values).unwrap();
100-
let nested_struct_type = StructType::new(nested_fields);
100+
let nested_struct_type = StructType::try_new(nested_fields).unwrap();
101101

102102
let top_level_struct = StructData::try_new(
103103
vec![StructField::nullable(

ffi/src/transaction/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,10 +229,10 @@ mod tests {
229229
#[tokio::test]
230230
#[cfg_attr(miri, ignore)] // FIXME: re-enable miri (can't call foreign function `linkat` on OS `linux`)
231231
async fn test_basic_append() -> Result<(), Box<dyn std::error::Error>> {
232-
let schema = Arc::new(StructType::new(vec![
232+
let schema = Arc::new(StructType::try_new(vec![
233233
StructField::nullable("number", DataType::INTEGER),
234234
StructField::nullable("string", DataType::STRING),
235-
]));
235+
])?);
236236

237237
// Create a temporary local directory for use during this test
238238
let tmp_test_dir = tempdir()?;

integration-tests/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fn create_kernel_schema() -> delta_kernel::schema::Schema {
1111
use delta_kernel::schema::{DataType, StructField};
1212
let field_a = StructField::not_null("a", DataType::LONG);
1313
let field_b = StructField::not_null("b", DataType::BOOLEAN);
14-
delta_kernel::schema::Schema::new(vec![field_a, field_b])
14+
delta_kernel::schema::Schema::try_new(vec![field_a, field_b]).unwrap()
1515
}
1616

1717
fn main() {

kernel/examples/common/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ pub fn get_scan(snapshot: SnapshotRef, args: &ScanArgs) -> DeltaResult<Option<Sc
8181
"Table has no such column: {col}"
8282
)))
8383
});
84-
Schema::try_new(selected_fields).map(Arc::new)
84+
Schema::try_from_results(selected_fields).map(Arc::new)
8585
})
8686
.transpose()?;
8787
Ok(Some(

kernel/examples/write-table/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ fn parse_schema(schema_str: &str) -> DeltaResult<SchemaRef> {
171171
})
172172
.collect::<DeltaResult<Vec<_>>>()?;
173173

174-
Ok(Arc::new(StructType::new(fields)))
174+
Ok(Arc::new(StructType::try_new(fields)?))
175175
}
176176

177177
/// Create a new Delta table with the given schema.

kernel/src/actions/crc.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ mod tests {
157157
#[test]
158158
fn test_file_size_histogram_schema() {
159159
let schema = FileSizeHistogram::to_schema();
160-
let expected = StructType::new([
160+
let expected = StructType::new_unchecked([
161161
StructField::not_null("sortedBinBoundaries", ArrayType::new(DataType::LONG, false)),
162162
StructField::not_null("fileCounts", ArrayType::new(DataType::LONG, false)),
163163
StructField::not_null("totalBytes", ArrayType::new(DataType::LONG, false)),
@@ -168,7 +168,7 @@ mod tests {
168168
#[test]
169169
fn test_deleted_record_counts_histogram_schema() {
170170
let schema = DeletedRecordCountsHistogram::to_schema();
171-
let expected = StructType::new([StructField::not_null(
171+
let expected = StructType::new_unchecked([StructField::not_null(
172172
"deletedRecordCounts",
173173
ArrayType::new(DataType::LONG, false),
174174
)]);
@@ -178,7 +178,7 @@ mod tests {
178178
#[test]
179179
fn test_crc_schema() {
180180
let schema = Crc::to_schema();
181-
let expected = StructType::new([
181+
let expected = StructType::new_unchecked([
182182
StructField::nullable("txnId", DataType::STRING),
183183
StructField::not_null("tableSizeBytes", DataType::LONG),
184184
StructField::not_null("numFiles", DataType::LONG),

kernel/src/actions/mod.rs

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ pub(crate) const DOMAIN_METADATA_NAME: &str = "domainMetadata";
6868
pub(crate) const INTERNAL_DOMAIN_PREFIX: &str = "delta.";
6969

7070
static LOG_SCHEMA: LazyLock<SchemaRef> = LazyLock::new(|| {
71-
Arc::new(StructType::new([
71+
Arc::new(StructType::new_unchecked([
7272
StructField::nullable(ADD_NAME, Add::to_schema()),
7373
StructField::nullable(REMOVE_NAME, Remove::to_schema()),
7474
StructField::nullable(METADATA_NAME, Metadata::to_schema()),
@@ -83,28 +83,28 @@ static LOG_SCHEMA: LazyLock<SchemaRef> = LazyLock::new(|| {
8383
});
8484

8585
static LOG_ADD_SCHEMA: LazyLock<SchemaRef> = LazyLock::new(|| {
86-
Arc::new(StructType::new([StructField::nullable(
86+
Arc::new(StructType::new_unchecked([StructField::nullable(
8787
ADD_NAME,
8888
Add::to_schema(),
8989
)]))
9090
});
9191

9292
static LOG_COMMIT_INFO_SCHEMA: LazyLock<SchemaRef> = LazyLock::new(|| {
93-
Arc::new(StructType::new([StructField::nullable(
93+
Arc::new(StructType::new_unchecked([StructField::nullable(
9494
COMMIT_INFO_NAME,
9595
CommitInfo::to_schema(),
9696
)]))
9797
});
9898

9999
static LOG_TXN_SCHEMA: LazyLock<SchemaRef> = LazyLock::new(|| {
100-
Arc::new(StructType::new([StructField::nullable(
100+
Arc::new(StructType::new_unchecked([StructField::nullable(
101101
SET_TRANSACTION_NAME,
102102
SetTransaction::to_schema(),
103103
)]))
104104
});
105105

106106
static LOG_DOMAIN_METADATA_SCHEMA: LazyLock<SchemaRef> = LazyLock::new(|| {
107-
Arc::new(StructType::new([StructField::nullable(
107+
Arc::new(StructType::new_unchecked([StructField::nullable(
108108
DOMAIN_METADATA_NAME,
109109
DomainMetadata::to_schema(),
110110
)]))
@@ -137,7 +137,9 @@ pub(crate) fn get_log_domain_metadata_schema() -> &'static SchemaRef {
137137
/// This is useful for JSON conversion, as it allows us to wrap a dynamically maintained add action
138138
/// schema in a top-level "add" struct.
139139
pub(crate) fn as_log_add_schema(schema: SchemaRef) -> SchemaRef {
140-
Arc::new(StructType::new([StructField::nullable(ADD_NAME, schema)]))
140+
Arc::new(StructType::new_unchecked([StructField::nullable(
141+
ADD_NAME, schema,
142+
)]))
141143
}
142144

143145
#[derive(Debug, Clone, PartialEq, Eq, ToSchema)]
@@ -991,15 +993,15 @@ mod tests {
991993
.project(&[METADATA_NAME])
992994
.expect("Couldn't get metaData field");
993995

994-
let expected = Arc::new(StructType::new([StructField::nullable(
996+
let expected = Arc::new(StructType::new_unchecked([StructField::nullable(
995997
"metaData",
996-
StructType::new([
998+
StructType::new_unchecked([
997999
StructField::not_null("id", DataType::STRING),
9981000
StructField::nullable("name", DataType::STRING),
9991001
StructField::nullable("description", DataType::STRING),
10001002
StructField::not_null(
10011003
"format",
1002-
StructType::new([
1004+
StructType::new_unchecked([
10031005
StructField::not_null("provider", DataType::STRING),
10041006
StructField::not_null(
10051007
"options",
@@ -1025,9 +1027,9 @@ mod tests {
10251027
.project(&[ADD_NAME])
10261028
.expect("Couldn't get add field");
10271029

1028-
let expected = Arc::new(StructType::new([StructField::nullable(
1030+
let expected = Arc::new(StructType::new_unchecked([StructField::nullable(
10291031
"add",
1030-
StructType::new([
1032+
StructType::new_unchecked([
10311033
StructField::not_null("path", DataType::STRING),
10321034
StructField::not_null(
10331035
"partitionValues",
@@ -1067,7 +1069,7 @@ mod tests {
10671069
fn deletion_vector_field() -> StructField {
10681070
StructField::nullable(
10691071
"deletionVector",
1070-
DataType::struct_type([
1072+
DataType::struct_type_unchecked([
10711073
StructField::not_null("storageType", DataType::STRING),
10721074
StructField::not_null("pathOrInlineDv", DataType::STRING),
10731075
StructField::nullable("offset", DataType::INTEGER),
@@ -1082,9 +1084,9 @@ mod tests {
10821084
let schema = get_log_schema()
10831085
.project(&[REMOVE_NAME])
10841086
.expect("Couldn't get remove field");
1085-
let expected = Arc::new(StructType::new([StructField::nullable(
1087+
let expected = Arc::new(StructType::new_unchecked([StructField::nullable(
10861088
"remove",
1087-
StructType::new([
1089+
StructType::new_unchecked([
10881090
StructField::not_null("path", DataType::STRING),
10891091
StructField::nullable("deletionTimestamp", DataType::LONG),
10901092
StructField::not_null("dataChange", DataType::BOOLEAN),
@@ -1105,9 +1107,9 @@ mod tests {
11051107
let schema = get_log_schema()
11061108
.project(&[CDC_NAME])
11071109
.expect("Couldn't get cdc field");
1108-
let expected = Arc::new(StructType::new([StructField::nullable(
1110+
let expected = Arc::new(StructType::new_unchecked([StructField::nullable(
11091111
"cdc",
1110-
StructType::new([
1112+
StructType::new_unchecked([
11111113
StructField::not_null("path", DataType::STRING),
11121114
StructField::not_null(
11131115
"partitionValues",
@@ -1126,9 +1128,9 @@ mod tests {
11261128
let schema = get_log_schema()
11271129
.project(&[SIDECAR_NAME])
11281130
.expect("Couldn't get sidecar field");
1129-
let expected = Arc::new(StructType::new([StructField::nullable(
1131+
let expected = Arc::new(StructType::new_unchecked([StructField::nullable(
11301132
"sidecar",
1131-
StructType::new([
1133+
StructType::new_unchecked([
11321134
StructField::not_null("path", DataType::STRING),
11331135
StructField::not_null("sizeInBytes", DataType::LONG),
11341136
StructField::not_null("modificationTime", DataType::LONG),
@@ -1143,9 +1145,9 @@ mod tests {
11431145
let schema = get_log_schema()
11441146
.project(&[CHECKPOINT_METADATA_NAME])
11451147
.expect("Couldn't get checkpointMetadata field");
1146-
let expected = Arc::new(StructType::new([StructField::nullable(
1148+
let expected = Arc::new(StructType::new_unchecked([StructField::nullable(
11471149
"checkpointMetadata",
1148-
StructType::new([
1150+
StructType::new_unchecked([
11491151
StructField::not_null("version", DataType::LONG),
11501152
tags_field(),
11511153
]),
@@ -1159,9 +1161,9 @@ mod tests {
11591161
.project(&["txn"])
11601162
.expect("Couldn't get transaction field");
11611163

1162-
let expected = Arc::new(StructType::new([StructField::nullable(
1164+
let expected = Arc::new(StructType::new_unchecked([StructField::nullable(
11631165
"txn",
1164-
StructType::new([
1166+
StructType::new_unchecked([
11651167
StructField::not_null("appId", DataType::STRING),
11661168
StructField::not_null("version", DataType::LONG),
11671169
StructField::nullable("lastUpdated", DataType::LONG),
@@ -1176,9 +1178,9 @@ mod tests {
11761178
.project(&["commitInfo"])
11771179
.expect("Couldn't get commitInfo field");
11781180

1179-
let expected = Arc::new(StructType::new(vec![StructField::nullable(
1181+
let expected = Arc::new(StructType::new_unchecked(vec![StructField::nullable(
11801182
"commitInfo",
1181-
StructType::new(vec![
1183+
StructType::new_unchecked(vec![
11821184
StructField::nullable("timestamp", DataType::LONG),
11831185
StructField::nullable("inCommitTimestamp", DataType::LONG),
11841186
StructField::nullable("operation", DataType::STRING),
@@ -1199,9 +1201,9 @@ mod tests {
11991201
let schema = get_log_schema()
12001202
.project(&[DOMAIN_METADATA_NAME])
12011203
.expect("Couldn't get domainMetadata field");
1202-
let expected = Arc::new(StructType::new([StructField::nullable(
1204+
let expected = Arc::new(StructType::new_unchecked([StructField::nullable(
12031205
"domainMetadata",
1204-
StructType::new([
1206+
StructType::new_unchecked([
12051207
StructField::not_null("domain", DataType::STRING),
12061208
StructField::not_null("configuration", DataType::STRING),
12071209
StructField::not_null("removed", DataType::BOOLEAN),
@@ -1526,7 +1528,7 @@ mod tests {
15261528

15271529
#[test]
15281530
fn test_metadata_try_new() {
1529-
let schema = StructType::new([StructField::not_null("id", DataType::INTEGER)]);
1531+
let schema = StructType::new_unchecked([StructField::not_null("id", DataType::INTEGER)]);
15301532
let config = HashMap::from([("key1".to_string(), "value1".to_string())]);
15311533

15321534
let metadata = Metadata::try_new(
@@ -1551,7 +1553,7 @@ mod tests {
15511553

15521554
#[test]
15531555
fn test_metadata_try_new_default() {
1554-
let schema = StructType::new([StructField::not_null("id", DataType::INTEGER)]);
1556+
let schema = StructType::new_unchecked([StructField::not_null("id", DataType::INTEGER)]);
15551557
let metadata = Metadata::try_new(None, None, schema, vec![], 0, HashMap::new()).unwrap();
15561558

15571559
assert!(!metadata.id.is_empty());
@@ -1561,7 +1563,7 @@ mod tests {
15611563

15621564
#[test]
15631565
fn test_metadata_unique_ids() {
1564-
let schema = StructType::new([StructField::not_null("id", DataType::INTEGER)]);
1566+
let schema = StructType::new_unchecked([StructField::not_null("id", DataType::INTEGER)]);
15651567
let m1 = Metadata::try_new(None, None, schema.clone(), vec![], 0, HashMap::new()).unwrap();
15661568
let m2 = Metadata::try_new(None, None, schema, vec![], 0, HashMap::new()).unwrap();
15671569
assert_ne!(m1.id, m2.id);
@@ -1648,7 +1650,7 @@ mod tests {
16481650
#[test]
16491651
fn test_metadata_into_engine_data() {
16501652
let engine = ExprEngine::new();
1651-
let schema = StructType::new([StructField::not_null("id", DataType::INTEGER)]);
1653+
let schema = StructType::new_unchecked([StructField::not_null("id", DataType::INTEGER)]);
16521654

16531655
let test_metadata = Metadata::try_new(
16541656
Some("test".to_string()),
@@ -1699,7 +1701,7 @@ mod tests {
16991701
#[test]
17001702
fn test_metadata_with_log_schema() {
17011703
let engine = ExprEngine::new();
1702-
let schema = StructType::new([StructField::not_null("id", DataType::INTEGER)]);
1704+
let schema = StructType::new_unchecked([StructField::not_null("id", DataType::INTEGER)]);
17031705

17041706
let metadata = Metadata::try_new(
17051707
Some("table".to_string()),

kernel/src/actions/visitors.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -630,9 +630,9 @@ impl InCommitTimestampVisitor {
630630
pub(crate) fn schema() -> Arc<Schema> {
631631
static SCHEMA: LazyLock<Arc<Schema>> = LazyLock::new(|| {
632632
let ict_type = StructField::new("inCommitTimestamp", DataType::LONG, true);
633-
Arc::new(StructType::new(vec![StructField::new(
633+
Arc::new(StructType::new_unchecked(vec![StructField::new(
634634
COMMIT_INFO_NAME,
635-
StructType::new([ict_type]),
635+
StructType::new_unchecked([ict_type]),
636636
true,
637637
)]))
638638
});

0 commit comments

Comments
 (0)