-
Notifications
You must be signed in to change notification settings - Fork 817
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP - Fix bug JSON input barfs on {"emptylist":[]} #1063
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1546,6 +1546,37 @@ mod tests { | |
one_column_roundtrip("list_single_column", values, true, Some(SMALL_SIZE / 2)); | ||
} | ||
|
||
#[test] | ||
fn null_list_single_column() { | ||
let null_field = Field::new("item", DataType::Null, true); | ||
let list_field = | ||
Field::new("emptylist", DataType::List(Box::new(null_field)), true); | ||
|
||
let schema = Schema::new(vec![list_field]); | ||
|
||
// Build a ListArray[NullArray(0)] | ||
let a_values = NullArray::new(SMALL_SIZE); | ||
let a_value_offsets = arrow::buffer::Buffer::from(&[0, 0].to_byte_slice()); | ||
let a_list_data = ArrayData::builder(DataType::List(Box::new(Field::new( | ||
"item", | ||
DataType::Null, | ||
true, | ||
)))) | ||
.len(1) | ||
.add_buffer(a_value_offsets) | ||
.null_bit_buffer(Buffer::from(vec![0b00011011])) | ||
.add_child_data(a_values.data().clone()) | ||
.build() | ||
.unwrap(); | ||
|
||
let a = ListArray::from(a_list_data); | ||
// let values = Arc::new(a); | ||
// one_column_roundtrip("null_list_single_column", values, true, Some(SMALL_SIZE / 2)); | ||
|
||
let batch = RecordBatch::try_new(Arc::new(schema), vec![Arc::new(a)]).unwrap(); | ||
roundtrip("test_null_list_single_column.parquet", batch, None); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The error I am now seeing comes from the reader being unable to read the parquet that is written out.
I have peppered the code with
|
||
} | ||
|
||
#[test] | ||
fn large_list_single_column() { | ||
let a_values = Int32Array::from(vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -751,9 +751,10 @@ impl LevelInfo { | |
|
||
/// Given a level's information, calculate the offsets required to index an array correctly. | ||
pub(crate) fn filter_array_indices(&self) -> Vec<usize> { | ||
// happy path if not dealing with lists | ||
dbg!(&self); | ||
let is_nullable = match self.level_type { | ||
LevelType::Primitive(is_nullable) => is_nullable, | ||
LevelType::List(is_nullable) => is_nullable, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is the only change to the code path -- it addresses the error message we were seeing where the |
||
_ => panic!( | ||
"Cannot filter indices on a non-primitive array, found {:?}", | ||
self.level_type | ||
|
@@ -784,6 +785,7 @@ impl LevelInfo { | |
index += 1; | ||
} | ||
}); | ||
dbg!(&filtered); | ||
filtered | ||
} | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💯 for test driven development 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks :)
Also pls #1036 (comment)