From 5b1c14db35a493bf77d5fc0af0181b20de656ec1 Mon Sep 17 00:00:00 2001 From: Mikhail Kot Date: Thu, 6 Aug 2026 15:54:54 +0100 Subject: [PATCH 1/2] duckdb: support TIME_NS Signed-off-by: Mikhail Kot --- vortex-duckdb/build.rs | 3 ++- vortex-duckdb/src/convert/scalar.rs | 12 ++++++++++-- vortex-duckdb/src/duckdb/value.rs | 7 ++++++- vortex-sqllogictest/src/duckdb.rs | 1 + 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/vortex-duckdb/build.rs b/vortex-duckdb/build.rs index 04b13a00fb5..f96d67604bc 100644 --- a/vortex-duckdb/build.rs +++ b/vortex-duckdb/build.rs @@ -46,7 +46,7 @@ const SOURCE_FILES: [&str; 11] = [ // Duckdb C API function we use. // This lowers codegen'd src/cpp.rs by four times. -const DUCKDB_C_API_FUNCTIONS: [&str; 133] = [ +const DUCKDB_C_API_FUNCTIONS: [&str; 134] = [ "duckdb_array_type_array_size", "duckdb_array_type_child_type", "duckdb_array_vector_get_child", @@ -79,6 +79,7 @@ const DUCKDB_C_API_FUNCTIONS: [&str; 133] = [ "duckdb_create_selection_vector", "duckdb_create_struct_type", "duckdb_create_time", + "duckdb_create_time_ns", "duckdb_create_timestamp", "duckdb_create_timestamp_ms", "duckdb_create_timestamp_ns", diff --git a/vortex-duckdb/src/convert/scalar.rs b/vortex-duckdb/src/convert/scalar.rs index c9cc6100a1d..8d9c244664e 100644 --- a/vortex-duckdb/src/convert/scalar.rs +++ b/vortex-duckdb/src/convert/scalar.rs @@ -243,8 +243,9 @@ impl ToDuckDBScalar for ExtScalar<'_> { TimeUnit::Microseconds => Value::new_time(value()?), TimeUnit::Milliseconds => Value::new_time(value()? * 1000), TimeUnit::Seconds => Value::new_time(value()? * 1000 * 1000), - TimeUnit::Nanoseconds | TimeUnit::Days => { - vortex_bail!("cannot convert timeunit {unit} to a duckdb MS time") + TimeUnit::Nanoseconds => Value::new_time_ns(value()?), + TimeUnit::Days => { + vortex_bail!("cannot convert timeunit {unit} to a duckdb time") } }, }) @@ -315,6 +316,13 @@ impl<'a> TryFrom<&'a ValueRef> for Scalar { Some(ScalarValue::from(micros)), )?, )), + ExtractedValue::TimeNs(nanos) => Ok(Scalar::extension::