|
17 | 17 |
|
18 | 18 | use crate::{
|
19 | 19 | errors::CometError,
|
20 |
| - execution::shuffle::row::{append_field, SparkUnsafeObject}, |
| 20 | + execution::shuffle::row::{append_field, SparkUnsafeObject, SparkUnsafeRow}, |
21 | 21 | };
|
22 | 22 | use arrow_array::builder::{
|
23 | 23 | ArrayBuilder, BinaryBuilder, BooleanBuilder, Date32Builder, Decimal128Builder, Float32Builder,
|
@@ -102,6 +102,7 @@ macro_rules! define_append_element {
|
102 | 102 | let is_null = list.is_null_at(idx);
|
103 | 103 |
|
104 | 104 | if is_null {
|
| 105 | + // Append a null value to the element builder. |
105 | 106 | element_builder.append_null();
|
106 | 107 | } else {
|
107 | 108 | $accessor(element_builder, list, idx);
|
@@ -284,6 +285,7 @@ pub fn append_list_element<T: ArrayBuilder>(
|
284 | 285 | let is_null = list.is_null_at(idx);
|
285 | 286 |
|
286 | 287 | if is_null {
|
| 288 | + // Append a null value to element builder. |
287 | 289 | element_builder.append_null();
|
288 | 290 | } else {
|
289 | 291 | element_builder.append_value(list.get_decimal(idx, *p))
|
@@ -313,21 +315,22 @@ pub fn append_list_element<T: ArrayBuilder>(
|
313 | 315 | }
|
314 | 316 | */
|
315 | 317 | DataType::Struct(fields) => {
|
316 |
| - let element_builder: &mut StructBuilder = list_builder |
| 318 | + let struct_builder: &mut StructBuilder = list_builder |
317 | 319 | .values()
|
318 | 320 | .as_any_mut()
|
319 | 321 | .downcast_mut::<StructBuilder>()
|
320 | 322 | .unwrap();
|
321 | 323 | let is_null = list.is_null_at(idx);
|
322 | 324 |
|
323 |
| - if is_null { |
324 |
| - element_builder.append_null(); |
| 325 | + let nested_row = if is_null { |
| 326 | + SparkUnsafeRow::default() |
325 | 327 | } else {
|
326 |
| - let nested_row = list.get_struct(idx, fields.len()); |
327 |
| - element_builder.append(true); |
328 |
| - for (field_idx, field) in fields.into_iter().enumerate() { |
329 |
| - append_field(field.data_type(), element_builder, &nested_row, field_idx); |
330 |
| - } |
| 328 | + list.get_struct(idx, fields.len()) |
| 329 | + }; |
| 330 | + |
| 331 | + struct_builder.append(!is_null); |
| 332 | + for (field_idx, field) in fields.into_iter().enumerate() { |
| 333 | + append_field(field.data_type(), struct_builder, &nested_row, field_idx)?; |
331 | 334 | }
|
332 | 335 | }
|
333 | 336 | _ => {
|
|
0 commit comments