From ac14c2e972afe28baf4eae5db8f7cb1d66381227 Mon Sep 17 00:00:00 2001 From: Jakob K Date: Sat, 8 Mar 2025 11:22:36 +0100 Subject: [PATCH] Float type missing & json wrongfully treated as string --- diesel/src/sqlite/expression/functions.rs | 40 ++++++++++++++------ diesel/src/sqlite/expression/helper_types.rs | 5 +-- diesel_derives/tests/auto_type.rs | 1 + 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/diesel/src/sqlite/expression/functions.rs b/diesel/src/sqlite/expression/functions.rs index 60c865098262..b5645e9ecaa5 100644 --- a/diesel/src/sqlite/expression/functions.rs +++ b/diesel/src/sqlite/expression/functions.rs @@ -910,7 +910,7 @@ extern "SQL" { /// # fn run_test() -> QueryResult<()> { /// # use diesel::dsl::{sql, json_quote}; /// # use serde_json::{json, Value}; - /// # use diesel::sql_types::{Text, Integer, Nullable}; + /// # use diesel::sql_types::{Text, Json, Integer, Nullable}; /// # let connection = &mut establish_connection(); /// /// let version = diesel::select(sql::("sqlite_version();")) @@ -928,25 +928,41 @@ extern "SQL" { /// println!("SQLite version is too old, skipping the test."); /// return Ok(()); /// } - /// let test_value = 42; - /// let result = diesel::select(json_quote::(test_value)) + /// let result = diesel::select(json_quote::(42)) /// .get_result::>(connection)?; - /// /// assert_eq!(Some("42".to_string()), result); /// + /// let result = diesel::select(json_quote::("verdant")) + /// .get_result::>(connection)?; + /// assert_eq!(Some("\"verdant\"".to_string()), result); + /// + /// let result = diesel::select(json_quote::("[1]")) + /// .get_result::>(connection)?; + /// assert_eq!(Some("\"[1]\"".to_string()), result); + /// + /// let result = diesel::select(json_quote::, _>(None::<&str>)) + /// .get_result::>(connection)?; + /// assert_eq!(Some("null".to_string()), result); + /// + // COMENT---------------------------------------- + // BELOW NONE WORKING TESTS, JSON and FLOAT TYPES + // DATATYPE FOR FLOAT NEEDED & JSON IS TREATED AS TEXT + // let result = diesel::select(json_quote::(json!([1]))) + // .get_result::>(connection)?; + // assert_eq!(Some("[1]".to_string()), result); + // + // let result = diesel::select(json_quote::(3.14159)) + // .get_result::>(connection)?; + // + // assert_eq!(Some("3.14159".to_string()), result); + // COMENT---------------------------------------- + /// /// # Ok(()) /// # } /// ``` #[sql_name = "json_quote"] #[cfg(feature = "sqlite")] - fn json_quote + MaybeNullableValue>( // Have to add Supoprt for Real/Floates, how? Existing Datatype? + fn json_quote + MaybeNullableValue + MaybeNullableValue>( // Have to add Supoprt for Real/Floates, how? Existing Datatype? j: J ) -> Nullable; } - // double test case - // let test_value = 3.14159; - // let result = diesel::select(json_quote::(test_value)) - // .get_result::>(connection)?; - // - // assert_eq!(Some("3.14159".to_string()), result); - \ No newline at end of file diff --git a/diesel/src/sqlite/expression/helper_types.rs b/diesel/src/sqlite/expression/helper_types.rs index b2a9cf0fd201..a16c8ff57c48 100644 --- a/diesel/src/sqlite/expression/helper_types.rs +++ b/diesel/src/sqlite/expression/helper_types.rs @@ -59,8 +59,7 @@ pub type json_type = super::functions::json_type, E>; #[cfg(feature = "sqlite")] pub type json_type_with_path = super::functions::json_type_with_path, J, P>; -/// Return type of [`json_type(json)`](super::functions::json_type()) +/// Return type of [`json_quote(value)`](super::functions::json_quote()) #[allow(non_camel_case_types)] #[cfg(feature = "sqlite")] -pub type json_quote = super::functions::json_quote, J>; - +pub type json_quote = super::functions::json_quote, J>; \ No newline at end of file diff --git a/diesel_derives/tests/auto_type.rs b/diesel_derives/tests/auto_type.rs index caa459e97317..b5603ae38995 100644 --- a/diesel_derives/tests/auto_type.rs +++ b/diesel_derives/tests/auto_type.rs @@ -517,6 +517,7 @@ fn sqlite_functions() -> _ { json_type(sqlite_extras::json), json_type_with_path(sqlite_extras::json, sqlite_extras::text), json_quote(sqlite_extras::text), + json_quote(sqlite_extras::json), json_quote(sqlite_extras::id), ) }