Skip to content

Commit c29c5ad

Browse files
Address comments
1 parent 8208023 commit c29c5ad

4 files changed

Lines changed: 12 additions & 7 deletions

File tree

bindings/cpp/src/types.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,8 @@ pub fn resolve_row_types(
351351
Datum::Time(t) => Datum::Time(*t),
352352
Datum::TimestampNtz(ts) => Datum::TimestampNtz(*ts),
353353
Datum::TimestampLtz(ts) => Datum::TimestampLtz(*ts),
354+
// TODO: C++ bindings need proper CXX wrapper types for FlussArray
355+
// before C++ users can construct or inspect array values through FFI.
354356
Datum::Array(a) => Datum::Array(a.clone()),
355357
};
356358
out.set_field(idx, resolved);
@@ -409,6 +411,8 @@ pub fn compacted_row_to_owned(
409411
fcore::metadata::DataType::Binary(dt) => {
410412
Datum::Blob(Cow::Owned(row.get_binary(i, dt.length())?.to_vec()))
411413
}
414+
// TODO: C++ bindings need proper CXX wrapper types for FlussArray
415+
// before C++ users can construct or inspect array values through FFI.
412416
fcore::metadata::DataType::Array(_) => Datum::Array(row.get_array(i)?),
413417
other => return Err(anyhow!("Unsupported data type for column {i}: {other:?}")),
414418
};

crates/fluss/src/record/arrow.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ impl RowAppendRecordBatchBuilder {
332332
}
333333
arrow_schema::DataType::List(field) => {
334334
let inner_builder = Self::create_builder(field.data_type(), capacity)?;
335-
Ok(Box::new(ListBuilder::new(inner_builder)))
335+
Ok(Box::new(ListBuilder::with_capacity(inner_builder, capacity)))
336336
}
337337
arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Millisecond, _) => Ok(
338338
Box::new(TimestampMillisecondBuilder::with_capacity(capacity)),

crates/fluss/src/row/binary_array.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -310,23 +310,21 @@ impl FlussArray {
310310
if TimestampNtz::is_compact(precision) {
311311
Ok(TimestampNtz::new(self.get_long(pos)))
312312
} else {
313-
let (offset, _size) = self.get_offset_and_size(pos);
313+
let (offset, nanos_of_millis) = self.get_offset_and_size(pos);
314314
let millis_bytes = self.checked_slice(offset, 8, "timestamp ntz millis")?;
315315
let millis = i64::from_ne_bytes(millis_bytes.try_into().unwrap());
316-
let nanos = _size as i32;
317-
TimestampNtz::from_millis_nanos(millis, nanos)
316+
TimestampNtz::from_millis_nanos(millis, nanos_of_millis as i32)
318317
}
319318
}
320319

321320
pub fn get_timestamp_ltz(&self, pos: usize, precision: u32) -> Result<TimestampLtz> {
322321
if TimestampLtz::is_compact(precision) {
323322
Ok(TimestampLtz::new(self.get_long(pos)))
324323
} else {
325-
let (offset, _size) = self.get_offset_and_size(pos);
324+
let (offset, nanos_of_millis) = self.get_offset_and_size(pos);
326325
let millis_bytes = self.checked_slice(offset, 8, "timestamp ltz millis")?;
327326
let millis = i64::from_ne_bytes(millis_bytes.try_into().unwrap());
328-
let nanos = _size as i32;
329-
TimestampLtz::from_millis_nanos(millis, nanos)
327+
TimestampLtz::from_millis_nanos(millis, nanos_of_millis as i32)
330328
}
331329
}
332330

crates/fluss/src/row/datum.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,9 @@ fn append_fluss_array_to_list_builder(
504504

505505
for i in 0..arr.size() {
506506
if arr.is_null_at(i) {
507+
// TODO: Datum::Null triggers a chain of downcast attempts in append_to.
508+
// For sparse arrays with many nulls, call append_null directly on the
509+
// typed inner builder to avoid the overhead.
507510
let null_datum = Datum::Null;
508511
null_datum.append_to(values_builder, &element_arrow_type)?;
509512
} else {

0 commit comments

Comments
 (0)