Skip to content

Commit a4b918c

Browse files
committed
Consolidate construction of the list field
This also makes the naming of the nested field implicit, and removes a bunch of item literals.
1 parent 86740bf commit a4b918c

File tree

43 files changed

+133
-143
lines changed

Some content is hidden

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

43 files changed

+133
-143
lines changed

datafusion/common/src/dfschema.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,14 +1382,14 @@ mod tests {
13821382

13831383
// Succeeds if both have the same element type, disregards names and nullability
13841384
assert!(DFSchema::datatype_is_logically_equal(
1385-
&DataType::List(Field::new("item", DataType::Int8, true).into()),
1385+
&DataType::List(Field::new_list_field(DataType::Int8, true).into()),
13861386
&DataType::List(Field::new("element", DataType::Int8, false).into())
13871387
));
13881388

13891389
// Fails if element type is different
13901390
assert!(!DFSchema::datatype_is_logically_equal(
1391-
&DataType::List(Field::new("item", DataType::Int8, true).into()),
1392-
&DataType::List(Field::new("item", DataType::Int16, true).into())
1391+
&DataType::List(Field::new_list_field(DataType::Int8, true).into()),
1392+
&DataType::List(Field::new_list_field(DataType::Int16, true).into())
13931393
));
13941394

13951395
// Test maps
@@ -1522,14 +1522,14 @@ mod tests {
15221522

15231523
// Succeeds if both have the same element type, disregards names and nullability
15241524
assert!(DFSchema::datatype_is_semantically_equal(
1525-
&DataType::List(Field::new("item", DataType::Int8, true).into()),
1525+
&DataType::List(Field::new_list_field(DataType::Int8, true).into()),
15261526
&DataType::List(Field::new("element", DataType::Int8, false).into())
15271527
));
15281528

15291529
// Fails if element type is different
15301530
assert!(!DFSchema::datatype_is_semantically_equal(
1531-
&DataType::List(Field::new("item", DataType::Int8, true).into()),
1532-
&DataType::List(Field::new("item", DataType::Int16, true).into())
1531+
&DataType::List(Field::new_list_field(DataType::Int8, true).into()),
1532+
&DataType::List(Field::new_list_field(DataType::Int16, true).into())
15331533
));
15341534

15351535
// Test maps

datafusion/common/src/scalar/mod.rs

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4037,7 +4037,7 @@ mod tests {
40374037
#[test]
40384038
fn test_to_array_of_size_for_fsl() {
40394039
let values = Int32Array::from_iter([Some(1), None, Some(2)]);
4040-
let field = Arc::new(Field::new("item", DataType::Int32, true));
4040+
let field = Arc::new(Field::new_list_field(DataType::Int32, true));
40414041
let arr = FixedSizeListArray::new(Arc::clone(&field), 3, Arc::new(values), None);
40424042
let sv = ScalarValue::FixedSizeList(Arc::new(arr));
40434043
let actual_arr = sv
@@ -4093,17 +4093,15 @@ mod tests {
40934093
)
40944094
} else if O::IS_LARGE {
40954095
new_null_array(
4096-
&DataType::LargeList(Arc::new(Field::new(
4097-
"item",
4096+
&DataType::LargeList(Arc::new(Field::new_list_field(
40984097
DataType::Int64,
40994098
true,
41004099
))),
41014100
1,
41024101
)
41034102
} else {
41044103
new_null_array(
4105-
&DataType::List(Arc::new(Field::new(
4106-
"item",
4104+
&DataType::List(Arc::new(Field::new_list_field(
41074105
DataType::Int64,
41084106
true,
41094107
))),
@@ -4122,7 +4120,7 @@ mod tests {
41224120

41234121
#[test]
41244122
fn test_iter_to_array_fixed_size_list() {
4125-
let field = Arc::new(Field::new("item", DataType::Int32, true));
4123+
let field = Arc::new(Field::new_list_field(DataType::Int32, true));
41264124
let f1 = Arc::new(FixedSizeListArray::new(
41274125
Arc::clone(&field),
41284126
3,
@@ -4961,15 +4959,15 @@ mod tests {
49614959
let null_list_scalar = ScalarValue::try_from_array(&list, 1).unwrap();
49624960

49634961
let data_type =
4964-
DataType::List(Arc::new(Field::new("item", DataType::Int32, true)));
4962+
DataType::List(Arc::new(Field::new_list_field(DataType::Int32, true)));
49654963

49664964
assert_eq!(non_null_list_scalar.data_type(), data_type);
49674965
assert_eq!(null_list_scalar.data_type(), data_type);
49684966
}
49694967

49704968
#[test]
49714969
fn scalar_try_from_list_datatypes() {
4972-
let inner_field = Arc::new(Field::new("item", DataType::Int32, true));
4970+
let inner_field = Arc::new(Field::new_list_field(DataType::Int32, true));
49734971

49744972
// Test for List
49754973
let data_type = &DataType::List(Arc::clone(&inner_field));
@@ -5010,19 +5008,20 @@ mod tests {
50105008

50115009
#[test]
50125010
fn scalar_try_from_list_of_list() {
5013-
let data_type = DataType::List(Arc::new(Field::new(
5014-
"item",
5015-
DataType::List(Arc::new(Field::new("item", DataType::Int32, true))),
5011+
let data_type = DataType::List(Arc::new(Field::new_list_field(
5012+
DataType::List(Arc::new(Field::new_list_field(DataType::Int32, true))),
50165013
true,
50175014
)));
50185015
let data_type = &data_type;
50195016
let scalar: ScalarValue = data_type.try_into().unwrap();
50205017

50215018
let expected = ScalarValue::List(
50225019
new_null_array(
5023-
&DataType::List(Arc::new(Field::new(
5024-
"item",
5025-
DataType::List(Arc::new(Field::new("item", DataType::Int32, true))),
5020+
&DataType::List(Arc::new(Field::new_list_field(
5021+
DataType::List(Arc::new(Field::new_list_field(
5022+
DataType::Int32,
5023+
true,
5024+
))),
50265025
true,
50275026
))),
50285027
1,
@@ -5038,13 +5037,12 @@ mod tests {
50385037
#[test]
50395038
fn scalar_try_from_not_equal_list_nested_list() {
50405039
let list_data_type =
5041-
DataType::List(Arc::new(Field::new("item", DataType::Int32, true)));
5040+
DataType::List(Arc::new(Field::new_list_field(DataType::Int32, true)));
50425041
let data_type = &list_data_type;
50435042
let list_scalar: ScalarValue = data_type.try_into().unwrap();
50445043

5045-
let nested_list_data_type = DataType::List(Arc::new(Field::new(
5046-
"item",
5047-
DataType::List(Arc::new(Field::new("item", DataType::Int32, true))),
5044+
let nested_list_data_type = DataType::List(Arc::new(Field::new_list_field(
5045+
DataType::List(Arc::new(Field::new_list_field(DataType::Int32, true))),
50485046
true,
50495047
)));
50505048
let data_type = &nested_list_data_type;
@@ -5678,7 +5676,7 @@ mod tests {
56785676
let field_a = Arc::new(Field::new("A", DataType::Utf8, false));
56795677
let field_primitive_list = Arc::new(Field::new(
56805678
"primitive_list",
5681-
DataType::List(Arc::new(Field::new("item", DataType::Int32, true))),
5679+
DataType::List(Arc::new(Field::new_list_field(DataType::Int32, true))),
56825680
false,
56835681
));
56845682

@@ -5879,9 +5877,8 @@ mod tests {
58795877
fn build_2d_list(data: Vec<Option<i32>>) -> ListArray {
58805878
let a1 = ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(data)]);
58815879
ListArray::new(
5882-
Arc::new(Field::new(
5883-
"item",
5884-
DataType::List(Arc::new(Field::new("item", DataType::Int32, true))),
5880+
Arc::new(Field::new_list_field(
5881+
DataType::List(Arc::new(Field::new_list_field(DataType::Int32, true))),
58855882
true,
58865883
)),
58875884
OffsetBuffer::<i32>::from_lengths([1]),
@@ -6876,8 +6873,7 @@ mod tests {
68766873
assert_eq!(1, arr.len());
68776874
assert_eq!(
68786875
arr.data_type(),
6879-
&DataType::List(Arc::new(Field::new(
6880-
"item",
6876+
&DataType::List(Arc::new(Field::new_list_field(
68816877
DataType::Timestamp(TimeUnit::Millisecond, Some(s.into())),
68826878
true,
68836879
)))

datafusion/core/tests/sql/aggregates.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ async fn csv_query_array_agg_distinct() -> Result<()> {
3636
*actual[0].schema(),
3737
Schema::new(vec![Field::new_list(
3838
"array_agg(DISTINCT aggregate_test_100.c2)",
39-
Field::new("item", DataType::UInt32, true),
39+
Field::new_list_field(DataType::UInt32, true),
4040
true
4141
),])
4242
);

datafusion/expr-common/src/type_coercion/binary.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2098,7 +2098,7 @@ mod tests {
20982098
);
20992099

21002100
// list
2101-
let inner_field = Arc::new(Field::new("item", DataType::Int64, true));
2101+
let inner_field = Arc::new(Field::new_list_field(DataType::Int64, true));
21022102
test_coercion_binary_rule!(
21032103
DataType::List(Arc::clone(&inner_field)),
21042104
DataType::List(Arc::clone(&inner_field)),
@@ -2155,8 +2155,7 @@ mod tests {
21552155
);
21562156

21572157
// Negative test: inner_timestamp_field and inner_field are not compatible because their inner types are not compatible
2158-
let inner_timestamp_field = Arc::new(Field::new(
2159-
"item",
2158+
let inner_timestamp_field = Arc::new(Field::new_list_field(
21602159
DataType::Timestamp(TimeUnit::Microsecond, None),
21612160
true,
21622161
));

datafusion/expr/src/logical_plan/builder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2432,7 +2432,7 @@ mod tests {
24322432
],
24332433
false,
24342434
);
2435-
let string_field = Field::new("item", DataType::Utf8, false);
2435+
let string_field = Field::new_list_field(DataType::Utf8, false);
24362436
let strings_field = Field::new_list("item", string_field.clone(), false);
24372437
let schema = Schema::new(vec![
24382438
Field::new("scalar", DataType::UInt32, false),

datafusion/expr/src/type_coercion/functions.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -958,7 +958,7 @@ mod tests {
958958

959959
#[test]
960960
fn test_fixed_list_wildcard_coerce() -> Result<()> {
961-
let inner = Arc::new(Field::new("item", DataType::Int32, false));
961+
let inner = Arc::new(Field::new_list_field(DataType::Int32, false));
962962
let current_types = vec![
963963
DataType::FixedSizeList(Arc::clone(&inner), 2), // able to coerce for any size
964964
];
@@ -996,10 +996,9 @@ mod tests {
996996
#[test]
997997
fn test_nested_wildcard_fixed_size_lists() -> Result<()> {
998998
let type_into = DataType::FixedSizeList(
999-
Arc::new(Field::new(
1000-
"item",
999+
Arc::new(Field::new_list_field(
10011000
DataType::FixedSizeList(
1002-
Arc::new(Field::new("item", DataType::Int32, false)),
1001+
Arc::new(Field::new_list_field(DataType::Int32, false)),
10031002
FIXED_SIZE_LIST_WILDCARD,
10041003
),
10051004
false,
@@ -1008,10 +1007,9 @@ mod tests {
10081007
);
10091008

10101009
let type_from = DataType::FixedSizeList(
1011-
Arc::new(Field::new(
1012-
"item",
1010+
Arc::new(Field::new_list_field(
10131011
DataType::FixedSizeList(
1014-
Arc::new(Field::new("item", DataType::Int8, false)),
1012+
Arc::new(Field::new_list_field(DataType::Int8, false)),
10151013
4,
10161014
),
10171015
false,
@@ -1022,10 +1020,9 @@ mod tests {
10221020
assert_eq!(
10231021
coerced_from(&type_into, &type_from),
10241022
Some(DataType::FixedSizeList(
1025-
Arc::new(Field::new(
1026-
"item",
1023+
Arc::new(Field::new_list_field(
10271024
DataType::FixedSizeList(
1028-
Arc::new(Field::new("item", DataType::Int32, false)),
1025+
Arc::new(Field::new_list_field(DataType::Int32, false)),
10291026
4,
10301027
),
10311028
false,

datafusion/functions-aggregate/COMMENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ first argument and the definition looks like this:
5454
// `input_type` : data type of the first argument
5555
let mut fields = vec![Field::new_list(
5656
format_state_name(self.name(), "nth_value"),
57-
Field::new("item", args.input_types[0].clone(), true /* nullable of list item */ ),
57+
Field::new_list_field(args.input_types[0].clone(), true /* nullable of list item */ ),
5858
false, // nullable of list itself
5959
)];
6060
```

datafusion/functions-aggregate/src/approx_median.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl AggregateUDFImpl for ApproxMedian {
8787
Field::new(format_state_name(args.name, "min"), Float64, false),
8888
Field::new_list(
8989
format_state_name(args.name, "centroids"),
90-
Field::new("item", Float64, true),
90+
Field::new_list_field(Float64, true),
9191
false,
9292
),
9393
])

datafusion/functions-aggregate/src/approx_percentile_cont.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ impl AggregateUDFImpl for ApproxPercentileCont {
240240
),
241241
Field::new_list(
242242
format_state_name(args.name, "centroids"),
243-
Field::new("item", DataType::Float64, true),
243+
Field::new_list_field(DataType::Float64, true),
244244
false,
245245
),
246246
])

datafusion/functions-aggregate/src/array_agg.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ impl AggregateUDFImpl for ArrayAgg {
7777
}
7878

7979
fn return_type(&self, arg_types: &[DataType]) -> Result<DataType> {
80-
Ok(DataType::List(Arc::new(Field::new(
81-
"item",
80+
Ok(DataType::List(Arc::new(Field::new_list_field(
8281
arg_types[0].clone(),
8382
true,
8483
))))
@@ -89,15 +88,15 @@ impl AggregateUDFImpl for ArrayAgg {
8988
return Ok(vec![Field::new_list(
9089
format_state_name(args.name, "distinct_array_agg"),
9190
// See COMMENTS.md to understand why nullable is set to true
92-
Field::new("item", args.input_types[0].clone(), true),
91+
Field::new_list_field(args.input_types[0].clone(), true),
9392
true,
9493
)]);
9594
}
9695

9796
let mut fields = vec![Field::new_list(
9897
format_state_name(args.name, "array_agg"),
9998
// See COMMENTS.md to understand why nullable is set to true
100-
Field::new("item", args.input_types[0].clone(), true),
99+
Field::new_list_field(args.input_types[0].clone(), true),
101100
true,
102101
)];
103102

@@ -108,7 +107,7 @@ impl AggregateUDFImpl for ArrayAgg {
108107
let orderings = args.ordering_fields.to_vec();
109108
fields.push(Field::new_list(
110109
format_state_name(args.name, "array_agg_orderings"),
111-
Field::new("item", DataType::Struct(Fields::from(orderings)), true),
110+
Field::new_list_field(DataType::Struct(Fields::from(orderings)), true),
112111
false,
113112
));
114113

0 commit comments

Comments
 (0)