From 144e10ff208297b79fcc2fc0409518a61238f282 Mon Sep 17 00:00:00 2001 From: Yuri Astrakhan Date: Tue, 4 Jul 2023 14:05:23 +0200 Subject: [PATCH] Upgrade sqlx to v0.7 (#743) This is mostly a noop, just updating to the new way of storing cached queries and a few other changes per https://github.com/launchbadge/sqlx/blob/main/CHANGELOG.md#070---2023-06-30 Note that this uses some of the code from #729 (thanks @upsicleclown !) A minor unrelated change - a reformat of `martin/release.toml` --- Cargo.lock | 449 ++++++++++++++---- Cargo.toml | 4 +- justfile | 15 +- ...0f7e5f487f6c33614aa82ae3716e3bb932dfa.json | 20 + ...d23bd852ba445c1058aed380fe83bed618c29.json | 20 + ...ebc59c27dbf204d09a9c1fb0b3bf9aaad284b.json | 32 ++ ...8c3a379e96acbdf5fc52d14e29bc726fefab7.json | 20 + ...f8fe1b1e7b6fb87c4e04ad7406a2bbfd35bec.json | 38 ++ ...5ffb771de5adb62873d794be09062506451d3.json | 20 + ...2cd90903d5401f8f0956245e5163bedd23a4d.json | 26 + martin-mbtiles/Cargo.toml | 8 +- martin-mbtiles/sqlx-data.json | 165 ------- martin-mbtiles/src/mbtiles_pool.rs | 4 +- martin-mbtiles/src/mbtiles_queries.rs | 16 +- martin/release.toml | 12 +- 15 files changed, 563 insertions(+), 286 deletions(-) create mode 100644 martin-mbtiles/.sqlx/query-09e15d4479a96829f8dcd93e6f40f7e5f487f6c33614aa82ae3716e3bb932dfa.json create mode 100644 martin-mbtiles/.sqlx/query-386a375cf65c3e5aef51deffc99d23bd852ba445c1058aed380fe83bed618c29.json create mode 100644 martin-mbtiles/.sqlx/query-5b298df51dccbf0d8a22433a99febc59c27dbf204d09a9c1fb0b3bf9aaad284b.json create mode 100644 martin-mbtiles/.sqlx/query-60264fa07915878b3f7ba0067f48c3a379e96acbdf5fc52d14e29bc726fefab7.json create mode 100644 martin-mbtiles/.sqlx/query-748436831449877b242d6e167a2f8fe1b1e7b6fb87c4e04ad7406a2bbfd35bec.json create mode 100644 martin-mbtiles/.sqlx/query-78d1356063c080d9bcea05a5ad95ffb771de5adb62873d794be09062506451d3.json create mode 100644 martin-mbtiles/.sqlx/query-d6ac76a234c97d0dc1fc4331d8b2cd90903d5401f8f0956245e5163bedd23a4d.json delete mode 100644 martin-mbtiles/sqlx-data.json diff --git a/Cargo.lock b/Cargo.lock index 67195460..b3dde01d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,7 +19,7 @@ dependencies = [ "futures-util", "log", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "pin-project-lite", "smallvec", "tokio", @@ -439,9 +439,9 @@ dependencies = [ [[package]] name = "atoi" -version = "1.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" dependencies = [ "num-traits", ] @@ -473,6 +473,12 @@ version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "bitflags" version = "1.3.2" @@ -484,6 +490,9 @@ name = "bitflags" version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +dependencies = [ + "serde", +] [[package]] name = "bitvec" @@ -677,6 +686,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +[[package]] +name = "const-oid" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6340df57935414636969091153f35f68d9f00bbc8fb4a9c6054706c213e6c6bc" + [[package]] name = "convert_case" version = "0.4.0" @@ -900,6 +915,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "der" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7ed52955ce76b1554f509074bb357d3fb8ac9b51288a65a3fd480d1dfba946" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -926,6 +952,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", "subtle", ] @@ -1023,6 +1050,17 @@ dependencies = [ "libc", ] +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + [[package]] name = "event-listener" version = "2.5.3" @@ -1231,13 +1269,13 @@ dependencies = [ [[package]] name = "futures-intrusive" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604f7a68fbf8103337523b1fadc8ade7361ee3f112f7c680ad179651616aed5" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" dependencies = [ "futures-core", "lock_api", - "parking_lot 0.11.2", + "parking_lot", ] [[package]] @@ -1425,6 +1463,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705f81e042b11734af35c701c7f6b65f8a968a430621fa2c95e72e27f9f8be5c" +[[package]] +name = "hkdf" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +dependencies = [ + "hmac", +] + [[package]] name = "hmac" version = "0.12.1" @@ -1434,6 +1481,15 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "http" version = "0.2.9" @@ -1642,6 +1698,9 @@ name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin 0.5.2", +] [[package]] name = "libc" @@ -1668,10 +1727,16 @@ dependencies = [ ] [[package]] -name = "libsqlite3-sys" -version = "0.24.2" +name = "libm" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" + +[[package]] +name = "libsqlite3-sys" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" dependencies = [ "cc", "pkg-config", @@ -1775,7 +1840,7 @@ dependencies = [ [[package]] name = "martin-mbtiles" -version = "0.3.0" +version = "0.4.0" dependencies = [ "actix-rt", "anyhow", @@ -1907,6 +1972,23 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -1917,6 +1999,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.1" @@ -1935,6 +2028,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -2043,17 +2137,6 @@ dependencies = [ "zopfli", ] -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - [[package]] name = "parking_lot" version = "0.12.1" @@ -2061,21 +2144,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.8", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -2123,6 +2192,15 @@ version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4b27ab7be369122c218afc2079489cdcb4b517c0a3fc386ff11e1fedfcc2b35" +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.0" @@ -2185,6 +2263,27 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.27" @@ -2535,6 +2634,28 @@ dependencies = [ "xmlparser", ] +[[package]] +name = "rsa" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8" +dependencies = [ + "byteorder", + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-iter", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core", + "signature", + "spki", + "subtle", + "zeroize", +] + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -2599,14 +2720,13 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f" dependencies = [ - "log", "ring", + "rustls-webpki", "sct", - "webpki", ] [[package]] @@ -2618,6 +2738,16 @@ dependencies = [ "base64", ] +[[package]] +name = "rustls-webpki" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustybuzz" version = "0.7.0" @@ -2812,6 +2942,16 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +dependencies = [ + "digest", + "rand_core", +] + [[package]] name = "simd-adler32" version = "0.3.5" @@ -2892,6 +3032,16 @@ dependencies = [ "lock_api", ] +[[package]] +name = "spki" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "spreet" version = "0.8.0" @@ -2924,23 +3074,25 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.6.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8de3b03a925878ed54a954f621e64bf55a3c1bd29652d0d1a17830405350188" +checksum = "91ef53c86d2066e04f0ac6b1364f16d13d82388e2d07f11a5c71782345555761" dependencies = [ "sqlx-core", "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", ] [[package]] name = "sqlx-core" -version = "0.6.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029" +checksum = "8a22fd81e9c1ad53c562edb869ff042b215d4eadefefc4784bacfbfd19835945" dependencies = [ - "ahash 0.7.6", + "ahash 0.8.3", "atoi", - "bitflags 1.3.2", "byteorder", "bytes", "crc", @@ -2948,42 +3100,53 @@ dependencies = [ "dotenvy", "either", "event-listener", - "flume", "futures-channel", "futures-core", - "futures-executor", "futures-intrusive", + "futures-io", "futures-util", "hashlink", "hex", - "indexmap 1.9.3", - "itoa", - "libc", - "libsqlite3-sys", + "indexmap 2.0.0", "log", "memchr", + "native-tls", "once_cell", "paste", "percent-encoding", "rustls", "rustls-pemfile", "serde", + "serde_json", "sha2", "smallvec", "sqlformat", - "sqlx-rt", - "stringprep", "thiserror", + "tokio", "tokio-stream", + "tracing", "url", "webpki-roots", ] [[package]] name = "sqlx-macros" -version = "0.6.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9966e64ae989e7e575b19d7265cb79d7fc3cbbdf179835cb0d716f294c2049c9" +checksum = "00bb7c096a202b8164c175614cbfb79fe0e1e0a3d50e0374526183ef2974e4a2" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 1.0.109", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d644623ab9699014e5b3cb61a040d16caa50fd477008f63f1399ae35498a58" dependencies = [ "dotenvy", "either", @@ -2996,22 +3159,115 @@ dependencies = [ "serde_json", "sha2", "sqlx-core", - "sqlx-rt", + "sqlx-mysql", + "sqlx-sqlite", "syn 1.0.109", + "tempfile", + "tokio", "url", ] [[package]] -name = "sqlx-rt" -version = "0.6.3" +name = "sqlx-mysql" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024" +checksum = "8264c59b28b6858796acfcedc660aa4c9075cc6e4ec8eb03cdca2a3e725726db" dependencies = [ - "native-tls", + "atoi", + "base64", + "bitflags 2.3.3", + "byteorder", + "bytes", + "crc", + "digest", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", "once_cell", - "tokio", - "tokio-native-tls", - "tokio-rustls", + "percent-encoding", + "rand", + "rsa", + "serde", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cab6147b81ca9213a7578f1b4c9d24c449a53953cd2222a7b5d7cd29a5c3139" +dependencies = [ + "atoi", + "base64", + "bitflags 2.3.3", + "byteorder", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand", + "serde", + "serde_json", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59fba60afa64718104b71eec6984f8779d4caffff3b30cde91a75843c7efc126" +dependencies = [ + "atoi", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "sqlx-core", + "tracing", + "url", ] [[package]] @@ -3278,7 +3534,7 @@ dependencies = [ "libc", "mio", "num_cpus", - "parking_lot 0.12.1", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2 0.4.9", @@ -3297,16 +3553,6 @@ dependencies = [ "syn 2.0.23", ] -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - [[package]] name = "tokio-openssl" version = "0.6.3" @@ -3332,7 +3578,7 @@ dependencies = [ "futures-channel", "futures-util", "log", - "parking_lot 0.12.1", + "parking_lot", "percent-encoding", "phf", "pin-project-lite", @@ -3343,17 +3589,6 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - [[package]] name = "tokio-stream" version = "0.1.14" @@ -3388,9 +3623,21 @@ dependencies = [ "cfg-if", "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.23", +] + [[package]] name = "tracing-core" version = "0.1.31" @@ -3687,23 +3934,13 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" dependencies = [ - "webpki", + "rustls-webpki", ] [[package]] @@ -3712,6 +3949,12 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" +[[package]] +name = "whoami" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50" + [[package]] name = "winapi" version = "0.3.9" @@ -3887,6 +4130,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" +[[package]] +name = "zeroize" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" + [[package]] name = "zopfli" version = "0.7.4" diff --git a/Cargo.toml b/Cargo.toml index 5d04e5b2..1bcbac30 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ futures = "0.3" indoc = "2" itertools = "0.11" log = "0.4" -martin-mbtiles = { path = "./martin-mbtiles", version = "0.3.0", default-features = false, features = ["native-tls"] } # disable CLI tools +martin-mbtiles = { path = "./martin-mbtiles", version = "0.4.0", default-features = false, features = ["native-tls"] } # disable CLI tools martin-tile-utils = { path = "./martin-tile-utils", version = "0.1.0" } num_cpus = "1" openssl = "0.10" @@ -42,7 +42,7 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" serde_yaml = "0.9" spreet = { version = "0.8", default-features = false } -sqlx = { version = "0.6", features = ["offline", "sqlite"] } +sqlx = { version = "0.7", features = ["sqlite"] } subst = { version = "0.2", features = ["yaml"] } thiserror = "1" tilejson = "0.3" diff --git a/justfile b/justfile index 77d3d378..f8d5b89a 100644 --- a/justfile +++ b/justfile @@ -91,7 +91,7 @@ test-unit *ARGS: cargo test --doc # Run integration tests -test-int: clean-test +test-int: clean-test install-sqlx #!/usr/bin/env bash set -euo pipefail tests/test.sh @@ -212,10 +212,15 @@ git-pre-push: stop start just lint just test -# Update sqlite database schema. Install SQLX cli if not already installed. -prepare-sqlite: +# Update sqlite database schema. +prepare-sqlite: install-sqlx + mkdir -p martin-mbtiles/.sqlx + cd martin-mbtiles && cargo sqlx prepare --database-url sqlite://$PWD/../tests/fixtures/files/world_cities.mbtiles + +# Install SQLX cli if not already installed. +[private] +install-sqlx: @if ! command -v cargo-sqlx &> /dev/null; then \ - echo "SQLX could not be found. Installing..." ;\ + echo "SQLX cargo plugin could not be found. Installing..." ;\ cargo install sqlx-cli --no-default-features --features sqlite,native-tls ;\ fi - cd martin-mbtiles && cargo sqlx prepare --database-url sqlite://$PWD/../tests/fixtures/files/world_cities.mbtiles diff --git a/martin-mbtiles/.sqlx/query-09e15d4479a96829f8dcd93e6f40f7e5f487f6c33614aa82ae3716e3bb932dfa.json b/martin-mbtiles/.sqlx/query-09e15d4479a96829f8dcd93e6f40f7e5f487f6c33614aa82ae3716e3bb932dfa.json new file mode 100644 index 00000000..c4e45424 --- /dev/null +++ b/martin-mbtiles/.sqlx/query-09e15d4479a96829f8dcd93e6f40f7e5f487f6c33614aa82ae3716e3bb932dfa.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT (\n -- Has a \"map\" table\n SELECT COUNT(*) = 1\n FROM sqlite_master\n WHERE name = 'map'\n AND type = 'table'\n --\n ) AND (\n -- \"map\" table's columns and their types are as expected:\n -- 4 non-null columns (zoom_level, tile_column, tile_row, tile_id).\n -- The order is not important\n SELECT COUNT(*) = 4\n FROM pragma_table_info('map')\n WHERE \"notnull\" = 0\n AND ((name = \"zoom_level\" AND type = \"INTEGER\")\n OR (name = \"tile_column\" AND type = \"INTEGER\")\n OR (name = \"tile_row\" AND type = \"INTEGER\")\n OR (name = \"tile_id\" AND type = \"TEXT\"))\n --\n ) AND (\n -- Has a \"images\" table\n SELECT COUNT(*) = 1\n FROM sqlite_master\n WHERE name = 'images'\n AND type = 'table'\n --\n ) AND (\n -- \"images\" table's columns and their types are as expected:\n -- 2 non-null columns (tile_id, tile_data).\n -- The order is not important\n SELECT COUNT(*) = 2\n FROM pragma_table_info('images')\n WHERE \"notnull\" = 0\n AND ((name = \"tile_id\" AND type = \"TEXT\")\n OR (name = \"tile_data\" AND type = \"BLOB\"))\n --\n ) AS is_valid;\n", + "describe": { + "columns": [ + { + "name": "is_valid", + "ordinal": 0, + "type_info": "Int" + } + ], + "parameters": { + "Right": 0 + }, + "nullable": [ + null + ] + }, + "hash": "09e15d4479a96829f8dcd93e6f40f7e5f487f6c33614aa82ae3716e3bb932dfa" +} diff --git a/martin-mbtiles/.sqlx/query-386a375cf65c3e5aef51deffc99d23bd852ba445c1058aed380fe83bed618c29.json b/martin-mbtiles/.sqlx/query-386a375cf65c3e5aef51deffc99d23bd852ba445c1058aed380fe83bed618c29.json new file mode 100644 index 00000000..9e652733 --- /dev/null +++ b/martin-mbtiles/.sqlx/query-386a375cf65c3e5aef51deffc99d23bd852ba445c1058aed380fe83bed618c29.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT value from metadata where name = ?", + "describe": { + "columns": [ + { + "name": "value", + "ordinal": 0, + "type_info": "Text" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + true + ] + }, + "hash": "386a375cf65c3e5aef51deffc99d23bd852ba445c1058aed380fe83bed618c29" +} diff --git a/martin-mbtiles/.sqlx/query-5b298df51dccbf0d8a22433a99febc59c27dbf204d09a9c1fb0b3bf9aaad284b.json b/martin-mbtiles/.sqlx/query-5b298df51dccbf0d8a22433a99febc59c27dbf204d09a9c1fb0b3bf9aaad284b.json new file mode 100644 index 00000000..b73b48bb --- /dev/null +++ b/martin-mbtiles/.sqlx/query-5b298df51dccbf0d8a22433a99febc59c27dbf204d09a9c1fb0b3bf9aaad284b.json @@ -0,0 +1,32 @@ +{ + "db_name": "SQLite", + "query": "SELECT tile_column, tile_row, tile_data FROM tiles WHERE zoom_level = ? LIMIT 1", + "describe": { + "columns": [ + { + "name": "tile_column", + "ordinal": 0, + "type_info": "Int64" + }, + { + "name": "tile_row", + "ordinal": 1, + "type_info": "Int64" + }, + { + "name": "tile_data", + "ordinal": 2, + "type_info": "Blob" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + true, + true, + true + ] + }, + "hash": "5b298df51dccbf0d8a22433a99febc59c27dbf204d09a9c1fb0b3bf9aaad284b" +} diff --git a/martin-mbtiles/.sqlx/query-60264fa07915878b3f7ba0067f48c3a379e96acbdf5fc52d14e29bc726fefab7.json b/martin-mbtiles/.sqlx/query-60264fa07915878b3f7ba0067f48c3a379e96acbdf5fc52d14e29bc726fefab7.json new file mode 100644 index 00000000..86d248d9 --- /dev/null +++ b/martin-mbtiles/.sqlx/query-60264fa07915878b3f7ba0067f48c3a379e96acbdf5fc52d14e29bc726fefab7.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT tile_data from tiles where zoom_level = ? AND tile_column = ? AND tile_row = ?", + "describe": { + "columns": [ + { + "name": "tile_data", + "ordinal": 0, + "type_info": "Blob" + } + ], + "parameters": { + "Right": 3 + }, + "nullable": [ + true + ] + }, + "hash": "60264fa07915878b3f7ba0067f48c3a379e96acbdf5fc52d14e29bc726fefab7" +} diff --git a/martin-mbtiles/.sqlx/query-748436831449877b242d6e167a2f8fe1b1e7b6fb87c4e04ad7406a2bbfd35bec.json b/martin-mbtiles/.sqlx/query-748436831449877b242d6e167a2f8fe1b1e7b6fb87c4e04ad7406a2bbfd35bec.json new file mode 100644 index 00000000..ad0518d1 --- /dev/null +++ b/martin-mbtiles/.sqlx/query-748436831449877b242d6e167a2f8fe1b1e7b6fb87c4e04ad7406a2bbfd35bec.json @@ -0,0 +1,38 @@ +{ + "db_name": "SQLite", + "query": "SELECT zoom_level, tile_column, tile_row, tile_data FROM tiles WHERE zoom_level >= 0 LIMIT 1", + "describe": { + "columns": [ + { + "name": "zoom_level", + "ordinal": 0, + "type_info": "Int64" + }, + { + "name": "tile_column", + "ordinal": 1, + "type_info": "Int64" + }, + { + "name": "tile_row", + "ordinal": 2, + "type_info": "Int64" + }, + { + "name": "tile_data", + "ordinal": 3, + "type_info": "Blob" + } + ], + "parameters": { + "Right": 0 + }, + "nullable": [ + true, + true, + true, + true + ] + }, + "hash": "748436831449877b242d6e167a2f8fe1b1e7b6fb87c4e04ad7406a2bbfd35bec" +} diff --git a/martin-mbtiles/.sqlx/query-78d1356063c080d9bcea05a5ad95ffb771de5adb62873d794be09062506451d3.json b/martin-mbtiles/.sqlx/query-78d1356063c080d9bcea05a5ad95ffb771de5adb62873d794be09062506451d3.json new file mode 100644 index 00000000..454e9534 --- /dev/null +++ b/martin-mbtiles/.sqlx/query-78d1356063c080d9bcea05a5ad95ffb771de5adb62873d794be09062506451d3.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT (\n -- Has a \"tiles\" table\n SELECT COUNT(*) = 1\n FROM sqlite_master\n WHERE name = 'tiles'\n AND type = 'table'\n --\n ) AND (\n -- \"tiles\" table's columns and their types are as expected:\n -- 4 non-null columns (zoom_level, tile_column, tile_row, tile_data).\n -- The order is not important\n SELECT COUNT(*) = 4\n FROM pragma_table_info('tiles')\n WHERE \"notnull\" = 0\n AND ((name = \"zoom_level\" AND type = \"INTEGER\")\n OR (name = \"tile_column\" AND type = \"INTEGER\")\n OR (name = \"tile_row\" AND type = \"INTEGER\")\n OR (name = \"tile_data\" AND type = \"BLOB\"))\n --\n ) as is_valid;\n", + "describe": { + "columns": [ + { + "name": "is_valid", + "ordinal": 0, + "type_info": "Int" + } + ], + "parameters": { + "Right": 0 + }, + "nullable": [ + null + ] + }, + "hash": "78d1356063c080d9bcea05a5ad95ffb771de5adb62873d794be09062506451d3" +} diff --git a/martin-mbtiles/.sqlx/query-d6ac76a234c97d0dc1fc4331d8b2cd90903d5401f8f0956245e5163bedd23a4d.json b/martin-mbtiles/.sqlx/query-d6ac76a234c97d0dc1fc4331d8b2cd90903d5401f8f0956245e5163bedd23a4d.json new file mode 100644 index 00000000..591b6083 --- /dev/null +++ b/martin-mbtiles/.sqlx/query-d6ac76a234c97d0dc1fc4331d8b2cd90903d5401f8f0956245e5163bedd23a4d.json @@ -0,0 +1,26 @@ +{ + "db_name": "SQLite", + "query": "SELECT name, value FROM metadata WHERE value IS NOT ''", + "describe": { + "columns": [ + { + "name": "name", + "ordinal": 0, + "type_info": "Text" + }, + { + "name": "value", + "ordinal": 1, + "type_info": "Text" + } + ], + "parameters": { + "Right": 0 + }, + "nullable": [ + true, + true + ] + }, + "hash": "d6ac76a234c97d0dc1fc4331d8b2cd90903d5401f8f0956245e5163bedd23a4d" +} diff --git a/martin-mbtiles/Cargo.toml b/martin-mbtiles/Cargo.toml index 2ad3a99a..2bcfc6a1 100644 --- a/martin-mbtiles/Cargo.toml +++ b/martin-mbtiles/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "martin-mbtiles" -version = "0.3.0" +version = "0.4.0" authors = ["Yuri Astrakhan ", "MapLibre contributors"] description = "A simple low-level MbTiles access and processing library, with some tile format detection and other relevant heuristics." keywords = ["mbtiles", "maps", "tiles", "mvt", "tilejson"] @@ -14,8 +14,8 @@ license.workspace = true default = ["cli", "native-tls"] cli = ["dep:anyhow", "dep:clap", "dep:tokio"] # One of the following two must be used -native-tls = ["sqlx/runtime-actix-native-tls"] -rustls = ["sqlx/runtime-actix-rustls"] +native-tls = ["sqlx/runtime-tokio-native-tls"] +rustls = ["sqlx/runtime-tokio-rustls"] [dependencies] futures.workspace = true @@ -29,7 +29,7 @@ tilejson.workspace = true # Bin dependencies anyhow = { workspace = true, optional = true } clap = { workspace = true, optional = true } -tokio = { workspace = true, optional = true } +tokio = { workspace = true, features = ["rt-multi-thread"], optional = true } [dev-dependencies] # For testing, might as well use the same async framework as the Martin itself diff --git a/martin-mbtiles/sqlx-data.json b/martin-mbtiles/sqlx-data.json deleted file mode 100644 index 752e8a2f..00000000 --- a/martin-mbtiles/sqlx-data.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "db": "SQLite", - "09e15d4479a96829f8dcd93e6f40f7e5f487f6c33614aa82ae3716e3bb932dfa": { - "describe": { - "columns": [ - { - "name": "is_valid", - "ordinal": 0, - "type_info": "Int" - } - ], - "nullable": [ - false - ], - "parameters": { - "Right": 0 - } - }, - "query": "SELECT (\n -- Has a \"map\" table\n SELECT COUNT(*) = 1\n FROM sqlite_master\n WHERE name = 'map'\n AND type = 'table'\n --\n ) AND (\n -- \"map\" table's columns and their types are as expected:\n -- 4 non-null columns (zoom_level, tile_column, tile_row, tile_id).\n -- The order is not important\n SELECT COUNT(*) = 4\n FROM pragma_table_info('map')\n WHERE \"notnull\" = 0\n AND ((name = \"zoom_level\" AND type = \"INTEGER\")\n OR (name = \"tile_column\" AND type = \"INTEGER\")\n OR (name = \"tile_row\" AND type = \"INTEGER\")\n OR (name = \"tile_id\" AND type = \"TEXT\"))\n --\n ) AND (\n -- Has a \"images\" table\n SELECT COUNT(*) = 1\n FROM sqlite_master\n WHERE name = 'images'\n AND type = 'table'\n --\n ) AND (\n -- \"images\" table's columns and their types are as expected:\n -- 2 non-null columns (tile_id, tile_data).\n -- The order is not important\n SELECT COUNT(*) = 2\n FROM pragma_table_info('images')\n WHERE \"notnull\" = 0\n AND ((name = \"tile_id\" AND type = \"TEXT\")\n OR (name = \"tile_data\" AND type = \"BLOB\"))\n --\n ) AS is_valid;\n" - }, - "386a375cf65c3e5aef51deffc99d23bd852ba445c1058aed380fe83bed618c29": { - "describe": { - "columns": [ - { - "name": "value", - "ordinal": 0, - "type_info": "Text" - } - ], - "nullable": [ - true - ], - "parameters": { - "Right": 1 - } - }, - "query": "SELECT value from metadata where name = ?" - }, - "5b298df51dccbf0d8a22433a99febc59c27dbf204d09a9c1fb0b3bf9aaad284b": { - "describe": { - "columns": [ - { - "name": "tile_column", - "ordinal": 0, - "type_info": "Int64" - }, - { - "name": "tile_row", - "ordinal": 1, - "type_info": "Int64" - }, - { - "name": "tile_data", - "ordinal": 2, - "type_info": "Blob" - } - ], - "nullable": [ - true, - true, - true - ], - "parameters": { - "Right": 1 - } - }, - "query": "SELECT tile_column, tile_row, tile_data FROM tiles WHERE zoom_level = ? LIMIT 1" - }, - "60264fa07915878b3f7ba0067f48c3a379e96acbdf5fc52d14e29bc726fefab7": { - "describe": { - "columns": [ - { - "name": "tile_data", - "ordinal": 0, - "type_info": "Blob" - } - ], - "nullable": [ - true - ], - "parameters": { - "Right": 3 - } - }, - "query": "SELECT tile_data from tiles where zoom_level = ? AND tile_column = ? AND tile_row = ?" - }, - "748436831449877b242d6e167a2f8fe1b1e7b6fb87c4e04ad7406a2bbfd35bec": { - "describe": { - "columns": [ - { - "name": "zoom_level", - "ordinal": 0, - "type_info": "Int64" - }, - { - "name": "tile_column", - "ordinal": 1, - "type_info": "Int64" - }, - { - "name": "tile_row", - "ordinal": 2, - "type_info": "Int64" - }, - { - "name": "tile_data", - "ordinal": 3, - "type_info": "Blob" - } - ], - "nullable": [ - true, - true, - true, - true - ], - "parameters": { - "Right": 0 - } - }, - "query": "SELECT zoom_level, tile_column, tile_row, tile_data FROM tiles WHERE zoom_level >= 0 LIMIT 1" - }, - "78d1356063c080d9bcea05a5ad95ffb771de5adb62873d794be09062506451d3": { - "describe": { - "columns": [ - { - "name": "is_valid", - "ordinal": 0, - "type_info": "Int" - } - ], - "nullable": [ - false - ], - "parameters": { - "Right": 0 - } - }, - "query": "SELECT (\n -- Has a \"tiles\" table\n SELECT COUNT(*) = 1\n FROM sqlite_master\n WHERE name = 'tiles'\n AND type = 'table'\n --\n ) AND (\n -- \"tiles\" table's columns and their types are as expected:\n -- 4 non-null columns (zoom_level, tile_column, tile_row, tile_data).\n -- The order is not important\n SELECT COUNT(*) = 4\n FROM pragma_table_info('tiles')\n WHERE \"notnull\" = 0\n AND ((name = \"zoom_level\" AND type = \"INTEGER\")\n OR (name = \"tile_column\" AND type = \"INTEGER\")\n OR (name = \"tile_row\" AND type = \"INTEGER\")\n OR (name = \"tile_data\" AND type = \"BLOB\"))\n --\n ) as is_valid;\n" - }, - "d6ac76a234c97d0dc1fc4331d8b2cd90903d5401f8f0956245e5163bedd23a4d": { - "describe": { - "columns": [ - { - "name": "name", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "value", - "ordinal": 1, - "type_info": "Text" - } - ], - "nullable": [ - true, - true - ], - "parameters": { - "Right": 0 - } - }, - "query": "SELECT name, value FROM metadata WHERE value IS NOT ''" - } -} \ No newline at end of file diff --git a/martin-mbtiles/src/mbtiles_pool.rs b/martin-mbtiles/src/mbtiles_pool.rs index e0837d72..02fac693 100644 --- a/martin-mbtiles/src/mbtiles_pool.rs +++ b/martin-mbtiles/src/mbtiles_pool.rs @@ -20,11 +20,11 @@ impl MbtilesPool { pub async fn get_metadata(&self) -> MbtResult { let mut conn = self.pool.acquire().await?; - self.mbtiles.get_metadata(&mut conn).await + self.mbtiles.get_metadata(&mut *conn).await } pub async fn get_tile(&self, z: u8, x: u32, y: u32) -> MbtResult>> { let mut conn = self.pool.acquire().await?; - self.mbtiles.get_tile(&mut conn, z, x, y).await + self.mbtiles.get_tile(&mut *conn, z, x, y).await } } diff --git a/martin-mbtiles/src/mbtiles_queries.rs b/martin-mbtiles/src/mbtiles_queries.rs index ea662dcd..e2fa62de 100644 --- a/martin-mbtiles/src/mbtiles_queries.rs +++ b/martin-mbtiles/src/mbtiles_queries.rs @@ -46,7 +46,13 @@ where ) AS is_valid; "# ); - Ok(sql.fetch_one(&mut *conn).await?.is_valid == 1) + + Ok(sql + .fetch_one(&mut *conn) + .await? + .is_valid + .unwrap_or_default() + == 1) } pub async fn is_tile_tables_type(conn: &mut T) -> MbtResult @@ -76,5 +82,11 @@ where ) as is_valid; "# ); - Ok(sql.fetch_one(&mut *conn).await?.is_valid == 1) + + Ok(sql + .fetch_one(&mut *conn) + .await? + .is_valid + .unwrap_or_default() + == 1) } diff --git a/martin/release.toml b/martin/release.toml index 1d4a22d7..2b080073 100644 --- a/martin/release.toml +++ b/martin/release.toml @@ -1,7 +1,7 @@ pre-release-replacements = [ - {file="CHANGELOG.md", search="Unreleased", replace="{{version}}"}, - {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1}, - {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}"}, - {file="CHANGELOG.md", search="", replace="\n\n## [Unreleased] - ReleaseDate", exactly=1}, - {file="CHANGELOG.md", search="", replace="\n[Unreleased]: https://github.com/assert-rs/predicates-rs/compare/{{tag_name}}...HEAD", exactly=1}, -] \ No newline at end of file + { file = "CHANGELOG.md", search = "Unreleased", replace = "{{version}}" }, + { file = "CHANGELOG.md", search = "\\.\\.\\.HEAD", replace = "...{{tag_name}}", exactly = 1 }, + { file = "CHANGELOG.md", search = "ReleaseDate", replace = "{{date}}" }, + { file = "CHANGELOG.md", search = "", replace = "\n\n## [Unreleased] - ReleaseDate", exactly = 1 }, + { file = "CHANGELOG.md", search = "", replace = "\n[Unreleased]: https://github.com/assert-rs/predicates-rs/compare/{{tag_name}}...HEAD", exactly = 1 }, +]