From 2dc3f3f0397fa91b1f3ffbc4b42ca2b4ae55bbe0 Mon Sep 17 00:00:00 2001 From: Madhusudhan Date: Mon, 19 Jan 2026 22:00:28 +0530 Subject: [PATCH] fix(sql): uuid columns returning null in postgres query results (#2039) (#3144) Co-authored-by: Fabian-Lars --- ...sql-query-results-uuid-returned-as-null.md | 6 ++++ Cargo.lock | 33 ++++++++++++++----- plugins/sql/Cargo.toml | 3 +- plugins/sql/src/decode/postgres.rs | 10 +++++- 4 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 .changes/fix-sql-query-results-uuid-returned-as-null.md diff --git a/.changes/fix-sql-query-results-uuid-returned-as-null.md b/.changes/fix-sql-query-results-uuid-returned-as-null.md new file mode 100644 index 000000000..9fb834d0b --- /dev/null +++ b/.changes/fix-sql-query-results-uuid-returned-as-null.md @@ -0,0 +1,6 @@ +--- +"sql": "patch" +"sql-js": "patch" +--- + +Fixes issue with UUIDs returned as null in sql query results. \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 82f00dfd4..59b1eac2e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5613,10 +5613,11 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -5632,10 +5633,19 @@ dependencies = [ ] [[package]] -name = "serde_derive" -version = "1.0.219" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -6032,6 +6042,7 @@ dependencies = [ "tokio-stream", "tracing", "url", + "uuid", "webpki-roots", ] @@ -6114,6 +6125,7 @@ dependencies = [ "thiserror 2.0.12", "time", "tracing", + "uuid", "whoami", ] @@ -6152,6 +6164,7 @@ dependencies = [ "thiserror 2.0.12", "time", "tracing", + "uuid", "whoami", ] @@ -6178,6 +6191,7 @@ dependencies = [ "time", "tracing", "url", + "uuid", ] [[package]] @@ -6975,6 +6989,7 @@ dependencies = [ "thiserror 2.0.12", "time", "tokio", + "uuid", ] [[package]] @@ -7919,12 +7934,14 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.16.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ "getrandom 0.3.2", - "serde", + "js-sys", + "serde_core", + "wasm-bindgen", ] [[package]] diff --git a/plugins/sql/Cargo.toml b/plugins/sql/Cargo.toml index e42ae1786..ab7b48f8d 100644 --- a/plugins/sql/Cargo.toml +++ b/plugins/sql/Cargo.toml @@ -29,10 +29,11 @@ tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } futures-core = "0.3" -sqlx = { version = "0.8", features = ["json", "time"] } +sqlx = { version = "0.8", features = ["json", "time", "uuid"] } time = "0.3" tokio = { version = "1", features = ["sync"] } indexmap = { version = "2", features = ["serde"] } +uuid = "1" [features] sqlite = ["sqlx/sqlite", "sqlx/runtime-tokio"] diff --git a/plugins/sql/src/decode/postgres.rs b/plugins/sql/src/decode/postgres.rs index 6f689dced..88082fb70 100644 --- a/plugins/sql/src/decode/postgres.rs +++ b/plugins/sql/src/decode/postgres.rs @@ -5,6 +5,7 @@ use serde_json::Value as JsonValue; use sqlx::{postgres::PgValueRef, TypeInfo, Value, ValueRef}; use time::{Date, OffsetDateTime, PrimitiveDateTime, Time}; +use uuid::Uuid; use crate::Error; @@ -14,13 +15,20 @@ pub(crate) fn to_json(v: PgValueRef) -> Result { } let res = match v.type_info().name() { - "CHAR" | "VARCHAR" | "TEXT" | "NAME" | "UUID" => { + "CHAR" | "VARCHAR" | "TEXT" | "NAME" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode() { JsonValue::String(v) } else { JsonValue::Null } } + "UUID" => { + if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { + JsonValue::String(v.to_string()) + } else { + JsonValue::Null + } + } "FLOAT4" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::from(v)