Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions arrow-array/src/array/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1271,8 +1271,12 @@ mod tests {
fn test_null_runs() {
for r in [DataType::Int16, DataType::Int32, DataType::Int64] {
let data_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", r, false)),
Arc::new(Field::new("values", DataType::Utf8, true)),
Arc::new(Field::new(Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME, r, false)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Utf8,
true,
)),
);

let array = new_null_array(&data_type, 4);
Expand Down
12 changes: 10 additions & 2 deletions arrow-array/src/array/run_array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,16 @@ impl<R: RunEndIndexType> RunArray<R> {
}

let data_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", run_ends.data_type().clone(), false)),
Arc::new(Field::new("values", values.data_type().clone(), true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
run_ends.data_type().clone(),
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
values.data_type().clone(),
true,
)),
);

let logical_len = RunArray::logical_len(run_ends);
Expand Down
12 changes: 10 additions & 2 deletions arrow-avro/src/codec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -960,8 +960,16 @@ impl Codec {
_ => unreachable!(),
};
DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", run_ends_dt, false)),
Arc::new(Field::new("values", values.codec().data_type(), true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
run_ends_dt,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
values.codec().data_type(),
true,
)),
)
}
#[cfg(feature = "avro_custom_types")]
Expand Down
12 changes: 10 additions & 2 deletions arrow-avro/src/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3036,8 +3036,16 @@ mod tests {
#[test]
fn test_run_end_encoded() {
let ree_dt = DataType::RunEndEncoded(
Arc::new(ArrowField::new("run_ends", DataType::Int32, false)),
Arc::new(ArrowField::new("values", DataType::Utf8, false)),
Arc::new(ArrowField::new(
ArrowField::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int32,
false,
)),
Arc::new(ArrowField::new(
ArrowField::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Utf8,
false,
)),
);
let s = single_field_schema(ArrowField::new("text", ree_dt, false));
let avro = AvroSchema::try_from(&s).unwrap();
Expand Down
7 changes: 5 additions & 2 deletions arrow-avro/src/writer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2107,9 +2107,12 @@ mod tests {
assert_eq!(out.num_rows(), 8);
match out.schema().field(0).data_type() {
DataType::RunEndEncoded(run_ends_field, values_field) => {
assert_eq!(run_ends_field.name(), "run_ends");
assert_eq!(
run_ends_field.name(),
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME
);
assert_eq!(run_ends_field.data_type(), &DataType::Int32);
assert_eq!(values_field.name(), "values");
assert_eq!(values_field.name(), Field::REE_VALUES_FIELD_DEFAULT_NAME);
assert_eq!(values_field.data_type(), &DataType::Int32);
assert!(values_field.is_nullable());
let got_ree = out
Expand Down
144 changes: 120 additions & 24 deletions arrow-cast/src/cast/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13424,8 +13424,16 @@ mod tests {

// Cast to RunEndEncoded<Int32, Int32>
let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int32, false)),
Arc::new(Field::new("values", DataType::Int32, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int32,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Int32,
true,
)),
);
let cast_result = cast(&array_ref, &target_type).unwrap();

Expand Down Expand Up @@ -13465,8 +13473,16 @@ mod tests {
]);
let array_ref = Arc::new(source_array) as ArrayRef;
let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int32, false)),
Arc::new(Field::new("values", DataType::Int32, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int32,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Int32,
true,
)),
);
let cast_result = cast(&array_ref, &target_type).unwrap();
let result_run_array = cast_result
Expand Down Expand Up @@ -13509,8 +13525,16 @@ mod tests {
]);
let array_ref = Arc::new(source_array) as ArrayRef;
let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int16, false)),
Arc::new(Field::new("values", DataType::Int64, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int16,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Int64,
true,
)),
);
let cast_result = cast(&array_ref, &target_type).unwrap();
let result_run_array = cast_result
Expand Down Expand Up @@ -13539,8 +13563,16 @@ mod tests {

// Cast to RunEndEncoded<Int32, String>
let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int32, false)),
Arc::new(Field::new("values", DataType::Utf8, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int32,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Utf8,
true,
)),
);
let cast_result = cast(&array_ref, &target_type).unwrap();

Expand Down Expand Up @@ -13568,8 +13600,16 @@ mod tests {

// Cast to RunEndEncoded<Int32, Int32>
let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int32, false)),
Arc::new(Field::new("values", DataType::Int32, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int32,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Int32,
true,
)),
);
let cast_result = cast(&array_ref, &target_type).unwrap();

