diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 84f4fa02af..edbede7c12 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "adbc_core" @@ -42,8 +42,8 @@ dependencies = [ "temp-env", "tempfile", "toml", - "windows-registry", - "windows-sys 0.61.2", + "windows-registry 0.5.3", + "windows-sys 0.59.0", ] [[package]] @@ -422,9 +422,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.39.0" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a" +checksum = "83a25cf98105baa966497416dbd42565ce3a8cf8dbfd59803ec9ad46f3126399" dependencies = [ "cc", "cmake", @@ -541,9 +541,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cc" -version = "1.2.57" +version = "1.2.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" +checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1" dependencies = [ "find-msvc-tools", "jobserver", @@ -579,7 +579,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -594,9 +594,9 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" dependencies = [ "cc", ] @@ -1795,7 +1795,7 @@ dependencies = [ "tokio", "tower-service", "tracing", - "windows-registry", + "windows-registry 0.6.1", ] [[package]] @@ -2029,10 +2029,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.91" +version = "0.3.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" +checksum = "cc4c90f45aa2e6eacbe8645f77fdea542ac97a494bcd117a67df9ff4d611f995" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -2108,12 +2110,12 @@ checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] name = "libloading" -version = "0.8.9" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-link", + "windows-targets 0.53.5", ] [[package]] @@ -2178,9 +2180,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mio" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "wasi", @@ -2327,7 +2329,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -2881,9 +2883,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.40.0" +version = "1.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61f703d19852dbf87cbc513643fa81428361eb6940f1ac14fd58155d295a3eb0" +checksum = "2ce901f9a19d251159075a4c37af514c3b8ef99c22e02dd8c19161cf397ee94a" dependencies = [ "arrayvec", "borsh", @@ -2893,13 +2895,14 @@ dependencies = [ "rkyv", "serde", "serde_json", + "wasm-bindgen", ] [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] name = "rustc_version" @@ -3421,11 +3424,11 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "temp-env" -version = "0.3.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96374855068f47402c3121c6eed88d29cb1de8f3ab27090e273e420bdabcf050" +checksum = "139b4bb3d88d6fabf7425bf9502864f9a66c06521d7ab4f3ca15b28ff10310cc" dependencies = [ - "parking_lot", + "once_cell", ] [[package]] @@ -3608,9 +3611,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.0+spec-1.1.0" +version = "1.0.7+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8195ca05e4eb728f4ba94f3e3291661320af739c4e43779cbdfae82ab239fcc" +checksum = "dd28d57d8a6f6e458bc0b8784f8fdcc4b99a437936056fa122cb234f18656a96" dependencies = [ "serde_spanned", "toml_datetime", @@ -3798,9 +3801,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da36089a805484bcccfffe0739803392c8298778a2d2f09febf76fac5ad9025b" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-width" @@ -3852,9 +3855,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.22.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" +checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -3922,9 +3925,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.114" +version = "0.2.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" +checksum = "6523d69017b7633e396a89c5efab138161ed5aafcbc8d3e5c5a42ae38f50495a" dependencies = [ "cfg-if", "once_cell", @@ -3935,23 +3938,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.64" +version = "0.4.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" +checksum = "2d1faf851e778dfa54db7cd438b70758eba9755cb47403f3496edd7c8fc212f0" dependencies = [ - "cfg-if", - "futures-util", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.114" +version = "0.2.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" +checksum = "4e3a6c758eb2f701ed3d052ff5737f5bfe6614326ea7f3bbac7156192dc32e67" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3959,9 +3958,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.114" +version = "0.2.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" +checksum = "921de2737904886b52bcbb237301552d05969a6f9c40d261eb0533c8b055fedf" dependencies = [ "bumpalo", "proc-macro2", @@ -3972,9 +3971,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.114" +version = "0.2.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" +checksum = "a93e946af942b58934c604527337bad9ae33ba1d5c6900bbb41c2c07c2364a93" dependencies = [ "unicode-ident", ] @@ -4015,9 +4014,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.91" +version = "0.3.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" +checksum = "84cde8507f4d7cfcb1185b8cb5890c494ffea65edbe1ba82cfd63661c805ed94" dependencies = [ "js-sys", "wasm-bindgen", @@ -4111,9 +4110,9 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] @@ -4123,7 +4122,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ "windows-core", - "windows-link", + "windows-link 0.2.1", "windows-threading", ] @@ -4149,6 +4148,12 @@ dependencies = [ "syn 2.0.117", ] +[[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.1" @@ -4162,7 +4167,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ "windows-core", - "windows-link", + "windows-link 0.2.1", +] + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] @@ -4171,9 +4187,18 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -4182,7 +4207,16 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link", + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -4191,7 +4225,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -4212,6 +4246,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.60.2" @@ -4227,7 +4270,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -4267,7 +4310,7 @@ version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link", + "windows-link 0.2.1", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", @@ -4284,7 +4327,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -4562,18 +4605,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.47" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.47" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 07de01abd2..6d32d85422 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -22,8 +22,8 @@ resolver = "2" [workspace.package] version = "0.23.0" description = "Rust implementation of Arrow Database Connectivity (ADBC)" -edition = "2021" -rust-version = "1.81" +edition = "2024" +rust-version = "1.85" authors = ["Apache Arrow "] license = "Apache-2.0" documentation = "https://docs.rs/adbc_core/" @@ -37,9 +37,9 @@ categories = ["database"] adbc_core = { path = "./core", version = "0.23.0" } adbc_driver_manager = { path = "./driver_manager", version = "0.23.0" } adbc_ffi = { path = "./ffi", version = "0.23.0" } -arrow-array = { version = ">=53.1.0, <59", default-features = false, features = [ +arrow-array = { version = ">=58.1, <59", default-features = false, features = [ "ffi", ] } -arrow-buffer = { version = ">=53.1.0, <59", default-features = false } -arrow-schema = { version = ">=53.1.0, <59", default-features = false } -arrow-select = { version = ">=53.1.0, <59", default-features = false } +arrow-buffer = { version = ">=58.1, <59", default-features = false } +arrow-schema = { version = ">=58.1, <59", default-features = false } +arrow-select = { version = ">=58.1, <59", default-features = false } diff --git a/rust/core/src/schemas.rs b/rust/core/src/schemas.rs index 5f6fb14600..03baf07390 100644 --- a/rust/core/src/schemas.rs +++ b/rust/core/src/schemas.rs @@ -33,8 +33,7 @@ pub static GET_TABLE_TYPES_SCHEMA: LazyLock = LazyLock::new(|| { /// Schema of the data returned by [get_info][crate::Connection::get_info]. pub static GET_INFO_SCHEMA: LazyLock = LazyLock::new(|| { let info_schema = DataType::Union( - #[allow(deprecated)] // TODO: remove this once update the minimum arrow version to 57.2.0 - UnionFields::new( + UnionFields::try_new( vec![0, 1, 2, 3, 4, 5], vec![ Field::new("string_value", DataType::Utf8, true), @@ -55,7 +54,8 @@ pub static GET_INFO_SCHEMA: LazyLock = LazyLock::new(|| { true, ), ], - ), + ) + .expect("must be valid"), UnionMode::Dense, ); @@ -75,8 +75,7 @@ pub static GET_STATISTIC_NAMES_SCHEMA: LazyLock = LazyLock::new(|| { pub static STATISTIC_VALUE_SCHEMA: LazyLock = LazyLock::new(|| { DataType::Union( - #[allow(deprecated)] // TODO: remove this once update the minimum arrow version to 57.2.0 - UnionFields::new( + UnionFields::try_new( vec![0, 1, 2, 3], vec![ Field::new("int64", DataType::Int64, true), @@ -84,7 +83,8 @@ pub static STATISTIC_VALUE_SCHEMA: LazyLock = LazyLock::new(|| { Field::new("float64", DataType::Float64, true), Field::new("binary", DataType::Binary, true), ], - ), + ) + .expect("must be valid"), UnionMode::Dense, ) }); diff --git a/rust/core/src/sync.rs b/rust/core/src/sync.rs index de26918b95..e14c6b2245 100644 --- a/rust/core/src/sync.rs +++ b/rust/core/src/sync.rs @@ -20,9 +20,9 @@ use std::collections::HashSet; use arrow_array::{RecordBatch, RecordBatchReader}; use arrow_schema::Schema; +use crate::PartitionedResult; use crate::error::Result; use crate::options::{self, OptionConnection, OptionDatabase, OptionStatement, OptionValue}; -use crate::PartitionedResult; /// Ability to configure an object by setting/getting options. pub trait Optionable { diff --git a/rust/driver/datafusion/src/lib.rs b/rust/driver/datafusion/src/lib.rs index 0db317a728..62afa36b6f 100644 --- a/rust/driver/datafusion/src/lib.rs +++ b/rust/driver/datafusion/src/lib.rs @@ -41,11 +41,12 @@ use arrow_buffer::{OffsetBuffer, ScalarBuffer}; use arrow_schema::{ArrowError, DataType, Field, SchemaRef}; use adbc_core::{ + Connection, Database, Driver, Optionable, Statement, error::{Error, Result, Status}, options::{ InfoCode, ObjectDepth, OptionConnection, OptionDatabase, OptionStatement, OptionValue, }, - schemas, Connection, Database, Driver, Optionable, Statement, + schemas, }; pub enum Runtime { diff --git a/rust/driver/datafusion/tests/test_datafusion.rs b/rust/driver/datafusion/tests/test_datafusion.rs index 9123a480a9..0d2767edef 100644 --- a/rust/driver/datafusion/tests/test_datafusion.rs +++ b/rust/driver/datafusion/tests/test_datafusion.rs @@ -136,7 +136,10 @@ fn test_get_objects_database() { fn test_execute_sql() { let mut connection = get_connection(None); - execute_update(&mut connection, "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')"); + execute_update( + &mut connection, + "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')", + ); let batch = execute_sql_query(&mut connection, "SELECT * FROM datafusion.public.example"); @@ -148,7 +151,10 @@ fn test_execute_sql() { fn test_ingest() { let mut connection = get_connection(None); - execute_update(&mut connection, "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')"); + execute_update( + &mut connection, + "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')", + ); let batch = execute_sql_query(&mut connection, "SELECT * FROM datafusion.public.example"); @@ -174,7 +180,10 @@ fn test_ingest() { fn test_execute_substrait() { let mut connection = get_connection(None); - execute_update(&mut connection, "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')"); + execute_update( + &mut connection, + "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')", + ); let ctx = SessionContext::new(); @@ -203,7 +212,10 @@ fn test_execute_substrait() { async fn test_running_in_async() { let mut connection = get_connection(Some(tokio::runtime::Handle::current())); - execute_update(&mut connection, "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')"); + execute_update( + &mut connection, + "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')", + ); let batch = execute_sql_query(&mut connection, "SELECT * FROM datafusion.public.example"); diff --git a/rust/driver/dummy/src/lib.rs b/rust/driver/dummy/src/lib.rs index 72c81f1785..7879873ca9 100644 --- a/rust/driver/dummy/src/lib.rs +++ b/rust/driver/dummy/src/lib.rs @@ -29,12 +29,12 @@ use arrow_buffer::{OffsetBuffer, ScalarBuffer}; use arrow_schema::{ArrowError, DataType, Field, Schema, SchemaRef, UnionFields}; use adbc_core::{ - constants, + Connection, Database, Driver, Optionable, PartitionedResult, Statement, constants, error::{Error, Result, Status}, options::{ InfoCode, ObjectDepth, OptionConnection, OptionDatabase, OptionStatement, OptionValue, }, - schemas, Connection, Database, Driver, Optionable, PartitionedResult, Statement, + schemas, }; #[derive(Debug)] @@ -372,9 +372,7 @@ impl Connection for DummyConnection { .collect::>(); let value_array = UnionArray::try_new( - #[allow(deprecated)] - // TODO: remove this once update the minimum arrow version to 57.2.0 - UnionFields::new( + UnionFields::try_new( [0, 1, 2, 3, 4, 5], [ Field::new("string_value", string_value_array.data_type().clone(), true), @@ -392,7 +390,8 @@ impl Connection for DummyConnection { true, ), ], - ), + ) + .expect("must be valid"), type_id_buffer, Some(value_offsets_buffer), vec![ @@ -665,9 +664,7 @@ impl Connection for DummyConnection { let type_id_buffer = [1_i8].into_iter().collect::>(); let value_offsets_buffer = [0_i32].into_iter().collect::>(); let statistic_value_array = UnionArray::try_new( - #[allow(deprecated)] - // TODO: remove this once update the minimum arrow version to 57.2.0 - UnionFields::new( + UnionFields::try_new( [0, 1, 2, 3], [ Field::new("int64", DataType::Int64, true), @@ -675,7 +672,8 @@ impl Connection for DummyConnection { Field::new("float64", DataType::Float64, true), Field::new("binary", DataType::Binary, true), ], - ), + ) + .expect("must be valid"), type_id_buffer, Some(value_offsets_buffer), vec![ diff --git a/rust/driver/dummy/tests/driver_exporter_dummy.rs b/rust/driver/dummy/tests/driver_exporter_dummy.rs index 6d1445a45b..b64d2016c2 100644 --- a/rust/driver/dummy/tests/driver_exporter_dummy.rs +++ b/rust/driver/dummy/tests/driver_exporter_dummy.rs @@ -26,12 +26,12 @@ use arrow_array::{Array, Float64Array, Int64Array, RecordBatch, RecordBatchReade use arrow_schema::{DataType, Field, Schema}; use arrow_select::concat::concat_batches; +use adbc_core::Statement; use adbc_core::options::{ AdbcVersion, InfoCode, IngestMode, IsolationLevel, ObjectDepth, OptionConnection, OptionDatabase, OptionStatement, }; -use adbc_core::Statement; -use adbc_core::{schemas, Connection, Database, Driver, Optionable}; +use adbc_core::{Connection, Database, Driver, Optionable, schemas}; use adbc_driver_manager::{ManagedConnection, ManagedDatabase, ManagedDriver, ManagedStatement}; use adbc_dummy::{DummyConnection, DummyDatabase, DummyDriver, DummyStatement, SingleBatchReader}; diff --git a/rust/driver/snowflake/src/connection.rs b/rust/driver/snowflake/src/connection.rs index 2e916ac4b2..4dc4b5742f 100644 --- a/rust/driver/snowflake/src/connection.rs +++ b/rust/driver/snowflake/src/connection.rs @@ -22,9 +22,9 @@ use std::collections::HashSet; use adbc_core::{ + Optionable, error::Result, options::{InfoCode, OptionConnection, OptionValue}, - Optionable, }; use adbc_driver_manager::ManagedConnection; use arrow_array::RecordBatchReader; diff --git a/rust/driver/snowflake/src/connection/builder.rs b/rust/driver/snowflake/src/connection/builder.rs index fbc2b8cfba..d3557d269e 100644 --- a/rust/driver/snowflake/src/connection/builder.rs +++ b/rust/driver/snowflake/src/connection/builder.rs @@ -22,14 +22,14 @@ use std::fmt; use adbc_core::{ + Database as _, error::Result, options::{OptionConnection, OptionValue}, - Database as _, }; +use crate::{Connection, Database, builder::BuilderIter}; #[cfg(feature = "env")] use crate::{builder::env_parse_map_err, database}; -use crate::{builder::BuilderIter, Connection, Database}; /// A builder for [`Connection`]. /// diff --git a/rust/driver/snowflake/src/database.rs b/rust/driver/snowflake/src/database.rs index 48715a78e5..2ec4659883 100644 --- a/rust/driver/snowflake/src/database.rs +++ b/rust/driver/snowflake/src/database.rs @@ -22,15 +22,15 @@ use std::{collections::HashSet, ffi::c_int, sync::Arc}; use adbc_core::{ + Connection as _, Database as _, Optionable, error::{Error, Result, Status}, options::{AdbcVersion, InfoCode, OptionConnection, OptionDatabase, OptionValue}, - Connection as _, Database as _, Optionable, }; use adbc_driver_manager::ManagedDatabase; use arrow_array::{ + Array, cast::AsArray, types::{Int64Type, UInt32Type}, - Array, }; use crate::Connection; diff --git a/rust/driver/snowflake/src/database/builder.rs b/rust/driver/snowflake/src/database/builder.rs index 05dd921e9f..1029bf0397 100644 --- a/rust/driver/snowflake/src/database/builder.rs +++ b/rust/driver/snowflake/src/database/builder.rs @@ -25,13 +25,13 @@ use std::env; use std::{fmt, path::PathBuf, str::FromStr, time::Duration}; use adbc_core::{ + Driver as _, error::{Error, Result, Status}, options::{OptionDatabase, OptionValue}, - Driver as _, }; use url::{Host, Url}; -use crate::{builder::BuilderIter, Database, Driver}; +use crate::{Database, Driver, builder::BuilderIter}; #[cfg(feature = "env")] use crate::{ builder::{env_parse, env_parse_map_err}, @@ -1097,7 +1097,9 @@ mod tests { #[test] fn from_env_parse_error() { // Set a value that fails to parse to a LogLevel - env::set_var(Builder::LOG_TRACING_ENV, "warning"); + unsafe { + env::set_var(Builder::LOG_TRACING_ENV, "warning"); + } let result = Builder::from_env(); assert!(result.is_err()); assert_eq!( @@ -1108,15 +1110,19 @@ mod tests { ) ); // Fix it to move on - env::set_var(Builder::LOG_TRACING_ENV, "warn"); + + unsafe { env::set_var(Builder::LOG_TRACING_ENV, "warn") }; // Set a value that fails to parse to a duration - env::set_var(Builder::LOGIN_TIMEOUT_ENV, "forever"); + unsafe { env::set_var(Builder::LOGIN_TIMEOUT_ENV, "forever") }; let result = Builder::from_env(); assert!(result.is_err()); assert_eq!( result.unwrap_err(), - Error::with_message_and_status("invalid duration (valid durations are a sequence of decimal numbers, each with optional fraction and a unit suffix, such as 300ms, 1.5h, 2h45m, valid time units are ns, us, ms, s, m, h)", Status::InvalidArguments) + Error::with_message_and_status( + "invalid duration (valid durations are a sequence of decimal numbers, each with optional fraction and a unit suffix, such as 300ms, 1.5h, 2h45m, valid time units are ns, us, ms, s, m, h)", + Status::InvalidArguments + ) ); } } diff --git a/rust/driver/snowflake/src/driver.rs b/rust/driver/snowflake/src/driver.rs index 7467ae872c..452df0dac3 100644 --- a/rust/driver/snowflake/src/driver.rs +++ b/rust/driver/snowflake/src/driver.rs @@ -64,7 +64,7 @@ impl fmt::Debug for Driver { } #[cfg(any(feature = "bundled", feature = "linked"))] -extern "C" { +unsafe extern "C" { #[link_name = "AdbcDriverSnowflakeInit"] fn init(version: c_int, raw_driver: *mut c_void, err: *mut FFI_AdbcError) -> AdbcStatusCode; } diff --git a/rust/driver/snowflake/src/driver/builder.rs b/rust/driver/snowflake/src/driver/builder.rs index 0ef852bd92..70c92b6dfb 100644 --- a/rust/driver/snowflake/src/driver/builder.rs +++ b/rust/driver/snowflake/src/driver/builder.rs @@ -24,9 +24,9 @@ use adbc_core::{ options::AdbcVersion, }; +use crate::Driver; #[cfg(feature = "env")] use crate::builder::env_parse; -use crate::Driver; /// A builder for [`Driver`]. /// @@ -94,7 +94,9 @@ mod tests { #[test] fn from_env_parse_error() { // Set a value that fails to parse to an AdbcVersion - env::set_var(Builder::ADBC_VERSION_ENV, "?"); + unsafe { + env::set_var(Builder::ADBC_VERSION_ENV, "?"); + } let result = Builder::from_env(); assert!(result.is_err()); assert_eq!( diff --git a/rust/driver/snowflake/src/duration.rs b/rust/driver/snowflake/src/duration.rs index 711d523079..9cf4a62a21 100644 --- a/rust/driver/snowflake/src/duration.rs +++ b/rust/driver/snowflake/src/duration.rs @@ -43,7 +43,9 @@ fn overflow() -> Error { } fn bad_input() -> Result { - Err(invalid_arg("invalid duration (valid durations are a sequence of decimal numbers, each with optional fraction and a unit suffix, such as 300ms, 1.5h, 2h45m, valid time units are ns, us, ms, s, m, h)")) + Err(invalid_arg( + "invalid duration (valid durations are a sequence of decimal numbers, each with optional fraction and a unit suffix, such as 300ms, 1.5h, 2h45m, valid time units are ns, us, ms, s, m, h)", + )) } /// Parse the given string to a [`Duration`], returning an error when parsing @@ -260,7 +262,9 @@ mod tests { + Duration::from_secs(48) + Duration::from_nanos(372539828)) ); - let bad_input = Err(invalid_arg("invalid duration (valid durations are a sequence of decimal numbers, each with optional fraction and a unit suffix, such as 300ms, 1.5h, 2h45m, valid time units are ns, us, ms, s, m, h)")); + let bad_input = Err(invalid_arg( + "invalid duration (valid durations are a sequence of decimal numbers, each with optional fraction and a unit suffix, such as 300ms, 1.5h, 2h45m, valid time units are ns, us, ms, s, m, h)", + )); assert_eq!(parse_duration(""), bad_input); assert_eq!(parse_duration("3"), bad_input); assert_eq!(parse_duration("-"), bad_input); diff --git a/rust/driver/snowflake/src/statement.rs b/rust/driver/snowflake/src/statement.rs index f956852b26..5981f0d98c 100644 --- a/rust/driver/snowflake/src/statement.rs +++ b/rust/driver/snowflake/src/statement.rs @@ -20,9 +20,9 @@ //! use adbc_core::{ + Optionable, PartitionedResult, error::Result, options::{OptionStatement, OptionValue}, - Optionable, PartitionedResult, }; use adbc_driver_manager::ManagedStatement; use arrow_array::{RecordBatch, RecordBatchReader}; diff --git a/rust/driver/snowflake/tests/driver.rs b/rust/driver/snowflake/tests/driver.rs index a5eaec7561..c8a13fb875 100644 --- a/rust/driver/snowflake/tests/driver.rs +++ b/rust/driver/snowflake/tests/driver.rs @@ -37,11 +37,11 @@ mod tests { use std::{collections::HashSet, ops::Deref, sync::LazyLock}; use adbc_core::{ + Connection as _, Statement as _, error::{Error, Result}, options::AdbcVersion, - Connection as _, Statement as _, }; - use adbc_snowflake::{connection, database, driver, Connection, Database, Driver, Statement}; + use adbc_snowflake::{Connection, Database, Driver, Statement, connection, database, driver}; use arrow_array::{cast::AsArray, types::Decimal128Type}; const ADBC_VERSION: AdbcVersion = AdbcVersion::V110; @@ -81,9 +81,11 @@ mod tests { fn database_get_info() -> Result<()> { with_database(|mut database| { assert_eq!(database.vendor_name(), Ok("Snowflake".to_owned())); - assert!(database - .vendor_version() - .is_ok_and(|version| version.starts_with("v"))); + assert!( + database + .vendor_version() + .is_ok_and(|version| version.starts_with("v")) + ); assert!(database.vendor_arrow_version().is_ok()); assert_eq!(database.vendor_sql(), Ok(true)); assert_eq!(database.vendor_substrait(), Ok(false)); @@ -92,9 +94,11 @@ mod tests { Ok("ADBC Snowflake Driver - Go".to_owned()) ); assert!(database.driver_version().is_ok()); - assert!(database - .driver_arrow_version() - .is_ok_and(|version| version.starts_with("v"))); + assert!( + database + .driver_arrow_version() + .is_ok_and(|version| version.starts_with("v")) + ); assert_eq!(database.adbc_version(), Ok(ADBC_VERSION)); Ok(()) }) diff --git a/rust/driver_manager/src/lib.rs b/rust/driver_manager/src/lib.rs index 47970de48c..bb2cc700db 100644 --- a/rust/driver_manager/src/lib.rs +++ b/rust/driver_manager/src/lib.rs @@ -117,20 +117,20 @@ use adbc_ffi::options::{ check_status, get_option_bytes, get_option_string, set_option_connection, set_option_database, set_option_statement, }; -use arrow_array::ffi::{to_ffi, FFI_ArrowSchema}; +use arrow_array::ffi::{FFI_ArrowSchema, to_ffi}; use arrow_array::ffi_stream::{ArrowArrayStreamReader, FFI_ArrowArrayStream}; use arrow_array::{Array, RecordBatch, RecordBatchReader, StructArray}; use adbc_core::{ + Connection, Database, Driver, LoadFlags, Optionable, PartitionedResult, Statement, error::{Error, Result, Status}, options::{self, AdbcVersion, InfoCode, OptionDatabase, OptionValue}, - Connection, Database, Driver, LoadFlags, Optionable, PartitionedResult, Statement, }; use adbc_ffi::driver_method; -use self::search::{parse_driver_uri, DriverLibrary, DriverLocator}; +use self::search::{DriverLibrary, DriverLocator, parse_driver_uri}; use crate::profile::{ - process_profile_value, ConnectionProfile, ConnectionProfileProvider, FilesystemProfileProvider, + ConnectionProfile, ConnectionProfileProvider, FilesystemProfileProvider, process_profile_value, }; const ERR_CANCEL_UNSUPPORTED: &str = diff --git a/rust/driver_manager/src/profile.rs b/rust/driver_manager/src/profile.rs index 6697383f07..6c96cef10b 100644 --- a/rust/driver_manager/src/profile.rs +++ b/rust/driver_manager/src/profile.rs @@ -15,12 +15,12 @@ // specific language governing permissions and limitations // under the License. -use crate::search::find_filesystem_profile; use crate::ManagedDatabase; +use crate::search::find_filesystem_profile; use adbc_core::{ + Optionable, error::{Error, Result, Status}, options::{OptionDatabase, OptionValue}, - Optionable, }; use adbc_ffi::FFI_AdbcDriverInitFunc; use regex::{Captures, Regex}; @@ -374,7 +374,10 @@ pub fn process_profile_value(value: &str) -> Result { let env_var_name = content[8..content.len() - 1].trim(); if env_var_name.is_empty() { return Err(Error::with_message_and_status( - format!("empty environment variable name in profile replacement expression '{{{{ {} }}}}'", content), + format!( + "empty environment variable name in profile replacement expression '{{{{ {} }}}}'", + content + ), Status::InvalidArguments, )); } @@ -383,7 +386,10 @@ pub fn process_profile_value(value: &str) -> Result { Ok(val) => Ok(val), Err(env::VarError::NotPresent) => Ok("".to_string()), Err(e) => Err(Error::with_message_and_status( - format!("error retrieving environment variable '{}' for profile replacement expression '{{{{ {} }}}}': {}", env_var_name, content, e), + format!( + "error retrieving environment variable '{}' for profile replacement expression '{{{{ {} }}}}': {}", + env_var_name, content, e + ), Status::InvalidArguments, )), } @@ -842,7 +848,9 @@ key = "value" for TestCase(name, env_vars, input, expected) in test_cases { for (k, v) in &env_vars { - std::env::set_var(k, v); + unsafe { + std::env::set_var(k, v); + } } let result = process_profile_value(input); @@ -883,7 +891,9 @@ key = "value" } for (k, _) in &env_vars { - std::env::remove_var(k); + unsafe { + std::env::remove_var(k); + } } } } diff --git a/rust/driver_manager/src/search.rs b/rust/driver_manager/src/search.rs index 2fa9f29fd9..a9fa141a33 100644 --- a/rust/driver_manager/src/search.rs +++ b/rust/driver_manager/src/search.rs @@ -17,7 +17,7 @@ use path_slash::PathBufExt; use std::borrow::Cow; -use std::ffi::{c_void, OsStr}; +use std::ffi::{OsStr, c_void}; use std::fmt::Write; use std::fs; use std::path::{Path, PathBuf}; @@ -27,10 +27,10 @@ use libloading::Symbol; use toml::de::{DeTable, DeValue}; use adbc_core::{ + LOAD_FLAG_ALLOW_RELATIVE_PATHS, LOAD_FLAG_SEARCH_ENV, LOAD_FLAG_SEARCH_SYSTEM, + LOAD_FLAG_SEARCH_USER, LoadFlags, error::{Error, Result, Status}, options::AdbcVersion, - LoadFlags, LOAD_FLAG_ALLOW_RELATIVE_PATHS, LOAD_FLAG_SEARCH_ENV, LOAD_FLAG_SEARCH_SYSTEM, - LOAD_FLAG_SEARCH_USER, }; use adbc_ffi::{ options::check_status, @@ -226,7 +226,7 @@ enum DriverInitFunc<'a> { } /// Allow using [DriverInitFunc] as a function pointer. -impl<'a> ops::Deref for DriverInitFunc<'a> { +impl ops::Deref for DriverInitFunc<'_> { type Target = FFI_AdbcDriverInitFunc; fn deref(&self) -> &Self::Target { @@ -346,10 +346,10 @@ impl<'a> DriverLibrary<'a> { Ok(SearchHit::new(info.lib_path, library, info.entrypoint)) } - pub(crate) fn derive_entrypoint<'b>( - entrypoint: Option<&'b [u8]>, + pub(crate) fn derive_entrypoint( + entrypoint: Option<&[u8]>, driver_path: impl AsRef, - ) -> Cow<'b, [u8]> { + ) -> Cow<'_, [u8]> { if let Some(entrypoint) = entrypoint { Cow::Borrowed(entrypoint) } else { @@ -695,8 +695,8 @@ const fn arch_triplet() -> (&'static str, &'static str, &'static str) { mod target_windows { use windows_sys as windows; - use std::ffi::c_void; use std::ffi::OsString; + use std::ffi::c_void; use std::os::windows::ffi::OsStringExt; use std::path::PathBuf; use std::slice; @@ -980,7 +980,7 @@ pub(crate) enum DriverLocator<'a> { /// Returns `Status::InvalidArguments` if: /// - The URI has no colon separator /// - The URI format is invalid -pub(crate) fn parse_driver_uri<'a>(uri: &'a str) -> Result> { +pub(crate) fn parse_driver_uri(uri: &'_ str) -> Result> { let idx = uri.find(":").ok_or(Error::with_message_and_status( format!("Invalid URI: {uri}"), Status::InvalidArguments, @@ -1017,7 +1017,7 @@ pub(crate) fn parse_driver_uri<'a>(uri: &'a str) -> Result> { mod tests { use std::env; - use adbc_core::{options::AdbcVersion, LOAD_FLAG_ALLOW_RELATIVE_PATHS}; + use adbc_core::{LOAD_FLAG_ALLOW_RELATIVE_PATHS, options::AdbcVersion}; use temp_env::{with_var, with_var_unset}; use crate::ManagedDriver; diff --git a/rust/driver_manager/tests/common/mod.rs b/rust/driver_manager/tests/common/mod.rs index 408398c0ae..f0b60d2081 100644 --- a/rust/driver_manager/tests/common/mod.rs +++ b/rust/driver_manager/tests/common/mod.rs @@ -29,8 +29,8 @@ use adbc_core::{Connection, Database, Driver, Optionable, Statement}; use adbc_driver_manager::{ManagedConnection, ManagedDatabase, ManagedDriver, ManagedStatement}; use arrow_array::{ - cast::as_string_array, Array, Float64Array, Int64Array, RecordBatch, RecordBatchReader, - StringArray, + Array, Float64Array, Int64Array, RecordBatch, RecordBatchReader, StringArray, + cast::as_string_array, }; use arrow_schema::{ArrowError, DataType, Field, Schema, SchemaRef}; use arrow_select::concat::concat_batches; @@ -106,14 +106,18 @@ pub fn test_database(database: &ManagedDatabase) { } pub fn test_connection(connection: &mut ManagedConnection) { - assert!(connection - .set_option(OptionConnection::AutoCommit, "true".into()) - .is_ok()); + assert!( + connection + .set_option(OptionConnection::AutoCommit, "true".into()) + .is_ok() + ); // Unknown connection option - assert!(connection - .set_option(OptionConnection::Other("unknown".into()), "".into()) - .is_err()); + assert!( + connection + .set_option(OptionConnection::Other("unknown".into()), "".into()) + .is_err() + ); assert!(connection.new_statement().is_ok()); } @@ -239,9 +243,11 @@ pub fn test_connection_get_table_schema(connection: &mut ManagedConnection) { connection.rollback().unwrap(); - assert!(connection - .get_table_schema(None, None, "nonexistent_table") - .is_err()); + assert!( + connection + .get_table_schema(None, None, "nonexistent_table") + .is_err() + ); } pub fn test_statement(statement: &mut ManagedStatement) { @@ -350,7 +356,9 @@ pub struct SetEnv { impl SetEnv { pub fn new(env_var: &'static str, new_value: impl AsRef) -> Self { let original_value = std::env::var_os(env_var); - std::env::set_var(env_var, new_value); + unsafe { + std::env::set_var(env_var, new_value); + } Self { env_var, original_value, @@ -361,9 +369,13 @@ impl SetEnv { impl Drop for SetEnv { fn drop(&mut self) { if let Some(original_value) = &self.original_value { - std::env::set_var(self.env_var, original_value); + unsafe { + std::env::set_var(self.env_var, original_value); + } } else { - std::env::remove_var(self.env_var); + unsafe { + std::env::remove_var(self.env_var); + } } } } diff --git a/rust/driver_manager/tests/connection_profile.rs b/rust/driver_manager/tests/connection_profile.rs index 57207d25ed..41e3e82d13 100644 --- a/rust/driver_manager/tests/connection_profile.rs +++ b/rust/driver_manager/tests/connection_profile.rs @@ -18,11 +18,11 @@ use std::path::PathBuf; use adbc_core::options::{AdbcVersion, OptionDatabase, OptionValue}; -use adbc_core::{error::Status, LOAD_FLAG_DEFAULT}; +use adbc_core::{LOAD_FLAG_DEFAULT, error::Status}; +use adbc_driver_manager::ManagedDatabase; use adbc_driver_manager::profile::{ ConnectionProfile, ConnectionProfileProvider, FilesystemProfileProvider, }; -use adbc_driver_manager::ManagedDatabase; use serial_test::serial; use std::env; @@ -320,9 +320,9 @@ driver = "foo" for (name, profile_content, expected_status, expected_msg_fragment) in test_cases { let (tmp_dir, profile_path) = write_profile_to_tempfile(name, &profile_content); - let provider = FilesystemProfileProvider::new_with_search_paths(Some(vec![tmp_dir - .path() - .to_path_buf()])); + let provider = FilesystemProfileProvider::new_with_search_paths(Some(vec![ + tmp_dir.path().to_path_buf(), + ])); let result = provider.get_profile(profile_path.to_str().unwrap()); assert!(result.is_err(), "Test case '{}': expected error", name); @@ -692,9 +692,9 @@ uri = ":memory:" let profile_path = manifest_dir.path().join("sqliteprof.toml"); std::fs::write(&profile_path, profile_contents).unwrap(); - let provider = FilesystemProfileProvider::new_with_search_paths(Some(vec![profile_dir - .path() - .to_path_buf()])); + let provider = FilesystemProfileProvider::new_with_search_paths(Some(vec![ + profile_dir.path().to_path_buf(), + ])); let database = ManagedDatabase::from_uri_with_profile_provider( "profile://sqlitedev", None, diff --git a/rust/driver_manager/tests/driver_manager_sqlite.rs b/rust/driver_manager/tests/driver_manager_sqlite.rs index ed462d3852..0f6d89fa27 100644 --- a/rust/driver_manager/tests/driver_manager_sqlite.rs +++ b/rust/driver_manager/tests/driver_manager_sqlite.rs @@ -18,8 +18,8 @@ use arrow_schema::{Field, Schema}; use adbc_core::options::{AdbcVersion, OptionConnection, OptionDatabase}; -use adbc_core::{error::Status, Driver, Optionable}; -use adbc_core::{Connection, Database, Statement, LOAD_FLAG_DEFAULT}; +use adbc_core::{Connection, Database, LOAD_FLAG_DEFAULT, Statement}; +use adbc_core::{Driver, Optionable, error::Status}; use adbc_driver_manager::{ManagedDatabase, ManagedDriver}; mod common; diff --git a/rust/driver_manager/tests/test_env_var_profiles.rs b/rust/driver_manager/tests/test_env_var_profiles.rs index d04610267b..5c75f2bae2 100644 --- a/rust/driver_manager/tests/test_env_var_profiles.rs +++ b/rust/driver_manager/tests/test_env_var_profiles.rs @@ -21,7 +21,7 @@ use std::path::PathBuf; mod common; use adbc_core::options::AdbcVersion; -use adbc_core::{error::Status, LOAD_FLAG_DEFAULT}; +use adbc_core::{LOAD_FLAG_DEFAULT, error::Status}; use adbc_driver_manager::ManagedDatabase; fn write_profile_to_tempfile(tmp_dir: &tempfile::TempDir, name: &str, content: &str) -> PathBuf { @@ -80,7 +80,9 @@ fn test_env_var_replacement_empty() { .expect("Failed to create temporary directory"); // Make sure the env var doesn't exist - env::remove_var("ADBC_NONEXISTENT_VAR_12345"); + unsafe { + env::remove_var("ADBC_NONEXISTENT_VAR_12345"); + } let profile_content = r#" profile_version = 1 diff --git a/rust/ffi/src/driver_exporter.rs b/rust/ffi/src/driver_exporter.rs index 6342639706..1a41d100b4 100644 --- a/rust/ffi/src/driver_exporter.rs +++ b/rust/ffi/src/driver_exporter.rs @@ -20,14 +20,14 @@ use std::ffi::{CStr, CString}; use std::hash::Hash; use std::os::raw::{c_char, c_int, c_void}; -use arrow_array::ffi::{from_ffi, FFI_ArrowArray, FFI_ArrowSchema}; -use arrow_array::ffi_stream::{ArrowArrayStreamReader, FFI_ArrowArrayStream}; use arrow_array::StructArray; +use arrow_array::ffi::{FFI_ArrowArray, FFI_ArrowSchema, from_ffi}; +use arrow_array::ffi_stream::{ArrowArrayStreamReader, FFI_ArrowArrayStream}; use arrow_schema::DataType; use super::{ - options::get_opt_name, types::ErrorPrivateData, FFI_AdbcConnection, FFI_AdbcDatabase, - FFI_AdbcDriver, FFI_AdbcError, FFI_AdbcErrorDetail, FFI_AdbcPartitions, FFI_AdbcStatement, + FFI_AdbcConnection, FFI_AdbcDatabase, FFI_AdbcDriver, FFI_AdbcError, FFI_AdbcErrorDetail, + FFI_AdbcPartitions, FFI_AdbcStatement, options::get_opt_name, types::ErrorPrivateData, }; use adbc_core::constants::ADBC_STATUS_OK; use adbc_core::error::{AdbcStatusCode, Error, Result, Status}; @@ -181,7 +181,7 @@ impl FFIDriver for DriverType { macro_rules! export_driver { ($func_name:ident, $driver_type:ty) => { #[allow(non_snake_case)] - #[no_mangle] + #[unsafe(no_mangle)] pub unsafe extern "C" fn $func_name( version: std::os::raw::c_int, driver: *mut std::os::raw::c_void, @@ -211,7 +211,7 @@ macro_rules! export_driver { // Fallback symbol, if the driver manager does not find the init above #[allow(non_snake_case)] - #[no_mangle] + #[unsafe(no_mangle)] pub unsafe extern "C" fn AdbcDriverInit( version: std::os::raw::c_int, driver: *mut std::os::raw::c_void, @@ -545,11 +545,10 @@ unsafe fn database_private_data<'a, DriverType: Driver>( database: &mut FFI_AdbcDatabase, ) -> Result<&'a mut ExportedDatabase> { let exported = database.private_data as *mut ExportedDatabase; - let exported = exported.as_mut().ok_or(Error::with_message_and_status( + exported.as_mut().ok_or(Error::with_message_and_status( "Uninitialized database", Status::InvalidState, - )); - exported + )) } // SAFETY: Will panic if `key` is null. @@ -819,11 +818,10 @@ unsafe fn connection_private_data<'a, DriverType: Driver>( connection: &mut FFI_AdbcConnection, ) -> Result<&'a mut ExportedConnection> { let exported = connection.private_data as *mut ExportedConnection; - let exported = exported.as_mut().ok_or(Error::with_message_and_status( + exported.as_mut().ok_or(Error::with_message_and_status( "Uninitialized connection", Status::InvalidState, - )); - exported + )) } // SAFETY: Will panic if `connection` or `key` is null. @@ -1400,11 +1398,10 @@ unsafe fn statement_private_data<'a, DriverType: Driver>( ) -> Result<&'a mut ExportedStatement> { assert!(!statement.is_null()); let exported = (*statement).private_data as *mut ExportedStatement; - let exported = exported.as_mut().ok_or(Error::with_message_and_status( + exported.as_mut().ok_or(Error::with_message_and_status( "Uninitialized statement", Status::InvalidState, - )); - exported + )) } // SAFETY: Will panic if `statement` or `key` is null. diff --git a/rust/ffi/src/lib.rs b/rust/ffi/src/lib.rs index d4a29410bf..0805d2f0e5 100644 --- a/rust/ffi/src/lib.rs +++ b/rust/ffi/src/lib.rs @@ -15,6 +15,8 @@ // specific language governing permissions and limitations // under the License. +#![allow(unsafe_op_in_unsafe_fn)] + //! ADBC: Arrow Database Connectivity //! //! ADBC is a set of APIs and libraries for [Arrow](https://arrow.apache.org/)-native diff --git a/rust/ffi/src/options.rs b/rust/ffi/src/options.rs index 5a9717eb69..8266af2528 100644 --- a/rust/ffi/src/options.rs +++ b/rust/ffi/src/options.rs @@ -22,7 +22,7 @@ use adbc_core::constants; use adbc_core::error::{AdbcStatusCode, Error, Result, Status}; use adbc_core::options::{AdbcVersion, OptionValue}; -use crate::{driver_method, FFI_AdbcConnection, FFI_AdbcStatement}; +use crate::{FFI_AdbcConnection, FFI_AdbcStatement, driver_method}; use crate::{FFI_AdbcDatabase, FFI_AdbcDriver, FFI_AdbcError}; const ERR_ONLY_STRING_OPT: &str = "Only string option value are supported with ADBC 1.0.0"; diff --git a/rust/ffi/src/types.rs b/rust/ffi/src/types.rs index 716114d2d9..a3bec3438f 100644 --- a/rust/ffi/src/types.rs +++ b/rust/ffi/src/types.rs @@ -24,9 +24,8 @@ use std::ptr::{null, null_mut}; use super::methods; use adbc_core::{ - constants, + Partitions, constants, error::{AdbcStatusCode, Error, Status}, - Partitions, }; /// A driver initialization function.