fix: handle better alias types in duckdb

This commit is contained in:
Ruben Fiszel
2025-11-15 20:41:13 +00:00
parent b751357738
commit e4dfdea645
4 changed files with 25 additions and 19 deletions

View File

@@ -416,8 +416,7 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
[[package]]
name = "duckdb"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e46d5568337ee1f7ea8779e1d9aa2eafcdf156458713ce65afb246c5d2cf5850"
source = "git+https://github.com/windmill-labs/duckdb-rs.git?rev=689b2755ab1d454577ee23f18f46f8b3503030c3#689b2755ab1d454577ee23f18f46f8b3503030c3"
dependencies = [
"arrow",
"cast",
@@ -704,8 +703,7 @@ checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
[[package]]
name = "libduckdb-sys"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6650a7ea86fce24fe1fbf5b037671a8b77c59d135703fc6085b8a1827e66e977"
source = "git+https://github.com/windmill-labs/duckdb-rs.git?rev=689b2755ab1d454577ee23f18f46f8b3503030c3#689b2755ab1d454577ee23f18f46f8b3503030c3"
dependencies = [
"cc",
"flate2",

View File

@@ -5,7 +5,7 @@ edition = "2024"
[dependencies]
chrono = "0.4.41"
duckdb = { version = "1.4.2", features = ["bundled"] }
duckdb = { rev = "689b2755ab1d454577ee23f18f46f8b3503030c3", git = "https://github.com/windmill-labs/duckdb-rs.git", features = ["bundled"] }
rust_decimal = "1.37.2"
serde = { version = "1.0", features = ["derive"] }
serde_json = { version = "^1", features = ["preserve_order", "raw_value"] }

View File

@@ -1,2 +1,2 @@
cargo build --release -p windmill_duckdb_ffi_internal
CARGO_NET_GIT_FETCH_WITH_CLI=1 cargo build --release -p windmill_duckdb_ffi_internal
cp target/release/libwindmill_duckdb_ffi_internal.* ../target/debug/

View File

@@ -245,7 +245,7 @@ fn do_duckdb_inner(
}
// Statement needs to be stepped at least once or stmt.column_names() will panic
let mut column_names = None;
// let mut type_aliases = None;
let mut type_aliases = None;
loop {
let row = rows.next();
match row {
@@ -260,18 +260,26 @@ fn do_duckdb_inner(
column_names.as_ref().unwrap()
}
};
// let type_aliases = match type_aliases.as_ref() {
// Some(type_aliases) => type_aliases,
// None => {
// type_aliases = Some(
// (0..stmt.column_count())
// .map(|i| stmt.column_logical_type(i).get_alias())
// .collect::<Vec<_>>(),
// );
// type_aliases.as_ref().unwrap()
// }
// };
let type_aliases = (0..stmt.column_count()).map(|_| None).collect::<Vec<_>>();
let type_aliases = match type_aliases.as_ref() {
Some(type_aliases) => type_aliases,
None => {
type_aliases = Some(
(0..stmt.column_count())
.map(|i| {
let logical_type = stmt.column_logical_type(i);
if logical_type.is_invalid() {
None
} else {
logical_type.get_alias()
}
})
.collect::<Vec<_>>(),
);
type_aliases.as_ref().unwrap()
}
};
// let type_aliases = (0..stmt.column_count()).map(|_| None).collect::<Vec<_>>();
let row = row_to_value(row, &column_names.as_slice(), &type_aliases.as_slice())
.map_err(|e| e.to_string())?;