fix: handle better alias types in duckdb
This commit is contained in:
6
backend/windmill-duckdb-ffi-internal/Cargo.lock
generated
6
backend/windmill-duckdb-ffi-internal/Cargo.lock
generated
@@ -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",
|
||||
|
||||
@@ -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"] }
|
||||
|
||||
@@ -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/
|
||||
@@ -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())?;
|
||||
|
||||
Reference in New Issue
Block a user