diff --git a/Cargo.lock b/Cargo.lock index 4a7c42b..a921aa1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -716,26 +716,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bindgen" -version = "0.69.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "itertools 0.12.1", - "lazy_static", - "lazycell", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn 2.0.96", -] - [[package]] name = "bindgen" version = "0.70.1" @@ -2117,6 +2097,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "foreign-types" version = "0.3.2" @@ -2424,14 +2410,17 @@ name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "foldhash", +] [[package]] name = "hashlink" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -3000,15 +2989,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.13.0" @@ -3100,12 +3080,6 @@ dependencies = [ "spin", ] -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "lettre" version = "0.11.11" @@ -3171,11 +3145,11 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.30.1" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +checksum = "ad8935b44e7c13394a179a438e0cebba0fe08fe01b54f152e29a93b5cf993fd4" dependencies = [ - "bindgen 0.69.5", + "bindgen 0.71.1", "cc", "pkg-config", "vcpkg", @@ -4640,9 +4614,9 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.32.1" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" +checksum = "1c6d5e5acb6f6129fe3f7ba0a7fc77bca1942cb568535e18e7bc40262baf3110" dependencies = [ "bitflags", "fallible-iterator", @@ -5050,9 +5024,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.135" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" +checksum = "336a0c23cf42a38d9eaa7cd22c7040d04e1228a19a933890805ffd00a16437d2" dependencies = [ "indexmap 2.7.0", "itoa", @@ -5073,9 +5047,9 @@ dependencies = [ [[package]] name = "serde_rusqlite" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b741cc5ef185cd96157e762c3bba743c4e94c8dc6af0edb053c48d2b3c27e691" +checksum = "d1c7e71c56bd6ca8caa221b987112592a404db2895d9010c0ce0615b0148497f" dependencies = [ "rusqlite", "serde", @@ -5333,9 +5307,9 @@ dependencies = [ [[package]] name = "sqlite3-parser" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5307dad6cb84730ce8bdefde56ff4cf95fe516972d52e2bbdc8a8cd8f2520b" +checksum = "b3a9d9c3080a2da890fff8c0a8b764da31460877be04f7ef9a4894a09bfdffb8" dependencies = [ "bitflags", "cc", diff --git a/Cargo.toml b/Cargo.toml index c4f2f19..2466e26 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,8 +40,8 @@ opt-level = 1 [workspace.dependencies] trailbase-refinery-core = { path = "vendor/refinery/refinery_core", version = "0.8.15", default-features = false, features = ["rusqlite-bundled"] } trailbase-refinery-macros = { path = "vendor/refinery/refinery_macros", version = "0.8.15" } -libsqlite3-sys = { version = "0.30.1", features = ["bundled"] } -rusqlite = { version = "^0.32.1", default-features = false, features = [ +libsqlite3-sys = { version = "0.31.0", features = ["bundled"] } +rusqlite = { version = "^0.33.0", default-features = false, features = [ "bundled", "column_decltype", "load_extension", diff --git a/trailbase-core/Cargo.toml b/trailbase-core/Cargo.toml index 6b4a9fc..42c4ae1 100644 --- a/trailbase-core/Cargo.toml +++ b/trailbase-core/Cargo.toml @@ -67,7 +67,7 @@ serde_path_to_error = "0.1.16" serde_urlencoded = "0.7.1" sha2 = "0.10.8" sqlformat = "0.3.1" -sqlite3-parser = "0.13.0" +sqlite3-parser = "0.14.0" thiserror = "2.0.1" thread_local = "1.1.8" tokio = { version = "^1.38.0", features = ["macros", "rt-multi-thread", "fs", "signal", "time"] } diff --git a/trailbase-core/src/schema.rs b/trailbase-core/src/schema.rs index b8e2c69..05cebf8 100644 --- a/trailbase-core/src/schema.rs +++ b/trailbase-core/src/schema.rs @@ -733,7 +733,7 @@ impl View { info!("CREATE VIEW column filtering not supported (yet)"); None } - false => try_extract_column_mapping(select.clone(), tables)?.map(|column_mapping| { + false => try_extract_column_mapping((*select).clone(), tables)?.map(|column_mapping| { column_mapping .into_iter() .map(|mapping| mapping.column) @@ -744,7 +744,7 @@ impl View { Ok(View { name: view_name.to_string(), columns, - query: SelectFormatter(select).to_string(), + query: SelectFormatter(*select).to_string(), temporary, if_not_exists, }) @@ -1202,7 +1202,7 @@ mod tests { }, ]; - let mapping = try_extract_column_mapping(select, &tables) + let mapping = try_extract_column_mapping(*select, &tables) .unwrap() .unwrap(); diff --git a/trailbase-sqlite/Cargo.toml b/trailbase-sqlite/Cargo.toml index b661b05..23fe6a5 100644 --- a/trailbase-sqlite/Cargo.toml +++ b/trailbase-sqlite/Cargo.toml @@ -18,7 +18,7 @@ rusqlite = { workspace = true } schemars = "0.8.21" serde = { version = "^1.0.203", features = ["derive"] } serde_json = "1.0.122" -serde_rusqlite = "0.36.0" +serde_rusqlite = "0.37.0" trailbase-sqlean = { workspace = true } sqlite-vec = "0.1.6" thiserror = "2.0.1" diff --git a/trailbase-sqlite/src/connection.rs b/trailbase-sqlite/src/connection.rs index 213c636..991bf46 100644 --- a/trailbase-sqlite/src/connection.rs +++ b/trailbase-sqlite/src/connection.rs @@ -1,4 +1,5 @@ use crossbeam_channel::{Receiver, Sender}; +use rusqlite::fallible_iterator::FallibleIterator; use rusqlite::hooks::{Action, PreUpdateCase}; use rusqlite::types::Value; use std::{ @@ -186,22 +187,24 @@ impl Connection { let batch = rusqlite::Batch::new(conn, &sql); let mut p = batch.peekable(); - while let Some(iter) = p.next() { - let mut stmt = iter?; - + while let Ok(Some(mut stmt)) = p.next() { let mut rows = stmt.raw_query(); let row = rows.next()?; - if p.peek().is_none() { - if let Some(row) = row { - let cols: Arc> = Arc::new(columns(row.as_ref())); - let mut result = vec![Row::from_row(row, Some(cols.clone()))?]; - while let Some(row) = rows.next()? { - result.push(Row::from_row(row, Some(cols.clone()))?); + match p.peek() { + Err(_) | Ok(None) => { + if let Some(row) = row { + let cols: Arc> = Arc::new(columns(row.as_ref())); + + let mut result = vec![Row::from_row(row, Some(cols.clone()))?]; + while let Some(row) = rows.next()? { + result.push(Row::from_row(row, Some(cols.clone()))?); + } + return Ok(Some(Rows(result, cols))); } - return Ok(Some(Rows(result, cols))); + return Ok(None); } - return Ok(None); + _ => {} } } return Ok(None); diff --git a/vendor/refinery b/vendor/refinery index e5c4a16..ae2ded8 160000 --- a/vendor/refinery +++ b/vendor/refinery @@ -1 +1 @@ -Subproject commit e5c4a1605fcac2b1f724776372c71e1c0c1bb328 +Subproject commit ae2ded819b40fc9dc0f777aaeafb7103834abe1c diff --git a/vendor/sqlean/Cargo.toml b/vendor/sqlean/Cargo.toml index 3dbfe92..e6756be 100644 --- a/vendor/sqlean/Cargo.toml +++ b/vendor/sqlean/Cargo.toml @@ -13,7 +13,7 @@ appveyor = { repository = "trailbaseio/trailbase" } maintenance = { status = "actively-developed" } [dependencies] -libsqlite3-sys = { version = "0.30.1", features = ["bundled"] } +libsqlite3-sys = { version = "0.31.0", features = ["bundled"] } [build-dependencies] bindgen = "0.71.0"