Skip to main content

max / goingson

db: move off sqlx-sqlite to rusqlite, and the traits go sync with it The SQL library standard settled on 2026-08-07 asks for rusqlite under SQLite, and the measurement that decided it applies here in full: 292 runtime sqlx::query call sites, zero query! macros, no .sqlx offline dir. GoingsOn was paying an async runtime, a pool and a version ceiling for the one sqlx feature it never used, while already running a second rusqlite driver against the same file through SyncKit's SyncStore. The 18 repository traits go SYNC rather than staying async over a synchronous embedded database. Nothing wanted the async: each trait had exactly one implementor and AppState erases them to Arc<dyn ..> with no generic bound and no mock, so 231 #[async_trait] async fn became plain fn and the blocking moved to the callers. got dropped its tokio runtime outright. search_repo's tokio::join! over five sqlx futures became five sequential calls on one connection, because against a single SQLite file it bought interleaving rather than parallelism. The _sqlx_migrations ledger is kept VERBATIM: same table name, same columns, sha384 over raw file bytes. This was the one failure mode that could brick installs -- rename it and an upgraded install believes it has applied nothing and re-runs all 64 migrations against populated tables. migrate.rs is the runner, build.rs embeds the files parsing filenames the way sqlx::migrate! did, and migration_checksum_tests now computes the hash off disk itself instead of reading sqlx's Migrator, so the manifest and the runner agree by evidence rather than by construction. Verified against a copy of the live goingson.db: 64 applied, zero pending, data intact. r2d2 with a hand-written ManageConnection, deliberately not r2d2_sqlite, which requires rusqlite 0.40 -- the exact pin this migration exists to unblock. A :memory: pool gets a uniquely-named shared cache plus a keeper connection, since a shared-cache memory database dies when its last connection closes and r2d2 reaps idle ones. One connection at a time is now a stated rule (repository/mod.rs). Five pooled connections and a blocking checkout mean a method holding one while calling self.get_by_id, which takes another, deadlocks under load rather than merely slowing down; 20 write-then-read sites release theirs first. sqlx had the same hazard implicitly. Not done, and not a correctness problem today: Tauri commands call the sync repositories inline on the async runtime rather than through spawn_blocking. Fine for a local SQLite file, wrong the day a command gets slow. The backup export, the one path that already blocked for seconds, was on the blocking pool before and stays there. Balanced Breakfast is still on sqlx-sqlite and is now the only thing gating the tree-wide move to rusqlite 0.40.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-07 23:27 UTC
Signed with PGP, not checked
Commit: ae8d508b7174b45d6736279d8e2dca6eb7d4448b
Parent: 51b5631
148 files changed, +8775 insertions, -9481 deletions
M Cargo.lock +36 -259
@@ -327,15 +327,6 @@
327 327 "system-deps",
328 328 ]
329 329
330 - [[package]]
331 - name = "atoi"
332 - version = "2.0.0"
333 - source = "registry+https://github.com/rust-lang/crates.io-index"
334 - checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
335 - dependencies = [
336 - "num-traits",
337 - ]
338 -
339 330 [[package]]
340 331 name = "atomic"
341 332 version = "0.6.1"
@@ -966,21 +957,6 @@
966 957 "libc",
967 958 ]
968 959
969 - [[package]]
970 - name = "crc"
971 - version = "3.4.0"
972 - source = "registry+https://github.com/rust-lang/crates.io-index"
973 - checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d"
974 - dependencies = [
975 - "crc-catalog",
976 - ]
977 -
978 - [[package]]
979 - name = "crc-catalog"
980 - version = "2.5.0"
981 - source = "registry+https://github.com/rust-lang/crates.io-index"
982 - checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853"
983 -
984 960 [[package]]
985 961 name = "crc32fast"
986 962 version = "1.5.0"
@@ -1005,15 +981,6 @@
1005 981 "crossbeam-utils",
1006 982 ]
1007 983
1008 - [[package]]
1009 - name = "crossbeam-queue"
1010 - version = "0.3.13"
1011 - source = "registry+https://github.com/rust-lang/crates.io-index"
1012 - checksum = "803d13fb3b09d88be9f4dbc29062c66b19bf7170867ceb746d2a8689bf6c7a26"
1013 - dependencies = [
1014 - "crossbeam-utils",
1015 - ]
1016 -
1017 984 [[package]]
1018 985 name = "crossbeam-utils"
1019 986 version = "0.8.22"
@@ -1315,7 +1282,6 @@
1315 1282 "block-buffer 0.12.1",
1316 1283 "const-oid",
1317 1284 "crypto-common 0.2.2",
1318 - "ctutils",
1319 1285 ]
1320 1286
1321 1287 [[package]]
@@ -1336,7 +1302,7 @@
1336 1302 "libc",
1337 1303 "option-ext",
1338 1304 "redox_users",
1339 - "windows-sys 0.59.0",
1305 + "windows-sys 0.61.2",
1340 1306 ]
1341 1307
1342 1308 [[package]]
@@ -1418,12 +1384,6 @@
1418 1384 "tendril",
1419 1385 ]
1420 1386
1421 - [[package]]
1422 - name = "dotenvy"
1423 - version = "0.15.7"
1424 - source = "registry+https://github.com/rust-lang/crates.io-index"
1425 - checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
1426 -
1427 1387 [[package]]
1428 1388 name = "dpi"
1429 1389 version = "0.1.2"
@@ -1486,9 +1446,6 @@
1486 1446 version = "1.17.0"
1487 1447 source = "registry+https://github.com/rust-lang/crates.io-index"
1488 1448 checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d"
1489 - dependencies = [
1490 - "serde",
1491 - ]
1492 1449
1493 1450 [[package]]
1494 1451 name = "email-encoding"
@@ -1586,16 +1543,6 @@
1586 1543 checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
1587 1544 dependencies = [
1588 1545 "libc",
1589 - "windows-sys 0.59.0",
1590 - ]
1591 -
1592 - [[package]]
1593 - name = "etcetera"
1594 - version = "0.11.0"
1595 - source = "registry+https://github.com/rust-lang/crates.io-index"
1596 - checksum = "de48cc4d1c1d97a20fd819def54b890cadde72ed3ad0c614822a0a433361be96"
1597 - dependencies = [
1598 - "cfg-if",
1599 1546 "windows-sys 0.61.2",
1600 1547 ]
1601 1548
@@ -1742,17 +1689,6 @@
1742 1689 "miniz_oxide",
1743 1690 ]
1744 1691
1745 - [[package]]
1746 - name = "flume"
1747 - version = "0.12.0"
1748 - source = "registry+https://github.com/rust-lang/crates.io-index"
1749 - checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be"
1750 - dependencies = [
1751 - "futures-core",
1752 - "futures-sink",
1753 - "spin",
1754 - ]
1755 -
1756 1692 [[package]]
1757 1693 name = "fnv"
1758 1694 version = "1.0.7"
@@ -1852,17 +1788,6 @@
1852 1788 "futures-util",
1853 1789 ]
1854 1790
1855 - [[package]]
1856 - name = "futures-intrusive"
1857 - version = "0.5.0"
1858 - source = "registry+https://github.com/rust-lang/crates.io-index"
1859 - checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
1860 - dependencies = [
1861 - "futures-core",
1862 - "lock_api",
1863 - "parking_lot",
1864 - ]
1865 -
1866 1791 [[package]]
1867 1792 name = "futures-io"
1868 1793 version = "0.3.33"
@@ -2171,8 +2096,8 @@
2171 2096 "goingson-db-sqlite",
2172 2097 "kberg",
2173 2098 "painhours",
2099 + "rusqlite",
2174 2100 "serde_json",
2175 - "sqlx",
2176 2101 "tokio",
2177 2102 "tracing",
2178 2103 "tracing-subscriber",
@@ -2194,7 +2119,6 @@
2194 2119 name = "goingson-core"
2195 2120 version = "0.5.0"
2196 2121 dependencies = [
2197 - "async-trait",
2198 2122 "chrono",
2199 2123 "chrono-tz",
2200 2124 "iana-time-zone",
@@ -2202,7 +2126,6 @@
2202 2126 "serde",
2203 2127 "serde_json",
2204 2128 "sha2 0.11.0",
2205 - "sqlx",
2206 2129 "strum",
2207 2130 "strum_macros",
2208 2131 "tagtree",
@@ -2215,12 +2138,13 @@
2215 2138 version = "0.5.0"
2216 2139 dependencies = [
2217 2140 "argon2",
2218 - "async-trait",
2219 2141 "chrono",
2220 2142 "goingson-core",
2143 + "r2d2",
2144 + "rusqlite",
2221 2145 "serde_json",
2222 - "sqlx",
2223 - "tokio",
2146 + "sha2 0.11.0",
2147 + "thiserror 2.0.19",
2224 2148 "tracing",
2225 2149 "uuid",
2226 2150 ]
@@ -2266,7 +2190,6 @@
2266 2190 "serde",
2267 2191 "serde_json",
2268 2192 "sha2 0.11.0",
2269 - "sqlx",
2270 2193 "synckit-client",
2271 2194 "synckit-config",
2272 2195 "tauri",
@@ -2300,8 +2223,6 @@
2300 2223 "makeover",
2301 2224 "makeover-tui",
2302 2225 "ratatui",
2303 - "sqlx",
2304 - "tokio",
2305 2226 "uuid",
2306 2227 ]
2307 2228
@@ -2443,16 +2364,7 @@
2443 2364 source = "registry+https://github.com/rust-lang/crates.io-index"
2444 2365 checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
2445 2366 dependencies = [
2446 - "hmac 0.12.1",
2447 - ]
2448 -
2449 - [[package]]
2450 - name = "hkdf"
2451 - version = "0.13.0"
2452 - source = "registry+https://github.com/rust-lang/crates.io-index"
2453 - checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018"
2454 - dependencies = [
2455 - "hmac 0.13.0",
2367 + "hmac",
2456 2368 ]
2457 2369
2458 2370 [[package]]
@@ -2464,15 +2376,6 @@
2464 2376 "digest 0.10.7",
2465 2377 ]
2466 2378
2467 - [[package]]
2468 - name = "hmac"
2469 - version = "0.13.0"
2470 - source = "registry+https://github.com/rust-lang/crates.io-index"
2471 - checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f"
2472 - dependencies = [
2473 - "digest 0.11.3",
2474 - ]
2475 -
2476 2379 [[package]]
2477 2380 name = "html5ever"
2478 2381 version = "0.38.0"
@@ -3474,16 +3377,6 @@
3474 3377 source = "registry+https://github.com/rust-lang/crates.io-index"
3475 3378 checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
3476 3379
3477 - [[package]]
3478 - name = "md-5"
3479 - version = "0.11.0"
3480 - source = "registry+https://github.com/rust-lang/crates.io-index"
3481 - checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98"
3482 - dependencies = [
3483 - "cfg-if",
3484 - "digest 0.11.3",
3485 - ]
3486 -
3487 3380 [[package]]
3488 3381 name = "memchr"
3489 3382 version = "2.8.3"
@@ -3583,7 +3476,7 @@
3583 3476 "png 0.18.1",
3584 3477 "serde",
3585 3478 "thiserror 2.0.19",
3586 - "windows-sys 0.60.2",
3479 + "windows-sys 0.61.2",
3587 3480 ]
3588 3481
3589 3482 [[package]]
@@ -3716,7 +3609,7 @@
3716 3609 source = "registry+https://github.com/rust-lang/crates.io-index"
3717 3610 checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
3718 3611 dependencies = [
3719 - "windows-sys 0.59.0",
3612 + "windows-sys 0.61.2",
3720 3613 ]
3721 3614
3722 3615 [[package]]
@@ -3824,7 +3717,7 @@
3824 3717 source = "registry+https://github.com/rust-lang/crates.io-index"
3825 3718 checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8"
3826 3719 dependencies = [
3827 - "proc-macro-crate 1.3.1",
3720 + "proc-macro-crate 3.5.0",
3828 3721 "proc-macro2",
3829 3722 "quote",
3830 3723 "syn 2.0.119",
@@ -4657,6 +4550,17 @@
4657 4550 source = "registry+https://github.com/rust-lang/crates.io-index"
4658 4551 checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
4659 4552
4553 + [[package]]
4554 + name = "r2d2"
4555 + version = "0.8.10"
4556 + source = "registry+https://github.com/rust-lang/crates.io-index"
4557 + checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93"
4558 + dependencies = [
4559 + "log",
4560 + "parking_lot",
4561 + "scheduled-thread-pool",
4562 + ]
4563 +
4660 4564 [[package]]
4661 4565 name = "rand"
4662 4566 version = "0.8.7"
@@ -4923,7 +4827,7 @@
4923 4827 "pin-project-lite",
4924 4828 "rustls",
4925 4829 "rustls-pki-types",
4926 - "rustls-platform-verifier 0.6.2",
4830 + "rustls-platform-verifier 0.7.0",
4927 4831 "serde",
4928 4832 "serde_json",
4929 4833 "serde_urlencoded",
@@ -5029,7 +4933,7 @@
5029 4933 "errno",
5030 4934 "libc",
5031 4935 "linux-raw-sys",
5032 - "windows-sys 0.59.0",
4936 + "windows-sys 0.61.2",
5033 4937 ]
5034 4938
5035 4939 [[package]]
@@ -5086,7 +4990,7 @@
5086 4990 "security-framework",
5087 4991 "security-framework-sys",
5088 4992 "webpki-root-certs",
5089 - "windows-sys 0.59.0",
4993 + "windows-sys 0.61.2",
5090 4994 ]
5091 4995
5092 4996 [[package]]
@@ -5107,7 +5011,7 @@
5107 5011 "security-framework",
5108 5012 "security-framework-sys",
5109 5013 "webpki-root-certs",
5110 - "windows-sys 0.59.0",
5014 + "windows-sys 0.61.2",
5111 5015 ]
5112 5016
5113 5017 [[package]]
@@ -5157,6 +5061,15 @@
5157 5061 "windows-sys 0.61.2",
5158 5062 ]
5159 5063
5064 + [[package]]
5065 + name = "scheduled-thread-pool"
5066 + version = "0.2.7"
5067 + source = "registry+https://github.com/rust-lang/crates.io-index"
5068 + checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19"
5069 + dependencies = [
5070 + "parking_lot",
5071 + ]
5072 +
5160 5073 [[package]]
5161 5074 name = "schemars"
5162 5075 version = "0.8.22"
@@ -5240,7 +5153,7 @@
5240 5153 "futures-util",
5241 5154 "generic-array",
5242 5155 "getrandom 0.2.17",
5243 - "hkdf 0.12.4",
5156 + "hkdf",
5244 5157 "num",
5245 5158 "once_cell",
5246 5159 "serde",
@@ -5506,17 +5419,6 @@
5506 5419 "stable_deref_trait",
5507 5420 ]
5508 5421
5509 - [[package]]
5510 - name = "sha1"
5511 - version = "0.11.0"
5512 - source = "registry+https://github.com/rust-lang/crates.io-index"
5513 - checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214"
5514 - dependencies = [
5515 - "cfg-if",
5516 - "cpufeatures 0.3.0",
5517 - "digest 0.11.3",
5518 - ]
5519 -
5520 5422 [[package]]
5521 5423 name = "sha1_smol"
5522 5424 version = "1.0.1"
@@ -5630,9 +5532,6 @@
5630 5532 version = "1.15.2"
5631 5533 source = "registry+https://github.com/rust-lang/crates.io-index"
5632 5534 checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
5633 - dependencies = [
5634 - "serde",
5635 - ]
5636 5535
5637 5536 [[package]]
5638 5537 name = "socket2"
@@ -5641,7 +5540,7 @@
5641 5540 checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
5642 5541 dependencies = [
5643 5542 "libc",
5644 - "windows-sys 0.60.2",
5543 + "windows-sys 0.61.2",
5645 5544 ]
5646 5545
5647 5546 [[package]]
@@ -5692,15 +5591,6 @@
5692 5591 "system-deps",
5693 5592 ]
5694 5593
5695 - [[package]]
5696 - name = "spin"
5697 - version = "0.9.9"
5698 - source = "registry+https://github.com/rust-lang/crates.io-index"
5699 - checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e"
5700 - dependencies = [
5701 - "lock_api",
5702 - ]
5703 -
5704 5594 [[package]]
5705 5595 name = "sqlite-wasm-rs"
5706 5596 version = "0.5.5"
@@ -5713,185 +5603,6 @@
5713 5603 "wasm-bindgen",
5714 5604 ]
5715 5605
5716 - [[package]]
5717 - name = "sqlx"
5718 - version = "0.9.0"
5719 - source = "registry+https://github.com/rust-lang/crates.io-index"
5720 - checksum = "378620ccc25c62c89d8be1c819e76a88d59bdcc3304733330788948e619bfd71"
5721 - dependencies = [
5722 - "sqlx-core",
5723 - "sqlx-macros",
5724 - "sqlx-mysql",
5725 - "sqlx-postgres",
5726 - "sqlx-sqlite",
5727 - ]
5728 -
5729 - [[package]]
5730 - name = "sqlx-core"
5731 - version = "0.9.0"
5732 - source = "registry+https://github.com/rust-lang/crates.io-index"
5733 - checksum = "05b44e85bf579a8eeb4ceaa77a3a523baf2bf0e9bac7e40f405d537b5d2d5ccb"
5734 - dependencies = [
5735 - "base64 0.22.1",
5736 - "bytes",
5737 - "cfg-if",
5738 - "chrono",
5739 - "crc",
5740 - "crossbeam-queue",
5741 - "either",
5742 - "event-listener 5.4.2",
5743 - "futures-core",
5744 - "futures-intrusive",
5745 - "futures-io",
5746 - "futures-util",
5747 - "hashbrown 0.16.1",
5748 - "hashlink",
5749 - "indexmap 2.14.0",
5750 - "log",
5751 - "memchr",
5752 - "percent-encoding",
5753 - "serde",
5754 - "serde_json",
5755 - "sha2 0.10.9",
5756 - "smallvec",
5757 - "thiserror 2.0.19",
5758 - "tokio",
5759 - "tokio-stream",
5760 - "tracing",
5761 - "url",
5762 - "uuid",
5763 - ]
5764 -
5765 - [[package]]
5766 - name = "sqlx-macros"
5767 - version = "0.9.0"
5768 - source = "registry+https://github.com/rust-lang/crates.io-index"
5769 - checksum = "bd2b84f2bc39a5705ef27ec785a11c934a41bbd4a24941e257927cddc26b60bf"
5770 - dependencies = [
5771 - "proc-macro2",
5772 - "quote",
5773 - "sqlx-core",
5774 - "sqlx-macros-core",
5775 - "syn 2.0.119",
5776 - ]
5777 -
5778 - [[package]]
5779 - name = "sqlx-macros-core"
5780 - version = "0.9.0"
5781 - source = "registry+https://github.com/rust-lang/crates.io-index"
5782 - checksum = "fb8d96de5fdc85a5c4ec813432b523ec637e80ba98f046555f75f7908ddac7c3"
5783 - dependencies = [
5784 - "cfg-if",
5785 - "dotenvy",
5786 - "either",
5787 - "heck 0.5.0",
5788 - "hex",
5789 - "proc-macro2",
5790 - "quote",
5791 - "serde",
5792 - "serde_json",
5793 - "sha2 0.10.9",
5794 - "sqlx-core",
5795 - "sqlx-mysql",
5796 - "sqlx-postgres",
5797 - "sqlx-sqlite",
5798 - "syn 2.0.119",
5799 - "thiserror 2.0.19",
5800 - "tokio",
5801 - "url",
5802 - ]
5803 -
5804 - [[package]]
5805 - name = "sqlx-mysql"
5806 - version = "0.9.0"
5807 - source = "registry+https://github.com/rust-lang/crates.io-index"
5808 - checksum = "90b8020fe17c5f2c245bfa2505d7ef59c5604839527c740266ad2214acebea27"
5809 - dependencies = [
5810 - "bitflags 2.13.1",
5811 - "byteorder",
5812 - "bytes",
5813 - "chrono",
5814 - "crc",
5815 - "digest 0.11.3",
5816 - "dotenvy",
5817 - "either",
5818 - "futures-core",
5819 - "futures-util",
5820 - "generic-array",
5821 - "log",
5822 - "percent-encoding",
5823 - "serde",
5824 - "sha1",
5825 - "sha2 0.11.0",
5826 - "sqlx-core",
5827 - "thiserror 2.0.19",
5828 - "tracing",
Lines truncated
M Cargo.toml +9 -2
@@ -28,8 +28,15 @@
28 28 # Async runtime
29 29 tokio = { version = "1.49", features = ["rt-multi-thread", "macros"] }
30 30
31 - # Database - SQLx
32 - sqlx = { version = "0.9", features = ["runtime-tokio"] }
31 + # Database - SQLite via rusqlite (house standard; wiki `sql-library-standard`).
32 + # Pinned to 0.39 to share one `libsqlite3-sys` with synckit-client's SyncStore,
33 + # which opens its own connection to the same file. Two versions of that -sys
34 + # crate cannot co-link, so this pin moves only in lockstep with synckit.
35 + rusqlite = { version = "0.39", features = ["bundled"] }
36 + # Pooling. Deliberately r2d2 and not r2d2_sqlite: the latter requires rusqlite
37 + # 0.40, which is the pin above. The connection manager is ~30 lines in
38 + # db-sqlite and has to set the per-connection PRAGMAs by hand regardless.
39 + r2d2 = "0.8"
33 40
34 41 # Authentication
35 42 argon2 = "0.5"
@@ -42,11 +42,10 @@
42 42 tokio = { workspace = true }
43 43
44 44 # Database
45 - sqlx = { workspace = true, features = ["sqlite"] }
46 - # The SyncStore engine (synckit-client) owns a private rusqlite connection to the
47 - # same SQLite file the sqlx pool uses; naming rusqlite::Connection in the blob
48 - # policy / cutover needs it as a direct dep. Same version + libsqlite3-sys 0.37 as
49 - # the engine, so both bindings share one bundled SQLite.
45 + # The repository layer is rusqlite behind an r2d2 pool, and the SyncStore engine
46 + # (synckit-client) owns a private rusqlite connection to the same SQLite file.
47 + # Same version + libsqlite3-sys 0.37 as the engine, so both bindings share one
48 + # bundled SQLite.
50 49 rusqlite = { version = "0.39", features = ["bundled"] }
51 50
52 51 # Serialization
@@ -4,9 +4,6 @@
4 4 version.workspace = true
5 5 edition.workspace = true
6 6
7 - [features]
8 - sqlx-sqlite = ["dep:sqlx"]
9 -
10 7 [dependencies]
11 8 chrono = { workspace = true }
12 9 chrono-tz = { workspace = true }
@@ -14,11 +11,9 @@
14 11 uuid = { workspace = true }
15 12 serde = { workspace = true }
16 13 serde_json = { workspace = true }
17 - async-trait = { workspace = true }
18 14 thiserror = { workspace = true }
19 15 strum = { workspace = true }
20 16 strum_macros = { workspace = true }
21 - sqlx = { workspace = true, features = ["sqlite", "uuid"], optional = true }
22 17 tagtree = { workspace = true }
23 18 painhours = { workspace = true }
24 19 sha2 = { workspace = true }
@@ -5,18 +5,16 @@
5 5 edition.workspace = true
6 6
7 7 [dependencies]
8 - goingson-core = { workspace = true, features = ["sqlx-sqlite"] }
9 - sqlx = { workspace = true, features = ["sqlite", "uuid", "chrono"] }
8 + goingson-core = { workspace = true }
9 + rusqlite = { workspace = true }
10 + r2d2 = { workspace = true }
10 11 chrono = { workspace = true }
11 12 uuid = { workspace = true }
12 - async-trait = { workspace = true }
13 13 argon2 = { workspace = true, features = ["std"] }
14 14 serde_json = { workspace = true }
15 + sha2 = { workspace = true }
16 + thiserror = { workspace = true }
15 17 tracing = { workspace = true }
16 - tokio = { workspace = true, features = ["macros"] }
17 -
18 - [dev-dependencies]
19 - tokio = { workspace = true, features = ["rt-multi-thread", "macros"] }
20 18
21 19 [lints]
22 20 workspace = true
@@ -13,13 +13,12 @@
13 13 path = "src/main.rs"
14 14
15 15 [dependencies]
16 - goingson-core = { workspace = true, features = ["sqlx-sqlite"] }
16 + goingson-core = { workspace = true }
17 17 painhours = { workspace = true }
18 18 goingson-db-sqlite = { workspace = true }
19 19 kberg = { workspace = true }
20 20
21 21 tokio = { workspace = true, features = ["rt-multi-thread", "macros", "signal"] }
22 - sqlx = { workspace = true, features = ["sqlite"] }
23 22 serde_json = { workspace = true }
24 23 chrono = { workspace = true }
25 24 chrono-tz = { workspace = true }
@@ -28,5 +27,9 @@
28 27 tracing = { workspace = true }
29 28 tracing-subscriber = { workspace = true }
30 29
30 + [dev-dependencies]
31 + # Seeding the fixed desktop user in the e2e test, one raw INSERT.
32 + rusqlite = { workspace = true }
33 +
31 34 [lints]
32 35 workspace = true
@@ -9,7 +9,7 @@
9 9 path = "src/main.rs"
10 10
11 11 [dependencies]
12 - goingson-core = { workspace = true, features = ["sqlx-sqlite"] }
12 + goingson-core = { workspace = true }
13 13 goingson-db-sqlite = { workspace = true }
14 14
15 15 # The family's terminal renderer, from crates.io. MIT. The `theme` feature is
@@ -17,8 +17,6 @@
17 17 # with them is its own, in src/statusbar.rs.
18 18 makeover-tui = { workspace = true, features = ["theme"] }
19 19
20 - tokio = { workspace = true, features = ["rt-multi-thread", "macros"] }
21 - sqlx = { workspace = true, features = ["sqlite"] }
22 20 uuid = { workspace = true }
23 21 chrono = { workspace = true }
24 22 ratatui = "0.30"