Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 7 additions & 10 deletions vortex-duckdb/src/column_statistics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,15 @@ pub struct ColumnStatistics {

impl ColumnStatistics {
pub fn from(stats: &ColumnStatisticsAggregate, dtype: DType) -> Self {
let min = stats.min.as_ref().map(|value| {
let value = value.clone();
Scalar::try_new(dtype.clone(), Some(value))
.vortex_expect("scalar dtype and value are incompatible")
.try_to_duckdb_scalar()
.vortex_expect("can't convert Scalar to duckdb Value")
let min = stats.min.as_ref().and_then(|value| {
Scalar::try_new(dtype.clone(), Some(value.clone()))
.and_then(|scalar| scalar.try_to_duckdb_scalar())
.ok()
});
let max = stats.max.as_ref().map(|value| {
let max = stats.max.as_ref().and_then(|value| {
Scalar::try_new(dtype.clone(), Some(value.clone()))
.vortex_expect("scalar dtype and value are incompatible")
.try_to_duckdb_scalar()
.vortex_expect("can't convert Scalar to duckdb Value")
.and_then(|scalar| scalar.try_to_duckdb_scalar())
.ok()
});

let max_string_length = stats
Expand Down
3 changes: 3 additions & 0 deletions vortex-duckdb/src/convert/scalar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,9 @@ impl<'a> TryFrom<&'a ValueRef> for Scalar {
vortex_bail!("List value must be a list or struct dtype")
}
},
ExtractedValue::Unsupported(type_id) => {
vortex_bail!("Unsupported DuckDB value type {type_id:?}")
}
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion vortex-duckdb/src/duckdb/value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ impl ValueRef {
.collect::<Vec<_>>(),
),
// ...other types remain unimplemented..
other => vortex_panic!("Unsupported DuckDB value type {other:?}"),
other => ExtractedValue::Unsupported(other),
}
}
}
Expand Down Expand Up @@ -452,6 +452,7 @@ pub enum ExtractedValue {
TimestampTz(i64),
Decimal(u8, i8, i128),
List(Vec<Value>),
Unsupported(DUCKDB_TYPE),
}

#[cfg(test)]
Expand Down
35 changes: 35 additions & 0 deletions vortex-sqllogictest/slt/duckdb/date_special_values.slt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright the Vortex contributors

# infinity dates survive the roundtrip, ordering, and filtering

include ../setup.slt.no

statement ok
CREATE TABLE td(d DATE);

statement ok
INSERT INTO td VALUES ('infinity'), ('-infinity'), ('2020-01-01');

statement ok
COPY td TO '${WORK_DIR}/dsv.vortex';

query DD
SELECT min(d), max(d) FROM td;
----
-infinity infinity

query DD
SELECT min(d), max(d) FROM '${WORK_DIR}/dsv.vortex';
----
-infinity infinity

query I
SELECT count(*) FROM td WHERE d > DATE '2021-01-01';
----
1

query I
SELECT count(*) FROM '${WORK_DIR}/dsv.vortex' WHERE d > DATE '2021-01-01';
----
1
3 changes: 2 additions & 1 deletion vortex-sqllogictest/src/duckdb.rs
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,8 @@ impl std::fmt::Display for ValueDisplayAdapter {
| ExtractedValue::TimestampMs(_)
| ExtractedValue::TimestampS(_)
| ExtractedValue::TimestampTz(_)
| ExtractedValue::List(_) => write!(f, "{}", self.0),
Comment thread
myrrc marked this conversation as resolved.
| ExtractedValue::List(_)
| ExtractedValue::Unsupported(_) => write!(f, "{}", self.0),
}
}
}
Expand Down
Loading