Allow for DIFFs in notifications for simple live queries (#2290)
This commit is contained in:
parent
b98ade2ca8
commit
09dde86e73
5 changed files with 32 additions and 35 deletions
30
Cargo.lock
generated
30
Cargo.lock
generated
|
@ -600,9 +600,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "axum-extra"
|
||||
version = "0.7.4"
|
||||
version = "0.7.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "febf23ab04509bd7672e6abe76bd8277af31b679e89fa5ffc6087dc289a448a3"
|
||||
checksum = "cebbcd90f811f93fc2a993024caecc1e8270d9d1eb9d3359edb3069c2096ea6f"
|
||||
dependencies = [
|
||||
"axum",
|
||||
"axum-core",
|
||||
|
@ -626,9 +626,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "axum-macros"
|
||||
version = "0.3.7"
|
||||
version = "0.3.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2bb524613be645939e280b7279f7b017f98cf7f5ef084ec374df373530e73277"
|
||||
checksum = "cdca6a10ecad987bda04e95606ef85a5417dcaac1a78455242d72e031e2b6b62"
|
||||
dependencies = [
|
||||
"heck 0.4.1",
|
||||
"proc-macro2",
|
||||
|
@ -677,12 +677,6 @@ version = "0.13.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.20.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5"
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.21.2"
|
||||
|
@ -1116,9 +1110,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.3.12"
|
||||
version = "4.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3eab9e8ceb9afdade1ab3f0fd8dbce5b1b2f468ad653baf10e771781b2b67b73"
|
||||
checksum = "74bb1b4028935821b2d6b439bba2e970bdcf740832732437ead910c632e30d7d"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
|
@ -1127,9 +1121,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.3.12"
|
||||
version = "4.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9f2763db829349bf00cfc06251268865ed4363b93a943174f638daf3ecdba2cd"
|
||||
checksum = "5ae467cbb0111869b765e13882a1dbbd6cb52f58203d8b80c44f667d4dd19843"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
|
@ -4696,7 +4690,7 @@ dependencies = [
|
|||
"axum-server",
|
||||
"base64 0.21.2",
|
||||
"bytes",
|
||||
"clap 4.3.12",
|
||||
"clap 4.3.16",
|
||||
"futures 0.3.28",
|
||||
"futures-util",
|
||||
"glob",
|
||||
|
@ -5344,11 +5338,11 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "tower-http"
|
||||
version = "0.4.1"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a8bd22a874a2d0b70452d5597b12c537331d49060824a95f49f108994f94aa4c"
|
||||
checksum = "7ac8060a61f8758a61562f6fb53ba3cbe1ca906f001df2e53cccddcdbee91e7c"
|
||||
dependencies = [
|
||||
"base64 0.20.0",
|
||||
"base64 0.21.2",
|
||||
"bitflags 2.3.3",
|
||||
"bytes",
|
||||
"futures-core",
|
||||
|
|
14
Cargo.toml
14
Cargo.toml
|
@ -34,13 +34,13 @@ strip = false
|
|||
|
||||
[dependencies]
|
||||
argon2 = "0.5.1"
|
||||
axum = { version = "0.6.18", features = ["tracing", "ws", "headers"] }
|
||||
axum = { version = "0.6.19", features = ["tracing", "ws", "headers"] }
|
||||
axum-client-ip = "0.4.1"
|
||||
axum-extra = { version = "0.7.4", features = ["typed-routing"] }
|
||||
axum-extra = { version = "0.7.5", features = ["typed-routing"] }
|
||||
axum-server = { version = "0.5.1", features = ["tls-rustls"] }
|
||||
base64 = "0.21.2"
|
||||
bytes = "1.4.0"
|
||||
clap = { version = "4.3.12", features = ["env", "derive", "wrap_help", "unicode"] }
|
||||
clap = { version = "4.3.16", features = ["env", "derive", "wrap_help", "unicode"] }
|
||||
futures = "0.3.28"
|
||||
futures-util = "0.3.28"
|
||||
glob = "0.3.1"
|
||||
|
@ -51,13 +51,13 @@ ipnet = "2.8.0"
|
|||
once_cell = "1.18.0"
|
||||
opentelemetry = { version = "0.19", features = ["rt-tokio"] }
|
||||
opentelemetry-otlp = { version = "0.12.0", features = ["metrics"] }
|
||||
pin-project-lite = "0.2.9"
|
||||
pin-project-lite = "0.2.10"
|
||||
rand = "0.8.5"
|
||||
reqwest = { version = "0.11.18", features = ["blocking"] }
|
||||
rustyline = { version = "11.0.0", features = ["derive"] }
|
||||
serde = { version = "1.0.171", features = ["derive"] }
|
||||
serde_cbor = "0.11.2"
|
||||
serde_json = "1.0.102"
|
||||
serde_json = "1.0.103"
|
||||
serde_pack = { version = "1.1.1", package = "rmp-serde" }
|
||||
surrealdb = { path = "lib", features = ["protocol-http", "protocol-ws", "rustls"] }
|
||||
tempfile = "3.6.0"
|
||||
|
@ -65,12 +65,12 @@ thiserror = "1.0.43"
|
|||
tokio = { version = "1.29.1", features = ["macros", "signal"] }
|
||||
tokio-util = { version = "0.7.8", features = ["io"] }
|
||||
tower = "0.4.13"
|
||||
tower-http = { version = "0.4.1", features = ["trace", "sensitive-headers", "auth", "request-id", "util", "catch-panic", "cors", "set-header", "limit", "add-extension"] }
|
||||
tower-http = { version = "0.4.2", features = ["trace", "sensitive-headers", "auth", "request-id", "util", "catch-panic", "cors", "set-header", "limit", "add-extension"] }
|
||||
tracing = "0.1"
|
||||
tracing-opentelemetry = "0.19.0"
|
||||
tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
|
||||
urlencoding = "2.1.2"
|
||||
uuid = { version = "1.4.0", features = ["serde", "js", "v4", "v7"] }
|
||||
uuid = { version = "1.4.1", features = ["serde", "js", "v4", "v7"] }
|
||||
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
nix = "0.26.2"
|
||||
|
|
|
@ -97,9 +97,9 @@ rust-stemmers = "1.2.0"
|
|||
rustls = { version = "0.20.8", optional = true }
|
||||
snap = "1.1.0"
|
||||
scrypt = "0.11.0"
|
||||
semver = { version = "1.0.17", features = ["serde"] }
|
||||
semver = { version = "1.0.18", features = ["serde"] }
|
||||
serde = { version = "1.0.171", features = ["derive"] }
|
||||
serde_json = "1.0.102"
|
||||
serde_json = "1.0.103"
|
||||
sha-1 = "0.10.1"
|
||||
sha2 = "0.10.7"
|
||||
speedb = { version = "0.0.2", optional = true }
|
||||
|
@ -128,7 +128,7 @@ tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
|
|||
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||||
pharos = "0.5.3"
|
||||
tokio = { version = "1.29.1", default-features = false, features = ["rt", "sync"] }
|
||||
uuid = { version = "1.4.0", features = ["serde", "js", "v4", "v7"] }
|
||||
uuid = { version = "1.4.1", features = ["serde", "js", "v4", "v7"] }
|
||||
wasmtimer = { version = "0.2.0", default-features = false, features = ["tokio"] }
|
||||
wasm-bindgen-futures = "0.4.37"
|
||||
ws_stream_wasm = "0.7.4"
|
||||
|
@ -136,7 +136,7 @@ ws_stream_wasm = "0.7.4"
|
|||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||||
tokio = { version = "1.29.1", default-features = false, features = ["macros", "io-util", "io-std", "fs", "rt-multi-thread", "time", "sync"] }
|
||||
tokio-tungstenite = { version = "0.18.0", optional = true }
|
||||
uuid = { version = "1.4.0", features = ["serde", "v4", "v7"] }
|
||||
uuid = { version = "1.4.1", features = ["serde", "v4", "v7"] }
|
||||
|
||||
[lib]
|
||||
bench = false
|
||||
|
|
|
@ -5,7 +5,7 @@ edition = "2021"
|
|||
publish = false
|
||||
|
||||
[dependencies]
|
||||
axum = "0.6.18"
|
||||
axum = "0.6.19"
|
||||
serde = { version = "1.0.171", features = ["derive"] }
|
||||
surrealdb = { path = "../.." }
|
||||
thiserror = "1.0.43"
|
||||
|
|
|
@ -304,9 +304,9 @@ impl Rpc {
|
|||
_ => return res::failure(id, Failure::INVALID_PARAMS).send(out, chn).await,
|
||||
},
|
||||
// Setup a live query on a specific table
|
||||
"live" => match params.needs_one() {
|
||||
Ok(v) if v.is_table() => rpc.read().await.live(v).await,
|
||||
Ok(v) if v.is_strand() => rpc.read().await.live(v).await,
|
||||
"live" => match params.needs_one_or_two() {
|
||||
Ok((v, d)) if v.is_table() => rpc.read().await.live(v, d).await,
|
||||
Ok((v, d)) if v.is_strand() => rpc.read().await.live(v, d).await,
|
||||
_ => return res::failure(id, Failure::INVALID_PARAMS).send(out, chn).await,
|
||||
},
|
||||
// Specify a connection-wide parameter
|
||||
|
@ -516,9 +516,12 @@ impl Rpc {
|
|||
}
|
||||
|
||||
#[instrument(skip_all, name = "rpc live", fields(websocket=self.uuid.to_string()))]
|
||||
async fn live(&self, tb: Value) -> Result<Value, Error> {
|
||||
async fn live(&self, tb: Value, diff: Value) -> Result<Value, Error> {
|
||||
// Specify the SQL query string
|
||||
let sql = "LIVE SELECT * FROM $tb";
|
||||
let sql = match diff.is_true() {
|
||||
true => "LIVE SELECT DIFF FROM $tb",
|
||||
false => "LIVE SELECT * FROM $tb",
|
||||
};
|
||||
// Specify the query parameters
|
||||
let var = map! {
|
||||
String::from("tb") => tb.could_be_table(),
|
||||
|
|
Loading…
Reference in a new issue