diff --git a/.github/workflows/rust.yaml b/.github/workflows/rust.yaml index 5698ff51..c2b5f6ca 100644 --- a/.github/workflows/rust.yaml +++ b/.github/workflows/rust.yaml @@ -41,7 +41,7 @@ jobs: name: Download duckdb with: repository: "duckdb/duckdb" - tag: "v1.4.0" + tag: "v1.4.1" fileName: ${{ matrix.duckdb }} out-file-path: . @@ -66,12 +66,7 @@ jobs: - name: Dry-run release of crates if: matrix.os == 'ubuntu-latest' - uses: katyo/publish-crates@v2 - with: - path: "./" - args: --allow-dirty --all-features - dry-run: true - ignore-unpublished-changes: true + run: cargo publish --workspace --dry-run # For windows - name: Windows extract duckdb diff --git a/Cargo.lock b/Cargo.lock index c7e5eea0..06a3fff7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -104,9 +104,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "arrow" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26b57282a08ae92f727497805122fec964c6245cfa0e13f0e75452eaf3bc41f" +checksum = "6e833808ff2d94ed40d9379848a950d995043c7fb3e81a30b383f4c6033821cc" dependencies = [ "arrow-arith", "arrow-array", @@ -122,9 +122,9 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cebf38ca279120ff522f4954b81a39527425b6e9f615e6b72842f4de1ffe02b8" +checksum = "ad08897b81588f60ba983e3ca39bda2b179bdd84dced378e7df81a5313802ef8" dependencies = [ "arrow-array", "arrow-buffer", @@ -136,9 +136,9 @@ dependencies = [ [[package]] name = "arrow-array" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744109142cdf8e7b02795e240e20756c2a782ac9180d4992802954a8f871c0de" +checksum = "8548ca7c070d8db9ce7aa43f37393e4bfcf3f2d3681df278490772fd1673d08d" dependencies = [ "ahash 0.8.12", "arrow-buffer", @@ -146,15 +146,15 @@ dependencies = [ "arrow-schema", "chrono", "half", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "num", ] [[package]] name = "arrow-buffer" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601bb103c4c374bcd1f62c66bcea67b42a2ee91a690486c37d4c180236f11ccc" +checksum = "e003216336f70446457e280807a73899dd822feaf02087d31febca1363e2fccc" dependencies = [ "bytes", "half", @@ -163,9 +163,9 @@ dependencies = [ [[package]] name = "arrow-cast" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed61d9d73eda8df9e3014843def37af3050b5080a9acbe108f045a316d5a0be" +checksum = "919418a0681298d3a77d1a315f625916cb5678ad0d74b9c60108eb15fd083023" dependencies = [ "arrow-array", "arrow-buffer", @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "arrow-data" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43407f2c6ba2367f64d85d4603d6fb9c4b92ed79d2ffd21021b37efa96523e12" +checksum = "a5c64fff1d142f833d78897a772f2e5b55b36cb3e6320376f0961ab0db7bd6d0" dependencies = [ "arrow-buffer", "arrow-schema", @@ -196,9 +196,9 @@ dependencies = [ [[package]] name = "arrow-ord" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c142a147dceb59d057bad82400f1693847c80dca870d008bf7b91caf902810ae" +checksum = "3c8f82583eb4f8d84d4ee55fd1cb306720cddead7596edce95b50ee418edf66f" dependencies = [ "arrow-array", "arrow-buffer", @@ -209,9 +209,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac6620667fccdab4204689ca173bd84a15de6bb6b756c3a8764d4d7d0c2fc04" +checksum = "9d07ba24522229d9085031df6b94605e0f4b26e099fb7cdeec37abd941a73753" dependencies = [ "arrow-array", "arrow-buffer", @@ -222,18 +222,18 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa93af9ff2bb80de539e6eb2c1c8764abd0f4b73ffb0d7c82bf1f9868785e66" +checksum = "b3aa9e59c611ebc291c28582077ef25c97f1975383f1479b12f3b9ffee2ffabe" dependencies = [ "bitflags", ] [[package]] name = "arrow-select" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be8b2e0052cd20d36d64f32640b68a5ab54d805d24a473baee5d52017c85536c" +checksum = "8c41dbbd1e97bfcaee4fcb30e29105fb2c75e4d82ae4de70b792a5d3f66b2e7a" dependencies = [ "ahash 0.8.12", "arrow-array", @@ -245,9 +245,9 @@ dependencies = [ [[package]] name = "arrow-string" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2155e26e17f053c8975c546fc70cf19c00542f9abf43c23a88a46ef7204204f" +checksum = "53f5183c150fbc619eede22b861ea7c0eebed8eaac0333eaa7f6da5205fd504d" dependencies = [ "arrow-array", "arrow-buffer", @@ -337,9 +337,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -347,7 +347,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -543,9 +543,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.37" +version = "1.2.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" +checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" dependencies = [ "find-msvc-tools", "jobserver", @@ -583,7 +583,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -627,12 +627,14 @@ dependencies = [ [[package]] name = "comfy-table" -version = "7.2.1" +version = "7.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" +checksum = "e0d05af1e006a2407bedef5af410552494ce5be9090444dbbcb57258c1af3d56" dependencies = [ - "crossterm", - "unicode-segmentation", + "crossterm 0.27.0", + "crossterm 0.28.1", + "strum 0.26.3", + "strum_macros 0.26.4", "unicode-width", ] @@ -756,18 +758,28 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" -version = "0.29.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" dependencies = [ "bitflags", "crossterm_winapi", - "document-features", + "libc", "parking_lot", - "rustix", "winapi", ] +[[package]] +name = "crossterm" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" +dependencies = [ + "bitflags", + "parking_lot", + "rustix 0.38.44", +] + [[package]] name = "crossterm_winapi" version = "0.9.1" @@ -858,18 +870,9 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" -[[package]] -name = "document-features" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" -dependencies = [ - "litrs", -] - [[package]] name = "duckdb" -version = "1.4.0" +version = "1.4.1" dependencies = [ "arrow", "calamine", @@ -892,7 +895,7 @@ dependencies = [ "rust_decimal", "rustyline", "serde_json", - "strum", + "strum 0.27.2", "tempfile", "url", "uuid", @@ -900,7 +903,7 @@ dependencies = [ [[package]] name = "duckdb-loadable-macros" -version = "0.1.10" +version = "0.1.11" dependencies = [ "darling", "proc-macro2", @@ -948,7 +951,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -1015,7 +1018,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ "cfg-if", - "rustix", + "rustix 1.1.2", "windows-sys 0.59.0", ] @@ -1033,9 +1036,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" [[package]] name = "flate2" @@ -1084,7 +1087,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4" dependencies = [ - "rustix", + "rustix 1.1.2", "windows-sys 0.59.0", ] @@ -1212,9 +1215,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "glob" @@ -1296,6 +1299,12 @@ dependencies = [ "serde", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "hashlink" version = "0.10.0" @@ -1574,12 +1583,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.3" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92119844f513ffa41556430369ab02c295a3578af21cf945caa3e9e0c2481ac3" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "serde", "serde_core", ] @@ -1647,9 +1656,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.78" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -1657,9 +1666,9 @@ dependencies = [ [[package]] name = "lexical-core" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b765c31809609075565a70b4b71402281283aeda7ecaf4818ac14a7b2ade8958" +checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594" dependencies = [ "lexical-parse-float", "lexical-parse-integer", @@ -1670,64 +1679,57 @@ dependencies = [ [[package]] name = "lexical-parse-float" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de6f9cb01fb0b08060209a057c048fcbab8717b4c1ecd2eac66ebfe39a65b0f2" +checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56" dependencies = [ "lexical-parse-integer", "lexical-util", - "static_assertions", ] [[package]] name = "lexical-parse-integer" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72207aae22fc0a121ba7b6d479e42cbfea549af1479c3f3a4f12c70dd66df12e" +checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34" dependencies = [ "lexical-util", - "static_assertions", ] [[package]] name = "lexical-util" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a82e24bf537fd24c177ffbbdc6ebcc8d54732c35b50a3f28cc3f4e4c949a0b3" -dependencies = [ - "static_assertions", -] +checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17" [[package]] name = "lexical-write-float" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5afc668a27f460fb45a81a757b6bf2f43c2d7e30cb5a2dcd3abf294c78d62bd" +checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361" dependencies = [ "lexical-util", "lexical-write-integer", - "static_assertions", ] [[package]] name = "lexical-write-integer" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "629ddff1a914a836fb245616a7888b62903aae58fa771e1d83943035efa0f978" +checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df" dependencies = [ "lexical-util", - "static_assertions", ] [[package]] name = "libc" -version = "0.2.175" +version = "0.2.176" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" [[package]] name = "libduckdb-sys" -version = "1.4.0" +version = "1.4.1" dependencies = [ "arrow", "bindgen", @@ -1745,12 +1747,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.3", + "windows-link", ] [[package]] @@ -1779,6 +1781,12 @@ dependencies = [ "zlib-rs", ] +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + [[package]] name = "linux-raw-sys" version = "0.11.0" @@ -1791,12 +1799,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" -[[package]] -name = "litrs" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" - [[package]] name = "lock_api" version = "0.4.13" @@ -1840,9 +1842,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" @@ -1995,18 +1997,18 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] [[package]] name = "object_store" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc4f07659e11cd45a341cd24d71e683e3be65d9ff1f8150061678fe60437496" +checksum = "4c1be0c6c22ec0817cdc77d3842f721a17fd30ab6965001415b5402a74e6b740" dependencies = [ "async-trait", "base64", @@ -2991,9 +2993,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.2" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", @@ -3003,9 +3005,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", @@ -3162,6 +3164,19 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + [[package]] name = "rustix" version = "1.1.2" @@ -3171,15 +3186,15 @@ dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys", - "windows-sys 0.61.0", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.1", ] [[package]] name = "rustls" -version = "0.23.31" +version = "0.23.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" dependencies = [ "once_cell", "ring", @@ -3272,7 +3287,7 @@ version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -3298,9 +3313,9 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "security-framework" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640" +checksum = "cc198e42d9b7510827939c9a15f5062a0c913f3371d765977e586d2fe6c16f4a" dependencies = [ "bitflags", "core-foundation", @@ -3321,9 +3336,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.225" +version = "1.0.227" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +checksum = "80ece43fc6fbed4eb5392ab50c07334d3e577cbf40997ee896fe7af40bba4245" dependencies = [ "serde_core", "serde_derive", @@ -3331,18 +3346,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.225" +version = "1.0.227" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +checksum = "7a576275b607a2c86ea29e410193df32bc680303c82f31e275bbfcafe8b33be5" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.225" +version = "1.0.227" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" +checksum = "51e694923b8824cf0e9b382adf0f60d4e05f348f357b38833a3fa5ed7c2ede04" dependencies = [ "proc-macro2", "quote", @@ -3535,6 +3550,12 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + [[package]] name = "strum" version = "0.27.2" @@ -3636,15 +3657,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.22.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix", - "windows-sys 0.61.0", + "rustix 1.1.2", + "windows-sys 0.61.1", ] [[package]] @@ -3732,9 +3753,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" dependencies = [ "rustls", "tokio", @@ -3755,18 +3776,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a197c0ec7d131bfc6f7e82c8442ba1595aeab35da7adbf05b6b73cd06a16b6be" +checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.5" +version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ad0b7ae9cfeef5605163839cb9221f453399f15cfb5c10be9885fcf56611f9" +checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" dependencies = [ "indexmap", "toml_datetime", @@ -3776,9 +3797,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" +checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" dependencies = [ "winnow", ] @@ -4011,9 +4032,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.101" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", @@ -4024,9 +4045,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.101" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", @@ -4038,9 +4059,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.51" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -4051,9 +4072,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.101" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4061,9 +4082,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.101" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -4074,9 +4095,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.101" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] @@ -4096,9 +4117,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.78" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -4136,7 +4157,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -4147,22 +4168,22 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.62.0" +version = "0.62.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" +checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.2.0", + "windows-link", "windows-result", "windows-strings", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" dependencies = [ "proc-macro2", "quote", @@ -4171,21 +4192,15 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - [[package]] name = "windows-link" version = "0.2.0" @@ -4198,7 +4213,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" dependencies = [ - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -4207,7 +4222,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" dependencies = [ - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -4234,16 +4249,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.4", ] [[package]] name = "windows-sys" -version = "0.61.0" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" dependencies = [ - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -4264,11 +4279,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" dependencies = [ - "windows-link 0.1.3", + "windows-link", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -4407,12 +4422,12 @@ dependencies = [ [[package]] name = "xattr" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix", + "rustix 1.1.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index e26e815c..21d8e1e6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ ] [workspace.package] -version = "1.4.0" +version = "1.4.1" authors = ["wangfenjin "] repository = "https://github.com/duckdb/duckdb-rs" homepage = "https://github.com/duckdb/duckdb-rs" @@ -17,12 +17,12 @@ keywords = ["duckdb", "database", "ffi"] license = "MIT" categories = ["database"] edition = "2021" -rust-version = "1.82.0" +rust-version = "1.84.1" [workspace.dependencies] -duckdb = { version = "=1.4.0", path = "crates/duckdb" } -duckdb-loadable-macros = { version = "=0.1.10", path = "crates/duckdb-loadable-macros" } -libduckdb-sys = { version = "=1.4.0", path = "crates/libduckdb-sys" } +duckdb = { version = "=1.4.1", path = "crates/duckdb" } +duckdb-loadable-macros = { version = "=0.1.11", path = "crates/duckdb-loadable-macros" } +libduckdb-sys = { version = "=1.4.1", path = "crates/libduckdb-sys" } arrow = { version = "56", default-features = false } bindgen = { version = "0.71.1", default-features = false } @@ -44,7 +44,7 @@ pkg-config = "0.3.24" polars = "0.49.1" polars-arrow = "0.49.1" polars-core = "0.49.1" -pretty_assertions = "1.4.0" +pretty_assertions = "1.4.1" prettyplease = "0.2.20" proc-macro2 = "1.0.56" quote = "1.0.21" diff --git a/crates/duckdb-loadable-macros/Cargo.toml b/crates/duckdb-loadable-macros/Cargo.toml index b72dba0e..48820b52 100644 --- a/crates/duckdb-loadable-macros/Cargo.toml +++ b/crates/duckdb-loadable-macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "duckdb-loadable-macros" -version = "0.1.10" +version = "0.1.11" authors = { workspace = true } license = { workspace = true } repository = { workspace = true } diff --git a/crates/duckdb/Cargo.toml b/crates/duckdb/Cargo.toml index fc949471..21dbf88a 100644 --- a/crates/duckdb/Cargo.toml +++ b/crates/duckdb/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "duckdb" -version = "1.4.0" +version = "1.4.1" authors = { workspace = true } repository = { workspace = true } homepage = { workspace = true } diff --git a/crates/duckdb/examples/repl.rs b/crates/duckdb/examples/repl.rs index 7448cc73..73be9a8a 100644 --- a/crates/duckdb/examples/repl.rs +++ b/crates/duckdb/examples/repl.rs @@ -132,28 +132,14 @@ impl SqlRepl { } fn execute_sql(&self, sql: &str) -> DuckResult<()> { - // Check if it's a statement that returns results - let sql_upper = sql.trim().to_uppercase(); - let is_query = sql_upper.starts_with("SELECT") - || sql_upper.starts_with("FROM") - || sql_upper.starts_with("SHOW") - || sql_upper.starts_with("DESCRIBE") - || sql_upper.starts_with("EXPLAIN") - || sql_upper.starts_with("PRAGMA") - || sql_upper.starts_with("WITH"); - - if is_query { - let mut stmt = self.conn.prepare(sql)?; - let rbs: Vec = stmt.query_arrow([])?.collect(); - - if rbs.is_empty() || rbs[0].num_rows() == 0 { - println!("No results returned."); - } else { - self.print_records(&rbs); - } - } else { - // Execute non-query statements - self.conn.execute_batch(sql)?; + let mut stmt = self.conn.prepare(sql)?; + let rbs: Vec = stmt.query_arrow([])?.collect(); + + // NOTE: When executing multi-statement queries (e.g., "SELECT 1; SELECT 2;"), + // only the result from the final statement will be displayed. This differs from + // the DuckDB CLI which shows results from all statements. + if !rbs.is_empty() && rbs[0].num_rows() > 0 { + self.print_records(&rbs); } Ok(()) diff --git a/crates/duckdb/src/error.rs b/crates/duckdb/src/error.rs index 1d99bbf6..7ce92436 100644 --- a/crates/duckdb/src/error.rs +++ b/crates/duckdb/src/error.rs @@ -286,3 +286,29 @@ pub fn result_from_duckdb_arrow(code: ffi::duckdb_state, mut out: ffi::duckdb_ar error_from_duckdb_code(code, message) } } + +#[cold] +#[inline] +pub fn result_from_duckdb_extract( + num_statements: ffi::idx_t, + mut extracted: ffi::duckdb_extracted_statements, +) -> Result<()> { + if num_statements > 0 { + return Ok(()); + } + unsafe { + let message = if extracted.is_null() { + Some("extracted statements are null".to_string()) + } else { + let c_err = ffi::duckdb_extract_statements_error(extracted); + let message = if c_err.is_null() { + None + } else { + Some(CStr::from_ptr(c_err).to_string_lossy().to_string()) + }; + ffi::duckdb_destroy_extracted(&mut extracted); + message + }; + error_from_duckdb_code(ffi::DuckDBError, message) + } +} diff --git a/crates/duckdb/src/inner_connection.rs b/crates/duckdb/src/inner_connection.rs index 900d6c05..0b4b6236 100644 --- a/crates/duckdb/src/inner_connection.rs +++ b/crates/duckdb/src/inner_connection.rs @@ -8,7 +8,10 @@ use std::{ use super::{ffi, Appender, Config, Connection, Result}; use crate::{ - error::{result_from_duckdb_appender, result_from_duckdb_arrow, result_from_duckdb_prepare, Error}, + error::{ + result_from_duckdb_appender, result_from_duckdb_arrow, result_from_duckdb_extract, result_from_duckdb_prepare, + Error, + }, raw_statement::RawStatement, statement::Statement, }; @@ -93,11 +96,68 @@ impl InnerConnection { } pub fn prepare<'a>(&mut self, conn: &'a Connection, sql: &str) -> Result> { - let mut c_stmt: ffi::duckdb_prepared_statement = ptr::null_mut(); let c_str = CString::new(sql).unwrap(); - let r = unsafe { ffi::duckdb_prepare(self.con, c_str.as_ptr() as *const c_char, &mut c_stmt) }; - result_from_duckdb_prepare(r, c_stmt)?; - Ok(Statement::new(conn, unsafe { RawStatement::new(c_stmt) })) + + // Extract statements (handles both single and multi-statement queries) + let mut extracted = ptr::null_mut(); + let num_stmts = + unsafe { ffi::duckdb_extract_statements(self.con, c_str.as_ptr() as *const c_char, &mut extracted) }; + result_from_duckdb_extract(num_stmts, extracted)?; + + // Auto-cleanup on drop + let _guard = ExtractedStatementsGuard(extracted); + + // Execute all intermediate statements + for i in 0..num_stmts - 1 { + self.execute_extracted_statement(extracted, i)?; + } + + // Prepare and return final statement + let final_stmt = self.prepare_extracted_statement(extracted, num_stmts - 1)?; + Ok(Statement::new(conn, unsafe { RawStatement::new(final_stmt) })) + } + + fn prepare_extracted_statement( + &self, + extracted: ffi::duckdb_extracted_statements, + index: ffi::idx_t, + ) -> Result { + let mut stmt = ptr::null_mut(); + let res = unsafe { ffi::duckdb_prepare_extracted_statement(self.con, extracted, index, &mut stmt) }; + result_from_duckdb_prepare(res, stmt)?; + Ok(stmt) + } + + fn execute_extracted_statement( + &self, + extracted: ffi::duckdb_extracted_statements, + index: ffi::idx_t, + ) -> Result<()> { + let mut stmt = self.prepare_extracted_statement(extracted, index)?; + + let mut result = unsafe { mem::zeroed() }; + let rc = unsafe { ffi::duckdb_execute_prepared(stmt, &mut result) }; + + let error = if rc != ffi::DuckDBSuccess { + unsafe { + let c_err = ffi::duckdb_result_error(&mut result as *mut _); + let msg = if c_err.is_null() { + None + } else { + Some(CStr::from_ptr(c_err).to_string_lossy().to_string()) + }; + Some(Error::DuckDBFailure(ffi::Error::new(rc), msg)) + } + } else { + None + }; + + unsafe { + ffi::duckdb_destroy_prepare(&mut stmt); + ffi::duckdb_destroy_result(&mut result); + } + + error.map_or(Ok(()), Err) } pub fn appender<'a>(&mut self, conn: &'a Connection, table: &str, schema: &str) -> Result> { @@ -126,6 +186,14 @@ impl InnerConnection { } } +struct ExtractedStatementsGuard(ffi::duckdb_extracted_statements); + +impl Drop for ExtractedStatementsGuard { + fn drop(&mut self) { + unsafe { ffi::duckdb_destroy_extracted(&mut self.0) } + } +} + impl Drop for InnerConnection { #[allow(unused_must_use)] #[inline] diff --git a/crates/duckdb/src/lib.rs b/crates/duckdb/src/lib.rs index 690843e6..44421ba3 100644 --- a/crates/duckdb/src/lib.rs +++ b/crates/duckdb/src/lib.rs @@ -1455,4 +1455,56 @@ mod test { Ok(()) } + + #[test] + fn test_prepare_multi_statement() -> Result<()> { + let db = checked_memory_handle(); + + { + let mut stmt = + db.prepare("CREATE TABLE test(x INTEGER); INSERT INTO test VALUES (42); SELECT x FROM test;")?; + let result: i32 = stmt.query_row([], |row| row.get(0))?; + assert_eq!(result, 42); + } + + { + let mut stmt = db.prepare( + "CREATE TEMP TABLE temp_data(id INTEGER, value TEXT); + INSERT INTO temp_data VALUES (1, 'first'), (2, 'second'); + SELECT COUNT(*) FROM temp_data;", + )?; + let count: i32 = stmt.query_row([], |row| row.get(0))?; + assert_eq!(count, 2); + } + + Ok(()) + } + + #[test] + fn test_pivot_query() -> Result<()> { + let db = checked_memory_handle(); + + db.execute_batch( + "CREATE TABLE cities(city VARCHAR, year INTEGER, population INTEGER); + INSERT INTO cities VALUES + ('Amsterdam', 2000, 1005), + ('Amsterdam', 2010, 1065), + ('Amsterdam', 2020, 1158), + ('Berlin', 2000, 3382), + ('Berlin', 2010, 3460), + ('Berlin', 2020, 3576);", + )?; + + // PIVOT queries internally expand to multiple statements + let mut stmt = db.prepare("PIVOT cities ON year USING sum(population);")?; + let mut rows = stmt.query([])?; + + let mut row_count = 0; + while let Some(_row) = rows.next()? { + row_count += 1; + } + assert_eq!(row_count, 2); + + Ok(()) + } } diff --git a/crates/duckdb/src/statement.rs b/crates/duckdb/src/statement.rs index 23c25c52..36f93288 100644 --- a/crates/duckdb/src/statement.rs +++ b/crates/duckdb/src/statement.rs @@ -820,6 +820,77 @@ mod test { Ok(()) } + // When using RETURNING clauses, DuckDB core treats the statement as a query result instead of a modification + // statement. This causes execute() to return 0 changed rows and insert() to fail with an error. + // This test demonstrates current behavior and proper usage patterns for RETURNING clauses. + #[test] + fn test_insert_with_returning_clause() -> Result<()> { + let db = Connection::open_in_memory()?; + db.execute_batch( + "CREATE SEQUENCE location_id_seq START WITH 1 INCREMENT BY 1; + CREATE TABLE location ( + id INTEGER PRIMARY KEY DEFAULT nextval('location_id_seq'), + name TEXT NOT NULL + )", + )?; + + // INSERT without RETURNING using execute + let changes = db.execute("INSERT INTO location (name) VALUES (?)", ["test1"])?; + assert_eq!(changes, 1); + + // INSERT with RETURNING using execute - returns 0 (known limitation) + let changes = db.execute("INSERT INTO location (name) VALUES (?) RETURNING id", ["test2"])?; + assert_eq!(changes, 0); + + // Verify the row was actually inserted despite returning 0 + let count: i64 = db.query_row("SELECT COUNT(*) FROM location", [], |r| r.get(0))?; + assert_eq!(count, 2); + + // INSERT without RETURNING using insert + let mut stmt = db.prepare("INSERT INTO location (name) VALUES (?)")?; + stmt.insert(["test3"])?; + + // INSERT with RETURNING using insert - fails (known limitation) + let mut stmt = db.prepare("INSERT INTO location (name) VALUES (?) RETURNING id")?; + let result = stmt.insert(["test4"]); + assert!(matches!(result, Err(Error::StatementChangedRows(0)))); + + // Verify the row was still inserted despite the error + let count: i64 = db.query_row("SELECT COUNT(*) FROM location", [], |r| r.get(0))?; + assert_eq!(count, 4); + + // Proper way to use RETURNING - with query_row + let id: i64 = db.query_row("INSERT INTO location (name) VALUES (?) RETURNING id", ["test5"], |r| { + r.get(0) + })?; + assert_eq!(id, 5); + + // Proper way to use RETURNING - with query_map + let mut stmt = db.prepare("INSERT INTO location (name) VALUES (?) RETURNING id")?; + let ids: Vec = stmt + .query_map(["test6"], |row| row.get(0))? + .collect::>>()?; + assert_eq!(ids.len(), 1); + assert_eq!(ids[0], 6); + + // Proper way to use RETURNING - with query_one + let id: i64 = db + .prepare("INSERT INTO location (name) VALUES (?) RETURNING id")? + .query_one(["test7"], |r| r.get(0))?; + assert_eq!(id, 7); + + // Multiple RETURNING columns + let (id, name): (i64, String) = db.query_row( + "INSERT INTO location (name) VALUES (?) RETURNING id, name", + ["test8"], + |r| Ok((r.get(0)?, r.get(1)?)), + )?; + assert_eq!(id, 8); + assert_eq!(name, "test8"); + + Ok(()) + } + #[test] fn test_exists() -> Result<()> { let db = Connection::open_in_memory()?; diff --git a/crates/duckdb/src/vtab/excel.rs b/crates/duckdb/src/vtab/excel.rs index 9e55c7b4..335a1db8 100644 --- a/crates/duckdb/src/vtab/excel.rs +++ b/crates/duckdb/src/vtab/excel.rs @@ -4,6 +4,7 @@ use super::{BindInfo, DataChunkHandle, InitInfo, LogicalTypeHandle, TableFunctio use crate::core::{Inserter, LogicalTypeId}; use calamine::{open_workbook_auto, Data, DataType, Range, Reader}; +#[allow(dead_code)] #[repr(C)] struct ExcelBindData { range: Range, @@ -11,6 +12,7 @@ struct ExcelBindData { height: usize, } +#[allow(dead_code)] #[repr(C)] struct ExcelInitData { start: AtomicUsize, diff --git a/crates/libduckdb-sys/Cargo.toml b/crates/libduckdb-sys/Cargo.toml index bde5079b..d1b1c706 100644 --- a/crates/libduckdb-sys/Cargo.toml +++ b/crates/libduckdb-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libduckdb-sys" -version = "1.4.0" +version = "1.4.1" authors = { workspace = true } license = { workspace = true } repository = { workspace = true } diff --git a/crates/libduckdb-sys/duckdb-sources b/crates/libduckdb-sys/duckdb-sources index b8a06e4a..b390a7c3 160000 --- a/crates/libduckdb-sys/duckdb-sources +++ b/crates/libduckdb-sys/duckdb-sources @@ -1 +1 @@ -Subproject commit b8a06e4a22672e254cd0baa68a3dbed2eb51c56e +Subproject commit b390a7c3760bd95926fe8aefde20d04b349b472e diff --git a/crates/libduckdb-sys/duckdb.tar.gz b/crates/libduckdb-sys/duckdb.tar.gz index 0c705574..fd50ac8e 100644 Binary files a/crates/libduckdb-sys/duckdb.tar.gz and b/crates/libduckdb-sys/duckdb.tar.gz differ diff --git a/crates/libduckdb-sys/upgrade.sh b/crates/libduckdb-sys/upgrade.sh index 53616c13..f357c0da 100755 --- a/crates/libduckdb-sys/upgrade.sh +++ b/crates/libduckdb-sys/upgrade.sh @@ -12,7 +12,7 @@ mkdir -p "$SCRIPT_DIR/../../target" "$SCRIPT_DIR/duckdb" export DUCKDB_LIB_DIR="$SCRIPT_DIR/duckdb" # Download and extract amalgamation -DUCKDB_VERSION=v1.4.0 +DUCKDB_VERSION=v1.4.1 git submodule update --init --checkout cd "$SCRIPT_DIR/duckdb-sources" git fetch diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 1c0730c2..8cf9c187 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "1.89" +channel = "1.90" components = ["rustfmt", "clippy"]