Skip to content

Commit

Permalink
json_valid only accepts JSON strings and not JSONB blobs
Browse files Browse the repository at this point in the history
  • Loading branch information
weiznich committed Feb 14, 2025
1 parent ca40f4a commit 6e4ee3d
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 12 deletions.
12 changes: 10 additions & 2 deletions diesel/src/sqlite/expression/expression_methods.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
//! Sqlite specific expression methods.
pub(in crate::sqlite) use self::private::{
BinaryOrNullableBinary, JsonOrNullableJsonOrJsonbOrNullableJsonb, MaybeNullableValue,
TextOrNullableText,
BinaryOrNullableBinary, JsonOrNullableJson, JsonOrNullableJsonOrJsonbOrNullableJsonb,
MaybeNullableValue, TextOrNullableText,
};
use super::operators::*;
use crate::dsl;
Expand Down Expand Up @@ -118,6 +118,14 @@ pub(in crate::sqlite) mod private {
impl JsonOrNullableJsonOrJsonbOrNullableJsonb for Jsonb {}
impl JsonOrNullableJsonOrJsonbOrNullableJsonb for Nullable<Jsonb> {}

#[diagnostic::on_unimplemented(
message = "`{Self}` is neither `diesel::sql_types::Json` nor `diesel::sql_types::Nullable<Json>`",
note = "try to provide an expression that produces one of the expected sql types"
)]
pub trait JsonOrNullableJson {}
impl JsonOrNullableJson for Json {}
impl JsonOrNullableJson for Nullable<Json> {}

pub trait MaybeNullableValue<T>: SingleValue {
type Out: SingleValue;
}
Expand Down
12 changes: 3 additions & 9 deletions diesel/src/sqlite/expression/functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
use crate::expression::functions::declare_sql_function;
use crate::sql_types::*;
use crate::sqlite::expression::expression_methods::BinaryOrNullableBinary;
use crate::sqlite::expression::expression_methods::JsonOrNullableJson;
use crate::sqlite::expression::expression_methods::JsonOrNullableJsonOrJsonbOrNullableJsonb;
use crate::sqlite::expression::expression_methods::MaybeNullableValue;
use crate::sqlite::expression::expression_methods::TextOrNullableText;
Expand Down Expand Up @@ -628,12 +629,7 @@ extern "SQL" {
///
/// assert_eq!(true, result);
///
/// let result = diesel::select(json_valid::<Jsonb, _>(json!({"x":35})))
/// .get_result::<bool>(connection)?;
///
/// assert_eq!(true, result);
///
/// let result = diesel::select(json_valid::<Nullable<Json>, _>(None::<serde_jsone::Value>))
/// let result = diesel::select(json_valid::<Nullable<Json>, _>(None::<serde_json::Value>))
/// .get_result::<Option<bool>>(connection)?;
///
/// assert_eq!(None, result);
Expand All @@ -643,7 +639,5 @@ extern "SQL" {
/// ```
#[sql_name = "json_valid"]
#[cfg(feature = "sqlite")]
fn json_valid<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Bool>>(
j: J,
) -> J::Out;
fn json_valid<J: JsonOrNullableJson + MaybeNullableValue<Bool>>(j: J) -> J::Out;
}
1 change: 0 additions & 1 deletion diesel_derives/tests/auto_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,6 @@ fn sqlite_functions() -> _ {
json_pretty(sqlite_extras::jsonb),
json_pretty_with_indentation(sqlite_extras::json, " "),
json_pretty_with_indentation(sqlite_extras::jsonb, " "),
json_valid(sqlite_extras::jsonb),
json_valid(sqlite_extras::json),
)
}
Expand Down

0 comments on commit 6e4ee3d

Please sign in to comment.