diff --git a/Cargo.lock b/Cargo.lock index e2122dfeb..91efedab2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16,9 +16,14 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.4.7" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" +checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98" +dependencies = [ + "getrandom 0.2.3", + "once_cell", + "version_check", +] [[package]] name = "aho-corasick" @@ -775,17 +780,23 @@ name = "hashbrown" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ "ahash", ] [[package]] name = "hashlink" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d99cf782f0dc4372d26846bec3de7804ceb5df083c2d4462c0b8d2330e894fa8" +checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" dependencies = [ - "hashbrown", + "hashbrown 0.11.2", ] [[package]] @@ -959,7 +970,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.9.1", ] [[package]] @@ -1108,9 +1119,9 @@ checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6" [[package]] name = "libsqlite3-sys" -version = "0.20.1" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d31059f22935e6c31830db5249ba2b7ecd54fd73a9909286f0a67aa55c2fbd" +checksum = "290b64917f8b0cb885d9de0f9959fe1f775d7fa12f1da2db9001c1c8ab60f89d" dependencies = [ "cc", "pkg-config", @@ -1991,9 +2002,9 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.24.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38ee71cbab2c827ec0ac24e76f82eca723cee92c509a65f67dee393c25112" +checksum = "57adcf67c8faaf96f3248c2a7b419a0dbc52ebe36ba83dd57fe83827c1ea4eb3" dependencies = [ "bitflags", "fallible-iterator", diff --git a/cargo/crates.bzl b/cargo/crates.bzl index 153311344..30e18c474 100644 --- a/cargo/crates.bzl +++ b/cargo/crates.bzl @@ -33,12 +33,12 @@ def raze_fetch_remote_crates(): maybe( http_archive, - name = "raze__ahash__0_4_7", - url = "https://crates.io/api/v1/crates/ahash/0.4.7/download", + name = "raze__ahash__0_7_4", + url = "https://crates.io/api/v1/crates/ahash/0.7.4/download", type = "tar.gz", - sha256 = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e", - strip_prefix = "ahash-0.4.7", - build_file = Label("//cargo/remote:BUILD.ahash-0.4.7.bazel"), + sha256 = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98", + strip_prefix = "ahash-0.7.4", + build_file = Label("//cargo/remote:BUILD.ahash-0.7.4.bazel"), ) maybe( @@ -751,6 +751,16 @@ def raze_fetch_remote_crates(): build_file = Label("//cargo/remote:BUILD.h2-0.3.3.bazel"), ) + maybe( + http_archive, + name = "raze__hashbrown__0_11_2", + url = "https://crates.io/api/v1/crates/hashbrown/0.11.2/download", + type = "tar.gz", + sha256 = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e", + strip_prefix = "hashbrown-0.11.2", + build_file = Label("//cargo/remote:BUILD.hashbrown-0.11.2.bazel"), + ) + maybe( http_archive, name = "raze__hashbrown__0_9_1", @@ -763,12 +773,12 @@ def raze_fetch_remote_crates(): maybe( http_archive, - name = "raze__hashlink__0_6_0", - url = "https://crates.io/api/v1/crates/hashlink/0.6.0/download", + name = "raze__hashlink__0_7_0", + url = "https://crates.io/api/v1/crates/hashlink/0.7.0/download", type = "tar.gz", - sha256 = "d99cf782f0dc4372d26846bec3de7804ceb5df083c2d4462c0b8d2330e894fa8", - strip_prefix = "hashlink-0.6.0", - build_file = Label("//cargo/remote:BUILD.hashlink-0.6.0.bazel"), + sha256 = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf", + strip_prefix = "hashlink-0.7.0", + build_file = Label("//cargo/remote:BUILD.hashlink-0.7.0.bazel"), ) maybe( @@ -1103,12 +1113,12 @@ def raze_fetch_remote_crates(): maybe( http_archive, - name = "raze__libsqlite3_sys__0_20_1", - url = "https://crates.io/api/v1/crates/libsqlite3-sys/0.20.1/download", + name = "raze__libsqlite3_sys__0_22_2", + url = "https://crates.io/api/v1/crates/libsqlite3-sys/0.22.2/download", type = "tar.gz", - sha256 = "64d31059f22935e6c31830db5249ba2b7ecd54fd73a9909286f0a67aa55c2fbd", - strip_prefix = "libsqlite3-sys-0.20.1", - build_file = Label("//cargo/remote:BUILD.libsqlite3-sys-0.20.1.bazel"), + sha256 = "290b64917f8b0cb885d9de0f9959fe1f775d7fa12f1da2db9001c1c8ab60f89d", + strip_prefix = "libsqlite3-sys-0.22.2", + build_file = Label("//cargo/remote:BUILD.libsqlite3-sys-0.22.2.bazel"), ) maybe( @@ -1963,12 +1973,12 @@ def raze_fetch_remote_crates(): maybe( http_archive, - name = "raze__rusqlite__0_24_2", - url = "https://crates.io/api/v1/crates/rusqlite/0.24.2/download", + name = "raze__rusqlite__0_25_3", + url = "https://crates.io/api/v1/crates/rusqlite/0.25.3/download", type = "tar.gz", - sha256 = "d5f38ee71cbab2c827ec0ac24e76f82eca723cee92c509a65f67dee393c25112", - strip_prefix = "rusqlite-0.24.2", - build_file = Label("//cargo/remote:BUILD.rusqlite-0.24.2.bazel"), + sha256 = "57adcf67c8faaf96f3248c2a7b419a0dbc52ebe36ba83dd57fe83827c1ea4eb3", + strip_prefix = "rusqlite-0.25.3", + build_file = Label("//cargo/remote:BUILD.rusqlite-0.25.3.bazel"), ) maybe( diff --git a/cargo/licenses.json b/cargo/licenses.json index 03097d240..902d520e9 100644 --- a/cargo/licenses.json +++ b/cargo/licenses.json @@ -19,7 +19,7 @@ }, { "name": "ahash", - "version": "0.4.7", + "version": "0.7.4", "authors": "Tom Kaitchuck ", "repository": "https://github.com/tkaitchuck/ahash", "license": "Apache-2.0 OR MIT", @@ -701,9 +701,18 @@ "license_file": null, "description": "A Rust port of Google's SwissTable hash map" }, + { + "name": "hashbrown", + "version": "0.11.2", + "authors": "Amanieu d'Antras ", + "repository": "https://github.com/rust-lang/hashbrown", + "license": "Apache-2.0 OR MIT", + "license_file": null, + "description": "A Rust port of Google's SwissTable hash map" + }, { "name": "hashlink", - "version": "0.6.0", + "version": "0.7.0", "authors": "kyren ", "repository": "https://github.com/kyren/hashlink", "license": "Apache-2.0 OR MIT", @@ -1009,7 +1018,7 @@ }, { "name": "libsqlite3-sys", - "version": "0.20.1", + "version": "0.22.2", "authors": "The rusqlite developers", "repository": "https://github.com/rusqlite/rusqlite", "license": "MIT", @@ -1792,7 +1801,7 @@ }, { "name": "rusqlite", - "version": "0.24.2", + "version": "0.25.3", "authors": "The rusqlite developers", "repository": "https://github.com/rusqlite/rusqlite", "license": "MIT", diff --git a/cargo/remote/BUILD.ahash-0.7.4.bazel b/cargo/remote/BUILD.ahash-0.7.4.bazel new file mode 100644 index 000000000..78126fe7a --- /dev/null +++ b/cargo/remote/BUILD.ahash-0.7.4.bazel @@ -0,0 +1,122 @@ +""" +@generated +cargo-raze crate build file. + +DO NOT EDIT! Replaced on runs of cargo-raze +""" + +# buildifier: disable=load +load("@bazel_skylib//lib:selects.bzl", "selects") + +# buildifier: disable=load +load( + "@rules_rust//rust:rust.bzl", + "rust_binary", + "rust_library", + "rust_test", +) + +package(default_visibility = [ + # Public for visibility by "@raze__crate__version//" targets. + # + # Prefer access through "//cargo", which limits external + # visibility to explicit Cargo.toml dependencies. + "//visibility:public", +]) + +licenses([ + "notice", # MIT from expression "MIT OR Apache-2.0" +]) + +# Generated Targets +# buildifier: disable=out-of-order-load +# buildifier: disable=load-on-top +load( + "@rules_rust//cargo:cargo_build_script.bzl", + "cargo_build_script", +) + +cargo_build_script( + name = "ahash_build_script", + srcs = glob(["**/*.rs"]), + build_script_env = { + }, + crate_features = [ + ], + crate_root = "build.rs", + data = glob(["**"]), + edition = "2018", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-raze", + "manual", + ], + version = "0.7.4", + visibility = ["//visibility:private"], + deps = [ + "@raze__version_check__0_9_3//:version_check", + ] + selects.with_or({ + # cfg(any(target_os = "linux", target_os = "android", target_os = "windows", target_os = "macos", target_os = "ios", target_os = "freebsd", target_os = "openbsd", target_os = "netbsd", target_os = "dragonfly", target_os = "solaris", target_os = "illumos", target_os = "fuchsia", target_os = "redox", target_os = "cloudabi", target_os = "haiku", target_os = "vxworks", target_os = "emscripten", target_os = "wasi")) + ( + "@rules_rust//rust/platform:aarch64-apple-ios", + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", + "@rules_rust//rust/platform:x86_64-apple-darwin", + "@rules_rust//rust/platform:x86_64-apple-ios", + "@rules_rust//rust/platform:x86_64-pc-windows-msvc", + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", + ): [ + ], + "//conditions:default": [], + }), +) + +# Unsupported target "ahash" with type "bench" omitted + +# Unsupported target "map" with type "bench" omitted + +rust_library( + name = "ahash", + srcs = glob(["**/*.rs"]), + aliases = { + }, + crate_features = [ + ], + crate_root = "src/lib.rs", + crate_type = "lib", + data = [], + edition = "2018", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-raze", + "manual", + ], + version = "0.7.4", + # buildifier: leave-alone + deps = [ + ":ahash_build_script", + ] + selects.with_or({ + # cfg(any(target_os = "linux", target_os = "android", target_os = "windows", target_os = "macos", target_os = "ios", target_os = "freebsd", target_os = "openbsd", target_os = "netbsd", target_os = "dragonfly", target_os = "solaris", target_os = "illumos", target_os = "fuchsia", target_os = "redox", target_os = "cloudabi", target_os = "haiku", target_os = "vxworks", target_os = "emscripten", target_os = "wasi")) + ( + "@rules_rust//rust/platform:aarch64-apple-ios", + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", + "@rules_rust//rust/platform:x86_64-apple-darwin", + "@rules_rust//rust/platform:x86_64-apple-ios", + "@rules_rust//rust/platform:x86_64-pc-windows-msvc", + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", + ): [ + "@raze__getrandom__0_2_3//:getrandom", + "@raze__once_cell__1_8_0//:once_cell", + ], + "//conditions:default": [], + }), +) + +# Unsupported target "bench" with type "test" omitted + +# Unsupported target "map_tests" with type "test" omitted + +# Unsupported target "nopanic" with type "test" omitted diff --git a/cargo/remote/BUILD.ahash-0.4.7.bazel b/cargo/remote/BUILD.hashbrown-0.11.2.bazel similarity index 65% rename from cargo/remote/BUILD.ahash-0.4.7.bazel rename to cargo/remote/BUILD.hashbrown-0.11.2.bazel index f18500dc3..f4074427c 100644 --- a/cargo/remote/BUILD.ahash-0.4.7.bazel +++ b/cargo/remote/BUILD.hashbrown-0.11.2.bazel @@ -25,19 +25,20 @@ package(default_visibility = [ ]) licenses([ - "notice", # MIT from expression "MIT OR Apache-2.0" + "notice", # Apache-2.0 from expression "Apache-2.0 OR MIT" ]) # Generated Targets -# Unsupported target "ahash" with type "bench" omitted - -# Unsupported target "map" with type "bench" omitted +# Unsupported target "bench" with type "bench" omitted rust_library( - name = "ahash", + name = "hashbrown", srcs = glob(["**/*.rs"]), crate_features = [ + "ahash", + "default", + "inline-more", ], crate_root = "src/lib.rs", crate_type = "lib", @@ -50,14 +51,17 @@ rust_library( "cargo-raze", "manual", ], - version = "0.4.7", + version = "0.11.2", # buildifier: leave-alone deps = [ + "@raze__ahash__0_7_4//:ahash", ], ) -# Unsupported target "bench" with type "test" omitted +# Unsupported target "hasher" with type "test" omitted -# Unsupported target "map_tests" with type "test" omitted +# Unsupported target "rayon" with type "test" omitted -# Unsupported target "nopanic" with type "test" omitted +# Unsupported target "serde" with type "test" omitted + +# Unsupported target "set" with type "test" omitted diff --git a/cargo/remote/BUILD.hashbrown-0.9.1.bazel b/cargo/remote/BUILD.hashbrown-0.9.1.bazel index 008649ade..979693b68 100644 --- a/cargo/remote/BUILD.hashbrown-0.9.1.bazel +++ b/cargo/remote/BUILD.hashbrown-0.9.1.bazel @@ -36,9 +36,6 @@ rust_library( name = "hashbrown", srcs = glob(["**/*.rs"]), crate_features = [ - "ahash", - "default", - "inline-more", "raw", ], crate_root = "src/lib.rs", @@ -55,7 +52,6 @@ rust_library( version = "0.9.1", # buildifier: leave-alone deps = [ - "@raze__ahash__0_4_7//:ahash", ], ) diff --git a/cargo/remote/BUILD.hashlink-0.6.0.bazel b/cargo/remote/BUILD.hashlink-0.7.0.bazel similarity index 94% rename from cargo/remote/BUILD.hashlink-0.6.0.bazel rename to cargo/remote/BUILD.hashlink-0.7.0.bazel index 70bb13323..b3f103af8 100644 --- a/cargo/remote/BUILD.hashlink-0.6.0.bazel +++ b/cargo/remote/BUILD.hashlink-0.7.0.bazel @@ -46,10 +46,10 @@ rust_library( "cargo-raze", "manual", ], - version = "0.6.0", + version = "0.7.0", # buildifier: leave-alone deps = [ - "@raze__hashbrown__0_9_1//:hashbrown", + "@raze__hashbrown__0_11_2//:hashbrown", ], ) diff --git a/cargo/remote/BUILD.libsqlite3-sys-0.20.1.bazel b/cargo/remote/BUILD.libsqlite3-sys-0.22.2.bazel similarity index 98% rename from cargo/remote/BUILD.libsqlite3-sys-0.20.1.bazel rename to cargo/remote/BUILD.libsqlite3-sys-0.22.2.bazel index a27369d3d..e13c906df 100644 --- a/cargo/remote/BUILD.libsqlite3-sys-0.20.1.bazel +++ b/cargo/remote/BUILD.libsqlite3-sys-0.22.2.bazel @@ -63,7 +63,7 @@ cargo_build_script( "cargo-raze", "manual", ], - version = "0.20.1", + version = "0.22.2", visibility = ["//visibility:private"], deps = [ "@raze__cc__1_0_68//:cc", @@ -106,7 +106,7 @@ rust_library( "cargo-raze", "manual", ], - version = "0.20.1", + version = "0.22.2", # buildifier: leave-alone deps = [ ":libsqlite3_sys_build_script", diff --git a/cargo/remote/BUILD.once_cell-1.8.0.bazel b/cargo/remote/BUILD.once_cell-1.8.0.bazel index 531038f72..eb726f013 100644 --- a/cargo/remote/BUILD.once_cell-1.8.0.bazel +++ b/cargo/remote/BUILD.once_cell-1.8.0.bazel @@ -52,6 +52,7 @@ rust_library( "default", "race", "std", + "unstable", ], crate_root = "src/lib.rs", crate_type = "lib", diff --git a/cargo/remote/BUILD.rusqlite-0.24.2.bazel b/cargo/remote/BUILD.rusqlite-0.25.3.bazel similarity index 92% rename from cargo/remote/BUILD.rusqlite-0.24.2.bazel rename to cargo/remote/BUILD.rusqlite-0.25.3.bazel index cc28f3cdb..6d42a8e4d 100644 --- a/cargo/remote/BUILD.rusqlite-0.24.2.bazel +++ b/cargo/remote/BUILD.rusqlite-0.25.3.bazel @@ -55,14 +55,14 @@ rust_library( "cargo-raze", "manual", ], - version = "0.24.2", + version = "0.25.3", # buildifier: leave-alone deps = [ "@raze__bitflags__1_2_1//:bitflags", "@raze__fallible_iterator__0_2_0//:fallible_iterator", "@raze__fallible_streaming_iterator__0_1_9//:fallible_streaming_iterator", - "@raze__hashlink__0_6_0//:hashlink", - "@raze__libsqlite3_sys__0_20_1//:libsqlite3_sys", + "@raze__hashlink__0_7_0//:hashlink", + "@raze__libsqlite3_sys__0_22_2//:libsqlite3_sys", "@raze__memchr__2_4_0//:memchr", "@raze__smallvec__1_6_1//:smallvec", ], diff --git a/rslib/Cargo.toml b/rslib/Cargo.toml index 074e3fdea..ab6b4ef7b 100644 --- a/rslib/Cargo.toml +++ b/rslib/Cargo.toml @@ -37,7 +37,7 @@ slog-term = "=2.6.0" anki_i18n = { path="i18n" } askama = "0.10.5" -async-compression = { version="0.3.8", features=["tokio", "gzip"] } +async-compression = { version = "0.3.8", features = ["tokio", "gzip"] } blake3 = "0.3.8" bytes = "1.0.1" chrono = "0.4.19" @@ -69,7 +69,7 @@ reqwest = { git="https://github.com/ankitects/reqwest.git", rev="7591444614de02b "rustls-tls-webpki-roots", "rustls-tls-native-roots", ] } -rusqlite = { version="0.24.1", features=["trace", "functions", "collation", "bundled"] } +rusqlite = { version = "0.25.3", features = ["trace", "functions", "collation", "bundled"] } scopeguard = "1.1.0" serde = "1.0.126" serde_derive = "1.0.126" @@ -78,18 +78,18 @@ serde_repr = "0.1.7" serde_tuple = "0.5.0" serde-aux = "2.2.0" sha1 = "0.6.0" -slog = { version="2.7.0", features=["max_level_trace", "release_max_level_debug"] } +slog = { version = "2.7.0", features = ["max_level_trace", "release_max_level_debug"] } slog-async = "2.6.0" slog-envlogger = "2.2.0" tempfile = "3.2.0" -tokio = { version="1.7.1", features=["fs", "rt-multi-thread"] } -unic-langid = { version="0.9.0", features=["macros"] } +tokio = { version = "1.7.1", features = ["fs", "rt-multi-thread"] } +unic-langid = { version = "0.9.0", features = ["macros"] } unicode-normalization = "0.1.19" utime = "0.3.1" -zip = { version="0.5.13", default-features=false, features=["deflate", "time"] } +zip = { version = "0.5.13", default-features = false, features = ["deflate", "time"] } async-trait = "0.1.50" ammonia = "3.1.1" pulldown-cmark = "0.8.0" fnv = "1.0.7" -strum = { version="0.21.0", features=["derive"] } -tokio-util = { version="0.6.7", features=["io"] } +strum = { version = "0.21.0", features = ["derive"] } +tokio-util = { version = "0.6.7", features = ["io"] } diff --git a/rslib/cargo/BUILD.bazel b/rslib/cargo/BUILD.bazel index dbbaf9678..38ec40354 100644 --- a/rslib/cargo/BUILD.bazel +++ b/rslib/cargo/BUILD.bazel @@ -293,7 +293,7 @@ alias( alias( name = "rusqlite", - actual = "@raze__rusqlite__0_24_2//:rusqlite", + actual = "@raze__rusqlite__0_25_3//:rusqlite", tags = [ "cargo-raze", "manual", diff --git a/rslib/src/backend/dbproxy.rs b/rslib/src/backend/dbproxy.rs index 3a798443b..f43a0c517 100644 --- a/rslib/src/backend/dbproxy.rs +++ b/rslib/src/backend/dbproxy.rs @@ -2,6 +2,7 @@ // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html use rusqlite::{ + params_from_iter, types::{FromSql, FromSqlError, ToSql, ToSqlOutput, ValueRef}, OptionalExtension, }; @@ -132,7 +133,7 @@ pub(super) fn db_query_row(ctx: &SqliteStorage, sql: &str, args: &[SqlValue]) -> let columns = stmt.column_count(); let row = stmt - .query_row(args, |row| { + .query_row(params_from_iter(args), |row| { let mut orow = Vec::with_capacity(columns); for i in 0..columns { let v: SqlValue = row.get(i)?; @@ -156,7 +157,7 @@ pub(super) fn db_query(ctx: &SqliteStorage, sql: &str, args: &[SqlValue]) -> Res let columns = stmt.column_count(); let res: std::result::Result>, rusqlite::Error> = stmt - .query_map(args, |row| { + .query_map(params_from_iter(args), |row| { let mut orow = Vec::with_capacity(columns); for i in 0..columns { let v: SqlValue = row.get(i)?; @@ -177,7 +178,7 @@ pub(super) fn db_execute_many( let mut stmt = ctx.db.prepare_cached(sql)?; for params in args { - stmt.execute(params)?; + stmt.execute(params_from_iter(params))?; } Ok(DbResult::None) diff --git a/rslib/src/dbcheck.rs b/rslib/src/dbcheck.rs index 173c7473a..92d50e22e 100644 --- a/rslib/src/dbcheck.rs +++ b/rslib/src/dbcheck.rs @@ -587,7 +587,7 @@ mod test { col.storage .db .prepare("delete from decks where id != ? and id != 1")? - .execute(&[deck.id])?; + .execute([deck.id])?; assert_eq!(col.storage.get_all_deck_names()?.len(), 2); let out = col.check_database(progress_fn)?; diff --git a/rslib/src/media/database.rs b/rslib/src/media/database.rs index a9fbcb24b..858035c33 100644 --- a/rslib/src/media/database.rs +++ b/rslib/src/media/database.rs @@ -3,7 +3,7 @@ use std::{collections::HashMap, path::Path}; -use rusqlite::{params, Connection, OptionalExtension, Row, Statement, NO_PARAMS}; +use rusqlite::{params, Connection, OptionalExtension, Row, Statement}; use crate::error::Result; @@ -31,12 +31,12 @@ fn initial_db_setup(db: &mut Connection) -> Result<()> { // tables already exist? if db .prepare("select null from sqlite_master where type = 'table' and name = 'media'")? - .exists(NO_PARAMS)? + .exists([])? { return Ok(()); } - db.execute("begin", NO_PARAMS)?; + db.execute("begin", [])?; db.execute_batch(include_str!("schema.sql"))?; db.execute_batch("commit; vacuum; analyze;")?; @@ -172,7 +172,7 @@ delete from media where fname=?" pub(super) fn get_meta(&mut self) -> Result { let mut stmt = self.db.prepare("select dirMod, lastUsn from meta")?; - stmt.query_row(NO_PARAMS, |row| { + stmt.query_row([], |row| { Ok(MediaDatabaseMetadata { folder_mtime: row.get(0)?, last_sync_usn: row.get(1)?, @@ -192,7 +192,7 @@ delete from media where fname=?" self.db .query_row( "select count(*) from media where csum is not null", - NO_PARAMS, + [], |row| row.get(0), ) .map_err(Into::into) @@ -204,7 +204,7 @@ delete from media where fname=?" .prepare("select fname from media where dirty=1 limit ?")?; let results: Result> = stmt .query_and_then(params![max_entries], |row| { - let fname = row.get_raw(0).as_str()?; + let fname = row.get_ref_unwrap(0).as_str()?; Ok(self.get_entry(fname)?.unwrap()) })? .collect(); @@ -217,7 +217,7 @@ delete from media where fname=?" .db .prepare("select fname, mtime from media where csum is not null")?; let map: std::result::Result, rusqlite::Error> = stmt - .query_map(NO_PARAMS, |row| Ok((row.get(0)?, row.get(1)?)))? + .query_map([], |row| Ok((row.get(0)?, row.get(1)?)))? .collect(); Ok(map?) } diff --git a/rslib/src/search/mod.rs b/rslib/src/search/mod.rs index 73e405a3c..7f85bc841 100644 --- a/rslib/src/search/mod.rs +++ b/rslib/src/search/mod.rs @@ -10,7 +10,7 @@ use std::borrow::Cow; pub use parser::{ parse as parse_search, Node, PropertyKind, RatingKind, SearchNode, StateKind, TemplateKind, }; -use rusqlite::types::FromSql; +use rusqlite::{params_from_iter, types::FromSql}; use sqlwriter::{RequiredTable, SqlWriter}; pub use writer::{concatenate_searches, replace_search_node, write_nodes, BoolSeparator}; @@ -158,7 +158,7 @@ impl Collection { let mut stmt = self.storage.db.prepare(&sql)?; let ids: Vec<_> = stmt - .query_map(&args, |row| row.get(0))? + .query_map(params_from_iter(args.iter()), |row| row.get(0))? .collect::>()?; Ok(ids) @@ -210,7 +210,7 @@ impl Collection { self.storage .db .prepare(&sql)? - .execute(&args) + .execute(params_from_iter(args)) .map_err(Into::into) } } diff --git a/rslib/src/storage/card/mod.rs b/rslib/src/storage/card/mod.rs index f5eb9ef6f..80d53ee92 100644 --- a/rslib/src/storage/card/mod.rs +++ b/rslib/src/storage/card/mod.rs @@ -8,7 +8,7 @@ use std::{collections::HashSet, convert::TryFrom, result}; use rusqlite::{ named_params, params, types::{FromSql, FromSqlError, ValueRef}, - OptionalExtension, Row, NO_PARAMS, + OptionalExtension, Row, }; use super::ids_to_string; @@ -160,7 +160,7 @@ impl super::SqliteStorage { pub(crate) fn remove_card(&self, cid: CardId) -> Result<()> { self.db .prepare_cached("delete from cards where id = ?")? - .execute(&[cid])?; + .execute([cid])?; Ok(()) } @@ -292,21 +292,21 @@ impl super::SqliteStorage { pub(crate) fn delete_orphaned_cards(&self) -> Result { self.db .prepare("delete from cards where nid not in (select id from notes)")? - .execute(NO_PARAMS) + .execute([]) .map_err(Into::into) } pub(crate) fn all_filtered_cards_by_deck(&self) -> Result> { self.db .prepare("select id, did from cards where odid > 0")? - .query_and_then(NO_PARAMS, |r| -> Result<_> { Ok((r.get(0)?, r.get(1)?)) })? + .query_and_then([], |r| -> Result<_> { Ok((r.get(0)?, r.get(1)?)) })? .collect() } pub(crate) fn max_new_card_position(&self) -> Result { self.db .prepare("select max(due)+1 from cards where type=0")? - .query_row(NO_PARAMS, |r| r.get(0)) + .query_row([], |r| r.get(0)) .map_err(Into::into) } @@ -324,14 +324,14 @@ impl super::SqliteStorage { pub(crate) fn clear_pending_card_usns(&self) -> Result<()> { self.db .prepare("update cards set usn = 0 where usn = -1")? - .execute(NO_PARAMS)?; + .execute([])?; Ok(()) } pub(crate) fn have_at_least_one_card(&self) -> Result { self.db .prepare_cached("select null from cards")? - .query(NO_PARAMS)? + .query([])? .next() .map(|o| o.is_some()) .map_err(Into::into) @@ -340,7 +340,7 @@ impl super::SqliteStorage { pub(crate) fn all_cards_of_note(&self, nid: NoteId) -> Result> { self.db .prepare_cached(concat!(include_str!("get_card.sql"), " where nid = ?"))? - .query_and_then(&[nid], |r| row_to_card(r).map_err(Into::into))? + .query_and_then([nid], |r| row_to_card(r).map_err(Into::into))? .collect() } @@ -355,7 +355,7 @@ impl super::SqliteStorage { include_str!("get_card.sql"), " where nid in (select nid from search_nids) and ord > ?" ))? - .query_and_then(&[ordinal as i64], |r| row_to_card(r).map_err(Into::into))? + .query_and_then([ordinal as i64], |r| row_to_card(r).map_err(Into::into))? .collect() } @@ -365,7 +365,7 @@ impl super::SqliteStorage { ) -> Result> { self.db .prepare_cached("select id from cards where nid = ? order by ord")? - .query_and_then(&[nid], |r| Ok(CardId(r.get(0)?)))? + .query_and_then([nid], |r| Ok(CardId(r.get(0)?)))? .collect() } @@ -375,7 +375,7 @@ impl super::SqliteStorage { .prepare_cached("select id from cards where nid = ?")?; let mut cids = vec![]; for nid in nids { - for cid in stmt.query_map(&[nid], |row| row.get(0))? { + for cid in stmt.query_map([nid], |row| row.get(0))? { cids.push(cid?); } } @@ -411,7 +411,7 @@ impl super::SqliteStorage { let mut nids = HashSet::new(); for cid in cids { if let Some(nid) = stmt - .query_row(&[cid], |r| r.get::<_, NoteId>(0)) + .query_row([cid], |r| r.get::<_, NoteId>(0)) .optional()? { nids.insert(nid); @@ -426,7 +426,7 @@ impl super::SqliteStorage { include_str!("get_card.sql"), " where id in (select cid from search_cids)" ))? - .query_and_then(NO_PARAMS, |r| row_to_card(r).map_err(Into::into))? + .query_and_then([], |r| row_to_card(r).map_err(Into::into))? .collect() } @@ -436,7 +436,7 @@ impl super::SqliteStorage { include_str!("get_card.sql"), ", search_cids where cards.id = search_cids.cid order by search_cids.rowid" ))? - .query_and_then(NO_PARAMS, |r| row_to_card(r).map_err(Into::into))? + .query_and_then([], |r| row_to_card(r).map_err(Into::into))? .collect() } @@ -449,7 +449,7 @@ impl super::SqliteStorage { include_str!("get_card.sql"), " where id in (select cid from search_cids)" ))?; - let mut rows = stmt.query(NO_PARAMS)?; + let mut rows = stmt.query([])?; while let Some(row) = rows.next()? { let card = row_to_card(row)?; func(card)? @@ -464,7 +464,7 @@ impl super::SqliteStorage { self.update_active_decks(current)?; self.db .prepare(include_str!("congrats.sql"))? - .query_and_then_named( + .query_and_then( named_params! { ":review_queue": CardQueue::Review as i8, ":day_learn_queue": CardQueue::DayLearn as i8, @@ -493,7 +493,7 @@ impl super::SqliteStorage { self.setup_searched_cards_table()?; self.db .prepare(include_str!("at_or_above_position.sql"))? - .execute(&[start, CardType::New as u32])?; + .execute([start, CardType::New as u32])?; Ok(()) } @@ -510,8 +510,7 @@ impl super::SqliteStorage { } pub(crate) fn clear_searched_cards_table(&self) -> Result<()> { - self.db - .execute("drop table if exists search_cids", NO_PARAMS)?; + self.db.execute("drop table if exists search_cids", [])?; Ok(()) } @@ -532,7 +531,7 @@ impl super::SqliteStorage { .db .prepare_cached("insert into search_cids values (?)")?; for cid in cards { - stmt.execute(&[cid])?; + stmt.execute([cid])?; } Ok(()) diff --git a/rslib/src/storage/collection_timestamps.rs b/rslib/src/storage/collection_timestamps.rs index 68c1d8f18..ce1818527 100644 --- a/rslib/src/storage/collection_timestamps.rs +++ b/rslib/src/storage/collection_timestamps.rs @@ -1,7 +1,7 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -use rusqlite::{params, NO_PARAMS}; +use rusqlite::params; use super::SqliteStorage; use crate::{collection::timestamps::CollectionTimestamps, prelude::*}; @@ -10,7 +10,7 @@ impl SqliteStorage { pub(crate) fn get_collection_timestamps(&self) -> Result { self.db .prepare_cached("select mod, scm, ls from col")? - .query_row(NO_PARAMS, |row| { + .query_row([], |row| { Ok(CollectionTimestamps { collection_change: row.get(0)?, schema_change: row.get(1)?, @@ -23,14 +23,12 @@ impl SqliteStorage { pub(crate) fn set_schema_modified_time(&self, stamp: TimestampMillis) -> Result<()> { self.db .prepare_cached("update col set scm = ?")? - .execute(&[stamp])?; + .execute([stamp])?; Ok(()) } pub(crate) fn set_last_sync(&self, stamp: TimestampMillis) -> Result<()> { - self.db - .prepare("update col set ls = ?")? - .execute(&[stamp])?; + self.db.prepare("update col set ls = ?")?.execute([stamp])?; Ok(()) } @@ -46,14 +44,14 @@ impl SqliteStorage { pub(crate) fn creation_stamp(&self) -> Result { self.db .prepare_cached("select crt from col")? - .query_row(NO_PARAMS, |row| row.get(0)) + .query_row([], |row| row.get(0)) .map_err(Into::into) } pub(crate) fn set_creation_stamp(&self, stamp: TimestampSecs) -> Result<()> { self.db .prepare("update col set crt = ?")? - .execute(&[stamp])?; + .execute([stamp])?; Ok(()) } } diff --git a/rslib/src/storage/config/mod.rs b/rslib/src/storage/config/mod.rs index 2dc75e327..b8884eb83 100644 --- a/rslib/src/storage/config/mod.rs +++ b/rslib/src/storage/config/mod.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; -use rusqlite::{params, NO_PARAMS}; +use rusqlite::params; use serde::de::DeserializeOwned; use serde_json::Value; @@ -21,15 +21,15 @@ impl SqliteStorage { pub(crate) fn remove_config(&self, key: &str) -> Result<()> { self.db .prepare_cached("delete from config where key=?")? - .execute(&[key])?; + .execute([key])?; Ok(()) } pub(crate) fn get_config_value(&self, key: &str) -> Result> { self.db .prepare_cached(include_str!("get.sql"))? - .query_and_then(&[key], |row| { - let blob = row.get_raw(0).as_blob()?; + .query_and_then([key], |row| { + let blob = row.get_ref_unwrap(0).as_blob()?; serde_json::from_slice(blob).map_err(Into::into) })? .next() @@ -40,7 +40,7 @@ impl SqliteStorage { pub(crate) fn get_config_entry(&self, key: &str) -> Result>> { self.db .prepare_cached(include_str!("get_entry.sql"))? - .query_and_then(&[key], |row| { + .query_and_then([key], |row| { Ok(ConfigEntry::boxed( key, row.get(0)?, @@ -66,8 +66,8 @@ impl SqliteStorage { pub(crate) fn get_all_config(&self) -> Result> { self.db .prepare("select key, val from config")? - .query_and_then(NO_PARAMS, |row| { - let val: Value = serde_json::from_slice(row.get_raw(1).as_blob()?)?; + .query_and_then([], |row| { + let val: Value = serde_json::from_slice(row.get_ref_unwrap(1).as_blob()?)?; Ok((row.get::(0)?, val)) })? .collect() @@ -79,7 +79,7 @@ impl SqliteStorage { usn: Usn, mtime: TimestampSecs, ) -> Result<()> { - self.db.execute("delete from config", NO_PARAMS)?; + self.db.execute("delete from config", [])?; for (key, val) in conf.iter() { self.set_config_entry(&ConfigEntry::boxed( key, @@ -94,7 +94,7 @@ impl SqliteStorage { pub(crate) fn clear_config_usns(&self) -> Result<()> { self.db .prepare("update config set usn = 0 where usn != 0")? - .execute(NO_PARAMS)?; + .execute([])?; Ok(()) } @@ -103,9 +103,9 @@ impl SqliteStorage { pub(super) fn upgrade_config_to_schema14(&self) -> Result<()> { let conf = self .db - .query_row_and_then("select conf from col", NO_PARAMS, |row| { + .query_row_and_then("select conf from col", [], |row| { let conf: Result> = - serde_json::from_str(row.get_raw(0).as_str()?).map_err(Into::into); + serde_json::from_str(row.get_ref_unwrap(0).as_str()?).map_err(Into::into); conf })?; self.set_all_config(conf, Usn(0), TimestampSecs(0))?; @@ -117,7 +117,7 @@ impl SqliteStorage { pub(super) fn downgrade_config_from_schema14(&self) -> Result<()> { let allconf = self.get_all_config()?; self.db - .execute("update col set conf=?", &[serde_json::to_string(&allconf)?])?; + .execute("update col set conf=?", [serde_json::to_string(&allconf)?])?; Ok(()) } } diff --git a/rslib/src/storage/deck/mod.rs b/rslib/src/storage/deck/mod.rs index afbf768a7..ceb0094e8 100644 --- a/rslib/src/storage/deck/mod.rs +++ b/rslib/src/storage/deck/mod.rs @@ -7,7 +7,7 @@ use std::{ }; use prost::Message; -use rusqlite::{named_params, params, Row, NO_PARAMS}; +use rusqlite::{named_params, params, Row}; use unicase::UniCase; use super::SqliteStorage; @@ -20,12 +20,12 @@ use crate::{ }; fn row_to_deck(row: &Row) -> Result { - let common = DeckCommon::decode(row.get_raw(4).as_blob()?)?; - let kind = DeckKindContainer::decode(row.get_raw(5).as_blob()?)?; + let common = DeckCommon::decode(row.get_ref_unwrap(4).as_blob()?)?; + let kind = DeckKindContainer::decode(row.get_ref_unwrap(5).as_blob()?)?; let id = row.get(0)?; Ok(Deck { id, - name: NativeDeckName::from_native_str(row.get_raw(1).as_str()?), + name: NativeDeckName::from_native_str(row.get_ref_unwrap(1).as_str()?), mtime_secs: row.get(2)?, usn: row.get(3)?, common, @@ -69,7 +69,7 @@ impl SqliteStorage { pub(crate) fn get_deck(&self, did: DeckId) -> Result> { self.db .prepare_cached(concat!(include_str!("get_deck.sql"), " where id = ?"))? - .query_and_then(&[did], row_to_deck)? + .query_and_then([did], row_to_deck)? .next() .transpose() } @@ -77,14 +77,14 @@ impl SqliteStorage { pub(crate) fn get_all_decks(&self) -> Result> { self.db .prepare(include_str!("get_deck.sql"))? - .query_and_then(NO_PARAMS, row_to_deck)? + .query_and_then([], row_to_deck)? .collect() } pub(crate) fn get_decks_map(&self) -> Result> { self.db .prepare(include_str!("get_deck.sql"))? - .query_and_then(NO_PARAMS, row_to_deck)? + .query_and_then([], row_to_deck)? .map(|res| res.map(|d| (d.id, d))) .collect() } @@ -93,8 +93,11 @@ impl SqliteStorage { pub(crate) fn get_all_deck_names(&self) -> Result> { self.db .prepare("select id, name from decks order by name")? - .query_and_then(NO_PARAMS, |row| { - Ok((row.get(0)?, row.get_raw(1).as_str()?.replace('\x1f', "::"))) + .query_and_then([], |row| { + Ok(( + row.get(0)?, + row.get_ref_unwrap(1).as_str()?.replace('\x1f', "::"), + )) })? .collect() } @@ -102,7 +105,7 @@ impl SqliteStorage { pub(crate) fn get_deck_id(&self, machine_name: &str) -> Result> { self.db .prepare("select id from decks where name = ?")? - .query_and_then(&[machine_name], |row| row.get(0))? + .query_and_then([machine_name], |row| row.get(0))? .next() .transpose() .map_err(Into::into) @@ -114,7 +117,7 @@ impl SqliteStorage { deck.id.0 = self .db .prepare(include_str!("alloc_id.sql"))? - .query_row(&[TimestampMillis::now()], |r| r.get(0))?; + .query_row([TimestampMillis::now()], |r| r.get(0))?; self.add_or_update_deck_with_existing_id(deck) .map_err(|err| { // restore id of 0 @@ -184,14 +187,14 @@ impl SqliteStorage { pub(crate) fn remove_deck(&self, did: DeckId) -> Result<()> { self.db .prepare_cached("delete from decks where id = ?")? - .execute(&[did])?; + .execute([did])?; Ok(()) } pub(crate) fn all_cards_in_single_deck(&self, did: DeckId) -> Result> { self.db .prepare_cached(include_str!("cards_for_deck.sql"))? - .query_and_then(&[did], |r| r.get(0).map_err(Into::into))? + .query_and_then([did], |r| r.get(0).map_err(Into::into))? .collect() } @@ -203,7 +206,7 @@ impl SqliteStorage { include_str!("get_deck.sql"), " where name >= ? and name < ?" ))? - .query_and_then(&[prefix_start, prefix_end], row_to_deck)? + .query_and_then([prefix_start, prefix_end], row_to_deck)? .collect() } @@ -229,7 +232,7 @@ impl SqliteStorage { include_str!("get_deck.sql"), " where name > ? and name < ?" ))? - .query_and_then(&[prefix_start, prefix_end], row_to_deck)?, + .query_and_then([prefix_start, prefix_end], row_to_deck)?, ) .collect() } @@ -303,7 +306,7 @@ impl SqliteStorage { self.db .prepare_cached(sql)? - .query_and_then_named(¶ms, |row| row_to_due_counts(row, v3))? + .query_and_then(&*params, |row| row_to_due_counts(row, v3))? .collect() } @@ -311,14 +314,14 @@ impl SqliteStorage { pub(crate) fn missing_decks(&self) -> Result> { self.db .prepare(include_str!("missing-decks.sql"))? - .query_and_then(NO_PARAMS, |r| r.get(0).map_err(Into::into))? + .query_and_then([], |r| r.get(0).map_err(Into::into))? .collect() } pub(crate) fn deck_is_empty(&self, did: DeckId) -> Result { self.db .prepare_cached("select null from cards where did=?")? - .query(&[did])? + .query([did])? .next() .map(|o| o.is_none()) .map_err(Into::into) @@ -327,7 +330,7 @@ impl SqliteStorage { pub(crate) fn clear_deck_usns(&self) -> Result<()> { self.db .prepare("update decks set usn = 0 where usn != 0")? - .execute(NO_PARAMS)?; + .execute([])?; Ok(()) } @@ -344,7 +347,7 @@ impl SqliteStorage { self.db .prepare_cached(include_str!("update_active.sql"))? - .execute(&[top, prefix_start, prefix_end])?; + .execute([top, prefix_start, prefix_end])?; Ok(()) } @@ -382,7 +385,7 @@ impl SqliteStorage { } self.add_or_update_deck_with_existing_id(&deck)?; } - self.db.execute("update col set decks = ''", NO_PARAMS)?; + self.db.execute("update col set decks = ''", [])?; Ok(()) } @@ -394,9 +397,9 @@ impl SqliteStorage { fn get_schema11_decks(&self) -> Result> { let mut stmt = self.db.prepare("select decks from col")?; let decks = stmt - .query_and_then(NO_PARAMS, |row| -> Result> { + .query_and_then([], |row| -> Result> { let v: HashMap = - serde_json::from_str(row.get_raw(0).as_str()?)?; + serde_json::from_str(row.get_ref_unwrap(0).as_str()?)?; Ok(v) })? .next() @@ -406,7 +409,7 @@ impl SqliteStorage { pub(crate) fn set_schema11_decks(&self, decks: HashMap) -> Result<()> { let json = serde_json::to_string(&decks)?; - self.db.execute("update col set decks = ?", &[json])?; + self.db.execute("update col set decks = ?", [json])?; Ok(()) } } diff --git a/rslib/src/storage/deckconfig/mod.rs b/rslib/src/storage/deckconfig/mod.rs index 66d61f43c..aeffc0151 100644 --- a/rslib/src/storage/deckconfig/mod.rs +++ b/rslib/src/storage/deckconfig/mod.rs @@ -4,7 +4,7 @@ use std::collections::HashMap; use prost::Message; -use rusqlite::{params, Row, NO_PARAMS}; +use rusqlite::{params, Row}; use serde_json::Value; use super::SqliteStorage; @@ -14,7 +14,7 @@ use crate::{ }; fn row_to_deckconf(row: &Row) -> Result { - let config = DeckConfigInner::decode(row.get_raw(4).as_blob()?)?; + let config = DeckConfigInner::decode(row.get_ref_unwrap(4).as_blob()?)?; Ok(DeckConfig { id: row.get(0)?, name: row.get(1)?, @@ -28,14 +28,14 @@ impl SqliteStorage { pub(crate) fn all_deck_config(&self) -> Result> { self.db .prepare_cached(include_str!("get.sql"))? - .query_and_then(NO_PARAMS, row_to_deckconf)? + .query_and_then([], row_to_deckconf)? .collect() } pub(crate) fn get_deck_config_map(&self) -> Result> { self.db .prepare_cached(include_str!("get.sql"))? - .query_and_then(NO_PARAMS, row_to_deckconf)? + .query_and_then([], row_to_deckconf)? .map(|res| res.map(|d| (d.id, d))) .collect() } @@ -115,7 +115,7 @@ impl SqliteStorage { pub(crate) fn clear_deck_conf_usns(&self) -> Result<()> { self.db .prepare("update deck_config set usn = 0 where usn != 0")? - .execute(NO_PARAMS)?; + .execute([])?; Ok(()) } @@ -150,8 +150,8 @@ impl SqliteStorage { pub(super) fn upgrade_deck_conf_to_schema14(&self) -> Result<()> { let conf: HashMap = self.db - .query_row_and_then("select dconf from col", NO_PARAMS, |row| -> Result<_> { - let text = row.get_raw(0).as_str()?; + .query_row_and_then("select dconf from col", [], |row| -> Result<_> { + let text = row.get_ref_unwrap(0).as_str()?; // try direct parse serde_json::from_str(text) .or_else(|_| { @@ -177,8 +177,8 @@ impl SqliteStorage { fn all_deck_config_schema14(&self) -> Result> { self.db .prepare_cached("select config from deck_config")? - .query_and_then(NO_PARAMS, |row| -> Result<_> { - Ok(serde_json::from_slice(row.get_raw(0).as_blob()?)?) + .query_and_then([], |row| -> Result<_> { + Ok(serde_json::from_slice(row.get_ref_unwrap(0).as_blob()?)?) })? .collect() } diff --git a/rslib/src/storage/graves/mod.rs b/rslib/src/storage/graves/mod.rs index 3fd32fa5d..a28d20f04 100644 --- a/rslib/src/storage/graves/mod.rs +++ b/rslib/src/storage/graves/mod.rs @@ -4,7 +4,7 @@ use std::convert::TryFrom; use num_enum::TryFromPrimitive; -use rusqlite::{params, NO_PARAMS}; +use rusqlite::params; use super::SqliteStorage; use crate::{ @@ -26,7 +26,7 @@ enum GraveKind { impl SqliteStorage { pub(crate) fn clear_all_graves(&self) -> Result<()> { - self.db.execute("delete from graves", NO_PARAMS)?; + self.db.execute("delete from graves", [])?; Ok(()) } @@ -59,7 +59,7 @@ impl SqliteStorage { "select oid, type from graves where {}", pending_usn.pending_object_clause() ))?; - let mut rows = stmt.query(&[pending_usn])?; + let mut rows = stmt.query([pending_usn])?; let mut graves = Graves::default(); while let Some(row) = rows.next()? { let oid: i64 = row.get(0)?; @@ -77,7 +77,7 @@ impl SqliteStorage { pub(crate) fn update_pending_grave_usns(&self, new_usn: Usn) -> Result<()> { self.db .prepare("update graves set usn=? where usn=-1")? - .execute(&[new_usn])?; + .execute([new_usn])?; Ok(()) } diff --git a/rslib/src/storage/note/mod.rs b/rslib/src/storage/note/mod.rs index 88bf735d4..df12ae806 100644 --- a/rslib/src/storage/note/mod.rs +++ b/rslib/src/storage/note/mod.rs @@ -3,7 +3,7 @@ use std::collections::HashSet; -use rusqlite::{params, Row, NO_PARAMS}; +use rusqlite::{params, Row}; use crate::{ error::Result, @@ -97,21 +97,21 @@ impl super::SqliteStorage { pub(crate) fn remove_note(&self, nid: NoteId) -> Result<()> { self.db .prepare_cached("delete from notes where id = ?")? - .execute(&[nid])?; + .execute([nid])?; Ok(()) } pub(crate) fn note_is_orphaned(&self, nid: NoteId) -> Result { self.db .prepare_cached(include_str!("is_orphaned.sql"))? - .query_row(&[nid], |r| r.get(0)) + .query_row([nid], |r| r.get(0)) .map_err(Into::into) } pub(crate) fn clear_pending_note_usns(&self) -> Result<()> { self.db .prepare("update notes set usn = 0 where usn = -1")? - .execute(NO_PARAMS)?; + .execute([])?; Ok(()) } @@ -119,7 +119,7 @@ impl super::SqliteStorage { self.db .query_row( "select cast(flds as blob) from notes where id=?", - &[nid], + [nid], |row| { let fixed_flds: Vec = row.get(0)?; let fixed_str = String::from_utf8_lossy(&fixed_flds); @@ -151,7 +151,7 @@ impl super::SqliteStorage { pub(crate) fn total_notes(&self) -> Result { self.db .prepare("select count() from notes")? - .query_row(NO_PARAMS, |r| r.get(0)) + .query_row([], |r| r.get(0)) .map_err(Into::into) } @@ -159,10 +159,10 @@ impl super::SqliteStorage { let mut stmt = self .db .prepare_cached("select tags from notes where tags != ''")?; - let mut query = stmt.query(NO_PARAMS)?; + let mut query = stmt.query([])?; let mut seen: HashSet = HashSet::new(); while let Some(rows) = query.next()? { - for tag in split_tags(rows.get_raw(0).as_str()?) { + for tag in split_tags(rows.get_ref_unwrap(0).as_str()?) { if !seen.contains(tag) { seen.insert(tag.to_string()); } @@ -174,7 +174,7 @@ impl super::SqliteStorage { pub(crate) fn get_note_tags_by_id(&mut self, note_id: NoteId) -> Result> { self.db .prepare_cached(&format!("{} where id = ?", include_str!("get_tags.sql")))? - .query_and_then(&[note_id], row_to_note_tags)? + .query_and_then([note_id], row_to_note_tags)? .next() .transpose() } @@ -190,7 +190,7 @@ impl super::SqliteStorage { "{} where id in (select nid from search_nids)", include_str!("get_tags.sql") ))? - .query_and_then(NO_PARAMS, row_to_note_tags)? + .query_and_then([], row_to_note_tags)? .collect::>>()?; self.clear_searched_notes_table()?; Ok(out) @@ -201,10 +201,10 @@ impl super::SqliteStorage { F: Fn(&str) -> bool, { let mut query_stmt = self.db.prepare_cached(include_str!("get_tags.sql"))?; - let mut rows = query_stmt.query(NO_PARAMS)?; + let mut rows = query_stmt.query([])?; let mut output = vec![]; while let Some(row) = rows.next()? { - let tags = row.get_raw(3).as_str()?; + let tags = row.get_ref_unwrap(3).as_str()?; if want(tags) { output.push(row_to_note_tags(row)?) } @@ -226,8 +226,7 @@ impl super::SqliteStorage { } pub(crate) fn clear_searched_notes_table(&self) -> Result<()> { - self.db - .execute("drop table if exists search_nids", NO_PARAMS)?; + self.db.execute("drop table if exists search_nids", [])?; Ok(()) } @@ -241,7 +240,7 @@ impl super::SqliteStorage { .db .prepare_cached("insert into search_nids values (?)")?; for nid in notes { - stmt.execute(&[nid])?; + stmt.execute([nid])?; } Ok(()) @@ -255,10 +254,10 @@ fn row_to_note(row: &Row) -> Result { row.get(2)?, row.get(3)?, row.get(4)?, - split_tags(row.get_raw(5).as_str()?) + split_tags(row.get_ref_unwrap(5).as_str()?) .map(Into::into) .collect(), - split_fields(row.get_raw(6).as_str()?), + split_fields(row.get_ref_unwrap(6).as_str()?), Some(row.get(7)?), Some(row.get(8).unwrap_or_default()), )) diff --git a/rslib/src/storage/notetype/mod.rs b/rslib/src/storage/notetype/mod.rs index 558ded5b5..94b551a0a 100644 --- a/rslib/src/storage/notetype/mod.rs +++ b/rslib/src/storage/notetype/mod.rs @@ -4,7 +4,7 @@ use std::collections::{HashMap, HashSet}; use prost::Message; -use rusqlite::{params, OptionalExtension, Row, NO_PARAMS}; +use rusqlite::{params, OptionalExtension, Row}; use unicase::UniCase; use super::{ids_to_string, SqliteStorage}; @@ -19,7 +19,7 @@ use crate::{ }; fn row_to_notetype_core(row: &Row) -> Result { - let config = NotetypeConfig::decode(row.get_raw(4).as_blob()?)?; + let config = NotetypeConfig::decode(row.get_ref_unwrap(4).as_blob()?)?; Ok(Notetype { id: row.get(0)?, name: row.get(1)?, @@ -56,7 +56,7 @@ impl SqliteStorage { fn get_notetype_core(&self, ntid: NotetypeId) -> Result> { self.db .prepare_cached(concat!(include_str!("get_notetype.sql"), " where id = ?"))? - .query_and_then(&[ntid], row_to_notetype_core)? + .query_and_then([ntid], row_to_notetype_core)? .next() .transpose() } @@ -64,8 +64,8 @@ impl SqliteStorage { fn get_notetype_fields(&self, ntid: NotetypeId) -> Result> { self.db .prepare_cached(include_str!("get_fields.sql"))? - .query_and_then(&[ntid], |row| { - let config = NoteFieldConfig::decode(row.get_raw(2).as_blob()?)?; + .query_and_then([ntid], |row| { + let config = NoteFieldConfig::decode(row.get_ref_unwrap(2).as_blob()?)?; Ok(NoteField { ord: Some(row.get(0)?), name: row.get(1)?, @@ -78,8 +78,8 @@ impl SqliteStorage { fn get_notetype_templates(&self, ntid: NotetypeId) -> Result> { self.db .prepare_cached(include_str!("get_templates.sql"))? - .query_and_then(&[ntid], |row| { - let config = CardTemplateConfig::decode(row.get_raw(4).as_blob()?)?; + .query_and_then([ntid], |row| { + let config = CardTemplateConfig::decode(row.get_ref_unwrap(4).as_blob()?)?; Ok(CardTemplate { ord: row.get(0)?, name: row.get(1)?, @@ -102,7 +102,7 @@ impl SqliteStorage { pub fn get_all_notetype_names(&self) -> Result> { self.db .prepare_cached(include_str!("get_notetype_names.sql"))? - .query_and_then(NO_PARAMS, |row| Ok((row.get(0)?, row.get(1)?)))? + .query_and_then([], |row| Ok((row.get(0)?, row.get(1)?)))? .collect() } @@ -110,14 +110,14 @@ impl SqliteStorage { pub fn get_notetype_use_counts(&self) -> Result> { self.db .prepare_cached(include_str!("get_use_counts.sql"))? - .query_and_then(NO_PARAMS, |row| Ok((row.get(0)?, row.get(1)?, row.get(2)?)))? + .query_and_then([], |row| Ok((row.get(0)?, row.get(1)?, row.get(2)?)))? .collect() } fn update_notetype_fields(&self, ntid: NotetypeId, fields: &[NoteField]) -> Result<()> { self.db .prepare_cached("delete from fields where ntid=?")? - .execute(&[ntid])?; + .execute([ntid])?; let mut stmt = self.db.prepare_cached(include_str!("update_fields.sql"))?; for (ord, field) in fields.iter().enumerate() { let mut config_bytes = vec![]; @@ -137,7 +137,7 @@ impl SqliteStorage { sql += ") order by name"; self.db .prepare(&sql)? - .query_and_then(NO_PARAMS, |r| r.get(0).map_err(Into::into))? + .query_and_then([], |r| r.get(0).map_err(Into::into))? .collect() } @@ -150,7 +150,7 @@ impl SqliteStorage { sql += " order by mid, id"; self.db .prepare(&sql)? - .query_and_then(NO_PARAMS, |r| Ok((r.get(0)?, r.get(1)?)))? + .query_and_then([], |r| Ok((r.get(0)?, r.get(1)?)))? .collect() } @@ -158,7 +158,7 @@ impl SqliteStorage { let sql = String::from("select mid, id from notes order by mid, id"); self.db .prepare(&sql)? - .query_and_then(NO_PARAMS, |r| Ok((r.get(0)?, r.get(1)?)))? + .query_and_then([], |r| Ok((r.get(0)?, r.get(1)?)))? .collect() } @@ -169,7 +169,7 @@ impl SqliteStorage { ) -> Result<()> { self.db .prepare_cached("delete from templates where ntid=?")? - .execute(&[ntid])?; + .execute([ntid])?; let mut stmt = self .db .prepare_cached(include_str!("update_templates.sql"))?; @@ -237,13 +237,13 @@ impl SqliteStorage { pub(crate) fn remove_notetype(&self, ntid: NotetypeId) -> Result<()> { self.db .prepare_cached("delete from templates where ntid=?")? - .execute(&[ntid])?; + .execute([ntid])?; self.db .prepare_cached("delete from fields where ntid=?")? - .execute(&[ntid])?; + .execute([ntid])?; self.db .prepare_cached("delete from notetypes where id=?")? - .execute(&[ntid])?; + .execute([ntid])?; Ok(()) } @@ -257,7 +257,7 @@ impl SqliteStorage { include_str!("existing_cards.sql"), " where c.nid in (select id from notes where mid=?)" ))? - .query_and_then(&[ntid], row_to_existing_card)? + .query_and_then([ntid], row_to_existing_card)? .collect() } @@ -270,21 +270,21 @@ impl SqliteStorage { include_str!("existing_cards.sql"), " where c.nid = ?" ))? - .query_and_then(&[nid], row_to_existing_card)? + .query_and_then([nid], row_to_existing_card)? .collect() } pub(crate) fn clear_notetype_usns(&self) -> Result<()> { self.db .prepare("update notetypes set usn = 0 where usn != 0")? - .execute(NO_PARAMS)?; + .execute([])?; Ok(()) } pub(crate) fn highest_card_ordinal_for_notetype(&self, ntid: NotetypeId) -> Result { self.db .prepare(include_str!("highest_card_ord.sql"))? - .query_row(&[ntid], |row| row.get(0)) + .query_row([ntid], |row| row.get(0)) .map_err(Into::into) } @@ -327,7 +327,7 @@ impl SqliteStorage { self.update_notetype_fields(ntid, &nt.fields)?; self.update_notetype_templates(ntid, &nt.templates)?; } - self.db.execute("update col set models = ''", NO_PARAMS)?; + self.db.execute("update col set models = ''", [])?; Ok(()) } @@ -339,14 +339,11 @@ impl SqliteStorage { fn get_schema11_notetypes(&self) -> Result> { let mut stmt = self.db.prepare("select models from col")?; let notetypes = stmt - .query_and_then( - NO_PARAMS, - |row| -> Result> { - let v: HashMap = - serde_json::from_str(row.get_raw(0).as_str()?)?; - Ok(v) - }, - )? + .query_and_then([], |row| -> Result> { + let v: HashMap = + serde_json::from_str(row.get_ref_unwrap(0).as_str()?)?; + Ok(v) + })? .next() .ok_or_else(|| AnkiError::db_error("col table empty", DbErrorKind::MissingEntity))??; Ok(notetypes) @@ -357,7 +354,7 @@ impl SqliteStorage { notetypes: HashMap, ) -> Result<()> { let json = serde_json::to_string(¬etypes)?; - self.db.execute("update col set models = ?", &[json])?; + self.db.execute("update col set models = ?", [json])?; Ok(()) } } diff --git a/rslib/src/storage/revlog/mod.rs b/rslib/src/storage/revlog/mod.rs index 793c289e8..4284b25be 100644 --- a/rslib/src/storage/revlog/mod.rs +++ b/rslib/src/storage/revlog/mod.rs @@ -6,7 +6,7 @@ use std::convert::TryFrom; use rusqlite::{ params, types::{FromSql, FromSqlError, ValueRef}, - Row, NO_PARAMS, + Row, }; use super::SqliteStorage; @@ -50,14 +50,14 @@ impl SqliteStorage { pub(crate) fn fix_revlog_properties(&self) -> Result { self.db .prepare(include_str!("fix_props.sql"))? - .execute(NO_PARAMS) + .execute([]) .map_err(Into::into) } pub(crate) fn clear_pending_revlog_usns(&self) -> Result<()> { self.db .prepare("update revlog set usn = 0 where usn = -1")? - .execute(NO_PARAMS)?; + .execute([])?; Ok(()) } @@ -87,7 +87,7 @@ impl SqliteStorage { pub(crate) fn get_revlog_entry(&self, id: RevlogId) -> Result> { self.db .prepare_cached(concat!(include_str!("get.sql"), " where id=?"))? - .query_and_then(&[id], row_to_revlog_entry)? + .query_and_then([id], row_to_revlog_entry)? .next() .transpose() } @@ -96,14 +96,14 @@ impl SqliteStorage { pub(crate) fn remove_revlog_entry(&self, id: RevlogId) -> Result<()> { self.db .prepare_cached("delete from revlog where id = ?")? - .execute(&[id])?; + .execute([id])?; Ok(()) } pub(crate) fn get_revlog_entries_for_card(&self, cid: CardId) -> Result> { self.db .prepare_cached(concat!(include_str!("get.sql"), " where cid=?"))? - .query_and_then(&[cid], row_to_revlog_entry)? + .query_and_then([cid], row_to_revlog_entry)? .collect() } @@ -116,9 +116,7 @@ impl SqliteStorage { include_str!("get.sql"), " where cid in (select cid from search_cids) and id >= ?" ))? - .query_and_then(&[after.0 * 1000], |r| { - row_to_revlog_entry(r).map(Into::into) - })? + .query_and_then([after.0 * 1000], |r| row_to_revlog_entry(r).map(Into::into))? .collect() } @@ -129,9 +127,7 @@ impl SqliteStorage { ) -> Result> { self.db .prepare_cached(concat!(include_str!("get.sql"), " where id >= ?"))? - .query_and_then(&[after.0 * 1000], |r| { - row_to_revlog_entry(r).map(Into::into) - })? + .query_and_then([after.0 * 1000], |r| row_to_revlog_entry(r).map(Into::into))? .collect() } @@ -139,7 +135,7 @@ impl SqliteStorage { let start = day_cutoff.adding_secs(-86_400).as_millis(); self.db .prepare_cached(include_str!("studied_today.sql"))? - .query_map(&[start.0, RevlogReviewKind::Manual as i64], |row| { + .query_map([start.0, RevlogReviewKind::Manual as i64], |row| { Ok(StudiedToday { cards: row.get(0)?, seconds: row.get(1)?, diff --git a/rslib/src/storage/sqlite.rs b/rslib/src/storage/sqlite.rs index 9d2101a07..31f01525c 100644 --- a/rslib/src/storage/sqlite.rs +++ b/rslib/src/storage/sqlite.rs @@ -5,7 +5,7 @@ use std::{borrow::Cow, cmp::Ordering, hash::Hasher, path::Path, sync::Arc}; use fnv::FnvHasher; use regex::Regex; -use rusqlite::{functions::FunctionFlags, params, Connection, NO_PARAMS}; +use rusqlite::{functions::FunctionFlags, params, Connection}; use unicase::UniCase; use super::upgrades::{SCHEMA_MAX_VERSION, SCHEMA_MIN_VERSION, SCHEMA_STARTING_VERSION}; @@ -135,16 +135,14 @@ fn add_regexp_function(db: &Connection) -> rusqlite::Result<()> { fn schema_version(db: &Connection) -> Result<(bool, u8)> { if !db .prepare("select null from sqlite_master where type = 'table' and name = 'col'")? - .exists(NO_PARAMS)? + .exists([])? { return Ok((true, SCHEMA_STARTING_VERSION)); } Ok(( false, - db.query_row("select ver from col", NO_PARAMS, |r| { - r.get(0).map_err(Into::into) - })?, + db.query_row("select ver from col", [], |r| r.get(0).map_err(Into::into))?, )) } @@ -173,7 +171,7 @@ impl SqliteStorage { let upgrade = ver != SCHEMA_MAX_VERSION; if create || upgrade { - db.execute("begin exclusive", NO_PARAMS)?; + db.execute("begin exclusive", [])?; } if create { @@ -227,22 +225,20 @@ impl SqliteStorage { ////////////////////////////////////// pub(crate) fn begin_trx(&self) -> Result<()> { - self.db - .prepare_cached("begin exclusive")? - .execute(NO_PARAMS)?; + self.db.prepare_cached("begin exclusive")?.execute([])?; Ok(()) } pub(crate) fn commit_trx(&self) -> Result<()> { if !self.db.is_autocommit() { - self.db.prepare_cached("commit")?.execute(NO_PARAMS)?; + self.db.prepare_cached("commit")?.execute([])?; } Ok(()) } pub(crate) fn rollback_trx(&self) -> Result<()> { if !self.db.is_autocommit() { - self.db.execute("rollback", NO_PARAMS)?; + self.db.execute("rollback", [])?; } Ok(()) } @@ -256,21 +252,17 @@ impl SqliteStorage { // transition these to standard commits. pub(crate) fn begin_rust_trx(&self) -> Result<()> { - self.db - .prepare_cached("savepoint rust")? - .execute(NO_PARAMS)?; + self.db.prepare_cached("savepoint rust")?.execute([])?; Ok(()) } pub(crate) fn commit_rust_trx(&self) -> Result<()> { - self.db.prepare_cached("release rust")?.execute(NO_PARAMS)?; + self.db.prepare_cached("release rust")?.execute([])?; Ok(()) } pub(crate) fn rollback_rust_trx(&self) -> Result<()> { - self.db - .prepare_cached("rollback to rust")? - .execute(NO_PARAMS)?; + self.db.prepare_cached("rollback to rust")?.execute([])?; Ok(()) } @@ -296,8 +288,6 @@ impl SqliteStorage { #[cfg(test)] pub(crate) fn db_scalar(&self, sql: &str) -> Result { - self.db - .query_row(sql, NO_PARAMS, |r| r.get(0)) - .map_err(Into::into) + self.db.query_row(sql, [], |r| r.get(0)).map_err(Into::into) } } diff --git a/rslib/src/storage/sync.rs b/rslib/src/storage/sync.rs index 5312267b8..c9bc17247 100644 --- a/rslib/src/storage/sync.rs +++ b/rslib/src/storage/sync.rs @@ -3,7 +3,7 @@ use std::path::Path; -use rusqlite::{params, types::FromSql, Connection, ToSql, NO_PARAMS}; +use rusqlite::{params, types::FromSql, Connection, ToSql}; use super::*; use crate::prelude::*; @@ -14,7 +14,7 @@ impl SqliteStorage { Ok(Usn(self .db .prepare_cached("select usn from col")? - .query_row(NO_PARAMS, |row| row.get(0))?)) + .query_row([], |row| row.get(0))?)) } else { Ok(Usn(-1)) } @@ -23,14 +23,14 @@ impl SqliteStorage { pub(crate) fn set_usn(&self, usn: Usn) -> Result<()> { self.db .prepare_cached("update col set usn = ?")? - .execute(&[usn])?; + .execute([usn])?; Ok(()) } pub(crate) fn increment_usn(&self) -> Result<()> { self.db .prepare_cached("update col set usn = usn + 1")? - .execute(NO_PARAMS)?; + .execute([])?; Ok(()) } @@ -41,7 +41,7 @@ impl SqliteStorage { table, usn.pending_object_clause() ))? - .query_and_then(&[usn], |r| r.get(0).map_err(Into::into))? + .query_and_then([usn], |r| r.get(0).map_err(Into::into))? .collect() } diff --git a/rslib/src/storage/sync_check.rs b/rslib/src/storage/sync_check.rs index 2294e7b91..d52d679e6 100644 --- a/rslib/src/storage/sync_check.rs +++ b/rslib/src/storage/sync_check.rs @@ -1,8 +1,6 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -use rusqlite::NO_PARAMS; - use super::*; use crate::{ error::SyncErrorKind, @@ -15,16 +13,14 @@ impl SqliteStorage { Ok(self .db .prepare(&format!("select null from {} where usn=-1", table))? - .query(NO_PARAMS)? + .query([])? .next()? .is_some()) } fn table_count(&self, table: &str) -> Result { self.db - .query_row(&format!("select count() from {}", table), NO_PARAMS, |r| { - r.get(0) - }) + .query_row(&format!("select count() from {}", table), [], |r| r.get(0)) .map_err(Into::into) } diff --git a/rslib/src/storage/tag/mod.rs b/rslib/src/storage/tag/mod.rs index 1a452c4dd..3686bfce7 100644 --- a/rslib/src/storage/tag/mod.rs +++ b/rslib/src/storage/tag/mod.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; -use rusqlite::{params, Row, NO_PARAMS}; +use rusqlite::{params, Row}; use super::SqliteStorage; use crate::{error::Result, tags::Tag, types::Usn}; @@ -21,14 +21,14 @@ impl SqliteStorage { pub(crate) fn all_tags(&self) -> Result> { self.db .prepare_cached(include_str!("get.sql"))? - .query_and_then(NO_PARAMS, row_to_tag)? + .query_and_then([], row_to_tag)? .collect() } pub(crate) fn expanded_tags(&self) -> Result> { self.db .prepare_cached("select tag from tags where collapsed = false")? - .query_and_then(NO_PARAMS, |r| r.get::<_, String>(0).map_err(Into::into))? + .query_and_then([], |r| r.get::<_, String>(0).map_err(Into::into))? .collect::>>() } @@ -37,7 +37,7 @@ impl SqliteStorage { .db .prepare_cached("update tags set collapsed = false where tag = ?")?; for tag in tags { - stmt.execute(&[tag])?; + stmt.execute([tag])?; } Ok(()) } @@ -45,7 +45,7 @@ impl SqliteStorage { pub(crate) fn get_tag(&self, name: &str) -> Result> { self.db .prepare_cached(&format!("{} where tag = ?", include_str!("get.sql")))? - .query_and_then(&[name], row_to_tag)? + .query_and_then([name], row_to_tag)? .next() .transpose() } @@ -71,10 +71,10 @@ impl SqliteStorage { F: Fn(&str) -> bool, { let mut query_stmt = self.db.prepare_cached(include_str!("get.sql"))?; - let mut rows = query_stmt.query(NO_PARAMS)?; + let mut rows = query_stmt.query([])?; let mut output = vec![]; while let Some(row) = rows.next()? { - let tag = row.get_raw(0).as_str()?; + let tag = row.get_ref_unwrap(0).as_str()?; if want(tag) { output.push(Tag { name: tag.to_owned(), @@ -89,7 +89,7 @@ impl SqliteStorage { pub(crate) fn remove_single_tag(&self, tag: &str) -> Result<()> { self.db .prepare_cached("delete from tags where tag = ?")? - .execute(&[tag])?; + .execute([tag])?; Ok(()) } @@ -102,13 +102,13 @@ impl SqliteStorage { } pub(crate) fn clear_all_tags(&self) -> Result<()> { - self.db.execute("delete from tags", NO_PARAMS)?; + self.db.execute("delete from tags", [])?; Ok(()) } pub(crate) fn clear_tag_usns(&self) -> Result<()> { self.db - .execute("update tags set usn = 0 where usn != 0", NO_PARAMS)?; + .execute("update tags set usn = 0 where usn != 0", [])?; Ok(()) } @@ -120,7 +120,7 @@ impl SqliteStorage { "select tag from tags where {}", usn.pending_object_clause() ))? - .query_and_then(&[usn], |r| r.get(0).map_err(Into::into))? + .query_and_then([usn], |r| r.get(0).map_err(Into::into))? .collect() } @@ -139,9 +139,9 @@ impl SqliteStorage { pub(super) fn upgrade_tags_to_schema14(&self) -> Result<()> { let tags = self .db - .query_row_and_then("select tags from col", NO_PARAMS, |row| { + .query_row_and_then("select tags from col", [], |row| { let tags: Result> = - serde_json::from_str(row.get_raw(0).as_str()?).map_err(Into::into); + serde_json::from_str(row.get_ref_unwrap(0).as_str()?).map_err(Into::into); tags })?; let mut stmt = self @@ -169,7 +169,7 @@ impl SqliteStorage { let tags = self .db .prepare_cached("select tag, usn from tags")? - .query_and_then(NO_PARAMS, |r| Ok(Tag::new(r.get(0)?, r.get(1)?)))? + .query_and_then([], |r| Ok(Tag::new(r.get(0)?, r.get(1)?)))? .collect::>>()?; self.db .execute_batch(include_str!["../upgrades/schema17_upgrade.sql"])?;