From 73b6914af21ab5a6b36ef1831d31003601b8fc12 Mon Sep 17 00:00:00 2001 From: 81reap Date: Fri, 25 Sep 2026 18:38:41 -0400 Subject: [PATCH 1/5] test(database) :: test that parameters reach the DB and are cached Before a bound parameter had to survive a round trip in `tests/transactions` and in `computed_projection_binding_order.sql`, but nothing bound one variable twice in a single statement, and nothing asserted that a parameterized page runs as a prepared statement rather than through `SQLExecDirect`. Now two tests cover both halves of [sqlx-oldapi#57](https://github.com/sqlpage/sqlx-oldapi/issues/57), one of wich covers the `INSERT ... SELECT $x WHERE $x IS NOT NULL` shape from #1474. --- tests/mod.rs | 1 + tests/parameter_binding/echo_parameter.sql | 1 + tests/parameter_binding/mod.rs | 64 +++++++++++++++++++ .../parameter_in_projection.sql | 8 +++ .../parameter_in_projection_mssql.sql | 8 +++ 5 files changed, 82 insertions(+) create mode 100644 tests/parameter_binding/echo_parameter.sql create mode 100644 tests/parameter_binding/mod.rs create mode 100644 tests/parameter_binding/parameter_in_projection.sql create mode 100644 tests/parameter_binding/parameter_in_projection_mssql.sql diff --git a/tests/mod.rs b/tests/mod.rs index e0c0b99a7..eca6edb11 100644 --- a/tests/mod.rs +++ b/tests/mod.rs @@ -7,6 +7,7 @@ mod data_formats; mod errors; mod exec; mod oidc; +mod parameter_binding; mod requests; mod server_timing; pub mod sql_test_files; diff --git a/tests/parameter_binding/echo_parameter.sql b/tests/parameter_binding/echo_parameter.sql new file mode 100644 index 000000000..157fa9439 --- /dev/null +++ b/tests/parameter_binding/echo_parameter.sql @@ -0,0 +1 @@ +select 'text' as component, max(n) as contents from (select $x as n) as t; diff --git a/tests/parameter_binding/mod.rs b/tests/parameter_binding/mod.rs new file mode 100644 index 000000000..196e409f6 --- /dev/null +++ b/tests/parameter_binding/mod.rs @@ -0,0 +1,64 @@ +use actix_web::{http::StatusCode, test}; +use sqlx::any::AnyKind; +use sqlx::connection::Connection as _; + +use sqlpage::webserver::database::SupportedDatabase; +use sqlpage::webserver::http::main_handler; + +use crate::common::{get_request_to_with_data, make_app_data}; + +async fn rendered_page( + path: &str, + data: actix_web::web::Data, +) -> actix_web::Result { + let req = get_request_to_with_data(path, data).await?.to_srv_request(); + let resp = main_handler(req).await?; + assert_eq!(resp.status(), StatusCode::OK); + Ok(String::from_utf8(test::read_body(resp).await.to_vec()).unwrap()) +} + +#[actix_web::test] +async fn test_a_parameter_in_a_projection_reaches_the_database() -> actix_web::Result<()> { + let data = make_app_data().await; + let path = match data.db.info.database_type { + SupportedDatabase::Mssql => "/tests/parameter_binding/parameter_in_projection_mssql.sql", + SupportedDatabase::Oracle => return Ok(()), // no CREATE TEMPORARY TABLE + _ => "/tests/parameter_binding/parameter_in_projection.sql", + }; + + let page = rendered_page(&format!("{path}?x=1447"), data).await?; + assert!( + page.contains("1447"), + "{page}\nexpected the bound parameter to reach the inserted row" + ); + Ok(()) +} + +#[actix_web::test] +async fn test_parameterized_pages_leave_a_prepared_statement_in_the_cache() -> actix_web::Result<()> +{ + let data = make_app_data().await; + if data.db.info.kind == AnyKind::Mssql { + return Ok(()); // the MSSQL backend keeps no statement cache + } + + for _ in 0..3 { + let page = rendered_page( + "/tests/parameter_binding/echo_parameter.sql?x=1447", + data.clone(), + ) + .await?; + assert!( + page.contains("1447"), + "{page}\nexpected the bound parameter to reach the query" + ); + } + + let connection = data.db.connection.acquire().await.unwrap(); + assert!( + connection.cached_statements_size() > 0, + "{:?} ran a parameterized query three times without caching a prepared statement", + data.db.info.kind + ); + Ok(()) +} diff --git a/tests/parameter_binding/parameter_in_projection.sql b/tests/parameter_binding/parameter_in_projection.sql new file mode 100644 index 000000000..ac793e5c4 --- /dev/null +++ b/tests/parameter_binding/parameter_in_projection.sql @@ -0,0 +1,8 @@ +DROP TABLE IF EXISTS sqlpage_param_projection; +CREATE TEMPORARY TABLE sqlpage_param_projection(username VARCHAR(100) NOT NULL); + +INSERT INTO sqlpage_param_projection (username) +SELECT $x +WHERE $x IS NOT NULL; + +select 'text' as component, max(username) as contents from sqlpage_param_projection; diff --git a/tests/parameter_binding/parameter_in_projection_mssql.sql b/tests/parameter_binding/parameter_in_projection_mssql.sql new file mode 100644 index 000000000..1626daa1b --- /dev/null +++ b/tests/parameter_binding/parameter_in_projection_mssql.sql @@ -0,0 +1,8 @@ +DROP TABLE IF EXISTS #sqlpage_param_projection; +CREATE TABLE #sqlpage_param_projection(username VARCHAR(100) NOT NULL); + +INSERT INTO #sqlpage_param_projection (username) +SELECT $x +WHERE $x IS NOT NULL; + +select 'text' as component, max(username) as contents from #sqlpage_param_projection; From 924cb9db746690ce1234417fde15377a07dce862 Mon Sep 17 00:00:00 2001 From: 81reap Date: Mon, 28 Sep 2026 20:56:54 -0400 Subject: [PATCH 2/5] fixup! test(database) :: test that parameters reach the DB and are cached --- tests/parameter_binding/mod.rs | 36 ++++--------------- .../parameter_in_projection.sql | 8 ----- .../parameter_in_projection_mssql.sql | 8 ----- .../parameter_bound_twice_in_a_projection.sql | 9 +++++ 4 files changed, 15 insertions(+), 46 deletions(-) delete mode 100644 tests/parameter_binding/parameter_in_projection.sql delete mode 100644 tests/parameter_binding/parameter_in_projection_mssql.sql create mode 100644 tests/sql_test_files/data/parameter_bound_twice_in_a_projection.sql diff --git a/tests/parameter_binding/mod.rs b/tests/parameter_binding/mod.rs index 196e409f6..5fe31a4d6 100644 --- a/tests/parameter_binding/mod.rs +++ b/tests/parameter_binding/mod.rs @@ -2,38 +2,10 @@ use actix_web::{http::StatusCode, test}; use sqlx::any::AnyKind; use sqlx::connection::Connection as _; -use sqlpage::webserver::database::SupportedDatabase; use sqlpage::webserver::http::main_handler; use crate::common::{get_request_to_with_data, make_app_data}; -async fn rendered_page( - path: &str, - data: actix_web::web::Data, -) -> actix_web::Result { - let req = get_request_to_with_data(path, data).await?.to_srv_request(); - let resp = main_handler(req).await?; - assert_eq!(resp.status(), StatusCode::OK); - Ok(String::from_utf8(test::read_body(resp).await.to_vec()).unwrap()) -} - -#[actix_web::test] -async fn test_a_parameter_in_a_projection_reaches_the_database() -> actix_web::Result<()> { - let data = make_app_data().await; - let path = match data.db.info.database_type { - SupportedDatabase::Mssql => "/tests/parameter_binding/parameter_in_projection_mssql.sql", - SupportedDatabase::Oracle => return Ok(()), // no CREATE TEMPORARY TABLE - _ => "/tests/parameter_binding/parameter_in_projection.sql", - }; - - let page = rendered_page(&format!("{path}?x=1447"), data).await?; - assert!( - page.contains("1447"), - "{page}\nexpected the bound parameter to reach the inserted row" - ); - Ok(()) -} - #[actix_web::test] async fn test_parameterized_pages_leave_a_prepared_statement_in_the_cache() -> actix_web::Result<()> { @@ -43,11 +15,15 @@ async fn test_parameterized_pages_leave_a_prepared_statement_in_the_cache() -> a } for _ in 0..3 { - let page = rendered_page( + let req = get_request_to_with_data( "/tests/parameter_binding/echo_parameter.sql?x=1447", data.clone(), ) - .await?; + .await? + .to_srv_request(); + let resp = main_handler(req).await?; + assert_eq!(resp.status(), StatusCode::OK); + let page = String::from_utf8(test::read_body(resp).await.to_vec()).unwrap(); assert!( page.contains("1447"), "{page}\nexpected the bound parameter to reach the query" diff --git a/tests/parameter_binding/parameter_in_projection.sql b/tests/parameter_binding/parameter_in_projection.sql deleted file mode 100644 index ac793e5c4..000000000 --- a/tests/parameter_binding/parameter_in_projection.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS sqlpage_param_projection; -CREATE TEMPORARY TABLE sqlpage_param_projection(username VARCHAR(100) NOT NULL); - -INSERT INTO sqlpage_param_projection (username) -SELECT $x -WHERE $x IS NOT NULL; - -select 'text' as component, max(username) as contents from sqlpage_param_projection; diff --git a/tests/parameter_binding/parameter_in_projection_mssql.sql b/tests/parameter_binding/parameter_in_projection_mssql.sql deleted file mode 100644 index 1626daa1b..000000000 --- a/tests/parameter_binding/parameter_in_projection_mssql.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS #sqlpage_param_projection; -CREATE TABLE #sqlpage_param_projection(username VARCHAR(100) NOT NULL); - -INSERT INTO #sqlpage_param_projection (username) -SELECT $x -WHERE $x IS NOT NULL; - -select 'text' as component, max(username) as contents from #sqlpage_param_projection; diff --git a/tests/sql_test_files/data/parameter_bound_twice_in_a_projection.sql b/tests/sql_test_files/data/parameter_bound_twice_in_a_projection.sql new file mode 100644 index 000000000..66d458ead --- /dev/null +++ b/tests/sql_test_files/data/parameter_bound_twice_in_a_projection.sql @@ -0,0 +1,9 @@ +-- One variable bound twice in a single statement, in the projection rather than +-- only in the predicate. https://github.com/sqlpage/SQLPage/issues/1474 +drop table if exists parameter_bound_twice_t; +create table parameter_bound_twice_t(id int primary key); +insert into parameter_bound_twice_t (id) values (1); + +select 'It works !' as expected, + case when $x is not null and $x = '1' then 'It works !' else 'fail' end as actual +from parameter_bound_twice_t; From 9ef124887fb86bbd38dc9595ff2227c2c4c1f9cf Mon Sep 17 00:00:00 2001 From: lovasoa Date: Thu, 1 Oct 2026 10:34:21 +0200 Subject: [PATCH 3/5] update dependencies --- Cargo.lock | 238 +++++++++++++++++++++++++---------------------------- Cargo.toml | 2 +- 2 files changed, 114 insertions(+), 126 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 22edbbf63..4cbc44f3b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,9 +21,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.13.6" +version = "3.18.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c4f07a021937af76abef4c458a0d6b25f63f82eec5394354deeb7de0551f523" +checksum = "e2ab7d72c0bb26f10df574ea560177b4de2f27ee8f421b2c1e9b75628bd9db23" dependencies = [ "actix-codec", "actix-service", @@ -49,7 +49,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rand 0.10.2", + "rand 0.10.3", "sha1 0.11.0", "smallvec", "tokio", @@ -60,19 +60,20 @@ dependencies = [ [[package]] name = "actix-macros" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +checksum = "367f814ad4afbac74f07df5001214da65f65e185c90ef56c4dd8df23f8695b9b" dependencies = [ + "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", ] [[package]] name = "actix-multipart" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd51a7e04a5e6c84efa4b45ecc5c36f6769ff5b936537c988d39560df0bb5eb" +checksum = "689ad8dca448cfbcfc32c8988dd411c564ee177d85d724982f6b0a026f382d0a" dependencies = [ "actix-utils", "actix-web", @@ -84,7 +85,7 @@ dependencies = [ "log", "memchr", "mime", - "rand 0.10.2", + "rand 0.10.3", "serde", "serde_json", "serde_plain", @@ -119,9 +120,9 @@ dependencies = [ [[package]] name = "actix-server" -version = "2.9.5" +version = "2.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aec21d555b23ee78a1c0e4ed61667935de7d61664caba878226a081b1ac20a74" +checksum = "8db2cf6f034e227c0c79825fbf11f3cad48569109515f62542b84d8abedb9376" dependencies = [ "actix-rt", "actix-service", @@ -145,9 +146,9 @@ dependencies = [ [[package]] name = "actix-tls" -version = "3.6.0" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21d0a5de50893252dfa9d7c4bf83761bcc1920651916cd9da24c974cf8ee1b92" +checksum = "c5d41b969edabcf8784fe0215f88b33e120dde04aace700bda8f78d77ca6bd81" dependencies = [ "actix-rt", "actix-service", @@ -221,14 +222,14 @@ dependencies = [ [[package]] name = "actix-web-codegen" -version = "4.3.0" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" +checksum = "b96b09c4878563f8ab4a5fd0c59f9f0d6e0e9f60eb9b748526a0b9604fd89c50" dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", ] [[package]] @@ -305,7 +306,7 @@ dependencies = [ "ndk-context", "ndk-sys", "num_enum", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -409,7 +410,7 @@ dependencies = [ "nom 7.1.3", "num-traits", "rusticata-macros", - "thiserror 2.0.20", + "thiserror 2.0.21", "time", ] @@ -683,9 +684,9 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bigdecimal" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" +checksum = "8fa3f3d8cbf4dffcfe4991de61d012bef509a409ecbe9dd41049bfe32b4d4653" dependencies = [ "autocfg", "libm", @@ -836,9 +837,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.6" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" +checksum = "f360145194ee8e21db5ee7f3fcd4fe52210864c75c985dae33218202c8bbe040" dependencies = [ "find-msvc-tools", "jobserver", @@ -965,9 +966,9 @@ dependencies = [ [[package]] name = "config" -version = "0.15.25" +version = "0.15.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85f248a4de22d204ceabc6299d89d2c70fbd7f09fea53c06c852369652d8139" +checksum = "38e9fbc53afcec54441422f1c596cd054655b32e70e1cbac956651b7b175a404" dependencies = [ "json5", "pathdiff", @@ -1322,7 +1323,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" dependencies = [ - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -1591,13 +1592,12 @@ checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" [[package]] name = "encoding_rs" -version = "0.8.41" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5ef0006ac9ab233c38522f5ae99cae3625151de8f706cacee1cba4b8e2832a" +checksum = "8e985e0451871ad22fb8d2b6b076e2028a502a0d3950998c2c5c0a4f9b5d9679" dependencies = [ "cfg-if", "core_detect", - "multiversion", "multiversion_no_op", "rustversion", "scopeguard", @@ -1675,9 +1675,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" +checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" [[package]] name = "flate2" @@ -1969,7 +1969,7 @@ dependencies = [ "pest_derive", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -2153,15 +2153,16 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.5.0", "http-body", + "httparse", "hyper", "libc", "pin-project-lite", @@ -2449,7 +2450,7 @@ dependencies = [ "jni-sys 0.4.1", "log", "simd_cesu8", - "thiserror 2.0.20", + "thiserror 2.0.21", "walkdir", "windows-link", ] @@ -2507,9 +2508,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.105" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" dependencies = [ "cfg-if", "futures-util", @@ -2518,13 +2519,12 @@ dependencies = [ [[package]] name = "json5" -version = "0.4.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +checksum = "733a844dbd6fef128e98cb4487b887cb55454d92cd9994b1bafe004fabbe670c" dependencies = [ - "pest", - "pest_derive", "serde", + "ucd-trie", ] [[package]] @@ -2602,9 +2602,9 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] name = "lazy_static" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" dependencies = [ "spin", ] @@ -2661,9 +2661,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6480ccc157a1389bb2e4891b24751b0f798ba640d22386f23143fbcc89da195a" +checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d" dependencies = [ "bitflags 2.13.2", "libc", @@ -2811,27 +2811,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "multiversion" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ca4bea16ffc3f443cf7d866912118196bfef4c6a1556ca00f9f9b00bb43f7c" -dependencies = [ - "multiversion-macros", -] - -[[package]] -name = "multiversion-macros" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d416831a7317ef4b08bee00b69cbbb9c8763da7959a7026244d6266869f9c83" -dependencies = [ - "proc-macro2", - "quote", - "rustversion", - "syn 3.0.6", -] - [[package]] name = "multiversion_no_op" version = "1.0.0" @@ -3249,7 +3228,7 @@ dependencies = [ "atoi 3.1.0", "log", "odbc-sys", - "thiserror 2.0.20", + "thiserror 2.0.21", "widestring", "winit", ] @@ -3331,7 +3310,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -3358,7 +3337,7 @@ dependencies = [ "opentelemetry-proto", "opentelemetry_sdk", "prost", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -3391,7 +3370,7 @@ dependencies = [ "percent-encoding", "portable-atomic", "rand 0.9.5", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-stream", ] @@ -3517,9 +3496,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d45aeb61b4bf818e12d4205f2466f8c4748f85f4fce0146d1c03d69d753f0ad" +checksum = "45d3aca230fad2e6f6317ca0a72724338c4960cb97168a85cdee66df4a9a21a8" dependencies = [ "memchr", "ucd-trie", @@ -3527,9 +3506,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89cc5a242e25ed4e7704d0be240f2cfbe20a8c27e7e252d94835be93d92dc39f" +checksum = "284b60557f2c4a2e72ad3f2d34d42685a2fa4a6a61d0d2a10c0ae2a5e916c2cf" dependencies = [ "pest", "pest_generator", @@ -3537,9 +3516,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abf21475cc3820fe4b2ca2dc2142902f67a02189f3b5b3a229f4febc01a43e5" +checksum = "1d9d1f08a115309ee99268cf85e5228e0e56aa9caf8841ec12866b6be07c3109" dependencies = [ "pest", "pest_meta", @@ -3550,9 +3529,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adba4db388f687393c18c51348d44a41d870ca9df71a2c98172ea3035dc6936e" +checksum = "ed93ba1a9ffcca32130a5188701c81c0c49cf00d4b7c5007d5148951d743adcb" dependencies = [ "pest", ] @@ -3802,9 +3781,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" dependencies = [ "chacha20", "getrandom 0.4.3", @@ -3908,7 +3887,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0" dependencies = [ "libredox", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -4090,7 +4069,7 @@ dependencies = [ "rcgen", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", "webpki-roots 1.0.9", "x509-parser", ] @@ -4340,9 +4319,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "935177bb8c0cd8ca1a4e6d1a2ac8988bea69cab4f9d3a31311e012ad27868ea4" +checksum = "df9adc193c780ef8f159aee8b61e2d5801aaa555e6eb0947fe45530ec506296f" dependencies = [ "base64 0.23.1", "bs58", @@ -4361,9 +4340,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d607aa01a3cb0ad757d6fd216136910db3c97b102fe686585689615a02dbcdc" +checksum = "3e17bbc68e28663bbbb90df47e058aa7eda4fb445b89fe70457bb94fbccf6e49" dependencies = [ "darling 0.24.1", "proc-macro2", @@ -4480,9 +4459,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.16.1" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" +checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e" [[package]] name = "smol_str" @@ -4562,7 +4541,7 @@ dependencies = [ "opentelemetry-semantic-conventions", "opentelemetry_sdk", "percent-encoding", - "rand 0.10.2", + "rand 0.10.3", "regex", "rustls", "rustls-acme", @@ -4606,9 +4585,9 @@ dependencies = [ [[package]] name = "sqlx-core-oldapi" -version = "0.6.57" +version = "0.6.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9cf228e0312c68be3bf5fe175305e28127a18a2d5231d1ed51888bfbbcfa8e9" +checksum = "50b575a0d7957715bb4ce5e87a7d3c828ccc920e432b5aada1b73d77d7cf83e5" dependencies = [ "ahash", "atoi 2.0.0", @@ -4646,7 +4625,7 @@ dependencies = [ "odbc-api", "once_cell", "percent-encoding", - "rand 0.10.2", + "rand 0.10.3", "regex", "rsa", "rustls", @@ -4658,7 +4637,7 @@ dependencies = [ "smallvec", "sqlx-rt-oldapi", "stringprep", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio-stream", "tokio-util", "url", @@ -4669,9 +4648,9 @@ dependencies = [ [[package]] name = "sqlx-rt-oldapi" -version = "0.6.57" +version = "0.6.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef74464ebe407e3e2a81013ede45cb60ebb3e5fe23f771bd68e3d1941558d542" +checksum = "9efc752f19437416331ddef49dbc5956d0fa88dbbb59a2cfbb64cb316afa6cc7" dependencies = [ "once_cell", "tokio", @@ -4781,11 +4760,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.20" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" dependencies = [ - "thiserror-impl 2.0.20", + "thiserror-impl 2.0.21", ] [[package]] @@ -4801,9 +4780,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.20" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", @@ -4895,9 +4874,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.5" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" +checksum = "c9cc2678c2cdd569ef8215e2afd7954ada2ae20b4fdd2c5fe6139a3b02d105db" dependencies = [ "rustls", "tokio", @@ -4935,10 +4914,12 @@ version = "1.1.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a" dependencies = [ + "indexmap 2.14.2", "serde_core", "serde_spanned", "toml_datetime", "toml_parser", + "toml_writer", "winnow", ] @@ -4972,6 +4953,12 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + [[package]] name = "tower" version = "0.5.3" @@ -5012,13 +4999,13 @@ dependencies = [ [[package]] name = "tracing-actix-web" -version = "0.7.22" +version = "0.7.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36bb7a33ce7f0807d44124b5119ea3581fd59028db56477a7aa01741c869ca6a" +checksum = "3133a9a17a910bb708dcdcf1ff89d3dd98d412938b5e017c6e42de11b63ef164" dependencies = [ "actix-web", "mutually_exclusive_features", - "pin-project", + "pin-project-lite", "tracing", "uuid", ] @@ -5125,9 +5112,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-id" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ba288e709927c043cbe476718d37be306be53fb1fafecd0dbe36d072be2580" +checksum = "65dd75ab2d9d379dbe86d4059e91d8b5a6e7054865eaba1ddbfc7a817ff96392" [[package]] name = "unicode-ident" @@ -5285,9 +5272,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" dependencies = [ "cfg-if", "once_cell", @@ -5298,19 +5285,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.78" +version = "0.4.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" dependencies = [ "js-sys", + "tokio", "wasm-bindgen", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5318,9 +5306,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" dependencies = [ "bumpalo", "proc-macro2", @@ -5331,18 +5319,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.105" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" dependencies = [ "js-sys", "wasm-bindgen", @@ -5628,7 +5616,7 @@ dependencies = [ "nom 7.1.3", "oid-registry", "rusticata-macros", - "thiserror 2.0.20", + "thiserror 2.0.21", "time", ] @@ -5684,9 +5672,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" +checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2", "quote", @@ -5696,18 +5684,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.57" +version = "0.8.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" +checksum = "6df92bf3d9227be3d53173901ddbffac2babc27ae50f397776ffd6dc33f800cb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.57" +version = "0.8.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" +checksum = "ac4f328cf2f05d084e496c3e9c3f33ed0a183656a16e1fcec4d464d8373aec82" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 7b29ee23c..e6386bd28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ panic = "abort" codegen-units = 2 [dependencies] -sqlx = { package = "sqlx-core-oldapi", version = "0.6.57", default-features = false, features = [ +sqlx = { package = "sqlx-core-oldapi", version = "0.6.58", default-features = false, features = [ "any", "runtime-tokio-rustls", "migrate", From 2f6ce9c0831d71e301cec24fa03cb93c17181d54 Mon Sep 17 00:00:00 2001 From: lovasoa Date: Thu, 1 Oct 2026 13:12:33 +0200 Subject: [PATCH 4/5] update sqlx --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4cbc44f3b..785395a66 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4585,9 +4585,9 @@ dependencies = [ [[package]] name = "sqlx-core-oldapi" -version = "0.6.58" +version = "0.6.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b575a0d7957715bb4ce5e87a7d3c828ccc920e432b5aada1b73d77d7cf83e5" +checksum = "b42e6921253f7619327405a13785cee8c1b646d51fbfcbc8d2c081530764742f" dependencies = [ "ahash", "atoi 2.0.0", @@ -4648,9 +4648,9 @@ dependencies = [ [[package]] name = "sqlx-rt-oldapi" -version = "0.6.58" +version = "0.6.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9efc752f19437416331ddef49dbc5956d0fa88dbbb59a2cfbb64cb316afa6cc7" +checksum = "e5e15e1abc75244b470d82a725167137a7e0fda2b0d55f7f27b9df419e0f8d91" dependencies = [ "once_cell", "tokio", diff --git a/Cargo.toml b/Cargo.toml index e6386bd28..8b9b7955f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ panic = "abort" codegen-units = 2 [dependencies] -sqlx = { package = "sqlx-core-oldapi", version = "0.6.58", default-features = false, features = [ +sqlx = { package = "sqlx-core-oldapi", version = "0.6.59", default-features = false, features = [ "any", "runtime-tokio-rustls", "migrate", From 76daf393f47181194f6e009e7827c6dd2a9f3a26 Mon Sep 17 00:00:00 2001 From: lovasoa Date: Thu, 1 Oct 2026 13:50:42 +0200 Subject: [PATCH 5/5] drop the as --- tests/parameter_binding/echo_parameter.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/parameter_binding/echo_parameter.sql b/tests/parameter_binding/echo_parameter.sql index 157fa9439..45c881825 100644 --- a/tests/parameter_binding/echo_parameter.sql +++ b/tests/parameter_binding/echo_parameter.sql @@ -1 +1 @@ -select 'text' as component, max(n) as contents from (select $x as n) as t; +select 'text' as component, max(n) as contents from (select $x as n) t;