rhi

Coordinated trade for connected markets
git clone https://radroots.dev/git/rhi.git
Log | Files | Refs | README | LICENSE

commit 5de817d46c6d6a3dfa02a1066d3bb8d6bf91de26
parent 49e30c66dad8b1263f673e8c9d783177dbdcc7c4
Author: triesap <tyson@radroots.org>
Date:   Wed, 15 Jul 2026 02:11:45 +0000

sqlite: align worker bundled runtime

- update RHI SQLx usage to 0.9 with sqlite-bundled features
- patch libsqlite3-sys to the shared SQLite 3.53.3 source crate
- tighten processed-job query helpers for SQLx safe SQL bounds
- refresh the worker lockfile against the new runtime dependency floor

Diffstat:
MCargo.lock | 57+++++++++++++++++++++++++++++++++------------------------
MCargo.toml | 5++++-
Msrc/features/trade_listing/processed_jobs.rs | 13++++++++++---
3 files changed, 47 insertions(+), 28 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -1364,9 +1364,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" dependencies = [ "futures-core", "futures-sink", @@ -1386,6 +1386,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] name = "form_urlencoded" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1645,7 +1651,7 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", ] [[package]] @@ -1653,6 +1659,11 @@ name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] [[package]] name = "hashlink" @@ -1665,11 +1676,11 @@ dependencies = [ [[package]] name = "hashlink" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", ] [[package]] @@ -2164,9 +2175,7 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +version = "0.37.0" dependencies = [ "cc", "pkg-config", @@ -5303,9 +5312,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +checksum = "378620ccc25c62c89d8be1c819e76a88d59bdcc3304733330788948e619bfd71" dependencies = [ "sqlx-core", "sqlx-macros", @@ -5314,12 +5323,13 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +checksum = "05b44e85bf579a8eeb4ceaa77a3a523baf2bf0e9bac7e40f405d537b5d2d5ccb" dependencies = [ "base64 0.22.1", "bytes", + "cfg-if", "crc", "crossbeam-queue", "either", @@ -5328,12 +5338,11 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.5", - "hashlink 0.10.0", + "hashbrown 0.16.1", + "hashlink 0.11.1", "indexmap 2.13.0", "log", "memchr", - "once_cell", "percent-encoding", "serde", "sha2", @@ -5347,9 +5356,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +checksum = "bd2b84f2bc39a5705ef27ec785a11c934a41bbd4a24941e257927cddc26b60bf" dependencies = [ "proc-macro2", "quote", @@ -5360,15 +5369,15 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +checksum = "fb8d96de5fdc85a5c4ec813432b523ec637e80ba98f046555f75f7908ddac7c3" dependencies = [ + "cfg-if", "dotenvy", "either", "heck", "hex", - "once_cell", "proc-macro2", "quote", "serde", @@ -5383,12 +5392,13 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +checksum = "488e99c397a62007e4229aec669a179816339afc6d2620ca6fa420dbee2e982c" dependencies = [ "atoi", "flume", + "form_urlencoded", "futures-channel", "futures-core", "futures-executor", @@ -5398,7 +5408,6 @@ dependencies = [ "log", "percent-encoding", "serde", - "serde_urlencoded", "sqlx-core", "thiserror 2.0.18", "tracing", diff --git a/Cargo.toml b/Cargo.toml @@ -51,11 +51,14 @@ serde = { version = "1", default-features = false } serde_json = { version = "1", default-features = false } reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] } sha2 = { version = "0.10" } -sqlx = { version = "0.8.6", default-features = false, features = ["runtime-tokio", "sqlite"] } +sqlx = { version = "0.9.0", default-features = false, features = ["runtime-tokio", "sqlite-bundled"] } tokio = { version = "1", features = ["full"] } thiserror = { version = "2" } toml = { version = "0.8" } tracing = { version = "0.1" } +[patch.crates-io] +libsqlite3-sys = { path = "../lib/crates/libsqlite3_sys_3_53_3" } + [dev-dependencies] tempfile = { version = "3" } diff --git a/src/features/trade_listing/processed_jobs.rs b/src/features/trade_listing/processed_jobs.rs @@ -1096,12 +1096,15 @@ fn u32_from_i64(value: i64, field: &'static str) -> Result<u32, RhiProcessedJobS u32::try_from(value).map_err(|_| RhiProcessedJobStoreError::InvalidStoredValue(field)) } -async fn query_i64(pool: &SqlitePool, sql: &str) -> Result<i64, RhiProcessedJobStoreError> { +async fn query_i64(pool: &SqlitePool, sql: &'static str) -> Result<i64, RhiProcessedJobStoreError> { let row = sqlx::query(sql).fetch_one(pool).await?; Ok(row.try_get(0)?) } -async fn query_string(pool: &SqlitePool, sql: &str) -> Result<String, RhiProcessedJobStoreError> { +async fn query_string( + pool: &SqlitePool, + sql: &'static str, +) -> Result<String, RhiProcessedJobStoreError> { let row = sqlx::query(sql).fetch_one(pool).await?; Ok(row.try_get(0)?) } @@ -1159,7 +1162,11 @@ mod tests { .expect("enable check constraints"); } - async fn corrupt_job(store: &RhiProcessedJobStore, job: &RhiProcessedJobState, sql: &str) { + async fn corrupt_job( + store: &RhiProcessedJobStore, + job: &RhiProcessedJobState, + sql: &'static str, + ) { disable_store_constraints(store).await; sqlx::query(sql) .bind(job.request_id.as_str())