This is an automated email from the ASF dual-hosted git repository. github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-11962-c544206082d6879f24f635b475f487aecae6d387 in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
commit 873c3f1b223b095aeb6dee61ebf938994001f8b7 Author: Gabriel <[email protected]> AuthorDate: Wed Oct 28 10:10:35 2026 +0000 feat(arrow-array): support Date32/Date64 in record_batch!/create_array! macros (#11962) ## Summary - Add `Date32`/`Date64` arms to the `create_array!` macro so `record_batch!` can build date columns, matching existing support for other primitive-backed types. ## Test plan - [x] `cargo test -p arrow-array --lib record_batch::` - [x] `cargo +stable fmt -p arrow-array -- --check` - [x] `cargo clippy -p arrow-array --all-targets --all-features -- -D warnings` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Sonnet 5 <[email protected]> --- arrow-array/src/record_batch.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/arrow-array/src/record_batch.rs b/arrow-array/src/record_batch.rs index 0933f61589..0c0b495533 100644 --- a/arrow-array/src/record_batch.rs +++ b/arrow-array/src/record_batch.rs @@ -115,6 +115,8 @@ macro_rules! create_array { (@from TimestampMillisecond) => { $crate::TimestampMillisecondArray }; (@from TimestampMicrosecond) => { $crate::TimestampMicrosecondArray }; (@from TimestampNanosecond) => { $crate::TimestampNanosecondArray }; + (@from Date32) => { $crate::Date32Array }; + (@from Date64) => { $crate::Date64Array }; (@from $ty: ident) => { compile_error!(concat!("Unsupported data type: ", stringify!($ty))) @@ -954,7 +956,7 @@ where #[cfg(test)] mod tests { use super::*; - use crate::types::{Int32Type, Int64Type}; + use crate::types::{Date64Type, Int32Type, Int64Type}; use crate::{ BooleanArray, Int8Array, Int32Array, Int64Array, ListArray, StringArray, StringViewArray, }; @@ -1081,6 +1083,26 @@ mod tests { assert_eq!(1, record_batch.column(1).null_count()); } + #[test] + fn create_record_batch_macro_date_types() { + let record_batch = record_batch!( + ("d32", Date32, [Some(1), None]), + ("d64", Date64, [86_400_000, 172_800_000]) + ) + .unwrap(); + + let expected = Schema::new(vec![ + Field::new("d32", DataType::Date32, true), + Field::new("d64", DataType::Date64, true), + ]); + assert_eq!(&expected, record_batch.schema().as_ref()); + assert_eq!(1, record_batch.column(0).null_count()); + assert_eq!( + &[86_400_000, 172_800_000], + record_batch.column(1).as_primitive::<Date64Type>().values() + ); + } + #[test] fn create_record_batch_macro_length_mismatch() { let err = record_batch!(("a", Int32, [1, 2, 3]), ("b", Int32, [1, 2])).unwrap_err();