Expand Down Expand Up @@ -13609,8 +13649,16 @@ mod tests {
let array_ref = Arc::new(source_array) as ArrayRef;

let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int16, false)),
Arc::new(Field::new("values", DataType::Int32, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int16,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Int32,
true,
)),
);
let cast_result = cast(&array_ref, &target_type).unwrap();
assert_eq!(cast_result.data_type(), &target_type);
Expand All @@ -13628,8 +13676,16 @@ mod tests {

// Test again with Int64 index type
let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int64, false)),
Arc::new(Field::new("values", DataType::Int32, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int64,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Int32,
true,
)),
);
let cast_result = cast(&array_ref, &target_type).unwrap();
assert_eq!(cast_result.data_type(), &target_type);
Expand Down Expand Up @@ -13677,8 +13733,16 @@ mod tests {

// Attempt to cast to RunEndEncoded<Int16, Utf8>
let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int16, false)),
Arc::new(Field::new("values", DataType::Utf8, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int16,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Utf8,
true,
)),
);
let cast_options = CastOptions {
safe: false, // This should make it fail instead of returning nulls
Expand Down Expand Up @@ -13707,8 +13771,16 @@ mod tests {

// Attempt to cast to RunEndEncoded<Int16, Utf8>
let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int16, false)),
Arc::new(Field::new("values", DataType::Utf8, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int16,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Utf8,
true,
)),
);
let cast_options = CastOptions {
safe: true,
Expand Down Expand Up @@ -13737,8 +13809,16 @@ mod tests {

// Attempt to cast to RunEndEncoded<Int64, Utf8> (upcast should succeed)
let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int64, false)),
Arc::new(Field::new("values", DataType::Utf8, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int64,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Utf8,
true,
)),
);
let cast_options = CastOptions {
safe: false,
Expand Down Expand Up @@ -13773,8 +13853,16 @@ mod tests {

// Attempt to cast to RunEndEncoded<Int64, Utf8>
let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int64, false)),
Arc::new(Field::new("values", DataType::Utf8, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int64,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Utf8,
true,
)),
);
let cast_options = CastOptions {
safe: false,
Expand Down Expand Up @@ -14293,8 +14381,16 @@ mod tests {
let array_ref = Arc::new(ree_array) as ArrayRef;

let target_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Int64, false)),
Arc::new(Field::new("values", DataType::Utf8, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int64,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Utf8,
true,
)),
);
let cast_options = CastOptions {
safe: false,
Expand Down
12 changes: 10 additions & 2 deletions arrow-data/src/data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3124,8 +3124,16 @@ mod tests {
#[cfg(not(feature = "force_validate"))]
fn test_validate_values_rejects_a_non_integer_run_end() {
let data_type = DataType::RunEndEncoded(
Arc::new(Field::new("run_ends", DataType::Utf8, false)),
Arc::new(Field::new("values", DataType::Int32, true)),
Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Utf8,
false,
)),
Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
DataType::Int32,
true,
)),
);
let run_end_encoded = unsafe {
ArrayData::builder(data_type)
Expand Down
36 changes: 30 additions & 6 deletions arrow-data/src/transform/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -269,8 +269,16 @@ mod tests {
use std::sync::Arc;

fn create_run_array_data(run_ends: Vec<i32>, values: ArrayData) -> ArrayData {
let run_ends_field = Arc::new(Field::new("run_ends", DataType::Int32, false));
let values_field = Arc::new(Field::new("values", values.data_type().clone(), true));
let run_ends_field = Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int32,
false,
));
let values_field = Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
values.data_type().clone(),
true,
));
let data_type = DataType::RunEndEncoded(run_ends_field, values_field);

let last_run_end = if run_ends.is_empty() {
Expand All @@ -295,8 +303,16 @@ mod tests {
}

fn create_run_array_data_int16(run_ends: Vec<i16>, values: ArrayData) -> ArrayData {
let run_ends_field = Arc::new(Field::new("run_ends", DataType::Int16, false));
let values_field = Arc::new(Field::new("values", values.data_type().clone(), true));
let run_ends_field = Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int16,
false,
));
let values_field = Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
values.data_type().clone(),
true,
));
let data_type = DataType::RunEndEncoded(run_ends_field, values_field);

let last_run_end = if run_ends.is_empty() {
Expand All @@ -321,8 +337,16 @@ mod tests {
}

fn create_run_array_data_int64(run_ends: Vec<i64>, values: ArrayData) -> ArrayData {
let run_ends_field = Arc::new(Field::new("run_ends", DataType::Int64, false));
let values_field = Arc::new(Field::new("values", values.data_type().clone(), true));
let run_ends_field = Arc::new(Field::new(
Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
DataType::Int64,
false,
));
let values_field = Arc::new(Field::new(
Field::REE_VALUES_FIELD_DEFAULT_NAME,
values.data_type().clone(),
true,
));
let data_type = DataType::RunEndEncoded(run_ends_field, values_field);

let last_run_end = if run_ends.is_empty() {
Expand Down
Loading
Loading