From 0b22fbd5669fe68bce64c7c29c2bd0afa53b0190 Mon Sep 17 00:00:00 2001 From: Ihor Andrianov Date: Sun, 16 Mar 2025 03:26:08 +0200 Subject: [PATCH] Add jsonb to json_valid --- core/json/mod.rs | 20 +++++++++----------- core/vdbe/mod.rs | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/core/json/mod.rs b/core/json/mod.rs index a3b6c5d71..3690b2a5e 100644 --- a/core/json/mod.rs +++ b/core/json/mod.rs @@ -656,18 +656,16 @@ pub fn json_object(values: &[OwnedValue]) -> crate::Result { Ok(OwnedValue::Text(Text::json(result))) } -pub fn is_json_valid(json_value: &OwnedValue) -> crate::Result { - match json_value { - OwnedValue::Text(ref t) => match from_str::(t.as_str()) { - Ok(_) => Ok(OwnedValue::Integer(1)), - Err(_) => Ok(OwnedValue::Integer(0)), - }, - OwnedValue::Blob(_) => { - bail_parse_error!("Unsuported!") - } - OwnedValue::Null => Ok(OwnedValue::Null), - _ => Ok(OwnedValue::Integer(1)), +pub fn is_json_valid(json_value: &OwnedValue) -> OwnedValue { + if matches!(json_value, OwnedValue::Null) { + return OwnedValue::Null; } + let json_is_ok = convert_dbtype_to_jsonb(json_value) + .and_then(|_| { + return Ok(OwnedValue::Integer(1)); + }) + .unwrap_or(OwnedValue::Integer(0)); + json_is_ok } pub fn json_quote(value: &OwnedValue) -> crate::Result { diff --git a/core/vdbe/mod.rs b/core/vdbe/mod.rs index 7621146d6..72eb20645 100644 --- a/core/vdbe/mod.rs +++ b/core/vdbe/mod.rs @@ -2216,7 +2216,7 @@ impl Program { } JsonFunc::JsonValid => { let json_value = &state.registers[*start_reg]; - state.registers[*dest] = is_json_valid(json_value)?; + state.registers[*dest] = is_json_valid(json_value); } JsonFunc::JsonPatch => { assert_eq!(arg_count, 2);