Skip to content

Commit 2dc3f3f

Browse files
fix(sql): uuid columns returning null in postgres query results (#2039) (#3144)
Co-authored-by: Fabian-Lars <github@fabianlars.de>
1 parent c27af91 commit 2dc3f3f

4 files changed

Lines changed: 41 additions & 9 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"sql": "patch"
3+
"sql-js": "patch"
4+
---
5+
6+
Fixes issue with UUIDs returned as null in sql query results.

Cargo.lock

Lines changed: 24 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/sql/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ tauri = { workspace = true }
2929
log = { workspace = true }
3030
thiserror = { workspace = true }
3131
futures-core = "0.3"
32-
sqlx = { version = "0.8", features = ["json", "time"] }
32+
sqlx = { version = "0.8", features = ["json", "time", "uuid"] }
3333
time = "0.3"
3434
tokio = { version = "1", features = ["sync"] }
3535
indexmap = { version = "2", features = ["serde"] }
36+
uuid = "1"
3637

3738
[features]
3839
sqlite = ["sqlx/sqlite", "sqlx/runtime-tokio"]

plugins/sql/src/decode/postgres.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use serde_json::Value as JsonValue;
66
use sqlx::{postgres::PgValueRef, TypeInfo, Value, ValueRef};
77
use time::{Date, OffsetDateTime, PrimitiveDateTime, Time};
8+
use uuid::Uuid;
89

910
use crate::Error;
1011

@@ -14,13 +15,20 @@ pub(crate) fn to_json(v: PgValueRef) -> Result<JsonValue, Error> {
1415
}
1516

1617
let res = match v.type_info().name() {
17-
"CHAR" | "VARCHAR" | "TEXT" | "NAME" | "UUID" => {
18+
"CHAR" | "VARCHAR" | "TEXT" | "NAME" => {
1819
if let Ok(v) = ValueRef::to_owned(&v).try_decode() {
1920
JsonValue::String(v)
2021
} else {
2122
JsonValue::Null
2223
}
2324
}
25+
"UUID" => {
26+
if let Ok(v) = ValueRef::to_owned(&v).try_decode::<Uuid>() {
27+
JsonValue::String(v.to_string())
28+
} else {
29+
JsonValue::Null
30+
}
31+
}
2432
"FLOAT4" => {
2533
if let Ok(v) = ValueRef::to_owned(&v).try_decode::<f32>() {
2634
JsonValue::from(v)

0 commit comments

Comments
 (0)