1#[cfg(doc)]
3use crate::expression::functions::aggregate_expressions::AggregateExpressionMethods;
4use crate::expression::functions::declare_sql_function;
5use crate::expression_methods::json_expression_methods::private::JsonOrNullableJsonOrJsonbOrNullableJsonb;
6use crate::sql_types::*;
7use crate::sqlite::expression::expression_methods::BinaryOrNullableBinary;
8use crate::sqlite::expression::expression_methods::JsonOrNullableJson;
9use crate::sqlite::expression::expression_methods::MaybeNullableValue;
10use crate::sqlite::expression::expression_methods::NotBlob;
11use crate::sqlite::expression::expression_methods::TextOrNullableText;
12use crate::sqlite::expression::expression_methods::TextOrNullableTextOrBinaryOrNullableBinary;
13use crate::sqlite::expression::functions::helper::CombinedNullableValue;
14
15#[cfg(feature = "__sqlite-shared")]
16#[doc =
" Verifies that its argument is a valid JSON string or JSONB blob and returns a minified"]
#[doc =
" version of that JSON string with all unnecessary whitespace removed."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::json;"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Text, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = ""]
#[doc =
" let result = diesel::select(json::<Text, _>(r#\"{\"a\": \"b\", \"c\": 1}\"#))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(json!({\"a\":\"b\",\"c\":1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json::<Text, _>(r#\"{ \"this\" : \"is\", \"a\": [ \"test\" ] }\"#))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(json!({\"a\":[\"test\"],\"this\":\"is\"}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json::<Nullable<Text>, _>(None::<&str>))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = ""]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json<E: TextOrNullableText + MaybeNullableValue<Json>, e>(e: e)
-> json<E, e> where e: diesel::expression::AsExpression<E> {
json_utils::json { e: e.as_expression(), E: ::core::marker::PhantomData }
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json()`](fn@json)"]
pub type json<E, e> =
json_utils::json<E,
<e as diesel::expression::AsExpression<E>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_return_type {
#[doc = "Return type of the [`json()`](fn@super::json) SQL function."]
pub type json<e> =
super::json<<e as diesel::expression::Expression>::SqlType, e>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json<E, e> {
pub(in super) e: e,
pub(in super) E: ::core::marker::PhantomData<E>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<E, e, __Rhs> ::core::ops::Add<__Rhs> for json<E, e> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<E, e, __Rhs> ::core::ops::Sub<__Rhs> for json<E, e> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<E, e, __Rhs> ::core::ops::Mul<__Rhs> for json<E, e> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<E, e, __Rhs> ::core::ops::Div<__Rhs> for json<E, e> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<E: ::core::fmt::Debug, e: ::core::fmt::Debug> ::core::fmt::Debug for
json<E, e> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "json", "e",
&self.e, "E", &&self.E)
}
}
#[automatically_derived]
impl<E: ::core::clone::Clone, e: ::core::clone::Clone>
::core::clone::Clone for json<E, e> {
#[inline]
fn clone(&self) -> json<E, e> {
json {
e: ::core::clone::Clone::clone(&self.e),
E: ::core::clone::Clone::clone(&self.E),
}
}
}
#[automatically_derived]
impl<E: ::core::marker::Copy, e: ::core::marker::Copy>
::core::marker::Copy for json<E, e> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<E: diesel::query_builder::QueryId,
e: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json<E, e> {
type QueryId =
json<<E as diesel::query_builder::QueryId>::QueryId,
<e as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<E as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<e as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&& true;
const IS_WINDOW_FUNCTION: bool =
<E as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<e as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json()`](fn@json)"]
pub type HelperType<E, e> = json<E, <e as AsExpression<E>>::Expression>;
impl<E: TextOrNullableText + MaybeNullableValue<Json>, e> Expression for
json<E, e> where (e): Expression {
type SqlType = E::Out;
}
impl<E: TextOrNullableText + MaybeNullableValue<Json>, e,
__DieselInternal> SelectableExpression<__DieselInternal> for
json<E, e> where e: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<E: TextOrNullableText + MaybeNullableValue<Json>, e,
__DieselInternal> AppearsOnTable<__DieselInternal> for json<E, e>
where e: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<E: TextOrNullableText + MaybeNullableValue<Json>, e,
__DieselInternal> FunctionFragment<__DieselInternal> for json<E, e>
where __DieselInternal: diesel::backend::Backend,
e: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.e.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.e.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<E: TextOrNullableText + MaybeNullableValue<Json>, e>
QueryFragment<crate::sqlite::Sqlite> for json<E, e> where
e: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<e>(e);
const _: () =
{
use diesel;
impl<e, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<e> where
e: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<e as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<E: TextOrNullableText + MaybeNullableValue<Json>, e,
__DieselInternal> ValidGrouping<__DieselInternal> for json<E, e> where
__Derived<e>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<e> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The jsonb(X) function returns the binary JSONB representation of the JSON provided as argument X."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.45 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, jsonb};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Text, Binary, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 45, 0);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb::<Binary, _>(br#\"{\"a\": \"b\", \"c\": 1}\"#))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(json!({\"a\": \"b\", \"c\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb::<Binary, _>(br#\"{\"this\":\"is\",\"a\":[\"test\"]}\"#))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(json!({\"this\":\"is\",\"a\":[\"test\"]}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb::<Nullable<Binary>, _>(None::<Vec<u8>>))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = ""]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb<E: BinaryOrNullableBinary + MaybeNullableValue<Jsonb>, e>(e: e)
-> jsonb<E, e> where e: diesel::expression::AsExpression<E> {
jsonb_utils::jsonb {
e: e.as_expression(),
E: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb()`](fn@jsonb)"]
pub type jsonb<E, e> =
jsonb_utils::jsonb<E,
<e as diesel::expression::AsExpression<E>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_return_type {
#[doc = "Return type of the [`jsonb()`](fn@super::jsonb) SQL function."]
pub type jsonb<e> =
super::jsonb<<e as diesel::expression::Expression>::SqlType, e>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb<E, e> {
pub(in super) e: e,
pub(in super) E: ::core::marker::PhantomData<E>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<E, e, __Rhs> ::core::ops::Add<__Rhs> for jsonb<E, e> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<E, e, __Rhs> ::core::ops::Sub<__Rhs> for jsonb<E, e> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<E, e, __Rhs> ::core::ops::Mul<__Rhs> for jsonb<E, e> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<E, e, __Rhs> ::core::ops::Div<__Rhs> for jsonb<E, e> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<E: ::core::fmt::Debug, e: ::core::fmt::Debug> ::core::fmt::Debug for
jsonb<E, e> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "jsonb",
"e", &self.e, "E", &&self.E)
}
}
#[automatically_derived]
impl<E: ::core::clone::Clone, e: ::core::clone::Clone>
::core::clone::Clone for jsonb<E, e> {
#[inline]
fn clone(&self) -> jsonb<E, e> {
jsonb {
e: ::core::clone::Clone::clone(&self.e),
E: ::core::clone::Clone::clone(&self.E),
}
}
}
#[automatically_derived]
impl<E: ::core::marker::Copy, e: ::core::marker::Copy>
::core::marker::Copy for jsonb<E, e> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<E: diesel::query_builder::QueryId,
e: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for jsonb<E, e> {
type QueryId =
jsonb<<E as diesel::query_builder::QueryId>::QueryId,
<e as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<E as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<e as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&& true;
const IS_WINDOW_FUNCTION: bool =
<E as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<e as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb()`](fn@jsonb)"]
pub type HelperType<E, e> = jsonb<E, <e as AsExpression<E>>::Expression>;
impl<E: BinaryOrNullableBinary + MaybeNullableValue<Jsonb>, e> Expression
for jsonb<E, e> where (e): Expression {
type SqlType = E::Out;
}
impl<E: BinaryOrNullableBinary + MaybeNullableValue<Jsonb>, e,
__DieselInternal> SelectableExpression<__DieselInternal> for
jsonb<E, e> where e: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<E: BinaryOrNullableBinary + MaybeNullableValue<Jsonb>, e,
__DieselInternal> AppearsOnTable<__DieselInternal> for jsonb<E, e>
where e: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<E: BinaryOrNullableBinary + MaybeNullableValue<Jsonb>, e,
__DieselInternal> FunctionFragment<__DieselInternal> for jsonb<E, e>
where __DieselInternal: diesel::backend::Backend,
e: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.e.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.e.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<E: BinaryOrNullableBinary + MaybeNullableValue<Jsonb>, e>
QueryFragment<crate::sqlite::Sqlite> for jsonb<E, e> where
e: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<e>(e);
const _: () =
{
use diesel;
impl<e, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<e> where
e: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<e as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<E: BinaryOrNullableBinary + MaybeNullableValue<Jsonb>, e,
__DieselInternal> ValidGrouping<__DieselInternal> for jsonb<E, e>
where __Derived<e>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<e> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The json_array_length(X) function returns the number of elements in the JSON array X,"]
#[doc = " or 0 if X is some kind of JSON value other than an array."]
#[doc =
" Errors are thrown if either X is not well-formed JSON or if P is not a well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.46 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, json_array_length};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Json, Jsonb, Text, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 46, 0);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length::<Json, _>(json!([1,2,3,4])))"]
#[doc = " .get_result::<i32>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(4, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length::<Json, _>(json!({\"one\":[1,2,3]})))"]
#[doc = " .get_result::<i32>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(0, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length::<Nullable<Json>, _>(None::<Value>))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length::<Jsonb, _>(json!([1,2,3,4])))"]
#[doc = " .get_result::<i32>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(4, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length::<Jsonb, _>(json!({\"one\":[1,2,3]})))"]
#[doc = " .get_result::<i32>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(0, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length::<Nullable<Jsonb>, _>(None::<Value>))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_array_length<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Integer>, j>(j: j) -> json_array_length<J, j> where
j: diesel::expression::AsExpression<J> {
json_array_length_utils::json_array_length {
j: j.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_array_length()`](fn@json_array_length)"]
pub type json_array_length<J, j> =
json_array_length_utils::json_array_length<J,
<j as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_array_length_return_type {
#[doc =
"Return type of the [`json_array_length()`](fn@super::json_array_length) SQL function."]
pub type json_array_length<j> =
super::json_array_length<<j as
diesel::expression::Expression>::SqlType, j>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_array_length_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_array_length<J, j> {
pub(in super) j: j,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, j, __Rhs> ::core::ops::Add<__Rhs> for
json_array_length<J, j> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Sub<__Rhs> for
json_array_length<J, j> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Mul<__Rhs> for
json_array_length<J, j> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Div<__Rhs> for
json_array_length<J, j> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, j: ::core::fmt::Debug> ::core::fmt::Debug for
json_array_length<J, j> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_array_length", "j", &self.j, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, j: ::core::clone::Clone>
::core::clone::Clone for json_array_length<J, j> {
#[inline]
fn clone(&self) -> json_array_length<J, j> {
json_array_length {
j: ::core::clone::Clone::clone(&self.j),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, j: ::core::marker::Copy>
::core::marker::Copy for json_array_length<J, j> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
j: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_array_length<J, j> {
type QueryId =
json_array_length<<J as
diesel::query_builder::QueryId>::QueryId,
<j as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<j as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&& true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<j as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`json_array_length()`](fn@json_array_length)"]
pub type HelperType<J, j> =
json_array_length<J, <j as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Integer>, j> Expression for json_array_length<J, j>
where (j): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Integer>, j, __DieselInternal>
SelectableExpression<__DieselInternal> for json_array_length<J, j>
where j: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Integer>, j, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_array_length<J, j> where
j: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Integer>, j, __DieselInternal>
FunctionFragment<__DieselInternal> for json_array_length<J, j> where
__DieselInternal: diesel::backend::Backend,
j: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_array_length";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.j.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.j.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Integer>, j> QueryFragment<crate::sqlite::Sqlite>
for json_array_length<J, j> where
j: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<j>(j);
const _: () =
{
use diesel;
impl<j, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<j> where
j: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Integer>, j, __DieselInternal>
ValidGrouping<__DieselInternal> for json_array_length<J, j> where
__Derived<j>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<j> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The json_array_length(X) function returns the number of elements in the JSON array X,"]
#[doc = " or 0 if X is some kind of JSON value other than an array."]
#[doc =
" The json_array_length(X,P) locates the array at path P within X and returns the length of that array,"]
#[doc = " or 0 if path P locates an element in X that is not a JSON array,"]
#[doc = " and NULL if path P does not locate any element of X."]
#[doc =
" Errors are thrown if either X is not well-formed JSON or if P is not a well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.46 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, json_array_length_with_path};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Json, Jsonb, Text, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 46, 0);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length_with_path::<Json, _, _>(json!([1,2,3,4]), \"$\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(4), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length_with_path::<Json, _, _>(json!([1,2,3,4]), \"$[2]\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(0), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length_with_path::<Json, _, _>(json!({\"one\":[1,2,3]}), \"$.one\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(3), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length_with_path::<Nullable<Json>, _, _>(json!({\"one\":[1,2,3]}), \"$.two\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length_with_path::<Jsonb, _, _>(json!([1,2,3,4]), \"$\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(4), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length_with_path::<Jsonb, _, _>(json!([1,2,3,4]), \"$[2]\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(0), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length_with_path::<Jsonb, _, _>(json!({\"one\":[1,2,3]}), \"$.one\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(3), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_length_with_path::<Nullable<Jsonb>, _, _>(json!({\"one\":[1,2,3]}), \"$.two\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_array_length_with_path<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, j, path>(j: j, path: path)
-> json_array_length_with_path<J, j, path> where
j: diesel::expression::AsExpression<J>,
path: diesel::expression::AsExpression<Text> {
json_array_length_with_path_utils::json_array_length_with_path {
j: j.as_expression(),
path: path.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`json_array_length_with_path()`](fn@json_array_length_with_path)"]
pub type json_array_length_with_path<J, j, path> =
json_array_length_with_path_utils::json_array_length_with_path<J,
<j as diesel::expression::AsExpression<J>>::Expression,
<path as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_array_length_with_path_return_type {
#[doc =
"Return type of the [`json_array_length_with_path()`](fn@super::json_array_length_with_path) SQL function."]
pub type json_array_length_with_path<j, path> =
super::json_array_length_with_path<<j as
diesel::expression::Expression>::SqlType, j, path>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_array_length_with_path_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_array_length_with_path<J, j, path> {
pub(in super) j: j,
pub(in super) path: path,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, j, path, __Rhs> ::core::ops::Add<__Rhs> for
json_array_length_with_path<J, j, path> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, j, path, __Rhs> ::core::ops::Sub<__Rhs> for
json_array_length_with_path<J, j, path> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, j, path, __Rhs> ::core::ops::Mul<__Rhs> for
json_array_length_with_path<J, j, path> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, j, path, __Rhs> ::core::ops::Div<__Rhs> for
json_array_length_with_path<J, j, path> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, j: ::core::fmt::Debug,
path: ::core::fmt::Debug> ::core::fmt::Debug for
json_array_length_with_path<J, j, path> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"json_array_length_with_path", "j", &self.j, "path",
&self.path, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, j: ::core::clone::Clone,
path: ::core::clone::Clone> ::core::clone::Clone for
json_array_length_with_path<J, j, path> {
#[inline]
fn clone(&self) -> json_array_length_with_path<J, j, path> {
json_array_length_with_path {
j: ::core::clone::Clone::clone(&self.j),
path: ::core::clone::Clone::clone(&self.path),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, j: ::core::marker::Copy,
path: ::core::marker::Copy> ::core::marker::Copy for
json_array_length_with_path<J, j, path> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
j: diesel::query_builder::QueryId,
path: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_array_length_with_path<J, j, path> {
type QueryId =
json_array_length_with_path<<J as
diesel::query_builder::QueryId>::QueryId,
<j as diesel::query_builder::QueryId>::QueryId,
<path as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<j as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<path as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<j as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<path as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc =
"The return type of [`json_array_length_with_path()`](fn@json_array_length_with_path)"]
pub type HelperType<J, j, path> =
json_array_length_with_path<J, <j as AsExpression<J>>::Expression,
<path as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path>
Expression for json_array_length_with_path<J, j, path> where
(j, path): Expression {
type SqlType = Nullable<Integer>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path,
__DieselInternal> SelectableExpression<__DieselInternal> for
json_array_length_with_path<J, j, path> where
j: SelectableExpression<__DieselInternal>,
path: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path,
__DieselInternal> AppearsOnTable<__DieselInternal> for
json_array_length_with_path<J, j, path> where
j: AppearsOnTable<__DieselInternal>,
path: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path,
__DieselInternal> FunctionFragment<__DieselInternal> for
json_array_length_with_path<J, j, path> where
__DieselInternal: diesel::backend::Backend,
j: QueryFragment<__DieselInternal>,
path: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_array_length";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.j.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.j.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path>
QueryFragment<crate::sqlite::Sqlite> for
json_array_length_with_path<J, j, path> where
j: QueryFragment<crate::sqlite::Sqlite>,
path: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<j, path>(j, path);
const _: () =
{
use diesel;
impl<j, path, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<j, path> where
j: diesel::expression::ValidGrouping<__GroupByClause>,
path: diesel::expression::ValidGrouping<__GroupByClause>,
<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path,
__DieselInternal> ValidGrouping<__DieselInternal> for
json_array_length_with_path<J, j, path> where
__Derived<j, path>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<j, path> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The json_error_position(X) function returns 0 if the input X is a well-formed JSON or JSON5 string."]
#[doc =
" If the input X contains one or more syntax errors, then this function returns the character position of the first syntax error."]
#[doc = " The left-most character is position 1."]
#[doc = ""]
#[doc =
" If the input X is a BLOB, then this routine returns 0 if X is a well-formed JSONB blob. If the return value is positive,"]
#[doc =
" then it represents the approximate 1-based position in the BLOB of the first detected error."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.46 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, json_error_position};"]
#[doc = " # use diesel::sql_types::{Binary, Text, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 46, 0);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_error_position::<Text, _>(r#\"{\"a\": \"b\", \"c\": 1}\"#))"]
#[doc = " .get_result::<i32>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(0, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_error_position::<Text, _>(r#\"{\"a\": b\", \"c\": 1}\"#))"]
#[doc = " .get_result::<i32>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(7, result);"]
#[doc = ""]
#[doc = " let json5 = r#\""]
#[doc = " {"]
#[doc = " // A traditional message."]
#[doc = " message: \'hello world\',"]
#[doc = ""]
#[doc = " // A number for some reason."]
#[doc = " n: 42,"]
#[doc = " }"]
#[doc = " \"#;"]
#[doc = " let result ="]
#[doc =
" diesel::select(json_error_position::<Text, _>(json5)).get_result::<i32>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(0, result);"]
#[doc = ""]
#[doc = " let json5_with_error = r#\""]
#[doc = " {"]
#[doc = " // A traditional message."]
#[doc = " message: hello world\',"]
#[doc = ""]
#[doc = " // A number for some reason."]
#[doc = " n: 42,"]
#[doc = " }"]
#[doc = " \"#;"]
#[doc =
" let result = diesel::select(json_error_position::<Text, _>(json5_with_error))"]
#[doc = " .get_result::<i32>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(59, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_error_position::<Nullable<Text>, _>(None::<&str>))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_error_position::<Binary, _>(br#\"{\"a\": \"b\", \"c\": 1}\"#))"]
#[doc = " .get_result::<i32>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(0, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_error_position::<Binary, _>(br#\"{\"a\": b\", \"c\": 1}\"#))"]
#[doc = " .get_result::<i32>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(7, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_error_position::<Nullable<Binary>, _>(None::<Vec<u8>>))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_error_position<X: TextOrNullableTextOrBinaryOrNullableBinary +
MaybeNullableValue<Integer>, x>(x: x) -> json_error_position<X, x> where
x: diesel::expression::AsExpression<X> {
json_error_position_utils::json_error_position {
x: x.as_expression(),
X: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`json_error_position()`](fn@json_error_position)"]
pub type json_error_position<X, x> =
json_error_position_utils::json_error_position<X,
<x as diesel::expression::AsExpression<X>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_error_position_return_type {
#[doc =
"Return type of the [`json_error_position()`](fn@super::json_error_position) SQL function."]
pub type json_error_position<x> =
super::json_error_position<<x as
diesel::expression::Expression>::SqlType, x>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_error_position_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_error_position<X, x> {
pub(in super) x: x,
pub(in super) X: ::core::marker::PhantomData<X>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<X, x, __Rhs> ::core::ops::Add<__Rhs> for
json_error_position<X, x> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<X, x, __Rhs> ::core::ops::Sub<__Rhs> for
json_error_position<X, x> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<X, x, __Rhs> ::core::ops::Mul<__Rhs> for
json_error_position<X, x> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<X, x, __Rhs> ::core::ops::Div<__Rhs> for
json_error_position<X, x> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<X: ::core::fmt::Debug, x: ::core::fmt::Debug> ::core::fmt::Debug for
json_error_position<X, x> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_error_position", "x", &self.x, "X", &&self.X)
}
}
#[automatically_derived]
impl<X: ::core::clone::Clone, x: ::core::clone::Clone>
::core::clone::Clone for json_error_position<X, x> {
#[inline]
fn clone(&self) -> json_error_position<X, x> {
json_error_position {
x: ::core::clone::Clone::clone(&self.x),
X: ::core::clone::Clone::clone(&self.X),
}
}
}
#[automatically_derived]
impl<X: ::core::marker::Copy, x: ::core::marker::Copy>
::core::marker::Copy for json_error_position<X, x> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<X: diesel::query_builder::QueryId,
x: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_error_position<X, x> {
type QueryId =
json_error_position<<X as
diesel::query_builder::QueryId>::QueryId,
<x as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<X as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<x as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&& true;
const IS_WINDOW_FUNCTION: bool =
<X as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<x as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`json_error_position()`](fn@json_error_position)"]
pub type HelperType<X, x> =
json_error_position<X, <x as AsExpression<X>>::Expression>;
impl<X: TextOrNullableTextOrBinaryOrNullableBinary +
MaybeNullableValue<Integer>, x> Expression for
json_error_position<X, x> where (x): Expression {
type SqlType = X::Out;
}
impl<X: TextOrNullableTextOrBinaryOrNullableBinary +
MaybeNullableValue<Integer>, x, __DieselInternal>
SelectableExpression<__DieselInternal> for json_error_position<X, x>
where x: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<X: TextOrNullableTextOrBinaryOrNullableBinary +
MaybeNullableValue<Integer>, x, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_error_position<X, x> where
x: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<X: TextOrNullableTextOrBinaryOrNullableBinary +
MaybeNullableValue<Integer>, x, __DieselInternal>
FunctionFragment<__DieselInternal> for json_error_position<X, x> where
__DieselInternal: diesel::backend::Backend,
x: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_error_position";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.x.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.x.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<X: TextOrNullableTextOrBinaryOrNullableBinary +
MaybeNullableValue<Integer>, x> QueryFragment<crate::sqlite::Sqlite>
for json_error_position<X, x> where
x: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<x>(x);
const _: () =
{
use diesel;
impl<x, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<x> where
x: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<x as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<X: TextOrNullableTextOrBinaryOrNullableBinary +
MaybeNullableValue<Integer>, x, __DieselInternal>
ValidGrouping<__DieselInternal> for json_error_position<X, x> where
__Derived<x>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<x> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Extracts a text value from a well-formed JSON document at the given path."]
#[doc = ""]
#[doc =
" Returns `NULL` if the path does not exist in the JSON document, or if the value at that"]
#[doc = " path is a JSON `null`."]
#[doc = ""]
#[doc = " To extract other types, use:"]
#[doc =
" - [`json_extract_integer`](json_extract_integer()) for integer values"]
#[doc =
" - [`json_extract_double`](json_extract_double()) for floating-point values"]
#[doc =
" - [`json_extract_json`](json_extract_json_1()) for JSON objects or arrays"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.9 or newer."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Nullable};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 9, 0);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": \"xyz\"});"]
#[doc =
" let result = diesel::select(json_extract_string::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = " assert_eq!(Some(\"xyz\".to_string()), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 42});"]
#[doc =
" let result = diesel::select(json_extract_string::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = " assert_eq!(Some(\"42\".to_string()), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_extract_string::<Nullable<Json>, _, _>(None::<Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": \"xyz\"});"]
#[doc =
" let result = diesel::select(json_extract_string::<Json, _, _>(json, \"$.x\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_extract_string<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, text>(json: json, text: text)
-> json_extract_string<J, json, text> where
json: diesel::expression::AsExpression<J>,
text: diesel::expression::AsExpression<Text> {
json_extract_string_utils::json_extract_string {
json: json.as_expression(),
text: text.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`json_extract_string()`](fn@json_extract_string)"]
pub type json_extract_string<J, json, text> =
json_extract_string_utils::json_extract_string<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<text as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_extract_string_return_type {
#[doc =
"Return type of the [`json_extract_string()`](fn@super::json_extract_string) SQL function."]
pub type json_extract_string<json, text> =
super::json_extract_string<<json as
diesel::expression::Expression>::SqlType, json, text>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_extract_string_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_extract_string<J, json, text> {
pub(in super) json: json,
pub(in super) text: text,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, text, __Rhs> ::core::ops::Add<__Rhs> for
json_extract_string<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Sub<__Rhs> for
json_extract_string<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Mul<__Rhs> for
json_extract_string<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Div<__Rhs> for
json_extract_string<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
text: ::core::fmt::Debug> ::core::fmt::Debug for
json_extract_string<J, json, text> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"json_extract_string", "json", &self.json, "text", &self.text,
"J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
text: ::core::clone::Clone> ::core::clone::Clone for
json_extract_string<J, json, text> {
#[inline]
fn clone(&self) -> json_extract_string<J, json, text> {
json_extract_string {
json: ::core::clone::Clone::clone(&self.json),
text: ::core::clone::Clone::clone(&self.text),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
text: ::core::marker::Copy> ::core::marker::Copy for
json_extract_string<J, json, text> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
text: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_extract_string<J, json, text> {
type QueryId =
json_extract_string<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<text as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<text as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc =
"The return type of [`json_extract_string()`](fn@json_extract_string)"]
pub type HelperType<J, json, text> =
json_extract_string<J, <json as AsExpression<J>>::Expression,
<text as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> Expression for json_extract_string<J, json, text> where
(json, text): Expression {
type SqlType = Nullable<Text>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> SelectableExpression<__DieselInternal> for
json_extract_string<J, json, text> where
json: SelectableExpression<__DieselInternal>,
text: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_extract_string<J, json, text> where
json: AppearsOnTable<__DieselInternal>,
text: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> FunctionFragment<__DieselInternal> for
json_extract_string<J, json, text> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
text: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_extract";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> QueryFragment<crate::sqlite::Sqlite> for
json_extract_string<J, json, text> where
json: QueryFragment<crate::sqlite::Sqlite>,
text: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, text>(json, text);
const _: () =
{
use diesel;
impl<json, text, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, text> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
text: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<text
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> ValidGrouping<__DieselInternal> for
json_extract_string<J, json, text> where
__Derived<json, text>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, text> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Extracts an integer value from a well-formed JSON document at the given path."]
#[doc = ""]
#[doc =
" Returns `NULL` if the path does not exist in the JSON document, or if the value at that"]
#[doc = " path is a JSON `null`."]
#[doc = ""]
#[doc = " To extract other types, use:"]
#[doc = " - [`json_extract_string`](json_extract_string()) for text values"]
#[doc =
" - [`json_extract_double`](json_extract_double()) for floating-point values"]
#[doc =
" - [`json_extract_json`](json_extract_json_1()) for JSON objects or arrays"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.9 or newer."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Nullable};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 9, 0);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(json_extract_integer::<Json, _, _>(json, \"$.c[2].f\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = " assert_eq!(Some(7), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 3.7});"]
#[doc =
" let result = diesel::select(json_extract_integer::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = " assert_eq!(Some(3), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_extract_integer::<Nullable<Json>, _, _>(None::<Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2});"]
#[doc =
" let result = diesel::select(json_extract_integer::<Json, _, _>(json, \"$.x\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_extract_integer<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, text>(json: json, text: text)
-> json_extract_integer<J, json, text> where
json: diesel::expression::AsExpression<J>,
text: diesel::expression::AsExpression<Text> {
json_extract_integer_utils::json_extract_integer {
json: json.as_expression(),
text: text.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`json_extract_integer()`](fn@json_extract_integer)"]
pub type json_extract_integer<J, json, text> =
json_extract_integer_utils::json_extract_integer<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<text as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_extract_integer_return_type {
#[doc =
"Return type of the [`json_extract_integer()`](fn@super::json_extract_integer) SQL function."]
pub type json_extract_integer<json, text> =
super::json_extract_integer<<json as
diesel::expression::Expression>::SqlType, json, text>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_extract_integer_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_extract_integer<J, json, text> {
pub(in super) json: json,
pub(in super) text: text,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, text, __Rhs> ::core::ops::Add<__Rhs> for
json_extract_integer<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Sub<__Rhs> for
json_extract_integer<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Mul<__Rhs> for
json_extract_integer<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Div<__Rhs> for
json_extract_integer<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
text: ::core::fmt::Debug> ::core::fmt::Debug for
json_extract_integer<J, json, text> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"json_extract_integer", "json", &self.json, "text",
&self.text, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
text: ::core::clone::Clone> ::core::clone::Clone for
json_extract_integer<J, json, text> {
#[inline]
fn clone(&self) -> json_extract_integer<J, json, text> {
json_extract_integer {
json: ::core::clone::Clone::clone(&self.json),
text: ::core::clone::Clone::clone(&self.text),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
text: ::core::marker::Copy> ::core::marker::Copy for
json_extract_integer<J, json, text> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
text: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_extract_integer<J, json, text> {
type QueryId =
json_extract_integer<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<text as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<text as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc =
"The return type of [`json_extract_integer()`](fn@json_extract_integer)"]
pub type HelperType<J, json, text> =
json_extract_integer<J, <json as AsExpression<J>>::Expression,
<text as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> Expression for json_extract_integer<J, json, text> where
(json, text): Expression {
type SqlType = Nullable<Integer>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> SelectableExpression<__DieselInternal> for
json_extract_integer<J, json, text> where
json: SelectableExpression<__DieselInternal>,
text: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_extract_integer<J, json, text> where
json: AppearsOnTable<__DieselInternal>,
text: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> FunctionFragment<__DieselInternal> for
json_extract_integer<J, json, text> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
text: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_extract";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> QueryFragment<crate::sqlite::Sqlite> for
json_extract_integer<J, json, text> where
json: QueryFragment<crate::sqlite::Sqlite>,
text: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, text>(json, text);
const _: () =
{
use diesel;
impl<json, text, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, text> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
text: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<text
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> ValidGrouping<__DieselInternal> for
json_extract_integer<J, json, text> where
__Derived<json, text>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, text> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Extracts a floating-point value from a well-formed JSON document at the given path."]
#[doc = ""]
#[doc =
" Returns `NULL` if the path does not exist in the JSON document, or if the value at that"]
#[doc = " path is a JSON `null`."]
#[doc = ""]
#[doc = " To extract other types, use:"]
#[doc = " - [`json_extract_string`](json_extract_string()) for text values"]
#[doc =
" - [`json_extract_integer`](json_extract_integer()) for integer values"]
#[doc =
" - [`json_extract_json`](json_extract_json_1()) for JSON objects or arrays"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.9 or newer."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Nullable};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 9, 0);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 3.14});"]
#[doc =
" let result = diesel::select(json_extract_double::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<f64>>(connection)?;"]
#[doc = " assert_eq!(Some(3.14), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 7});"]
#[doc =
" let result = diesel::select(json_extract_double::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<f64>>(connection)?;"]
#[doc = " assert_eq!(Some(7.0), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_extract_double::<Nullable<Json>, _, _>(None::<Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<f64>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 3.14});"]
#[doc =
" let result = diesel::select(json_extract_double::<Json, _, _>(json, \"$.x\"))"]
#[doc = " .get_result::<Option<f64>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_extract_double<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, text>(json: json, text: text)
-> json_extract_double<J, json, text> where
json: diesel::expression::AsExpression<J>,
text: diesel::expression::AsExpression<Text> {
json_extract_double_utils::json_extract_double {
json: json.as_expression(),
text: text.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`json_extract_double()`](fn@json_extract_double)"]
pub type json_extract_double<J, json, text> =
json_extract_double_utils::json_extract_double<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<text as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_extract_double_return_type {
#[doc =
"Return type of the [`json_extract_double()`](fn@super::json_extract_double) SQL function."]
pub type json_extract_double<json, text> =
super::json_extract_double<<json as
diesel::expression::Expression>::SqlType, json, text>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_extract_double_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_extract_double<J, json, text> {
pub(in super) json: json,
pub(in super) text: text,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, text, __Rhs> ::core::ops::Add<__Rhs> for
json_extract_double<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Sub<__Rhs> for
json_extract_double<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Mul<__Rhs> for
json_extract_double<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Div<__Rhs> for
json_extract_double<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
text: ::core::fmt::Debug> ::core::fmt::Debug for
json_extract_double<J, json, text> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"json_extract_double", "json", &self.json, "text", &self.text,
"J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
text: ::core::clone::Clone> ::core::clone::Clone for
json_extract_double<J, json, text> {
#[inline]
fn clone(&self) -> json_extract_double<J, json, text> {
json_extract_double {
json: ::core::clone::Clone::clone(&self.json),
text: ::core::clone::Clone::clone(&self.text),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
text: ::core::marker::Copy> ::core::marker::Copy for
json_extract_double<J, json, text> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
text: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_extract_double<J, json, text> {
type QueryId =
json_extract_double<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<text as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<text as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc =
"The return type of [`json_extract_double()`](fn@json_extract_double)"]
pub type HelperType<J, json, text> =
json_extract_double<J, <json as AsExpression<J>>::Expression,
<text as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> Expression for json_extract_double<J, json, text> where
(json, text): Expression {
type SqlType = Nullable<Double>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> SelectableExpression<__DieselInternal> for
json_extract_double<J, json, text> where
json: SelectableExpression<__DieselInternal>,
text: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_extract_double<J, json, text> where
json: AppearsOnTable<__DieselInternal>,
text: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> FunctionFragment<__DieselInternal> for
json_extract_double<J, json, text> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
text: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_extract";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> QueryFragment<crate::sqlite::Sqlite> for
json_extract_double<J, json, text> where
json: QueryFragment<crate::sqlite::Sqlite>,
text: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, text>(json, text);
const _: () =
{
use diesel;
impl<json, text, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, text> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
text: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<text
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> ValidGrouping<__DieselInternal> for
json_extract_double<J, json, text> where
__Derived<json, text>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, text> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Extracts a JSON object or array from a well-formed JSON document at the given path."]
#[doc = ""]
#[doc =
" When a single path is provided, returns the value at that path as a [`Json`] value."]
#[doc =
" When multiple paths are provided (using the variadic form), returns a JSON array"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc =
"`json_extract_json_0`, `json_extract_json_1`, ... `json_extract_json_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_extract_json")]
#[doc = " containing the extracted values."]
#[doc = ""]
#[doc =
" Returns `NULL` if a single path does not exist in the JSON document. With multiple paths,"]
#[doc = " missing paths appear as `null` inside the returned JSON array."]
#[doc = ""]
#[doc = " To extract other types, use:"]
#[doc = " - [`json_extract_string`](json_extract_string()) for text values"]
#[doc =
" - [`json_extract_integer`](json_extract_integer()) for integer values"]
#[doc =
" - [`json_extract_double`](json_extract_double()) for floating-point values"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.9 or newer."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Nullable};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 9, 0);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(json_extract_json_1::<Json, _, _>(json, \"$.c[2]\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"f\": 7})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5], \"f\": 7});"]
#[doc =
" let result = diesel::select(json_extract_json_2::<Json, _, _, _>(json, \"$.c\", \"$.a\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([[4, 5], 2])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 42});"]
#[doc =
" let result = diesel::select(json_extract_json_1::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!(42)), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 42});"]
#[doc =
" let result = diesel::select(json_extract_json_2::<Json, _, _, _>(json, \"$.a\", \"$.b\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([42, null])), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_extract_json_1::<Nullable<Json>, _, _>(None::<Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 42});"]
#[doc =
" let result = diesel::select(json_extract_json_1::<Json, _, _>(json, \"$.x\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 42});"]
#[doc =
" let result = diesel::select(json_extract_json_2::<Json, _, _, _>(json, \"$.b\", \"$.c\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([null, null])), result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_extract_json_1<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, text_1>(json: json, text_1: text_1)
-> json_extract_json_1<J, json, text_1> where
json: diesel::expression::AsExpression<J>,
text_1: diesel::expression::AsExpression<Text> {
json_extract_json_1_utils::json_extract_json_1 {
json: json.as_expression(),
text_1: text_1.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`json_extract_json_1()`](fn@json_extract_json_1)"]
pub type json_extract_json_1<J, json, text_1> =
json_extract_json_1_utils::json_extract_json_1<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<text_1 as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_extract_json_1_return_type {
#[doc =
"Return type of the [`json_extract_json_1()`](fn@super::json_extract_json_1) SQL function."]
pub type json_extract_json_1<json, text_1> =
super::json_extract_json_1<<json as
diesel::expression::Expression>::SqlType, json, text_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_extract_json_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_extract_json_1<J, json, text_1> {
pub(in super) json: json,
pub(in super) text_1: text_1,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, text_1, __Rhs> ::core::ops::Add<__Rhs> for
json_extract_json_1<J, json, text_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, __Rhs> ::core::ops::Sub<__Rhs> for
json_extract_json_1<J, json, text_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, __Rhs> ::core::ops::Mul<__Rhs> for
json_extract_json_1<J, json, text_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, __Rhs> ::core::ops::Div<__Rhs> for
json_extract_json_1<J, json, text_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
text_1: ::core::fmt::Debug> ::core::fmt::Debug for
json_extract_json_1<J, json, text_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"json_extract_json_1", "json", &self.json, "text_1",
&self.text_1, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
text_1: ::core::clone::Clone> ::core::clone::Clone for
json_extract_json_1<J, json, text_1> {
#[inline]
fn clone(&self) -> json_extract_json_1<J, json, text_1> {
json_extract_json_1 {
json: ::core::clone::Clone::clone(&self.json),
text_1: ::core::clone::Clone::clone(&self.text_1),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
text_1: ::core::marker::Copy> ::core::marker::Copy for
json_extract_json_1<J, json, text_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
text_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_extract_json_1<J, json, text_1> {
type QueryId =
json_extract_json_1<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<text_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<text_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`json_extract_json_1()`](fn@json_extract_json_1)"]
pub type HelperType<J, json, text_1> =
json_extract_json_1<J, <json as AsExpression<J>>::Expression,
<text_1 as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1> Expression for json_extract_json_1<J, json, text_1> where
(json, text_1): Expression {
type SqlType = Nullable<Json>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, __DieselInternal> SelectableExpression<__DieselInternal> for
json_extract_json_1<J, json, text_1> where
json: SelectableExpression<__DieselInternal>,
text_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_extract_json_1<J, json, text_1> where
json: AppearsOnTable<__DieselInternal>,
text_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, __DieselInternal> FunctionFragment<__DieselInternal> for
json_extract_json_1<J, json, text_1> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
text_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_extract";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1> QueryFragment<crate::sqlite::Sqlite> for
json_extract_json_1<J, json, text_1> where
json: QueryFragment<crate::sqlite::Sqlite>,
text_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, text_1>(json, text_1);
const _: () =
{
use diesel;
impl<json, text_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, text_1> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
text_1: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<text_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, __DieselInternal> ValidGrouping<__DieselInternal> for
json_extract_json_1<J, json, text_1> where
__Derived<json, text_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, text_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Extracts a JSON object or array from a well-formed JSON document at the given path."]
#[doc = ""]
#[doc =
" When a single path is provided, returns the value at that path as a [`Json`] value."]
#[doc =
" When multiple paths are provided (using the variadic form), returns a JSON array"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc =
"`json_extract_json_0`, `json_extract_json_1`, ... `json_extract_json_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_extract_json")]
#[doc = " containing the extracted values."]
#[doc = ""]
#[doc =
" Returns `NULL` if a single path does not exist in the JSON document. With multiple paths,"]
#[doc = " missing paths appear as `null` inside the returned JSON array."]
#[doc = ""]
#[doc = " To extract other types, use:"]
#[doc = " - [`json_extract_string`](json_extract_string()) for text values"]
#[doc =
" - [`json_extract_integer`](json_extract_integer()) for integer values"]
#[doc =
" - [`json_extract_double`](json_extract_double()) for floating-point values"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.9 or newer."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Nullable};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 9, 0);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(json_extract_json_1::<Json, _, _>(json, \"$.c[2]\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"f\": 7})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5], \"f\": 7});"]
#[doc =
" let result = diesel::select(json_extract_json_2::<Json, _, _, _>(json, \"$.c\", \"$.a\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([[4, 5], 2])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 42});"]
#[doc =
" let result = diesel::select(json_extract_json_1::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!(42)), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 42});"]
#[doc =
" let result = diesel::select(json_extract_json_2::<Json, _, _, _>(json, \"$.a\", \"$.b\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([42, null])), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_extract_json_1::<Nullable<Json>, _, _>(None::<Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 42});"]
#[doc =
" let result = diesel::select(json_extract_json_1::<Json, _, _>(json, \"$.x\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 42});"]
#[doc =
" let result = diesel::select(json_extract_json_2::<Json, _, _, _>(json, \"$.b\", \"$.c\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([null, null])), result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_extract_json_2<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, text_1,
text_2>(json: json, text_1: text_1, text_2: text_2)
-> json_extract_json_2<J, json, text_1, text_2> where
json: diesel::expression::AsExpression<J>,
text_1: diesel::expression::AsExpression<Text>,
text_2: diesel::expression::AsExpression<Text> {
json_extract_json_2_utils::json_extract_json_2 {
json: json.as_expression(),
text_1: text_1.as_expression(),
text_2: text_2.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`json_extract_json_2()`](fn@json_extract_json_2)"]
pub type json_extract_json_2<J, json, text_1, text_2> =
json_extract_json_2_utils::json_extract_json_2<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<text_1 as diesel::expression::AsExpression<Text>>::Expression,
<text_2 as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_extract_json_2_return_type {
#[doc =
"Return type of the [`json_extract_json_2()`](fn@super::json_extract_json_2) SQL function."]
pub type json_extract_json_2<json, text_1, text_2> =
super::json_extract_json_2<<json as
diesel::expression::Expression>::SqlType, json, text_1, text_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_extract_json_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_extract_json_2<J, json, text_1, text_2> {
pub(in super) json: json,
pub(in super) text_1: text_1,
pub(in super) text_2: text_2,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, text_1, text_2, __Rhs> ::core::ops::Add<__Rhs> for
json_extract_json_2<J, json, text_1, text_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, text_2, __Rhs> ::core::ops::Sub<__Rhs> for
json_extract_json_2<J, json, text_1, text_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, text_2, __Rhs> ::core::ops::Mul<__Rhs> for
json_extract_json_2<J, json, text_1, text_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, text_2, __Rhs> ::core::ops::Div<__Rhs> for
json_extract_json_2<J, json, text_1, text_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
text_1: ::core::fmt::Debug, text_2: ::core::fmt::Debug>
::core::fmt::Debug for json_extract_json_2<J, json, text_1, text_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"json_extract_json_2", "json", &self.json, "text_1",
&self.text_1, "text_2", &self.text_2, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
text_1: ::core::clone::Clone, text_2: ::core::clone::Clone>
::core::clone::Clone for json_extract_json_2<J, json, text_1, text_2>
{
#[inline]
fn clone(&self) -> json_extract_json_2<J, json, text_1, text_2> {
json_extract_json_2 {
json: ::core::clone::Clone::clone(&self.json),
text_1: ::core::clone::Clone::clone(&self.text_1),
text_2: ::core::clone::Clone::clone(&self.text_2),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
text_1: ::core::marker::Copy, text_2: ::core::marker::Copy>
::core::marker::Copy for json_extract_json_2<J, json, text_1, text_2>
{
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
text_1: diesel::query_builder::QueryId,
text_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_extract_json_2<J, json, text_1, text_2> {
type QueryId =
json_extract_json_2<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<text_1 as diesel::query_builder::QueryId>::QueryId,
<text_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<text_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<text_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`json_extract_json_2()`](fn@json_extract_json_2)"]
pub type HelperType<J, json, text_1, text_2> =
json_extract_json_2<J, <json as AsExpression<J>>::Expression,
<text_1 as AsExpression<Text>>::Expression,
<text_2 as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2> Expression for
json_extract_json_2<J, json, text_1, text_2> where
(json, text_1, text_2): Expression {
type SqlType = Nullable<Json>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_extract_json_2<J, json, text_1, text_2> where
json: SelectableExpression<__DieselInternal>,
text_1: SelectableExpression<__DieselInternal>,
text_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_extract_json_2<J, json, text_1, text_2> where
json: AppearsOnTable<__DieselInternal>,
text_1: AppearsOnTable<__DieselInternal>,
text_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2, __DieselInternal> FunctionFragment<__DieselInternal>
for json_extract_json_2<J, json, text_1, text_2> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
text_1: QueryFragment<__DieselInternal>,
text_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_extract";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2> QueryFragment<crate::sqlite::Sqlite> for
json_extract_json_2<J, json, text_1, text_2> where
json: QueryFragment<crate::sqlite::Sqlite>,
text_1: QueryFragment<crate::sqlite::Sqlite>,
text_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, text_1, text_2>(json, text_1, text_2);
const _: () =
{
use diesel;
impl<json, text_1, text_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, text_1, text_2> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
text_1: diesel::expression::ValidGrouping<__GroupByClause>,
text_2: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<text_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<text_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<text_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2, __DieselInternal> ValidGrouping<__DieselInternal> for
json_extract_json_2<J, json, text_1, text_2> where
__Derived<json, text_1, text_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, text_1, text_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __json_extract_json_return_types {
#[doc(inline)]
pub use super::__json_extract_json_1_return_type::*;
#[doc(inline)]
pub use super::__json_extract_json_2_return_type::*;
}
#[doc =
" Extracts a text value from a well-formed JSON or JSONB document at the given path."]
#[doc = ""]
#[doc =
" Works identically to [`json_extract_string`](json_extract_string()) for scalar text values."]
#[doc = ""]
#[doc =
" Returns `NULL` if the path does not exist in the JSON document, or if the value at that"]
#[doc = " path is a JSON `null`."]
#[doc = ""]
#[doc = " To extract other types, use:"]
#[doc =
" - [`jsonb_extract_integer`](jsonb_extract_integer()) for integer values"]
#[doc =
" - [`jsonb_extract_double`](jsonb_extract_double()) for floating-point values"]
#[doc =
" - [`jsonb_extract_jsonb`](jsonb_extract_jsonb_1()) for JSON objects or arrays in JSONB format"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.9 or newer."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Nullable};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 9, 0);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": \"xyz\"});"]
#[doc =
" let result = diesel::select(jsonb_extract_string::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = " assert_eq!(Some(\"xyz\".to_string()), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 42});"]
#[doc =
" let result = diesel::select(jsonb_extract_string::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = " assert_eq!(Some(\"42\".to_string()), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_extract_string::<Nullable<Json>, _, _>(None::<Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": \"xyz\"});"]
#[doc =
" let result = diesel::select(jsonb_extract_string::<Json, _, _>(json, \"$.x\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_extract_string<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, text>(json: json, text: text)
-> jsonb_extract_string<J, json, text> where
json: diesel::expression::AsExpression<J>,
text: diesel::expression::AsExpression<Text> {
jsonb_extract_string_utils::jsonb_extract_string {
json: json.as_expression(),
text: text.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`jsonb_extract_string()`](fn@jsonb_extract_string)"]
pub type jsonb_extract_string<J, json, text> =
jsonb_extract_string_utils::jsonb_extract_string<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<text as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_extract_string_return_type {
#[doc =
"Return type of the [`jsonb_extract_string()`](fn@super::jsonb_extract_string) SQL function."]
pub type jsonb_extract_string<json, text> =
super::jsonb_extract_string<<json as
diesel::expression::Expression>::SqlType, json, text>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_extract_string_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_extract_string<J, json, text> {
pub(in super) json: json,
pub(in super) text: text,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, text, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_extract_string<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_extract_string<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_extract_string<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_extract_string<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
text: ::core::fmt::Debug> ::core::fmt::Debug for
jsonb_extract_string<J, json, text> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"jsonb_extract_string", "json", &self.json, "text",
&self.text, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
text: ::core::clone::Clone> ::core::clone::Clone for
jsonb_extract_string<J, json, text> {
#[inline]
fn clone(&self) -> jsonb_extract_string<J, json, text> {
jsonb_extract_string {
json: ::core::clone::Clone::clone(&self.json),
text: ::core::clone::Clone::clone(&self.text),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
text: ::core::marker::Copy> ::core::marker::Copy for
jsonb_extract_string<J, json, text> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
text: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_extract_string<J, json, text> {
type QueryId =
jsonb_extract_string<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<text as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<text as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc =
"The return type of [`jsonb_extract_string()`](fn@jsonb_extract_string)"]
pub type HelperType<J, json, text> =
jsonb_extract_string<J, <json as AsExpression<J>>::Expression,
<text as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> Expression for jsonb_extract_string<J, json, text> where
(json, text): Expression {
type SqlType = Nullable<Text>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_extract_string<J, json, text> where
json: SelectableExpression<__DieselInternal>,
text: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_extract_string<J, json, text> where
json: AppearsOnTable<__DieselInternal>,
text: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_extract_string<J, json, text> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
text: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_extract";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> QueryFragment<crate::sqlite::Sqlite> for
jsonb_extract_string<J, json, text> where
json: QueryFragment<crate::sqlite::Sqlite>,
text: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, text>(json, text);
const _: () =
{
use diesel;
impl<json, text, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, text> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
text: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<text
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_extract_string<J, json, text> where
__Derived<json, text>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, text> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Extracts an integer value from a well-formed JSON or JSONB document at the given path."]
#[doc = ""]
#[doc =
" Works identically to [`json_extract_integer`](json_extract_integer()) for integer values."]
#[doc = ""]
#[doc =
" Returns `NULL` if the path does not exist in the JSON document, or if the value at that"]
#[doc = " path is a JSON `null`."]
#[doc = ""]
#[doc = " To extract other types, use:"]
#[doc = " - [`jsonb_extract_string`](jsonb_extract_string()) for text values"]
#[doc =
" - [`jsonb_extract_double`](jsonb_extract_double()) for floating-point values"]
#[doc =
" - [`jsonb_extract_jsonb`](jsonb_extract_jsonb_1()) for JSON objects or arrays in JSONB format"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.9 or newer."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Nullable};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 9, 0);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(jsonb_extract_integer::<Json, _, _>(json, \"$.c[2].f\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = " assert_eq!(Some(7), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 3.7});"]
#[doc =
" let result = diesel::select(jsonb_extract_integer::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = " assert_eq!(Some(3), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_extract_integer::<Nullable<Json>, _, _>(None::<Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2});"]
#[doc =
" let result = diesel::select(jsonb_extract_integer::<Json, _, _>(json, \"$.x\"))"]
#[doc = " .get_result::<Option<i32>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_extract_integer<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, text>(json: json, text: text)
-> jsonb_extract_integer<J, json, text> where
json: diesel::expression::AsExpression<J>,
text: diesel::expression::AsExpression<Text> {
jsonb_extract_integer_utils::jsonb_extract_integer {
json: json.as_expression(),
text: text.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`jsonb_extract_integer()`](fn@jsonb_extract_integer)"]
pub type jsonb_extract_integer<J, json, text> =
jsonb_extract_integer_utils::jsonb_extract_integer<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<text as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_extract_integer_return_type {
#[doc =
"Return type of the [`jsonb_extract_integer()`](fn@super::jsonb_extract_integer) SQL function."]
pub type jsonb_extract_integer<json, text> =
super::jsonb_extract_integer<<json as
diesel::expression::Expression>::SqlType, json, text>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_extract_integer_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_extract_integer<J, json, text> {
pub(in super) json: json,
pub(in super) text: text,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, text, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_extract_integer<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_extract_integer<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_extract_integer<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_extract_integer<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
text: ::core::fmt::Debug> ::core::fmt::Debug for
jsonb_extract_integer<J, json, text> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"jsonb_extract_integer", "json", &self.json, "text",
&self.text, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
text: ::core::clone::Clone> ::core::clone::Clone for
jsonb_extract_integer<J, json, text> {
#[inline]
fn clone(&self) -> jsonb_extract_integer<J, json, text> {
jsonb_extract_integer {
json: ::core::clone::Clone::clone(&self.json),
text: ::core::clone::Clone::clone(&self.text),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
text: ::core::marker::Copy> ::core::marker::Copy for
jsonb_extract_integer<J, json, text> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
text: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_extract_integer<J, json, text> {
type QueryId =
jsonb_extract_integer<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<text as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<text as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc =
"The return type of [`jsonb_extract_integer()`](fn@jsonb_extract_integer)"]
pub type HelperType<J, json, text> =
jsonb_extract_integer<J, <json as AsExpression<J>>::Expression,
<text as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> Expression for jsonb_extract_integer<J, json, text> where
(json, text): Expression {
type SqlType = Nullable<Integer>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_extract_integer<J, json, text> where
json: SelectableExpression<__DieselInternal>,
text: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_extract_integer<J, json, text> where
json: AppearsOnTable<__DieselInternal>,
text: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_extract_integer<J, json, text> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
text: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_extract";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> QueryFragment<crate::sqlite::Sqlite> for
jsonb_extract_integer<J, json, text> where
json: QueryFragment<crate::sqlite::Sqlite>,
text: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, text>(json, text);
const _: () =
{
use diesel;
impl<json, text, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, text> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
text: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<text
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_extract_integer<J, json, text> where
__Derived<json, text>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, text> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Extracts a floating-point value from a well-formed JSON or JSONB document at the given path."]
#[doc = ""]
#[doc =
" Works identically to [`json_extract_double`](json_extract_double()) for floating-point values."]
#[doc = ""]
#[doc =
" Returns `NULL` if the path does not exist in the JSON document, or if the value at that"]
#[doc = " path is a JSON `null`."]
#[doc = ""]
#[doc = " To extract other types, use:"]
#[doc = " - [`jsonb_extract_string`](jsonb_extract_string()) for text values"]
#[doc =
" - [`jsonb_extract_integer`](jsonb_extract_integer()) for integer values"]
#[doc =
" - [`jsonb_extract_jsonb`](jsonb_extract_jsonb_1()) for JSON objects or arrays in JSONB format"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.9 or newer."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Nullable};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 9, 0);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 3.14});"]
#[doc =
" let result = diesel::select(jsonb_extract_double::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<f64>>(connection)?;"]
#[doc = " assert_eq!(Some(3.14), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 7});"]
#[doc =
" let result = diesel::select(jsonb_extract_double::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<f64>>(connection)?;"]
#[doc = " assert_eq!(Some(7.0), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_extract_double::<Nullable<Json>, _, _>(None::<Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<f64>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 3.14});"]
#[doc =
" let result = diesel::select(jsonb_extract_double::<Json, _, _>(json, \"$.x\"))"]
#[doc = " .get_result::<Option<f64>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_extract_double<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, text>(json: json, text: text)
-> jsonb_extract_double<J, json, text> where
json: diesel::expression::AsExpression<J>,
text: diesel::expression::AsExpression<Text> {
jsonb_extract_double_utils::jsonb_extract_double {
json: json.as_expression(),
text: text.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`jsonb_extract_double()`](fn@jsonb_extract_double)"]
pub type jsonb_extract_double<J, json, text> =
jsonb_extract_double_utils::jsonb_extract_double<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<text as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_extract_double_return_type {
#[doc =
"Return type of the [`jsonb_extract_double()`](fn@super::jsonb_extract_double) SQL function."]
pub type jsonb_extract_double<json, text> =
super::jsonb_extract_double<<json as
diesel::expression::Expression>::SqlType, json, text>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_extract_double_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_extract_double<J, json, text> {
pub(in super) json: json,
pub(in super) text: text,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, text, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_extract_double<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_extract_double<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_extract_double<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, text, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_extract_double<J, json, text> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
text: ::core::fmt::Debug> ::core::fmt::Debug for
jsonb_extract_double<J, json, text> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"jsonb_extract_double", "json", &self.json, "text",
&self.text, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
text: ::core::clone::Clone> ::core::clone::Clone for
jsonb_extract_double<J, json, text> {
#[inline]
fn clone(&self) -> jsonb_extract_double<J, json, text> {
jsonb_extract_double {
json: ::core::clone::Clone::clone(&self.json),
text: ::core::clone::Clone::clone(&self.text),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
text: ::core::marker::Copy> ::core::marker::Copy for
jsonb_extract_double<J, json, text> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
text: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_extract_double<J, json, text> {
type QueryId =
jsonb_extract_double<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<text as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<text as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc =
"The return type of [`jsonb_extract_double()`](fn@jsonb_extract_double)"]
pub type HelperType<J, json, text> =
jsonb_extract_double<J, <json as AsExpression<J>>::Expression,
<text as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> Expression for jsonb_extract_double<J, json, text> where
(json, text): Expression {
type SqlType = Nullable<Double>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_extract_double<J, json, text> where
json: SelectableExpression<__DieselInternal>,
text: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_extract_double<J, json, text> where
json: AppearsOnTable<__DieselInternal>,
text: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_extract_double<J, json, text> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
text: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_extract";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text> QueryFragment<crate::sqlite::Sqlite> for
jsonb_extract_double<J, json, text> where
json: QueryFragment<crate::sqlite::Sqlite>,
text: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, text>(json, text);
const _: () =
{
use diesel;
impl<json, text, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, text> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
text: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<text
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_extract_double<J, json, text> where
__Derived<json, text>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, text> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Extracts a JSON object or array from a well-formed JSON or JSONB document at the given path,"]
#[doc = " returning it in JSONB format."]
#[doc = ""]
#[doc =
" Unlike [`json_extract_json`](json_extract_json_1()), which returns JSON objects and arrays"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc =
"`jsonb_extract_jsonb_0`, `jsonb_extract_jsonb_1`, ... `jsonb_extract_jsonb_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_extract_jsonb")]
#[doc =
" as text, this function returns them in the internal JSONB binary format. For scalar values"]
#[doc = " (text, integer, double, null), both functions behave identically."]
#[doc = ""]
#[doc =
" When a single path is provided, returns the value at that path as a [`Jsonb`] value."]
#[doc =
" When multiple paths are provided (using the variadic form), returns a JSONB array"]
#[doc = " containing the extracted values."]
#[doc = ""]
#[doc =
" Returns `NULL` if a single path does not exist in the JSON document. With multiple paths,"]
#[doc = " missing paths appear as `null` inside the returned JSONB array."]
#[doc = ""]
#[doc = " To extract other types, use:"]
#[doc = " - [`jsonb_extract_string`](jsonb_extract_string()) for text values"]
#[doc =
" - [`jsonb_extract_integer`](jsonb_extract_integer()) for integer values"]
#[doc =
" - [`jsonb_extract_double`](jsonb_extract_double()) for floating-point values"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.9 or newer."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Jsonb, Nullable};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 9, 0);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_1::<Json, _, _>(json, \"$\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc =
" assert_eq!(Some(json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_1::<Json, _, _>(json, \"$.c\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([4, 5, {\"f\": 7}])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_1::<Json, _, _>(json, \"$.c[2]\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"f\": 7})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5]});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_2::<Json, _, _, _>(json, \"$.c\", \"$.x\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([[4, 5], null])), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_1::<Nullable<Json>, _, _>(None::<Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_1::<Json, _, _>(json, \"$.x\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5], \"f\": 7});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_2::<Json, _, _, _>(json, \"$.c\", \"$.a\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([[4, 5], 2])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_2::<Json, _, _, _>(json, \"$.b\", \"$.c\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([null, null])), result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_extract_jsonb_1<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, text_1>(json: json, text_1: text_1)
-> jsonb_extract_jsonb_1<J, json, text_1> where
json: diesel::expression::AsExpression<J>,
text_1: diesel::expression::AsExpression<Text> {
jsonb_extract_jsonb_1_utils::jsonb_extract_jsonb_1 {
json: json.as_expression(),
text_1: text_1.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`jsonb_extract_jsonb_1()`](fn@jsonb_extract_jsonb_1)"]
pub type jsonb_extract_jsonb_1<J, json, text_1> =
jsonb_extract_jsonb_1_utils::jsonb_extract_jsonb_1<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<text_1 as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_extract_jsonb_1_return_type {
#[doc =
"Return type of the [`jsonb_extract_jsonb_1()`](fn@super::jsonb_extract_jsonb_1) SQL function."]
pub type jsonb_extract_jsonb_1<json, text_1> =
super::jsonb_extract_jsonb_1<<json as
diesel::expression::Expression>::SqlType, json, text_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_extract_jsonb_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_extract_jsonb_1<J, json, text_1> {
pub(in super) json: json,
pub(in super) text_1: text_1,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, text_1, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_extract_jsonb_1<J, json, text_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_extract_jsonb_1<J, json, text_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_extract_jsonb_1<J, json, text_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_extract_jsonb_1<J, json, text_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
text_1: ::core::fmt::Debug> ::core::fmt::Debug for
jsonb_extract_jsonb_1<J, json, text_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"jsonb_extract_jsonb_1", "json", &self.json, "text_1",
&self.text_1, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
text_1: ::core::clone::Clone> ::core::clone::Clone for
jsonb_extract_jsonb_1<J, json, text_1> {
#[inline]
fn clone(&self) -> jsonb_extract_jsonb_1<J, json, text_1> {
jsonb_extract_jsonb_1 {
json: ::core::clone::Clone::clone(&self.json),
text_1: ::core::clone::Clone::clone(&self.text_1),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
text_1: ::core::marker::Copy> ::core::marker::Copy for
jsonb_extract_jsonb_1<J, json, text_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
text_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_extract_jsonb_1<J, json, text_1> {
type QueryId =
jsonb_extract_jsonb_1<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<text_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<text_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`jsonb_extract_jsonb_1()`](fn@jsonb_extract_jsonb_1)"]
pub type HelperType<J, json, text_1> =
jsonb_extract_jsonb_1<J, <json as AsExpression<J>>::Expression,
<text_1 as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1> Expression for jsonb_extract_jsonb_1<J, json, text_1> where
(json, text_1): Expression {
type SqlType = Nullable<Jsonb>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, __DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_extract_jsonb_1<J, json, text_1> where
json: SelectableExpression<__DieselInternal>,
text_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_extract_jsonb_1<J, json, text_1> where
json: AppearsOnTable<__DieselInternal>,
text_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, __DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_extract_jsonb_1<J, json, text_1> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
text_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_extract";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1> QueryFragment<crate::sqlite::Sqlite> for
jsonb_extract_jsonb_1<J, json, text_1> where
json: QueryFragment<crate::sqlite::Sqlite>,
text_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, text_1>(json, text_1);
const _: () =
{
use diesel;
impl<json, text_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, text_1> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
text_1: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<text_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_extract_jsonb_1<J, json, text_1> where
__Derived<json, text_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, text_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Extracts a JSON object or array from a well-formed JSON or JSONB document at the given path,"]
#[doc = " returning it in JSONB format."]
#[doc = ""]
#[doc =
" Unlike [`json_extract_json`](json_extract_json_1()), which returns JSON objects and arrays"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc =
"`jsonb_extract_jsonb_0`, `jsonb_extract_jsonb_1`, ... `jsonb_extract_jsonb_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_extract_jsonb")]
#[doc =
" as text, this function returns them in the internal JSONB binary format. For scalar values"]
#[doc = " (text, integer, double, null), both functions behave identically."]
#[doc = ""]
#[doc =
" When a single path is provided, returns the value at that path as a [`Jsonb`] value."]
#[doc =
" When multiple paths are provided (using the variadic form), returns a JSONB array"]
#[doc = " containing the extracted values."]
#[doc = ""]
#[doc =
" Returns `NULL` if a single path does not exist in the JSON document. With multiple paths,"]
#[doc = " missing paths appear as `null` inside the returned JSONB array."]
#[doc = ""]
#[doc = " To extract other types, use:"]
#[doc = " - [`jsonb_extract_string`](jsonb_extract_string()) for text values"]
#[doc =
" - [`jsonb_extract_integer`](jsonb_extract_integer()) for integer values"]
#[doc =
" - [`jsonb_extract_double`](jsonb_extract_double()) for floating-point values"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.9 or newer."]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Jsonb, Nullable};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 9, 0);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_1::<Json, _, _>(json, \"$\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc =
" assert_eq!(Some(json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_1::<Json, _, _>(json, \"$.c\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([4, 5, {\"f\": 7}])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_1::<Json, _, _>(json, \"$.c[2]\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"f\": 7})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5]});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_2::<Json, _, _, _>(json, \"$.c\", \"$.x\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([[4, 5], null])), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_1::<Nullable<Json>, _, _>(None::<Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5, {\"f\": 7}]});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_1::<Json, _, _>(json, \"$.x\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2, \"c\": [4, 5], \"f\": 7});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_2::<Json, _, _, _>(json, \"$.c\", \"$.a\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([[4, 5], 2])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 2});"]
#[doc =
" let result = diesel::select(jsonb_extract_jsonb_2::<Json, _, _, _>(json, \"$.b\", \"$.c\"))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([null, null])), result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_extract_jsonb_2<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, text_1,
text_2>(json: json, text_1: text_1, text_2: text_2)
-> jsonb_extract_jsonb_2<J, json, text_1, text_2> where
json: diesel::expression::AsExpression<J>,
text_1: diesel::expression::AsExpression<Text>,
text_2: diesel::expression::AsExpression<Text> {
jsonb_extract_jsonb_2_utils::jsonb_extract_jsonb_2 {
json: json.as_expression(),
text_1: text_1.as_expression(),
text_2: text_2.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`jsonb_extract_jsonb_2()`](fn@jsonb_extract_jsonb_2)"]
pub type jsonb_extract_jsonb_2<J, json, text_1, text_2> =
jsonb_extract_jsonb_2_utils::jsonb_extract_jsonb_2<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<text_1 as diesel::expression::AsExpression<Text>>::Expression,
<text_2 as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_extract_jsonb_2_return_type {
#[doc =
"Return type of the [`jsonb_extract_jsonb_2()`](fn@super::jsonb_extract_jsonb_2) SQL function."]
pub type jsonb_extract_jsonb_2<json, text_1, text_2> =
super::jsonb_extract_jsonb_2<<json as
diesel::expression::Expression>::SqlType, json, text_1, text_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_extract_jsonb_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_extract_jsonb_2<J, json, text_1, text_2> {
pub(in super) json: json,
pub(in super) text_1: text_1,
pub(in super) text_2: text_2,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, text_1, text_2, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_extract_jsonb_2<J, json, text_1, text_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, text_2, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_extract_jsonb_2<J, json, text_1, text_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, text_2, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_extract_jsonb_2<J, json, text_1, text_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, text_1, text_2, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_extract_jsonb_2<J, json, text_1, text_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
text_1: ::core::fmt::Debug, text_2: ::core::fmt::Debug>
::core::fmt::Debug for jsonb_extract_jsonb_2<J, json, text_1, text_2>
{
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"jsonb_extract_jsonb_2", "json", &self.json, "text_1",
&self.text_1, "text_2", &self.text_2, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
text_1: ::core::clone::Clone, text_2: ::core::clone::Clone>
::core::clone::Clone for
jsonb_extract_jsonb_2<J, json, text_1, text_2> {
#[inline]
fn clone(&self) -> jsonb_extract_jsonb_2<J, json, text_1, text_2> {
jsonb_extract_jsonb_2 {
json: ::core::clone::Clone::clone(&self.json),
text_1: ::core::clone::Clone::clone(&self.text_1),
text_2: ::core::clone::Clone::clone(&self.text_2),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
text_1: ::core::marker::Copy, text_2: ::core::marker::Copy>
::core::marker::Copy for
jsonb_extract_jsonb_2<J, json, text_1, text_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
text_1: diesel::query_builder::QueryId,
text_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_extract_jsonb_2<J, json, text_1, text_2> {
type QueryId =
jsonb_extract_jsonb_2<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<text_1 as diesel::query_builder::QueryId>::QueryId,
<text_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<text_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<text_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<text_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`jsonb_extract_jsonb_2()`](fn@jsonb_extract_jsonb_2)"]
pub type HelperType<J, json, text_1, text_2> =
jsonb_extract_jsonb_2<J, <json as AsExpression<J>>::Expression,
<text_1 as AsExpression<Text>>::Expression,
<text_2 as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2> Expression for
jsonb_extract_jsonb_2<J, json, text_1, text_2> where
(json, text_1, text_2): Expression {
type SqlType = Nullable<Jsonb>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
jsonb_extract_jsonb_2<J, json, text_1, text_2> where
json: SelectableExpression<__DieselInternal>,
text_1: SelectableExpression<__DieselInternal>,
text_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_extract_jsonb_2<J, json, text_1, text_2> where
json: AppearsOnTable<__DieselInternal>,
text_1: AppearsOnTable<__DieselInternal>,
text_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2, __DieselInternal> FunctionFragment<__DieselInternal>
for jsonb_extract_jsonb_2<J, json, text_1, text_2> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
text_1: QueryFragment<__DieselInternal>,
text_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_extract";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.text_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.text_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2> QueryFragment<crate::sqlite::Sqlite> for
jsonb_extract_jsonb_2<J, json, text_1, text_2> where
json: QueryFragment<crate::sqlite::Sqlite>,
text_1: QueryFragment<crate::sqlite::Sqlite>,
text_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, text_1, text_2>(json, text_1, text_2);
const _: () =
{
use diesel;
impl<json, text_1, text_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, text_1, text_2> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
text_1: diesel::expression::ValidGrouping<__GroupByClause>,
text_2: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<text_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<text_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<text_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<text_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
text_1, text_2, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_extract_jsonb_2<J, json, text_1, text_2> where
__Derived<json, text_1, text_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, text_1, text_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __jsonb_extract_jsonb_return_types {
#[doc(inline)]
pub use super::__jsonb_extract_jsonb_1_return_type::*;
#[doc(inline)]
pub use super::__jsonb_extract_jsonb_2_return_type::*;
}
#[doc = " Converts the given json value to pretty-printed, indented text"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.46 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, json_pretty};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Text, Json, Jsonb, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 46, 0);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty::<Json, _>(json!([{\"f1\":1,\"f2\":null},2,null,3])))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"["]
#[doc = " {"]
#[doc = " \"f1\": 1,"]
#[doc = " \"f2\": null"]
#[doc = " },"]
#[doc = " 2,"]
#[doc = " null,"]
#[doc = " 3"]
#[doc = " ]\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty::<Json, _>(json!({\"a\": 1, \"b\": \"cd\"})))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"{"]
#[doc = " \"a\": 1,"]
#[doc = " \"b\": \"cd\""]
#[doc = " }\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty::<Json, _>(json!(\"abc\")))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"\"abc\"\"#, result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_pretty::<Json, _>(json!(22)))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"22\"#, result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_pretty::<Json, _>(json!(false)))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"false\"#, result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_pretty::<Json, _>(json!(null)))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"null\"#, result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_pretty::<Json, _>(json!({})))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"{}\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty::<Nullable<Json>, _>(None::<Value>))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty::<Jsonb, _>(json!([{\"f1\":1,\"f2\":null},2,null,3])))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"["]
#[doc = " {"]
#[doc = " \"f1\": 1,"]
#[doc = " \"f2\": null"]
#[doc = " },"]
#[doc = " 2,"]
#[doc = " null,"]
#[doc = " 3"]
#[doc = " ]\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty::<Jsonb, _>(json!({\"a\": 1, \"b\": \"cd\"})))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"{"]
#[doc = " \"a\": 1,"]
#[doc = " \"b\": \"cd\""]
#[doc = " }\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty::<Jsonb, _>(json!(\"abc\")))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"\"abc\"\"#, result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_pretty::<Jsonb, _>(json!(22)))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"22\"#, result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_pretty::<Jsonb, _>(json!(false)))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"false\"#, result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_pretty::<Jsonb, _>(json!(null)))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"null\"#, result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_pretty::<Jsonb, _>(json!({})))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"{}\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty::<Nullable<Jsonb>, _>(None::<Value>))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert!(result.is_none());"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_pretty<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j>(j: j) -> json_pretty<J, j> where
j: diesel::expression::AsExpression<J> {
json_pretty_utils::json_pretty {
j: j.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_pretty()`](fn@json_pretty)"]
pub type json_pretty<J, j> =
json_pretty_utils::json_pretty<J,
<j as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_pretty_return_type {
#[doc =
"Return type of the [`json_pretty()`](fn@super::json_pretty) SQL function."]
pub type json_pretty<j> =
super::json_pretty<<j as diesel::expression::Expression>::SqlType, j>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_pretty_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_pretty<J, j> {
pub(in super) j: j,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, j, __Rhs> ::core::ops::Add<__Rhs> for json_pretty<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Sub<__Rhs> for json_pretty<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Mul<__Rhs> for json_pretty<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Div<__Rhs> for json_pretty<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, j: ::core::fmt::Debug> ::core::fmt::Debug for
json_pretty<J, j> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_pretty", "j", &self.j, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, j: ::core::clone::Clone>
::core::clone::Clone for json_pretty<J, j> {
#[inline]
fn clone(&self) -> json_pretty<J, j> {
json_pretty {
j: ::core::clone::Clone::clone(&self.j),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, j: ::core::marker::Copy>
::core::marker::Copy for json_pretty<J, j> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
j: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_pretty<J, j> {
type QueryId =
json_pretty<<J as diesel::query_builder::QueryId>::QueryId,
<j as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<j as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&& true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<j as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_pretty()`](fn@json_pretty)"]
pub type HelperType<J, j> =
json_pretty<J, <j as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j> Expression for json_pretty<J, j> where
(j): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, __DieselInternal>
SelectableExpression<__DieselInternal> for json_pretty<J, j> where
j: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_pretty<J, j> where
j: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, __DieselInternal>
FunctionFragment<__DieselInternal> for json_pretty<J, j> where
__DieselInternal: diesel::backend::Backend,
j: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_pretty";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.j.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.j.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j> QueryFragment<crate::sqlite::Sqlite> for
json_pretty<J, j> where j: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<j>(j);
const _: () =
{
use diesel;
impl<j, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<j> where
j: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, __DieselInternal>
ValidGrouping<__DieselInternal> for json_pretty<J, j> where
__Derived<j>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<j> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc = " Converts the given json value to pretty-printed, indented text"]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.46 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, json_pretty_with_indentation};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Text, Json, Jsonb, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 46, 0);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Json, _, _>(json!([{\"f1\":1,\"f2\":null},2,null,3]), \" \"))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"["]
#[doc = " {"]
#[doc = " \"f1\": 1,"]
#[doc = " \"f2\": null"]
#[doc = " },"]
#[doc = " 2,"]
#[doc = " null,"]
#[doc = " 3"]
#[doc = " ]\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Json, _, _>(json!([{\"f1\":1,\"f2\":null},2,null,3]), None::<&str>))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"["]
#[doc = " {"]
#[doc = " \"f1\": 1,"]
#[doc = " \"f2\": null"]
#[doc = " },"]
#[doc = " 2,"]
#[doc = " null,"]
#[doc = " 3"]
#[doc = " ]\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Json, _, _>(json!({\"a\": 1, \"b\": \"cd\"}), \" \"))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"{"]
#[doc = " \"a\": 1,"]
#[doc = " \"b\": \"cd\""]
#[doc = " }\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Json, _, _>(json!(\"abc\"), \" \"))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"\"abc\"\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Json, _, _>(json!(22), \" \"))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"22\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Json, _, _>(json!(false), None::<&str>))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"false\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Json, _, _>(json!(null), None::<&str>))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"null\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Json, _, _>(json!({}), \" \"))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"{}\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Nullable<Json>, _, _>(None::<Value>, None::<&str>))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Jsonb, _, _>(json!([{\"f1\":1,\"f2\":null},2,null,3]), \" \"))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"["]
#[doc = " {"]
#[doc = " \"f1\": 1,"]
#[doc = " \"f2\": null"]
#[doc = " },"]
#[doc = " 2,"]
#[doc = " null,"]
#[doc = " 3"]
#[doc = " ]\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Jsonb, _, _>(json!([{\"f1\":1,\"f2\":null},2,null,3]), None::<&str>))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"["]
#[doc = " {"]
#[doc = " \"f1\": 1,"]
#[doc = " \"f2\": null"]
#[doc = " },"]
#[doc = " 2,"]
#[doc = " null,"]
#[doc = " 3"]
#[doc = " ]\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Jsonb, _, _>(json!({\"a\": 1, \"b\": \"cd\"}), \" \"))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"{"]
#[doc = " \"a\": 1,"]
#[doc = " \"b\": \"cd\""]
#[doc = " }\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Jsonb, _, _>(json!(\"abc\"), \" \"))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"\"abc\"\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Jsonb, _, _>(json!(22), \" \"))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"22\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Jsonb, _, _>(json!(false), None::<&str>))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"false\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Jsonb, _, _>(json!(null), None::<&str>))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"null\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Jsonb, _, _>(json!({}), \" \"))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(r#\"{}\"#, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_pretty_with_indentation::<Nullable<Jsonb>, _, _>(None::<Value>, None::<&str>))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_pretty_with_indentation<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, indentation>(j: j, indentation: indentation)
-> json_pretty_with_indentation<J, j, indentation> where
j: diesel::expression::AsExpression<J>,
indentation: diesel::expression::AsExpression<Nullable<Text>> {
json_pretty_with_indentation_utils::json_pretty_with_indentation {
j: j.as_expression(),
indentation: indentation.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`json_pretty_with_indentation()`](fn@json_pretty_with_indentation)"]
pub type json_pretty_with_indentation<J, j, indentation> =
json_pretty_with_indentation_utils::json_pretty_with_indentation<J,
<j as diesel::expression::AsExpression<J>>::Expression,
<indentation as
diesel::expression::AsExpression<Nullable<Text>>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_pretty_with_indentation_return_type {
#[doc =
"Return type of the [`json_pretty_with_indentation()`](fn@super::json_pretty_with_indentation) SQL function."]
pub type json_pretty_with_indentation<j, indentation> =
super::json_pretty_with_indentation<<j as
diesel::expression::Expression>::SqlType, j, indentation>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_pretty_with_indentation_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_pretty_with_indentation<J, j, indentation> {
pub(in super) j: j,
pub(in super) indentation: indentation,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, j, indentation, __Rhs> ::core::ops::Add<__Rhs> for
json_pretty_with_indentation<J, j, indentation> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, j, indentation, __Rhs> ::core::ops::Sub<__Rhs> for
json_pretty_with_indentation<J, j, indentation> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, j, indentation, __Rhs> ::core::ops::Mul<__Rhs> for
json_pretty_with_indentation<J, j, indentation> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, j, indentation, __Rhs> ::core::ops::Div<__Rhs> for
json_pretty_with_indentation<J, j, indentation> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, j: ::core::fmt::Debug,
indentation: ::core::fmt::Debug> ::core::fmt::Debug for
json_pretty_with_indentation<J, j, indentation> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"json_pretty_with_indentation", "j", &self.j, "indentation",
&self.indentation, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, j: ::core::clone::Clone,
indentation: ::core::clone::Clone> ::core::clone::Clone for
json_pretty_with_indentation<J, j, indentation> {
#[inline]
fn clone(&self) -> json_pretty_with_indentation<J, j, indentation> {
json_pretty_with_indentation {
j: ::core::clone::Clone::clone(&self.j),
indentation: ::core::clone::Clone::clone(&self.indentation),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, j: ::core::marker::Copy,
indentation: ::core::marker::Copy> ::core::marker::Copy for
json_pretty_with_indentation<J, j, indentation> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
j: diesel::query_builder::QueryId,
indentation: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_pretty_with_indentation<J, j, indentation> {
type QueryId =
json_pretty_with_indentation<<J as
diesel::query_builder::QueryId>::QueryId,
<j as diesel::query_builder::QueryId>::QueryId,
<indentation as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<j as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<indentation as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<j as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<indentation as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`json_pretty_with_indentation()`](fn@json_pretty_with_indentation)"]
pub type HelperType<J, j, indentation> =
json_pretty_with_indentation<J, <j as AsExpression<J>>::Expression,
<indentation as AsExpression<Nullable<Text>>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, indentation> Expression for
json_pretty_with_indentation<J, j, indentation> where
(j, indentation): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, indentation, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_pretty_with_indentation<J, j, indentation> where
j: SelectableExpression<__DieselInternal>,
indentation: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, indentation, __DieselInternal>
AppearsOnTable<__DieselInternal> for
json_pretty_with_indentation<J, j, indentation> where
j: AppearsOnTable<__DieselInternal>,
indentation: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, indentation, __DieselInternal>
FunctionFragment<__DieselInternal> for
json_pretty_with_indentation<J, j, indentation> where
__DieselInternal: diesel::backend::Backend,
j: QueryFragment<__DieselInternal>,
indentation: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_pretty";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.j.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.j.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.indentation.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.indentation.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, indentation>
QueryFragment<crate::sqlite::Sqlite> for
json_pretty_with_indentation<J, j, indentation> where
j: QueryFragment<crate::sqlite::Sqlite>,
indentation: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<j, indentation>(j, indentation);
const _: () =
{
use diesel;
impl<j, indentation, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<j, indentation> where
j: diesel::expression::ValidGrouping<__GroupByClause>,
indentation: diesel::expression::ValidGrouping<__GroupByClause>,
<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<indentation
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<indentation as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, indentation, __DieselInternal>
ValidGrouping<__DieselInternal> for
json_pretty_with_indentation<J, j, indentation> where
__Derived<j, indentation>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<j, indentation> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Returns `true` if the argument is well-formed JSON, or returns `false` if is not well-formed."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.46 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, json_valid};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Text, Json, Jsonb, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 46, 0);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_valid::<Json, _>(json!({\"x\":35})))"]
#[doc = " .get_result::<bool>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(true, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_valid::<Nullable<Json>, _>(None::<serde_json::Value>))"]
#[doc = " .get_result::<Option<bool>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_valid<J: JsonOrNullableJson + MaybeNullableValue<Bool>, j>(j: j)
-> json_valid<J, j> where j: diesel::expression::AsExpression<J> {
json_valid_utils::json_valid {
j: j.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_valid()`](fn@json_valid)"]
pub type json_valid<J, j> =
json_valid_utils::json_valid<J,
<j as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_valid_return_type {
#[doc =
"Return type of the [`json_valid()`](fn@super::json_valid) SQL function."]
pub type json_valid<j> =
super::json_valid<<j as diesel::expression::Expression>::SqlType, j>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_valid_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_valid<J, j> {
pub(in super) j: j,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, j, __Rhs> ::core::ops::Add<__Rhs> for json_valid<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Sub<__Rhs> for json_valid<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Mul<__Rhs> for json_valid<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Div<__Rhs> for json_valid<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, j: ::core::fmt::Debug> ::core::fmt::Debug for
json_valid<J, j> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_valid", "j", &self.j, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, j: ::core::clone::Clone>
::core::clone::Clone for json_valid<J, j> {
#[inline]
fn clone(&self) -> json_valid<J, j> {
json_valid {
j: ::core::clone::Clone::clone(&self.j),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, j: ::core::marker::Copy>
::core::marker::Copy for json_valid<J, j> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
j: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_valid<J, j> {
type QueryId =
json_valid<<J as diesel::query_builder::QueryId>::QueryId,
<j as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<j as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&& true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<j as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_valid()`](fn@json_valid)"]
pub type HelperType<J, j> =
json_valid<J, <j as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJson + MaybeNullableValue<Bool>, j> Expression for
json_valid<J, j> where (j): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJson + MaybeNullableValue<Bool>, j,
__DieselInternal> SelectableExpression<__DieselInternal> for
json_valid<J, j> where j: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJson + MaybeNullableValue<Bool>, j,
__DieselInternal> AppearsOnTable<__DieselInternal> for
json_valid<J, j> where j: AppearsOnTable<__DieselInternal>,
Self: Expression {}
impl<J: JsonOrNullableJson + MaybeNullableValue<Bool>, j,
__DieselInternal> FunctionFragment<__DieselInternal> for
json_valid<J, j> where __DieselInternal: diesel::backend::Backend,
j: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_valid";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.j.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.j.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJson + MaybeNullableValue<Bool>, j>
QueryFragment<crate::sqlite::Sqlite> for json_valid<J, j> where
j: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<j>(j);
const _: () =
{
use diesel;
impl<j, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<j> where
j: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJson + MaybeNullableValue<Bool>, j,
__DieselInternal> ValidGrouping<__DieselInternal> for json_valid<J, j>
where __Derived<j>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<j> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The json_valid(X,Y) function returns 1 if the argument X is well-formed JSON, or returns 0 if X is not well-formed."]
#[doc =
" The Y parameter is an integer bitmask that defines what is meant by \"well-formed\"."]
#[doc = ""]
#[doc = " The following bits of Y are currently defined:"]
#[doc =
" - 0x01 → The input is text that strictly complies with canonical RFC-8259 JSON, without any extensions."]
#[doc = " - 0x02 → The input is text that is JSON with JSON5 extensions."]
#[doc =
" - 0x04 → The input is a BLOB that superficially appears to be JSONB."]
#[doc =
" - 0x08 → The input is a BLOB that strictly conforms to the internal JSONB format."]
#[doc = ""]
#[doc =
" By combining bits, the following useful values of Y can be derived:"]
#[doc = " - 1 → X is RFC-8259 JSON text"]
#[doc = " - 2 → X is JSON5 text"]
#[doc = " - 4 → X is probably JSONB"]
#[doc = " - 5 → X is RFC-8259 JSON text or JSONB"]
#[doc = " - 6 → X is JSON5 text or JSONB (recommended for most use cases)"]
#[doc = " - 8 → X is strictly conforming JSONB"]
#[doc = " - 9 → X is RFC-8259 or strictly conforming JSONB"]
#[doc = " - 10 → X is JSON5 or strictly conforming JSONB"]
#[doc = ""]
#[doc =
" The Y parameter must be between 1 and 15 (inclusive), or an error is raised."]
#[doc = ""]
#[doc = " If either X or Y inputs are NULL, then the function returns NULL."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.46 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, json_valid_with_flags};"]
#[doc = " # use diesel::sqlite::JsonValidFlag;"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Text, Json, Jsonb, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 46, 0);"]
#[doc = ""]
#[doc = " // Standard RFC-8259 JSON"]
#[doc =
" let result = diesel::select(json_valid_with_flags::<Text, _, _>(r#\"{\"x\":35}\"#, JsonValidFlag::Rfc8259Json))"]
#[doc = " .get_result::<bool>(connection)?;"]
#[doc = " assert_eq!(true, result);"]
#[doc = ""]
#[doc = " // JSON5 not valid as RFC-8259"]
#[doc =
" let result = diesel::select(json_valid_with_flags::<Text, _, _>(r#\"{x:35}\"#, JsonValidFlag::Rfc8259Json))"]
#[doc = " .get_result::<bool>(connection)?;"]
#[doc = " assert_eq!(false, result);"]
#[doc = ""]
#[doc = " // JSON5 valid with JSON5 flag"]
#[doc =
" let result = diesel::select(json_valid_with_flags::<Text, _, _>(r#\"{x:35}\"#, JsonValidFlag::Json5OrJsonb))"]
#[doc = " .get_result::<bool>(connection)?;"]
#[doc = " assert_eq!(true, result);"]
#[doc = ""]
#[doc = " // Invalid JSON"]
#[doc =
" let result = diesel::select(json_valid_with_flags::<Text, _, _>(r#\"{\"x\":35\"#, JsonValidFlag::Rfc8259Json))"]
#[doc = " .get_result::<bool>(connection)?;"]
#[doc = " assert_eq!(false, result);"]
#[doc = ""]
#[doc = " // NULL input returns NULL"]
#[doc =
" let result = diesel::select(json_valid_with_flags::<Nullable<Text>, _, _>(None::<&str>, JsonValidFlag::Rfc8259Json))"]
#[doc = " .get_result::<Option<bool>>(connection)?;"]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_valid_with_flags<X: TextOrNullableTextOrBinaryOrNullableBinary +
SingleValue + MaybeNullableValue<Bool>, x, flags>(x: x, flags: flags)
-> json_valid_with_flags<X, x, flags> where
x: diesel::expression::AsExpression<X>,
flags: diesel::expression::AsExpression<crate::sqlite::types::JsonValidFlags> {
json_valid_with_flags_utils::json_valid_with_flags {
x: x.as_expression(),
flags: flags.as_expression(),
X: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`json_valid_with_flags()`](fn@json_valid_with_flags)"]
pub type json_valid_with_flags<X, x, flags> =
json_valid_with_flags_utils::json_valid_with_flags<X,
<x as diesel::expression::AsExpression<X>>::Expression,
<flags as
diesel::expression::AsExpression<crate::sqlite::types::JsonValidFlags>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_valid_with_flags_return_type {
#[doc =
"Return type of the [`json_valid_with_flags()`](fn@super::json_valid_with_flags) SQL function."]
pub type json_valid_with_flags<x, flags> =
super::json_valid_with_flags<<x as
diesel::expression::Expression>::SqlType, x, flags>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_valid_with_flags_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_valid_with_flags<X, x, flags> {
pub(in super) x: x,
pub(in super) flags: flags,
pub(in super) X: ::core::marker::PhantomData<X>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<X, x, flags, __Rhs> ::core::ops::Add<__Rhs> for
json_valid_with_flags<X, x, flags> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<X, x, flags, __Rhs> ::core::ops::Sub<__Rhs> for
json_valid_with_flags<X, x, flags> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<X, x, flags, __Rhs> ::core::ops::Mul<__Rhs> for
json_valid_with_flags<X, x, flags> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<X, x, flags, __Rhs> ::core::ops::Div<__Rhs> for
json_valid_with_flags<X, x, flags> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<X: ::core::fmt::Debug, x: ::core::fmt::Debug,
flags: ::core::fmt::Debug> ::core::fmt::Debug for
json_valid_with_flags<X, x, flags> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"json_valid_with_flags", "x", &self.x, "flags", &self.flags,
"X", &&self.X)
}
}
#[automatically_derived]
impl<X: ::core::clone::Clone, x: ::core::clone::Clone,
flags: ::core::clone::Clone> ::core::clone::Clone for
json_valid_with_flags<X, x, flags> {
#[inline]
fn clone(&self) -> json_valid_with_flags<X, x, flags> {
json_valid_with_flags {
x: ::core::clone::Clone::clone(&self.x),
flags: ::core::clone::Clone::clone(&self.flags),
X: ::core::clone::Clone::clone(&self.X),
}
}
}
#[automatically_derived]
impl<X: ::core::marker::Copy, x: ::core::marker::Copy,
flags: ::core::marker::Copy> ::core::marker::Copy for
json_valid_with_flags<X, x, flags> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<X: diesel::query_builder::QueryId,
x: diesel::query_builder::QueryId,
flags: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_valid_with_flags<X, x, flags> {
type QueryId =
json_valid_with_flags<<X as
diesel::query_builder::QueryId>::QueryId,
<x as diesel::query_builder::QueryId>::QueryId,
<flags as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<X as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<x as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<flags as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<X as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<x as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<flags as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`json_valid_with_flags()`](fn@json_valid_with_flags)"]
pub type HelperType<X, x, flags> =
json_valid_with_flags<X, <x as AsExpression<X>>::Expression,
<flags as
AsExpression<crate::sqlite::types::JsonValidFlags>>::Expression>;
impl<X: TextOrNullableTextOrBinaryOrNullableBinary + SingleValue +
MaybeNullableValue<Bool>, x, flags> Expression for
json_valid_with_flags<X, x, flags> where (x, flags): Expression {
type SqlType = X::Out;
}
impl<X: TextOrNullableTextOrBinaryOrNullableBinary + SingleValue +
MaybeNullableValue<Bool>, x, flags, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_valid_with_flags<X, x, flags> where
x: SelectableExpression<__DieselInternal>,
flags: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<X: TextOrNullableTextOrBinaryOrNullableBinary + SingleValue +
MaybeNullableValue<Bool>, x, flags, __DieselInternal>
AppearsOnTable<__DieselInternal> for
json_valid_with_flags<X, x, flags> where
x: AppearsOnTable<__DieselInternal>,
flags: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<X: TextOrNullableTextOrBinaryOrNullableBinary + SingleValue +
MaybeNullableValue<Bool>, x, flags, __DieselInternal>
FunctionFragment<__DieselInternal> for
json_valid_with_flags<X, x, flags> where
__DieselInternal: diesel::backend::Backend,
x: QueryFragment<__DieselInternal>,
flags: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_valid";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.x.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.x.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.flags.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.flags.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<X: TextOrNullableTextOrBinaryOrNullableBinary + SingleValue +
MaybeNullableValue<Bool>, x, flags>
QueryFragment<crate::sqlite::Sqlite> for
json_valid_with_flags<X, x, flags> where
x: QueryFragment<crate::sqlite::Sqlite>,
flags: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<x, flags>(x, flags);
const _: () =
{
use diesel;
impl<x, flags, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<x, flags> where
x: diesel::expression::ValidGrouping<__GroupByClause>,
flags: diesel::expression::ValidGrouping<__GroupByClause>,
<x as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<flags
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<x as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<flags as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<X: TextOrNullableTextOrBinaryOrNullableBinary + SingleValue +
MaybeNullableValue<Bool>, x, flags, __DieselInternal>
ValidGrouping<__DieselInternal> for json_valid_with_flags<X, x, flags>
where __Derived<x, flags>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<x, flags> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The json_type(X) function returns the \"type\" of the outermost element of X."]
#[doc =
" The \"type\" returned by json_type() is one of the following SQL text values:"]
#[doc =
" \'null\', \'true\', \'false\', \'integer\', \'real\', \'text\', \'array\', or \'object\'."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, json_type};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Text, Json, Jsonb, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_type::<Json, _>(json!({\"a\": [2, 3.5, true, false, null, \"x\"]})))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(\"object\", result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_type::<Jsonb, _>(json!({\"a\": [2, 3.5, true, false, null, \"x\"]})))"]
#[doc = " .get_result::<String>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(\"object\", result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_type::<Nullable<Json>, _>(None::<serde_json::Value>))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_type<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j>(j: j) -> json_type<J, j> where
j: diesel::expression::AsExpression<J> {
json_type_utils::json_type {
j: j.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_type()`](fn@json_type)"]
pub type json_type<J, j> =
json_type_utils::json_type<J,
<j as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_type_return_type {
#[doc =
"Return type of the [`json_type()`](fn@super::json_type) SQL function."]
pub type json_type<j> =
super::json_type<<j as diesel::expression::Expression>::SqlType, j>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_type_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_type<J, j> {
pub(in super) j: j,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, j, __Rhs> ::core::ops::Add<__Rhs> for json_type<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Sub<__Rhs> for json_type<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Mul<__Rhs> for json_type<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Div<__Rhs> for json_type<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, j: ::core::fmt::Debug> ::core::fmt::Debug for
json_type<J, j> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "json_type",
"j", &self.j, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, j: ::core::clone::Clone>
::core::clone::Clone for json_type<J, j> {
#[inline]
fn clone(&self) -> json_type<J, j> {
json_type {
j: ::core::clone::Clone::clone(&self.j),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, j: ::core::marker::Copy>
::core::marker::Copy for json_type<J, j> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
j: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_type<J, j> {
type QueryId =
json_type<<J as diesel::query_builder::QueryId>::QueryId,
<j as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<j as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&& true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<j as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_type()`](fn@json_type)"]
pub type HelperType<J, j> =
json_type<J, <j as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j> Expression for json_type<J, j> where
(j): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, __DieselInternal>
SelectableExpression<__DieselInternal> for json_type<J, j> where
j: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_type<J, j> where
j: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, __DieselInternal>
FunctionFragment<__DieselInternal> for json_type<J, j> where
__DieselInternal: diesel::backend::Backend,
j: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_type";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.j.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.j.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j> QueryFragment<crate::sqlite::Sqlite> for
json_type<J, j> where j: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<j>(j);
const _: () =
{
use diesel;
impl<j, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<j> where
j: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Text>, j, __DieselInternal>
ValidGrouping<__DieselInternal> for json_type<J, j> where
__Derived<j>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<j> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The json_type(X,P) function returns the \"type\" of the element in X that is selected by path P."]
#[doc =
" If the path P in json_type(X,P) selects an element that does not exist in X, then this function returns NULL."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, json_type_with_path};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Text, Json, Jsonb, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = ""]
#[doc =
" let json_value = json!({\"a\": [2, 3.5, true, false, null, \"x\"]});"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_type_with_path::<Json, _, _>(json_value.clone(), \"$.a\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(\"array\".to_string()), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_type_with_path::<Json, _, _>(json_value.clone(), \"$.a[0]\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(\"integer\".to_string()), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_type_with_path::<Json, _, _>(json_value.clone(), \"$.a[1]\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(\"real\".to_string()), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_type_with_path::<Json, _, _>(json_value.clone(), \"$.a[2]\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(\"true\".to_string()), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_type_with_path::<Json, _, _>(json_value.clone(), \"$.a[6]\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_type_with_path::<Jsonb, _, _>(json_value.clone(), \"$.a\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(Some(\"array\".to_string()), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_type_with_path::<Nullable<Json>, _, _>(None::<serde_json::Value>, \"$.a\"))"]
#[doc = " .get_result::<Option<String>>(connection)?;"]
#[doc = ""]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_type_with_path<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, j, path>(j: j, path: path) -> json_type_with_path<J, j, path>
where j: diesel::expression::AsExpression<J>,
path: diesel::expression::AsExpression<Text> {
json_type_with_path_utils::json_type_with_path {
j: j.as_expression(),
path: path.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`json_type_with_path()`](fn@json_type_with_path)"]
pub type json_type_with_path<J, j, path> =
json_type_with_path_utils::json_type_with_path<J,
<j as diesel::expression::AsExpression<J>>::Expression,
<path as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_type_with_path_return_type {
#[doc =
"Return type of the [`json_type_with_path()`](fn@super::json_type_with_path) SQL function."]
pub type json_type_with_path<j, path> =
super::json_type_with_path<<j as
diesel::expression::Expression>::SqlType, j, path>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_type_with_path_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_type_with_path<J, j, path> {
pub(in super) j: j,
pub(in super) path: path,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, j, path, __Rhs> ::core::ops::Add<__Rhs> for
json_type_with_path<J, j, path> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, j, path, __Rhs> ::core::ops::Sub<__Rhs> for
json_type_with_path<J, j, path> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, j, path, __Rhs> ::core::ops::Mul<__Rhs> for
json_type_with_path<J, j, path> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, j, path, __Rhs> ::core::ops::Div<__Rhs> for
json_type_with_path<J, j, path> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, j: ::core::fmt::Debug,
path: ::core::fmt::Debug> ::core::fmt::Debug for
json_type_with_path<J, j, path> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"json_type_with_path", "j", &self.j, "path", &self.path, "J",
&&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, j: ::core::clone::Clone,
path: ::core::clone::Clone> ::core::clone::Clone for
json_type_with_path<J, j, path> {
#[inline]
fn clone(&self) -> json_type_with_path<J, j, path> {
json_type_with_path {
j: ::core::clone::Clone::clone(&self.j),
path: ::core::clone::Clone::clone(&self.path),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, j: ::core::marker::Copy,
path: ::core::marker::Copy> ::core::marker::Copy for
json_type_with_path<J, j, path> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
j: diesel::query_builder::QueryId,
path: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_type_with_path<J, j, path> {
type QueryId =
json_type_with_path<<J as
diesel::query_builder::QueryId>::QueryId,
<j as diesel::query_builder::QueryId>::QueryId,
<path as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<j as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<path as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<j as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<path as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc =
"The return type of [`json_type_with_path()`](fn@json_type_with_path)"]
pub type HelperType<J, j, path> =
json_type_with_path<J, <j as AsExpression<J>>::Expression,
<path as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path>
Expression for json_type_with_path<J, j, path> where
(j, path): Expression {
type SqlType = Nullable<Text>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path,
__DieselInternal> SelectableExpression<__DieselInternal> for
json_type_with_path<J, j, path> where
j: SelectableExpression<__DieselInternal>,
path: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path,
__DieselInternal> AppearsOnTable<__DieselInternal> for
json_type_with_path<J, j, path> where
j: AppearsOnTable<__DieselInternal>,
path: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path,
__DieselInternal> FunctionFragment<__DieselInternal> for
json_type_with_path<J, j, path> where
__DieselInternal: diesel::backend::Backend,
j: QueryFragment<__DieselInternal>,
path: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_type";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.j.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.j.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path>
QueryFragment<crate::sqlite::Sqlite> for
json_type_with_path<J, j, path> where
j: QueryFragment<crate::sqlite::Sqlite>,
path: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<j, path>(j, path);
const _: () =
{
use diesel;
impl<j, path, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<j, path> where
j: diesel::expression::ValidGrouping<__GroupByClause>,
path: diesel::expression::ValidGrouping<__GroupByClause>,
<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, j, path,
__DieselInternal> ValidGrouping<__DieselInternal> for
json_type_with_path<J, j, path> where
__Derived<j, path>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<j, path> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The json_quote(X) function converts the SQL value X (a number or a string) into its corresponding JSON"]
#[doc =
" representation. If X is a JSON value returned by another JSON function, then this function is a no-op."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Example"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::{sql, json_quote};"]
#[doc = " # use serde_json::{json, Value};"]
#[doc =
" # use diesel::sql_types::{Text, Json, Integer, Float, Double, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_quote::<Integer, _>(42))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!(json!(42), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_quote::<Text, _>(\"verdant\"))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!(json!(\"verdant\"), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_quote::<Text, _>(\"[1]\"))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!(json!(\"[1]\"), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_quote::<Nullable<Text>, _>(None::<&str>))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!(json!(null), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_quote::<Double, _>(3.14159))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!(json!(3.14159), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_quote::<Json, _>(json!([1])))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = ""]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_quote<J: SqlType + SingleValue, j>(j: j) -> json_quote<J, j> where
j: diesel::expression::AsExpression<J> {
json_quote_utils::json_quote {
j: j.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_quote()`](fn@json_quote)"]
pub type json_quote<J, j> =
json_quote_utils::json_quote<J,
<j as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_quote_return_type {
#[doc =
"Return type of the [`json_quote()`](fn@super::json_quote) SQL function."]
pub type json_quote<j> =
super::json_quote<<j as diesel::expression::Expression>::SqlType, j>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_quote_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_quote<J, j> {
pub(in super) j: j,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, j, __Rhs> ::core::ops::Add<__Rhs> for json_quote<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Sub<__Rhs> for json_quote<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Mul<__Rhs> for json_quote<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, j, __Rhs> ::core::ops::Div<__Rhs> for json_quote<J, j>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, j: ::core::fmt::Debug> ::core::fmt::Debug for
json_quote<J, j> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_quote", "j", &self.j, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, j: ::core::clone::Clone>
::core::clone::Clone for json_quote<J, j> {
#[inline]
fn clone(&self) -> json_quote<J, j> {
json_quote {
j: ::core::clone::Clone::clone(&self.j),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, j: ::core::marker::Copy>
::core::marker::Copy for json_quote<J, j> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
j: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_quote<J, j> {
type QueryId =
json_quote<<J as diesel::query_builder::QueryId>::QueryId,
<j as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<j as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&& true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<j as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_quote()`](fn@json_quote)"]
pub type HelperType<J, j> =
json_quote<J, <j as AsExpression<J>>::Expression>;
impl<J: SqlType + SingleValue, j> Expression for json_quote<J, j> where
(j): Expression {
type SqlType = Json;
}
impl<J: SqlType + SingleValue, j, __DieselInternal>
SelectableExpression<__DieselInternal> for json_quote<J, j> where
j: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: SqlType + SingleValue, j, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_quote<J, j> where
j: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: SqlType + SingleValue, j, __DieselInternal>
FunctionFragment<__DieselInternal> for json_quote<J, j> where
__DieselInternal: diesel::backend::Backend,
j: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_quote";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.j.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.j.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: SqlType + SingleValue, j> QueryFragment<crate::sqlite::Sqlite> for
json_quote<J, j> where j: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<j>(j);
const _: () =
{
use diesel;
impl<j, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<j> where
j: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<j as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: SqlType + SingleValue, j, __DieselInternal>
ValidGrouping<__DieselInternal> for json_quote<J, j> where
__Derived<j>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<j> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_group_array(X)` function is an aggregate SQL function that returns a JSON array comprised of"]
#[doc = " all X values in the aggregation."]
#[doc = ""]
#[doc = " ## Aggregate Function Expression"]
#[doc = ""]
#[doc =
" This function can be used as aggregate expression. See [`AggregateExpressionMethods`] for details."]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ## Normal function usage"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use schema::animals::dsl::*;"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " #"]
#[doc = " let result = animals"]
#[doc = " .select(json_group_array(species))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(result, json!([\"dog\", \"spider\"]));"]
#[doc = ""]
#[doc = " let result = animals"]
#[doc = " .select(json_group_array(legs))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(result, json!([4, 8]));"]
#[doc = ""]
#[doc = " let result = animals"]
#[doc = " .select(json_group_array(name))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(result, json!([\"Jack\", null]));"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[doc = " ## Aggregate function expression"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use schema::animals::dsl::*;"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " #"]
#[doc = " let result = animals"]
#[doc =
" .select(json_group_array(species).aggregate_filter(legs.lt(8)))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(result, json!([\"dog\"]));"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[doc = ""]
#[doc = " # See also"]
#[doc =
" - [`jsonb_group_array`](jsonb_group_array()) will return data in JSONB format instead of JSON."]
#[doc =
" - [`json_group_object`](json_group_object()) will return JSON object instead of array."]
#[allow(non_camel_case_types)]
pub fn json_group_array<E: SqlType + SingleValue,
elements>(elements: elements) -> json_group_array<E, elements> where
elements: diesel::expression::AsExpression<E> {
json_group_array_utils::json_group_array {
elements: elements.as_expression(),
E: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_group_array()`](fn@json_group_array)"]
pub type json_group_array<E, elements> =
json_group_array_utils::json_group_array<E,
<elements as diesel::expression::AsExpression<E>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_group_array_return_type {
#[doc =
"Return type of the [`json_group_array()`](fn@super::json_group_array) SQL function."]
pub type json_group_array<elements> =
super::json_group_array<<elements as
diesel::expression::Expression>::SqlType, elements>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_group_array_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_group_array<E, elements> {
pub(in super) elements: elements,
pub(in super) E: ::core::marker::PhantomData<E>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<E, elements, __Rhs> ::core::ops::Add<__Rhs> for
json_group_array<E, elements> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<E, elements, __Rhs> ::core::ops::Sub<__Rhs> for
json_group_array<E, elements> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<E, elements, __Rhs> ::core::ops::Mul<__Rhs> for
json_group_array<E, elements> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<E, elements, __Rhs> ::core::ops::Div<__Rhs> for
json_group_array<E, elements> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<E: ::core::fmt::Debug, elements: ::core::fmt::Debug>
::core::fmt::Debug for json_group_array<E, elements> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_group_array", "elements", &self.elements, "E", &&self.E)
}
}
#[automatically_derived]
impl<E: ::core::clone::Clone, elements: ::core::clone::Clone>
::core::clone::Clone for json_group_array<E, elements> {
#[inline]
fn clone(&self) -> json_group_array<E, elements> {
json_group_array {
elements: ::core::clone::Clone::clone(&self.elements),
E: ::core::clone::Clone::clone(&self.E),
}
}
}
#[automatically_derived]
impl<E: ::core::marker::Copy, elements: ::core::marker::Copy>
::core::marker::Copy for json_group_array<E, elements> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<E: diesel::query_builder::QueryId,
elements: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_group_array<E, elements> {
type QueryId =
json_group_array<<E as
diesel::query_builder::QueryId>::QueryId,
<elements as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<E as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<elements as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<E as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<elements as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_group_array()`](fn@json_group_array)"]
pub type HelperType<E, elements> =
json_group_array<E, <elements as AsExpression<E>>::Expression>;
impl<E: SqlType + SingleValue, elements> Expression for
json_group_array<E, elements> where (elements): Expression {
type SqlType = Json;
}
impl<E: SqlType + SingleValue, elements, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_group_array<E, elements> where
elements: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<E: SqlType + SingleValue, elements, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_group_array<E, elements>
where elements: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<E: SqlType + SingleValue, elements, __DieselInternal>
FunctionFragment<__DieselInternal> for json_group_array<E, elements>
where __DieselInternal: diesel::backend::Backend,
elements: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_group_array";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.elements.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.elements.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<E: SqlType + SingleValue, elements>
QueryFragment<crate::sqlite::Sqlite> for json_group_array<E, elements>
where elements: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
impl<E: SqlType + SingleValue, elements, __DieselInternal>
ValidGrouping<__DieselInternal> for json_group_array<E, elements> {
type IsAggregate = diesel::expression::is_aggregate::Yes;
}
impl<E: SqlType + SingleValue, elements> IsAggregateFunction for
json_group_array<E, elements> {}
}
#[doc =
" The `jsonb_group_array(X)` function is an aggregate SQL function that returns a JSONB array comprised of"]
#[doc = " all X values in the aggregation."]
#[doc = ""]
#[doc = " ## Aggregate Function Expression"]
#[doc = ""]
#[doc =
" This function can be used as aggregate expression. See [`AggregateExpressionMethods`] for details."]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ## Normal function usage"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use schema::animals::dsl::*;"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " #"]
#[doc = " let result = animals"]
#[doc = " .select(json_group_array(species))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(result, json!([\"dog\", \"spider\"]));"]
#[doc = ""]
#[doc = " let result = animals"]
#[doc = " .select(json_group_array(legs))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(result, json!([4, 8]));"]
#[doc = ""]
#[doc = " let result = animals"]
#[doc = " .select(json_group_array(name))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(result, json!([\"Jack\", null]));"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[doc = ""]
#[doc = " ## Aggregate function expression"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use schema::animals::dsl::*;"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " #"]
#[doc = " let result = animals"]
#[doc =
" .select(json_group_array(species).aggregate_filter(legs.lt(8)))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(result, json!([\"dog\"]));"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[doc = ""]
#[doc = " # See also"]
#[doc =
" - [`json_group_array`](json_group_array()) will return data in JSON format instead of JSONB."]
#[doc =
" - [`jsonb_group_object`](jsonb_group_object()) will return JSONB object instead of array."]
#[allow(non_camel_case_types)]
pub fn jsonb_group_array<E: SqlType + SingleValue,
elements>(elements: elements) -> jsonb_group_array<E, elements> where
elements: diesel::expression::AsExpression<E> {
jsonb_group_array_utils::jsonb_group_array {
elements: elements.as_expression(),
E: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_group_array()`](fn@jsonb_group_array)"]
pub type jsonb_group_array<E, elements> =
jsonb_group_array_utils::jsonb_group_array<E,
<elements as diesel::expression::AsExpression<E>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_group_array_return_type {
#[doc =
"Return type of the [`jsonb_group_array()`](fn@super::jsonb_group_array) SQL function."]
pub type jsonb_group_array<elements> =
super::jsonb_group_array<<elements as
diesel::expression::Expression>::SqlType, elements>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_group_array_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_group_array<E, elements> {
pub(in super) elements: elements,
pub(in super) E: ::core::marker::PhantomData<E>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<E, elements, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_group_array<E, elements> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<E, elements, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_group_array<E, elements> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<E, elements, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_group_array<E, elements> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<E, elements, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_group_array<E, elements> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<E: ::core::fmt::Debug, elements: ::core::fmt::Debug>
::core::fmt::Debug for jsonb_group_array<E, elements> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"jsonb_group_array", "elements", &self.elements, "E",
&&self.E)
}
}
#[automatically_derived]
impl<E: ::core::clone::Clone, elements: ::core::clone::Clone>
::core::clone::Clone for jsonb_group_array<E, elements> {
#[inline]
fn clone(&self) -> jsonb_group_array<E, elements> {
jsonb_group_array {
elements: ::core::clone::Clone::clone(&self.elements),
E: ::core::clone::Clone::clone(&self.E),
}
}
}
#[automatically_derived]
impl<E: ::core::marker::Copy, elements: ::core::marker::Copy>
::core::marker::Copy for jsonb_group_array<E, elements> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<E: diesel::query_builder::QueryId,
elements: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_group_array<E, elements> {
type QueryId =
jsonb_group_array<<E as
diesel::query_builder::QueryId>::QueryId,
<elements as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<E as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<elements as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<E as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<elements as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`jsonb_group_array()`](fn@jsonb_group_array)"]
pub type HelperType<E, elements> =
jsonb_group_array<E, <elements as AsExpression<E>>::Expression>;
impl<E: SqlType + SingleValue, elements> Expression for
jsonb_group_array<E, elements> where (elements): Expression {
type SqlType = Jsonb;
}
impl<E: SqlType + SingleValue, elements, __DieselInternal>
SelectableExpression<__DieselInternal> for
jsonb_group_array<E, elements> where
elements: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<E: SqlType + SingleValue, elements, __DieselInternal>
AppearsOnTable<__DieselInternal> for jsonb_group_array<E, elements>
where elements: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<E: SqlType + SingleValue, elements, __DieselInternal>
FunctionFragment<__DieselInternal> for jsonb_group_array<E, elements>
where __DieselInternal: diesel::backend::Backend,
elements: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_group_array";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.elements.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.elements.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<E: SqlType + SingleValue, elements>
QueryFragment<crate::sqlite::Sqlite> for
jsonb_group_array<E, elements> where
elements: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
impl<E: SqlType + SingleValue, elements, __DieselInternal>
ValidGrouping<__DieselInternal> for jsonb_group_array<E, elements> {
type IsAggregate = diesel::expression::is_aggregate::Yes;
}
impl<E: SqlType + SingleValue, elements> IsAggregateFunction for
jsonb_group_array<E, elements> {}
}
#[doc =
" The `json_object()` SQL function accepts zero or more pairs of arguments and returns a"]
#[doc =
" well-formed JSON object composed from those pairs. The first argument of each pair is the"]
#[doc =
" label (key) and the second argument is the value. If any argument to `json_object()` is a"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_object_0`, `json_object_1`, ... `json_object_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_object")]
#[doc = " BLOB then an error is thrown."]
#[doc = ""]
#[doc =
" An argument with SQL type TEXT is normally converted into a quoted JSON string even if the"]
#[doc =
" input text is well-formed JSON. However, if the argument is the direct result from another"]
#[doc =
" JSON function, then it is treated as JSON and all of its JSON type information and"]
#[doc =
" substructure is preserved. This allows calls to `json_object()` and `json_array()` to be"]
#[doc =
" nested. The [`json()`] function can also be used to force strings to be recognized as JSON."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Integer};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(json_object_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_object_1::<Text, Integer, _, _>(\"a\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select("]
#[doc =
" json_object_2::<Text, Integer, Text, Text, _, _, _, _>(\"a\", 2, \"c\", \"{e:5}\")"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2, \"c\": \"{e:5}\"}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select("]
#[doc =
" json_object_2::<Text, Integer, Text, Json, _, _, _, _>(\"a\", 2, \"c\", json_object_1::<Text, Integer, _, _>(\"e\", 5))"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2, \"c\": {\"e\": 5}}), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_object_0() -> json_object_0 where {
json_object_0_utils::json_object_0 {}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_object_0()`](fn@json_object_0)"]
pub type json_object_0 = json_object_0_utils::json_object_0<>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_object_0_return_type {
#[doc =
"Return type of the [`json_object_0()`](fn@super::json_object_0) SQL function."]
pub type json_object_0 = super::json_object_0<>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_object_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_object_0 {}
#[automatically_derived]
impl ::core::fmt::Debug for json_object_0 {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f, "json_object_0")
}
}
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for json_object_0 { }
#[automatically_derived]
impl ::core::clone::Clone for json_object_0 {
#[inline]
fn clone(&self) -> json_object_0 { *self }
}
#[automatically_derived]
impl ::core::marker::Copy for json_object_0 { }
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl diesel::query_builder::QueryId for json_object_0 {
type QueryId = json_object_0<>;
const HAS_STATIC_QUERY_ID: bool = true;
const IS_WINDOW_FUNCTION: bool = false;
}
};
#[doc = "The return type of [`json_object_0()`](fn@json_object_0)"]
pub type HelperType = json_object_0<>;
impl Expression for json_object_0 where {
type SqlType = Json;
}
impl<__DieselInternal> SelectableExpression<__DieselInternal> for
json_object_0 where Self: AppearsOnTable<__DieselInternal> {}
impl<__DieselInternal> AppearsOnTable<__DieselInternal> for json_object_0
where Self: Expression {}
impl<__DieselInternal> FunctionFragment<__DieselInternal> for
json_object_0 where __DieselInternal: diesel::backend::Backend {
const FUNCTION_NAME: &'static str = "json_object";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
Ok(())
}
}
impl QueryFragment<crate::sqlite::Sqlite> for json_object_0 where {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived();
const _: () =
{
use diesel;
impl<__GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived {
type IsAggregate = diesel::expression::is_aggregate::Never;
}
};
impl<__DieselInternal> ValidGrouping<__DieselInternal> for json_object_0
where __Derived<>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_object()` SQL function accepts zero or more pairs of arguments and returns a"]
#[doc =
" well-formed JSON object composed from those pairs. The first argument of each pair is the"]
#[doc =
" label (key) and the second argument is the value. If any argument to `json_object()` is a"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_object_0`, `json_object_1`, ... `json_object_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_object")]
#[doc = " BLOB then an error is thrown."]
#[doc = ""]
#[doc =
" An argument with SQL type TEXT is normally converted into a quoted JSON string even if the"]
#[doc =
" input text is well-formed JSON. However, if the argument is the direct result from another"]
#[doc =
" JSON function, then it is treated as JSON and all of its JSON type information and"]
#[doc =
" substructure is preserved. This allows calls to `json_object()` and `json_array()` to be"]
#[doc =
" nested. The [`json()`] function can also be used to force strings to be recognized as JSON."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Integer};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(json_object_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_object_1::<Text, Integer, _, _>(\"a\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select("]
#[doc =
" json_object_2::<Text, Integer, Text, Text, _, _, _, _>(\"a\", 2, \"c\", \"{e:5}\")"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2, \"c\": \"{e:5}\"}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select("]
#[doc =
" json_object_2::<Text, Integer, Text, Json, _, _, _, _>(\"a\", 2, \"c\", json_object_1::<Text, Integer, _, _>(\"e\", 5))"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2, \"c\": {\"e\": 5}}), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_object_1<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
key_1, value_1>(key_1: key_1, value_1: value_1)
-> json_object_1<K1, V1, key_1, value_1> where
key_1: diesel::expression::AsExpression<K1>,
value_1: diesel::expression::AsExpression<V1> {
json_object_1_utils::json_object_1 {
key_1: key_1.as_expression(),
value_1: value_1.as_expression(),
K1: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_object_1()`](fn@json_object_1)"]
pub type json_object_1<K1, V1, key_1, value_1> =
json_object_1_utils::json_object_1<K1, V1,
<key_1 as diesel::expression::AsExpression<K1>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_object_1_return_type {
#[doc =
"Return type of the [`json_object_1()`](fn@super::json_object_1) SQL function."]
pub type json_object_1<key_1, value_1> =
super::json_object_1<<key_1 as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType, key_1, value_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_object_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_object_1<K1, V1, key_1, value_1> {
pub(in super) key_1: key_1,
pub(in super) value_1: value_1,
pub(in super) K1: ::core::marker::PhantomData<K1>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<K1, V1, key_1, value_1, __Rhs> ::core::ops::Add<__Rhs> for
json_object_1<K1, V1, key_1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<K1, V1, key_1, value_1, __Rhs> ::core::ops::Sub<__Rhs> for
json_object_1<K1, V1, key_1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<K1, V1, key_1, value_1, __Rhs> ::core::ops::Mul<__Rhs> for
json_object_1<K1, V1, key_1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<K1, V1, key_1, value_1, __Rhs> ::core::ops::Div<__Rhs> for
json_object_1<K1, V1, key_1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<K1: ::core::fmt::Debug, V1: ::core::fmt::Debug,
key_1: ::core::fmt::Debug, value_1: ::core::fmt::Debug>
::core::fmt::Debug for json_object_1<K1, V1, key_1, value_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"json_object_1", "key_1", &self.key_1, "value_1",
&self.value_1, "K1", &self.K1, "V1", &&self.V1)
}
}
#[automatically_derived]
impl<K1: ::core::clone::Clone, V1: ::core::clone::Clone,
key_1: ::core::clone::Clone, value_1: ::core::clone::Clone>
::core::clone::Clone for json_object_1<K1, V1, key_1, value_1> {
#[inline]
fn clone(&self) -> json_object_1<K1, V1, key_1, value_1> {
json_object_1 {
key_1: ::core::clone::Clone::clone(&self.key_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
K1: ::core::clone::Clone::clone(&self.K1),
V1: ::core::clone::Clone::clone(&self.V1),
}
}
}
#[automatically_derived]
impl<K1: ::core::marker::Copy, V1: ::core::marker::Copy,
key_1: ::core::marker::Copy, value_1: ::core::marker::Copy>
::core::marker::Copy for json_object_1<K1, V1, key_1, value_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<K1: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
key_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_object_1<K1, V1, key_1, value_1> {
type QueryId =
json_object_1<<K1 as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<key_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<K1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<key_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<K1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<key_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_object_1()`](fn@json_object_1)"]
pub type HelperType<K1, V1, key_1, value_1> =
json_object_1<K1, V1, <key_1 as AsExpression<K1>>::Expression,
<value_1 as AsExpression<V1>>::Expression>;
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1> Expression for json_object_1<K1, V1, key_1, value_1> where
(key_1, value_1): Expression {
type SqlType = Json;
}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1, __DieselInternal> SelectableExpression<__DieselInternal> for
json_object_1<K1, V1, key_1, value_1> where
key_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_object_1<K1, V1, key_1, value_1> where
key_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1, __DieselInternal> FunctionFragment<__DieselInternal> for
json_object_1<K1, V1, key_1, value_1> where
__DieselInternal: diesel::backend::Backend,
key_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_object";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.key_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.key_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1> QueryFragment<crate::sqlite::Sqlite> for
json_object_1<K1, V1, key_1, value_1> where
key_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<key_1, value_1>(key_1, value_1);
const _: () =
{
use diesel;
impl<key_1, value_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<key_1, value_1> where
key_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1, __DieselInternal> ValidGrouping<__DieselInternal> for
json_object_1<K1, V1, key_1, value_1> where
__Derived<key_1, value_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<key_1, value_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_object()` SQL function accepts zero or more pairs of arguments and returns a"]
#[doc =
" well-formed JSON object composed from those pairs. The first argument of each pair is the"]
#[doc =
" label (key) and the second argument is the value. If any argument to `json_object()` is a"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_object_0`, `json_object_1`, ... `json_object_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_object")]
#[doc = " BLOB then an error is thrown."]
#[doc = ""]
#[doc =
" An argument with SQL type TEXT is normally converted into a quoted JSON string even if the"]
#[doc =
" input text is well-formed JSON. However, if the argument is the direct result from another"]
#[doc =
" JSON function, then it is treated as JSON and all of its JSON type information and"]
#[doc =
" substructure is preserved. This allows calls to `json_object()` and `json_array()` to be"]
#[doc =
" nested. The [`json()`] function can also be used to force strings to be recognized as JSON."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Integer};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(json_object_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_object_1::<Text, Integer, _, _>(\"a\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select("]
#[doc =
" json_object_2::<Text, Integer, Text, Text, _, _, _, _>(\"a\", 2, \"c\", \"{e:5}\")"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2, \"c\": \"{e:5}\"}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select("]
#[doc =
" json_object_2::<Text, Integer, Text, Json, _, _, _, _>(\"a\", 2, \"c\", json_object_1::<Text, Integer, _, _>(\"e\", 5))"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2, \"c\": {\"e\": 5}}), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_object_2<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1, value_1,
key_2,
value_2>(key_1: key_1, value_1: value_1, key_2: key_2, value_2: value_2)
-> json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
key_1: diesel::expression::AsExpression<K1>,
value_1: diesel::expression::AsExpression<V1>,
key_2: diesel::expression::AsExpression<K2>,
value_2: diesel::expression::AsExpression<V2> {
json_object_2_utils::json_object_2 {
key_1: key_1.as_expression(),
value_1: value_1.as_expression(),
key_2: key_2.as_expression(),
value_2: value_2.as_expression(),
K1: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
K2: ::core::marker::PhantomData,
V2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_object_2()`](fn@json_object_2)"]
pub type json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> =
json_object_2_utils::json_object_2<K1, V1, K2, V2,
<key_1 as diesel::expression::AsExpression<K1>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression,
<key_2 as diesel::expression::AsExpression<K2>>::Expression,
<value_2 as diesel::expression::AsExpression<V2>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_object_2_return_type {
#[doc =
"Return type of the [`json_object_2()`](fn@super::json_object_2) SQL function."]
pub type json_object_2<key_1, value_1, key_2, value_2> =
super::json_object_2<<key_1 as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType,
<key_2 as diesel::expression::Expression>::SqlType,
<value_2 as diesel::expression::Expression>::SqlType, key_1, value_1,
key_2, value_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_object_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> {
pub(in super) key_1: key_1,
pub(in super) value_1: value_1,
pub(in super) key_2: key_2,
pub(in super) value_2: value_2,
pub(in super) K1: ::core::marker::PhantomData<K1>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
pub(in super) K2: ::core::marker::PhantomData<K2>,
pub(in super) V2: ::core::marker::PhantomData<V2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<K1, V1, K2, V2, key_1, value_1, key_2, value_2, __Rhs>
::core::ops::Add<__Rhs> for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<K1, V1, K2, V2, key_1, value_1, key_2, value_2, __Rhs>
::core::ops::Sub<__Rhs> for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<K1, V1, K2, V2, key_1, value_1, key_2, value_2, __Rhs>
::core::ops::Mul<__Rhs> for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<K1, V1, K2, V2, key_1, value_1, key_2, value_2, __Rhs>
::core::ops::Div<__Rhs> for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<K1: ::core::fmt::Debug, V1: ::core::fmt::Debug,
K2: ::core::fmt::Debug, V2: ::core::fmt::Debug,
key_1: ::core::fmt::Debug, value_1: ::core::fmt::Debug,
key_2: ::core::fmt::Debug, value_2: ::core::fmt::Debug>
::core::fmt::Debug for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["key_1", "value_1", "key_2", "value_2", "K1", "V1", "K2",
"V2"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.key_1, &self.value_1, &self.key_2, &self.value_2,
&self.K1, &self.V1, &self.K2, &&self.V2];
::core::fmt::Formatter::debug_struct_fields_finish(f,
"json_object_2", names, values)
}
}
#[automatically_derived]
impl<K1: ::core::clone::Clone, V1: ::core::clone::Clone,
K2: ::core::clone::Clone, V2: ::core::clone::Clone,
key_1: ::core::clone::Clone, value_1: ::core::clone::Clone,
key_2: ::core::clone::Clone, value_2: ::core::clone::Clone>
::core::clone::Clone for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> {
#[inline]
fn clone(&self)
-> json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> {
json_object_2 {
key_1: ::core::clone::Clone::clone(&self.key_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
key_2: ::core::clone::Clone::clone(&self.key_2),
value_2: ::core::clone::Clone::clone(&self.value_2),
K1: ::core::clone::Clone::clone(&self.K1),
V1: ::core::clone::Clone::clone(&self.V1),
K2: ::core::clone::Clone::clone(&self.K2),
V2: ::core::clone::Clone::clone(&self.V2),
}
}
}
#[automatically_derived]
impl<K1: ::core::marker::Copy, V1: ::core::marker::Copy,
K2: ::core::marker::Copy, V2: ::core::marker::Copy,
key_1: ::core::marker::Copy, value_1: ::core::marker::Copy,
key_2: ::core::marker::Copy, value_2: ::core::marker::Copy>
::core::marker::Copy for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<K1: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
K2: diesel::query_builder::QueryId,
V2: diesel::query_builder::QueryId,
key_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId,
key_2: diesel::query_builder::QueryId,
value_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2>
{
type QueryId =
json_object_2<<K1 as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<K2 as diesel::query_builder::QueryId>::QueryId,
<V2 as diesel::query_builder::QueryId>::QueryId,
<key_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId,
<key_2 as diesel::query_builder::QueryId>::QueryId,
<value_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<K1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<K2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<key_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<key_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<K1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<K2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<key_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<key_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_object_2()`](fn@json_object_2)"]
pub type HelperType<K1, V1, K2, V2, key_1, value_1, key_2, value_2> =
json_object_2<K1, V1, K2, V2, <key_1 as AsExpression<K1>>::Expression,
<value_1 as AsExpression<V1>>::Expression,
<key_2 as AsExpression<K2>>::Expression,
<value_2 as AsExpression<V2>>::Expression>;
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2> Expression for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
(key_1, value_1, key_2, value_2): Expression {
type SqlType = Json;
}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
key_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
key_2: SelectableExpression<__DieselInternal>,
value_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2, __DieselInternal>
AppearsOnTable<__DieselInternal> for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
key_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>,
key_2: AppearsOnTable<__DieselInternal>,
value_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2, __DieselInternal>
FunctionFragment<__DieselInternal> for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
__DieselInternal: diesel::backend::Backend,
key_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal>,
key_2: QueryFragment<__DieselInternal>,
value_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_object";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.key_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.key_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.key_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.key_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2> QueryFragment<crate::sqlite::Sqlite> for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
key_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite>,
key_2: QueryFragment<crate::sqlite::Sqlite>,
value_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<key_1, value_1, key_2,
value_2>(key_1, value_1, key_2, value_2);
const _: () =
{
use diesel;
impl<key_1, value_1, key_2, value_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<key_1, value_1, key_2, value_2> where
key_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
key_2: diesel::expression::ValidGrouping<__GroupByClause>,
value_2: diesel::expression::ValidGrouping<__GroupByClause>,
<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<key_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<key_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<key_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2, __DieselInternal>
ValidGrouping<__DieselInternal> for
json_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
__Derived<key_1, value_1, key_2,
value_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<key_1, value_1, key_2, value_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __json_object_return_types {
#[doc(inline)]
pub use super::__json_object_0_return_type::*;
#[doc(inline)]
pub use super::__json_object_1_return_type::*;
#[doc(inline)]
pub use super::__json_object_2_return_type::*;
}
#[doc =
" The `jsonb_object()` SQL function works just like the [`json_object()`](json_object_1())"]
#[doc =
" function except that the generated object is returned in SQLite\'s private binary JSONB"]
#[doc = " format rather than in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_object_0`, `jsonb_object_1`, ... `jsonb_object_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_object")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Integer};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(jsonb_object_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_object_1::<Text, Integer, _, _>(\"a\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select("]
#[doc =
" jsonb_object_2::<Text, Integer, Text, Text, _, _, _, _>(\"a\", 2, \"c\", \"{e:5}\")"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2, \"c\": \"{e:5}\"}), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_object_0() -> jsonb_object_0 where {
jsonb_object_0_utils::jsonb_object_0 {}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_object_0()`](fn@jsonb_object_0)"]
pub type jsonb_object_0 = jsonb_object_0_utils::jsonb_object_0<>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_object_0_return_type {
#[doc =
"Return type of the [`jsonb_object_0()`](fn@super::jsonb_object_0) SQL function."]
pub type jsonb_object_0 = super::jsonb_object_0<>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_object_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_object_0 {}
#[automatically_derived]
impl ::core::fmt::Debug for jsonb_object_0 {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f, "jsonb_object_0")
}
}
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for jsonb_object_0 { }
#[automatically_derived]
impl ::core::clone::Clone for jsonb_object_0 {
#[inline]
fn clone(&self) -> jsonb_object_0 { *self }
}
#[automatically_derived]
impl ::core::marker::Copy for jsonb_object_0 { }
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl diesel::query_builder::QueryId for jsonb_object_0 {
type QueryId = jsonb_object_0<>;
const HAS_STATIC_QUERY_ID: bool = true;
const IS_WINDOW_FUNCTION: bool = false;
}
};
#[doc = "The return type of [`jsonb_object_0()`](fn@jsonb_object_0)"]
pub type HelperType = jsonb_object_0<>;
impl Expression for jsonb_object_0 where {
type SqlType = Jsonb;
}
impl<__DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_object_0 where Self: AppearsOnTable<__DieselInternal> {}
impl<__DieselInternal> AppearsOnTable<__DieselInternal> for jsonb_object_0
where Self: Expression {}
impl<__DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_object_0 where __DieselInternal: diesel::backend::Backend {
const FUNCTION_NAME: &'static str = "jsonb_object";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
Ok(())
}
}
impl QueryFragment<crate::sqlite::Sqlite> for jsonb_object_0 where {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived();
const _: () =
{
use diesel;
impl<__GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived {
type IsAggregate = diesel::expression::is_aggregate::Never;
}
};
impl<__DieselInternal> ValidGrouping<__DieselInternal> for jsonb_object_0
where __Derived<>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_object()` SQL function works just like the [`json_object()`](json_object_1())"]
#[doc =
" function except that the generated object is returned in SQLite\'s private binary JSONB"]
#[doc = " format rather than in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_object_0`, `jsonb_object_1`, ... `jsonb_object_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_object")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Integer};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(jsonb_object_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_object_1::<Text, Integer, _, _>(\"a\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select("]
#[doc =
" jsonb_object_2::<Text, Integer, Text, Text, _, _, _, _>(\"a\", 2, \"c\", \"{e:5}\")"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2, \"c\": \"{e:5}\"}), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_object_1<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
key_1, value_1>(key_1: key_1, value_1: value_1)
-> jsonb_object_1<K1, V1, key_1, value_1> where
key_1: diesel::expression::AsExpression<K1>,
value_1: diesel::expression::AsExpression<V1> {
jsonb_object_1_utils::jsonb_object_1 {
key_1: key_1.as_expression(),
value_1: value_1.as_expression(),
K1: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_object_1()`](fn@jsonb_object_1)"]
pub type jsonb_object_1<K1, V1, key_1, value_1> =
jsonb_object_1_utils::jsonb_object_1<K1, V1,
<key_1 as diesel::expression::AsExpression<K1>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_object_1_return_type {
#[doc =
"Return type of the [`jsonb_object_1()`](fn@super::jsonb_object_1) SQL function."]
pub type jsonb_object_1<key_1, value_1> =
super::jsonb_object_1<<key_1 as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType, key_1, value_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_object_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_object_1<K1, V1, key_1, value_1> {
pub(in super) key_1: key_1,
pub(in super) value_1: value_1,
pub(in super) K1: ::core::marker::PhantomData<K1>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<K1, V1, key_1, value_1, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_object_1<K1, V1, key_1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<K1, V1, key_1, value_1, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_object_1<K1, V1, key_1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<K1, V1, key_1, value_1, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_object_1<K1, V1, key_1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<K1, V1, key_1, value_1, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_object_1<K1, V1, key_1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<K1: ::core::fmt::Debug, V1: ::core::fmt::Debug,
key_1: ::core::fmt::Debug, value_1: ::core::fmt::Debug>
::core::fmt::Debug for jsonb_object_1<K1, V1, key_1, value_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"jsonb_object_1", "key_1", &self.key_1, "value_1",
&self.value_1, "K1", &self.K1, "V1", &&self.V1)
}
}
#[automatically_derived]
impl<K1: ::core::clone::Clone, V1: ::core::clone::Clone,
key_1: ::core::clone::Clone, value_1: ::core::clone::Clone>
::core::clone::Clone for jsonb_object_1<K1, V1, key_1, value_1> {
#[inline]
fn clone(&self) -> jsonb_object_1<K1, V1, key_1, value_1> {
jsonb_object_1 {
key_1: ::core::clone::Clone::clone(&self.key_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
K1: ::core::clone::Clone::clone(&self.K1),
V1: ::core::clone::Clone::clone(&self.V1),
}
}
}
#[automatically_derived]
impl<K1: ::core::marker::Copy, V1: ::core::marker::Copy,
key_1: ::core::marker::Copy, value_1: ::core::marker::Copy>
::core::marker::Copy for jsonb_object_1<K1, V1, key_1, value_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<K1: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
key_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_object_1<K1, V1, key_1, value_1> {
type QueryId =
jsonb_object_1<<K1 as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<key_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<K1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<key_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<K1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<key_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_object_1()`](fn@jsonb_object_1)"]
pub type HelperType<K1, V1, key_1, value_1> =
jsonb_object_1<K1, V1, <key_1 as AsExpression<K1>>::Expression,
<value_1 as AsExpression<V1>>::Expression>;
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1> Expression for jsonb_object_1<K1, V1, key_1, value_1> where
(key_1, value_1): Expression {
type SqlType = Jsonb;
}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1, __DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_object_1<K1, V1, key_1, value_1> where
key_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_object_1<K1, V1, key_1, value_1> where
key_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1, __DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_object_1<K1, V1, key_1, value_1> where
__DieselInternal: diesel::backend::Backend,
key_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_object";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.key_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.key_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1> QueryFragment<crate::sqlite::Sqlite> for
jsonb_object_1<K1, V1, key_1, value_1> where
key_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<key_1, value_1>(key_1, value_1);
const _: () =
{
use diesel;
impl<key_1, value_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<key_1, value_1> where
key_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob, key_1,
value_1, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_object_1<K1, V1, key_1, value_1> where
__Derived<key_1, value_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<key_1, value_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_object()` SQL function works just like the [`json_object()`](json_object_1())"]
#[doc =
" function except that the generated object is returned in SQLite\'s private binary JSONB"]
#[doc = " format rather than in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_object_0`, `jsonb_object_1`, ... `jsonb_object_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_object")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Integer};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(jsonb_object_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_object_1::<Text, Integer, _, _>(\"a\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select("]
#[doc =
" jsonb_object_2::<Text, Integer, Text, Text, _, _, _, _>(\"a\", 2, \"c\", \"{e:5}\")"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 2, \"c\": \"{e:5}\"}), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_object_2<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1, value_1,
key_2,
value_2>(key_1: key_1, value_1: value_1, key_2: key_2, value_2: value_2)
-> jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
key_1: diesel::expression::AsExpression<K1>,
value_1: diesel::expression::AsExpression<V1>,
key_2: diesel::expression::AsExpression<K2>,
value_2: diesel::expression::AsExpression<V2> {
jsonb_object_2_utils::jsonb_object_2 {
key_1: key_1.as_expression(),
value_1: value_1.as_expression(),
key_2: key_2.as_expression(),
value_2: value_2.as_expression(),
K1: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
K2: ::core::marker::PhantomData,
V2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_object_2()`](fn@jsonb_object_2)"]
pub type jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> =
jsonb_object_2_utils::jsonb_object_2<K1, V1, K2, V2,
<key_1 as diesel::expression::AsExpression<K1>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression,
<key_2 as diesel::expression::AsExpression<K2>>::Expression,
<value_2 as diesel::expression::AsExpression<V2>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_object_2_return_type {
#[doc =
"Return type of the [`jsonb_object_2()`](fn@super::jsonb_object_2) SQL function."]
pub type jsonb_object_2<key_1, value_1, key_2, value_2> =
super::jsonb_object_2<<key_1 as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType,
<key_2 as diesel::expression::Expression>::SqlType,
<value_2 as diesel::expression::Expression>::SqlType, key_1, value_1,
key_2, value_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_object_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2,
value_2> {
pub(in super) key_1: key_1,
pub(in super) value_1: value_1,
pub(in super) key_2: key_2,
pub(in super) value_2: value_2,
pub(in super) K1: ::core::marker::PhantomData<K1>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
pub(in super) K2: ::core::marker::PhantomData<K2>,
pub(in super) V2: ::core::marker::PhantomData<V2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<K1, V1, K2, V2, key_1, value_1, key_2, value_2, __Rhs>
::core::ops::Add<__Rhs> for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<K1, V1, K2, V2, key_1, value_1, key_2, value_2, __Rhs>
::core::ops::Sub<__Rhs> for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<K1, V1, K2, V2, key_1, value_1, key_2, value_2, __Rhs>
::core::ops::Mul<__Rhs> for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<K1, V1, K2, V2, key_1, value_1, key_2, value_2, __Rhs>
::core::ops::Div<__Rhs> for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<K1: ::core::fmt::Debug, V1: ::core::fmt::Debug,
K2: ::core::fmt::Debug, V2: ::core::fmt::Debug,
key_1: ::core::fmt::Debug, value_1: ::core::fmt::Debug,
key_2: ::core::fmt::Debug, value_2: ::core::fmt::Debug>
::core::fmt::Debug for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["key_1", "value_1", "key_2", "value_2", "K1", "V1", "K2",
"V2"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.key_1, &self.value_1, &self.key_2, &self.value_2,
&self.K1, &self.V1, &self.K2, &&self.V2];
::core::fmt::Formatter::debug_struct_fields_finish(f,
"jsonb_object_2", names, values)
}
}
#[automatically_derived]
impl<K1: ::core::clone::Clone, V1: ::core::clone::Clone,
K2: ::core::clone::Clone, V2: ::core::clone::Clone,
key_1: ::core::clone::Clone, value_1: ::core::clone::Clone,
key_2: ::core::clone::Clone, value_2: ::core::clone::Clone>
::core::clone::Clone for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> {
#[inline]
fn clone(&self)
->
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2,
value_2> {
jsonb_object_2 {
key_1: ::core::clone::Clone::clone(&self.key_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
key_2: ::core::clone::Clone::clone(&self.key_2),
value_2: ::core::clone::Clone::clone(&self.value_2),
K1: ::core::clone::Clone::clone(&self.K1),
V1: ::core::clone::Clone::clone(&self.V1),
K2: ::core::clone::Clone::clone(&self.K2),
V2: ::core::clone::Clone::clone(&self.V2),
}
}
}
#[automatically_derived]
impl<K1: ::core::marker::Copy, V1: ::core::marker::Copy,
K2: ::core::marker::Copy, V2: ::core::marker::Copy,
key_1: ::core::marker::Copy, value_1: ::core::marker::Copy,
key_2: ::core::marker::Copy, value_2: ::core::marker::Copy>
::core::marker::Copy for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<K1: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
K2: diesel::query_builder::QueryId,
V2: diesel::query_builder::QueryId,
key_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId,
key_2: diesel::query_builder::QueryId,
value_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2>
{
type QueryId =
jsonb_object_2<<K1 as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<K2 as diesel::query_builder::QueryId>::QueryId,
<V2 as diesel::query_builder::QueryId>::QueryId,
<key_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId,
<key_2 as diesel::query_builder::QueryId>::QueryId,
<value_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<K1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<K2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<key_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<key_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<K1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<K2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<key_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<key_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_object_2()`](fn@jsonb_object_2)"]
pub type HelperType<K1, V1, K2, V2, key_1, value_1, key_2, value_2> =
jsonb_object_2<K1, V1, K2, V2,
<key_1 as AsExpression<K1>>::Expression,
<value_1 as AsExpression<V1>>::Expression,
<key_2 as AsExpression<K2>>::Expression,
<value_2 as AsExpression<V2>>::Expression>;
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2> Expression for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
(key_1, value_1, key_2, value_2): Expression {
type SqlType = Jsonb;
}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
key_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
key_2: SelectableExpression<__DieselInternal>,
value_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2, __DieselInternal>
AppearsOnTable<__DieselInternal> for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
key_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>,
key_2: AppearsOnTable<__DieselInternal>,
value_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2, __DieselInternal>
FunctionFragment<__DieselInternal> for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
__DieselInternal: diesel::backend::Backend,
key_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal>,
key_2: QueryFragment<__DieselInternal>,
value_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_object";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.key_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.key_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.key_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.key_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2> QueryFragment<crate::sqlite::Sqlite> for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
key_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite>,
key_2: QueryFragment<crate::sqlite::Sqlite>,
value_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<key_1, value_1, key_2,
value_2>(key_1, value_1, key_2, value_2);
const _: () =
{
use diesel;
impl<key_1, value_1, key_2, value_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<key_1, value_1, key_2, value_2> where
key_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
key_2: diesel::expression::ValidGrouping<__GroupByClause>,
value_2: diesel::expression::ValidGrouping<__GroupByClause>,
<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<key_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<key_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<<key_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<key_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<K1: NotBlob<IsNull = is_nullable::NotNull>, V1: NotBlob,
K2: NotBlob<IsNull = is_nullable::NotNull>, V2: NotBlob, key_1,
value_1, key_2, value_2, __DieselInternal>
ValidGrouping<__DieselInternal> for
jsonb_object_2<K1, V1, K2, V2, key_1, value_1, key_2, value_2> where
__Derived<key_1, value_1, key_2,
value_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<key_1, value_1, key_2, value_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __jsonb_object_return_types {
#[doc(inline)]
pub use super::__jsonb_object_0_return_type::*;
#[doc(inline)]
pub use super::__jsonb_object_1_return_type::*;
#[doc(inline)]
pub use super::__jsonb_object_2_return_type::*;
}
#[doc =
" The json_group_object(NAME,VALUE) function returns a JSON object comprised of all NAME/VALUE pairs in"]
#[doc = " the aggregation."]
#[doc = ""]
#[doc =
" A potential edge case in this function arises when `names` contains duplicate elements."]
#[doc =
" In such case, the result will include all duplicates (e.g., `{\"key\": 1, \"key\": 2, \"key\": 3}`)."]
#[doc =
" Note that any duplicate entries in the resulting JSON will be removed during deserialization."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " ## Aggregate Function Expression"]
#[doc = ""]
#[doc =
" This function can be used as aggregate expression. See [`AggregateExpressionMethods`] for details."]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ## Normal function usage"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::Text;"]
#[doc = " # use serde_json::json;"]
#[doc = " # use schema::animals::dsl::*;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = animals.select(json_group_object(species, name)).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"dog\":\"Jack\",\"spider\":null}), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[doc = ""]
#[doc = " ## Aggregate function expression"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::Text;"]
#[doc = " # use serde_json::json;"]
#[doc = " # use schema::animals::dsl::*;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " #"]
#[doc =
" # let version = diesel::select(sql::<Text>(\"sqlite_version();\"))"]
#[doc = " # .get_result::<String>(connection)?;"]
#[doc = " #"]
#[doc =
" # let version_components: Vec<&str> = version.split(\'.\').collect();"]
#[doc = " # let major: u32 = version_components[0].parse().unwrap();"]
#[doc = " # let minor: u32 = version_components[1].parse().unwrap();"]
#[doc = " #"]
#[doc = " # if major < 3 || minor < 38 {"]
#[doc =
" # println!(\"SQLite version is too old, skipping the test.\");"]
#[doc = " # return Ok(());"]
#[doc = " # }"]
#[doc = " #"]
#[doc =
" let result = animals.select(json_group_object(species, name).aggregate_filter(legs.lt(8))).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"dog\":\"Jack\"}), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[doc = ""]
#[doc = " # See also"]
#[doc =
" - [`jsonb_group_object`](jsonb_group_object()) will return data in JSONB format instead of JSON."]
#[doc =
" - [`json_group_array`](json_group_array()) will return JSON array instead of object."]
#[allow(non_camel_case_types)]
pub fn json_group_object<N: SqlType<IsNull = is_nullable::NotNull> +
SingleValue, V: SqlType + SingleValue, names,
values>(names: names, values: values)
-> json_group_object<N, V, names, values> where
names: diesel::expression::AsExpression<N>,
values: diesel::expression::AsExpression<V> {
json_group_object_utils::json_group_object {
names: names.as_expression(),
values: values.as_expression(),
N: ::core::marker::PhantomData,
V: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_group_object()`](fn@json_group_object)"]
pub type json_group_object<N, V, names, values> =
json_group_object_utils::json_group_object<N, V,
<names as diesel::expression::AsExpression<N>>::Expression,
<values as diesel::expression::AsExpression<V>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_group_object_return_type {
#[doc =
"Return type of the [`json_group_object()`](fn@super::json_group_object) SQL function."]
pub type json_group_object<names, values> =
super::json_group_object<<names as
diesel::expression::Expression>::SqlType,
<values as diesel::expression::Expression>::SqlType, names, values>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_group_object_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_group_object<N, V, names, values> {
pub(in super) names: names,
pub(in super) values: values,
pub(in super) N: ::core::marker::PhantomData<N>,
pub(in super) V: ::core::marker::PhantomData<V>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<N, V, names, values, __Rhs> ::core::ops::Add<__Rhs> for
json_group_object<N, V, names, values> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<N, V, names, values, __Rhs> ::core::ops::Sub<__Rhs> for
json_group_object<N, V, names, values> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<N, V, names, values, __Rhs> ::core::ops::Mul<__Rhs> for
json_group_object<N, V, names, values> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<N, V, names, values, __Rhs> ::core::ops::Div<__Rhs> for
json_group_object<N, V, names, values> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<N: ::core::fmt::Debug, V: ::core::fmt::Debug,
names: ::core::fmt::Debug, values: ::core::fmt::Debug>
::core::fmt::Debug for json_group_object<N, V, names, values> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"json_group_object", "names", &self.names, "values",
&self.values, "N", &self.N, "V", &&self.V)
}
}
#[automatically_derived]
impl<N: ::core::clone::Clone, V: ::core::clone::Clone,
names: ::core::clone::Clone, values: ::core::clone::Clone>
::core::clone::Clone for json_group_object<N, V, names, values> {
#[inline]
fn clone(&self) -> json_group_object<N, V, names, values> {
json_group_object {
names: ::core::clone::Clone::clone(&self.names),
values: ::core::clone::Clone::clone(&self.values),
N: ::core::clone::Clone::clone(&self.N),
V: ::core::clone::Clone::clone(&self.V),
}
}
}
#[automatically_derived]
impl<N: ::core::marker::Copy, V: ::core::marker::Copy,
names: ::core::marker::Copy, values: ::core::marker::Copy>
::core::marker::Copy for json_group_object<N, V, names, values> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<N: diesel::query_builder::QueryId,
V: diesel::query_builder::QueryId,
names: diesel::query_builder::QueryId,
values: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_group_object<N, V, names, values> {
type QueryId =
json_group_object<<N as
diesel::query_builder::QueryId>::QueryId,
<V as diesel::query_builder::QueryId>::QueryId,
<names as diesel::query_builder::QueryId>::QueryId,
<values as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<N as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<names as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<values as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<N as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<names as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<values as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`json_group_object()`](fn@json_group_object)"]
pub type HelperType<N, V, names, values> =
json_group_object<N, V, <names as AsExpression<N>>::Expression,
<values as AsExpression<V>>::Expression>;
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values> Expression for
json_group_object<N, V, names, values> where
(names, values): Expression {
type SqlType = Json;
}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_group_object<N, V, names, values> where
names: SelectableExpression<__DieselInternal>,
values: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values, __DieselInternal>
AppearsOnTable<__DieselInternal> for
json_group_object<N, V, names, values> where
names: AppearsOnTable<__DieselInternal>,
values: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values, __DieselInternal>
FunctionFragment<__DieselInternal> for
json_group_object<N, V, names, values> where
__DieselInternal: diesel::backend::Backend,
names: QueryFragment<__DieselInternal>,
values: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_group_object";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.names.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.names.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.values.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.values.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values> QueryFragment<crate::sqlite::Sqlite> for
json_group_object<N, V, names, values> where
names: QueryFragment<crate::sqlite::Sqlite>,
values: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values, __DieselInternal>
ValidGrouping<__DieselInternal> for
json_group_object<N, V, names, values> {
type IsAggregate = diesel::expression::is_aggregate::Yes;
}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values> IsAggregateFunction for
json_group_object<N, V, names, values> {}
}
#[doc =
" The jsonb_group_object(NAME,VALUE) function returns a JSONB object comprised of all NAME/VALUE pairs in"]
#[doc = " the aggregation."]
#[doc = ""]
#[doc =
" A potential edge case in this function arises when `names` contains duplicate elements."]
#[doc =
" In such case, the result will include all duplicates (e.g., `{\"key\": 1, \"key\": 2, \"key\": 3}`)."]
#[doc =
" Note that any duplicate entries in the resulting JSONB will be removed during deserialization."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " ## Aggregate Function Expression"]
#[doc = ""]
#[doc =
" This function can be used as aggregate expression. See [`AggregateExpressionMethods`] for details."]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ## Normal function usage"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::Text;"]
#[doc = " # use serde_json::json;"]
#[doc = " # use schema::animals::dsl::*;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = animals.select(jsonb_group_object(species, name)).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"dog\":\"Jack\",\"spider\":null}), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[doc = ""]
#[doc = " ## Aggregate function expression"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::Text;"]
#[doc = " # use serde_json::json;"]
#[doc = " # use schema::animals::dsl::*;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " #"]
#[doc =
" # let version = diesel::select(sql::<Text>(\"sqlite_version();\"))"]
#[doc = " # .get_result::<String>(connection)?;"]
#[doc = " #"]
#[doc =
" # let version_components: Vec<&str> = version.split(\'.\').collect();"]
#[doc = " # let major: u32 = version_components[0].parse().unwrap();"]
#[doc = " # let minor: u32 = version_components[1].parse().unwrap();"]
#[doc = " #"]
#[doc = " # if major < 3 || minor < 38 {"]
#[doc =
" # println!(\"SQLite version is too old, skipping the test.\");"]
#[doc = " # return Ok(());"]
#[doc = " # }"]
#[doc = " #"]
#[doc =
" let result = animals.select(jsonb_group_object(species, name).aggregate_filter(legs.lt(8))).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"dog\":\"Jack\"}), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[doc = ""]
#[doc = " # See also"]
#[doc =
" - [`json_group_object`](jsonb_group_array()) will return data in JSON format instead of JSONB."]
#[doc =
" - [`jsonb_group_array`](jsonb_group_array()) will return JSONB array instead of object."]
#[allow(non_camel_case_types)]
pub fn jsonb_group_object<N: SqlType<IsNull = is_nullable::NotNull> +
SingleValue, V: SqlType + SingleValue, names,
values>(names: names, values: values)
-> jsonb_group_object<N, V, names, values> where
names: diesel::expression::AsExpression<N>,
values: diesel::expression::AsExpression<V> {
jsonb_group_object_utils::jsonb_group_object {
names: names.as_expression(),
values: values.as_expression(),
N: ::core::marker::PhantomData,
V: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_group_object()`](fn@jsonb_group_object)"]
pub type jsonb_group_object<N, V, names, values> =
jsonb_group_object_utils::jsonb_group_object<N, V,
<names as diesel::expression::AsExpression<N>>::Expression,
<values as diesel::expression::AsExpression<V>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_group_object_return_type {
#[doc =
"Return type of the [`jsonb_group_object()`](fn@super::jsonb_group_object) SQL function."]
pub type jsonb_group_object<names, values> =
super::jsonb_group_object<<names as
diesel::expression::Expression>::SqlType,
<values as diesel::expression::Expression>::SqlType, names, values>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_group_object_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_group_object<N, V, names, values> {
pub(in super) names: names,
pub(in super) values: values,
pub(in super) N: ::core::marker::PhantomData<N>,
pub(in super) V: ::core::marker::PhantomData<V>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<N, V, names, values, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_group_object<N, V, names, values> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<N, V, names, values, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_group_object<N, V, names, values> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<N, V, names, values, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_group_object<N, V, names, values> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<N, V, names, values, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_group_object<N, V, names, values> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<N: ::core::fmt::Debug, V: ::core::fmt::Debug,
names: ::core::fmt::Debug, values: ::core::fmt::Debug>
::core::fmt::Debug for jsonb_group_object<N, V, names, values> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"jsonb_group_object", "names", &self.names, "values",
&self.values, "N", &self.N, "V", &&self.V)
}
}
#[automatically_derived]
impl<N: ::core::clone::Clone, V: ::core::clone::Clone,
names: ::core::clone::Clone, values: ::core::clone::Clone>
::core::clone::Clone for jsonb_group_object<N, V, names, values> {
#[inline]
fn clone(&self) -> jsonb_group_object<N, V, names, values> {
jsonb_group_object {
names: ::core::clone::Clone::clone(&self.names),
values: ::core::clone::Clone::clone(&self.values),
N: ::core::clone::Clone::clone(&self.N),
V: ::core::clone::Clone::clone(&self.V),
}
}
}
#[automatically_derived]
impl<N: ::core::marker::Copy, V: ::core::marker::Copy,
names: ::core::marker::Copy, values: ::core::marker::Copy>
::core::marker::Copy for jsonb_group_object<N, V, names, values> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<N: diesel::query_builder::QueryId,
V: diesel::query_builder::QueryId,
names: diesel::query_builder::QueryId,
values: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_group_object<N, V, names, values> {
type QueryId =
jsonb_group_object<<N as
diesel::query_builder::QueryId>::QueryId,
<V as diesel::query_builder::QueryId>::QueryId,
<names as diesel::query_builder::QueryId>::QueryId,
<values as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<N as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<names as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<values as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<N as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<names as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<values as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`jsonb_group_object()`](fn@jsonb_group_object)"]
pub type HelperType<N, V, names, values> =
jsonb_group_object<N, V, <names as AsExpression<N>>::Expression,
<values as AsExpression<V>>::Expression>;
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values> Expression for
jsonb_group_object<N, V, names, values> where
(names, values): Expression {
type SqlType = Jsonb;
}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values, __DieselInternal>
SelectableExpression<__DieselInternal> for
jsonb_group_object<N, V, names, values> where
names: SelectableExpression<__DieselInternal>,
values: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values, __DieselInternal>
AppearsOnTable<__DieselInternal> for
jsonb_group_object<N, V, names, values> where
names: AppearsOnTable<__DieselInternal>,
values: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values, __DieselInternal>
FunctionFragment<__DieselInternal> for
jsonb_group_object<N, V, names, values> where
__DieselInternal: diesel::backend::Backend,
names: QueryFragment<__DieselInternal>,
values: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_group_object";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.names.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.names.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.values.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.values.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values> QueryFragment<crate::sqlite::Sqlite> for
jsonb_group_object<N, V, names, values> where
names: QueryFragment<crate::sqlite::Sqlite>,
values: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values, __DieselInternal>
ValidGrouping<__DieselInternal> for
jsonb_group_object<N, V, names, values> {
type IsAggregate = diesel::expression::is_aggregate::Yes;
}
impl<N: SqlType<IsNull = is_nullable::NotNull> + SingleValue, V: SqlType +
SingleValue, names, values> IsAggregateFunction for
jsonb_group_object<N, V, names, values> {}
}
#[doc =
" The `json_array()` SQL function accepts zero or more arguments and returns a well-formed JSON array"]
#[doc =
" that is composed from those arguments. Note that arguments of type BLOB will not be accepted by this"]
#[doc = " function."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_array_0`, `json_array_1`, ... `json_array_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_array")]
#[doc = ""]
#[doc =
" An argument with SQL type TEXT is normally converted into a quoted JSON string. However, if the"]
#[doc =
" argument is the output from another json function, then it is stored as JSON. This allows calls to"]
#[doc =
" `json_array()` and `json_object()` to be nested. The [`json()`] function can also be used to force"]
#[doc = " strings to be recognized as JSON."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Double};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(json_array_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([]), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_array_1::<Text, _>(\"abc\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\"]), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_2::<Text, Double, _, _>(\"abc\", 3.1415))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\", 3.1415]), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_array_0() -> json_array_0 where {
json_array_0_utils::json_array_0 {}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_array_0()`](fn@json_array_0)"]
pub type json_array_0 = json_array_0_utils::json_array_0<>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_array_0_return_type {
#[doc =
"Return type of the [`json_array_0()`](fn@super::json_array_0) SQL function."]
pub type json_array_0 = super::json_array_0<>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_array_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_array_0 {}
#[automatically_derived]
impl ::core::fmt::Debug for json_array_0 {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f, "json_array_0")
}
}
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for json_array_0 { }
#[automatically_derived]
impl ::core::clone::Clone for json_array_0 {
#[inline]
fn clone(&self) -> json_array_0 { *self }
}
#[automatically_derived]
impl ::core::marker::Copy for json_array_0 { }
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl diesel::query_builder::QueryId for json_array_0 {
type QueryId = json_array_0<>;
const HAS_STATIC_QUERY_ID: bool = true;
const IS_WINDOW_FUNCTION: bool = false;
}
};
#[doc = "The return type of [`json_array_0()`](fn@json_array_0)"]
pub type HelperType = json_array_0<>;
impl Expression for json_array_0 where {
type SqlType = Json;
}
impl<__DieselInternal> SelectableExpression<__DieselInternal> for
json_array_0 where Self: AppearsOnTable<__DieselInternal> {}
impl<__DieselInternal> AppearsOnTable<__DieselInternal> for json_array_0
where Self: Expression {}
impl<__DieselInternal> FunctionFragment<__DieselInternal> for json_array_0
where __DieselInternal: diesel::backend::Backend {
const FUNCTION_NAME: &'static str = "json_array";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
Ok(())
}
}
impl QueryFragment<crate::sqlite::Sqlite> for json_array_0 where {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived();
const _: () =
{
use diesel;
impl<__GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived {
type IsAggregate = diesel::expression::is_aggregate::Never;
}
};
impl<__DieselInternal> ValidGrouping<__DieselInternal> for json_array_0
where __Derived<>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_array()` SQL function accepts zero or more arguments and returns a well-formed JSON array"]
#[doc =
" that is composed from those arguments. Note that arguments of type BLOB will not be accepted by this"]
#[doc = " function."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_array_0`, `json_array_1`, ... `json_array_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_array")]
#[doc = ""]
#[doc =
" An argument with SQL type TEXT is normally converted into a quoted JSON string. However, if the"]
#[doc =
" argument is the output from another json function, then it is stored as JSON. This allows calls to"]
#[doc =
" `json_array()` and `json_object()` to be nested. The [`json()`] function can also be used to force"]
#[doc = " strings to be recognized as JSON."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Double};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(json_array_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([]), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_array_1::<Text, _>(\"abc\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\"]), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_2::<Text, Double, _, _>(\"abc\", 3.1415))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\", 3.1415]), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_array_1<V1: NotBlob, value_1>(value_1: value_1)
-> json_array_1<V1, value_1> where
value_1: diesel::expression::AsExpression<V1> {
json_array_1_utils::json_array_1 {
value_1: value_1.as_expression(),
V1: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_array_1()`](fn@json_array_1)"]
pub type json_array_1<V1, value_1> =
json_array_1_utils::json_array_1<V1,
<value_1 as diesel::expression::AsExpression<V1>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_array_1_return_type {
#[doc =
"Return type of the [`json_array_1()`](fn@super::json_array_1) SQL function."]
pub type json_array_1<value_1> =
super::json_array_1<<value_1 as
diesel::expression::Expression>::SqlType, value_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_array_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_array_1<V1, value_1> {
pub(in super) value_1: value_1,
pub(in super) V1: ::core::marker::PhantomData<V1>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<V1, value_1, __Rhs> ::core::ops::Add<__Rhs> for
json_array_1<V1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<V1, value_1, __Rhs> ::core::ops::Sub<__Rhs> for
json_array_1<V1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<V1, value_1, __Rhs> ::core::ops::Mul<__Rhs> for
json_array_1<V1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<V1, value_1, __Rhs> ::core::ops::Div<__Rhs> for
json_array_1<V1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<V1: ::core::fmt::Debug, value_1: ::core::fmt::Debug>
::core::fmt::Debug for json_array_1<V1, value_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_array_1", "value_1", &self.value_1, "V1", &&self.V1)
}
}
#[automatically_derived]
impl<V1: ::core::clone::Clone, value_1: ::core::clone::Clone>
::core::clone::Clone for json_array_1<V1, value_1> {
#[inline]
fn clone(&self) -> json_array_1<V1, value_1> {
json_array_1 {
value_1: ::core::clone::Clone::clone(&self.value_1),
V1: ::core::clone::Clone::clone(&self.V1),
}
}
}
#[automatically_derived]
impl<V1: ::core::marker::Copy, value_1: ::core::marker::Copy>
::core::marker::Copy for json_array_1<V1, value_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<V1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_array_1<V1, value_1> {
type QueryId =
json_array_1<<V1 as
diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_array_1()`](fn@json_array_1)"]
pub type HelperType<V1, value_1> =
json_array_1<V1, <value_1 as AsExpression<V1>>::Expression>;
impl<V1: NotBlob, value_1> Expression for json_array_1<V1, value_1> where
(value_1): Expression {
type SqlType = Json;
}
impl<V1: NotBlob, value_1, __DieselInternal>
SelectableExpression<__DieselInternal> for json_array_1<V1, value_1>
where value_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<V1: NotBlob, value_1, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_array_1<V1, value_1> where
value_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<V1: NotBlob, value_1, __DieselInternal>
FunctionFragment<__DieselInternal> for json_array_1<V1, value_1> where
__DieselInternal: diesel::backend::Backend,
value_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_array";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<V1: NotBlob, value_1> QueryFragment<crate::sqlite::Sqlite> for
json_array_1<V1, value_1> where
value_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<value_1>(value_1);
const _: () =
{
use diesel;
impl<value_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<value_1> where
value_1: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<V1: NotBlob, value_1, __DieselInternal>
ValidGrouping<__DieselInternal> for json_array_1<V1, value_1> where
__Derived<value_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<value_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_array()` SQL function accepts zero or more arguments and returns a well-formed JSON array"]
#[doc =
" that is composed from those arguments. Note that arguments of type BLOB will not be accepted by this"]
#[doc = " function."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_array_0`, `json_array_1`, ... `json_array_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_array")]
#[doc = ""]
#[doc =
" An argument with SQL type TEXT is normally converted into a quoted JSON string. However, if the"]
#[doc =
" argument is the output from another json function, then it is stored as JSON. This allows calls to"]
#[doc =
" `json_array()` and `json_object()` to be nested. The [`json()`] function can also be used to force"]
#[doc = " strings to be recognized as JSON."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Double};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(json_array_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([]), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_array_1::<Text, _>(\"abc\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\"]), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_array_2::<Text, Double, _, _>(\"abc\", 3.1415))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\", 3.1415]), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_array_2<V1: NotBlob, V2: NotBlob, value_1,
value_2>(value_1: value_1, value_2: value_2)
-> json_array_2<V1, V2, value_1, value_2> where
value_1: diesel::expression::AsExpression<V1>,
value_2: diesel::expression::AsExpression<V2> {
json_array_2_utils::json_array_2 {
value_1: value_1.as_expression(),
value_2: value_2.as_expression(),
V1: ::core::marker::PhantomData,
V2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_array_2()`](fn@json_array_2)"]
pub type json_array_2<V1, V2, value_1, value_2> =
json_array_2_utils::json_array_2<V1, V2,
<value_1 as diesel::expression::AsExpression<V1>>::Expression,
<value_2 as diesel::expression::AsExpression<V2>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_array_2_return_type {
#[doc =
"Return type of the [`json_array_2()`](fn@super::json_array_2) SQL function."]
pub type json_array_2<value_1, value_2> =
super::json_array_2<<value_1 as
diesel::expression::Expression>::SqlType,
<value_2 as diesel::expression::Expression>::SqlType, value_1,
value_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_array_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_array_2<V1, V2, value_1, value_2> {
pub(in super) value_1: value_1,
pub(in super) value_2: value_2,
pub(in super) V1: ::core::marker::PhantomData<V1>,
pub(in super) V2: ::core::marker::PhantomData<V2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<V1, V2, value_1, value_2, __Rhs> ::core::ops::Add<__Rhs> for
json_array_2<V1, V2, value_1, value_2> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<V1, V2, value_1, value_2, __Rhs> ::core::ops::Sub<__Rhs> for
json_array_2<V1, V2, value_1, value_2> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<V1, V2, value_1, value_2, __Rhs> ::core::ops::Mul<__Rhs> for
json_array_2<V1, V2, value_1, value_2> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<V1, V2, value_1, value_2, __Rhs> ::core::ops::Div<__Rhs> for
json_array_2<V1, V2, value_1, value_2> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<V1: ::core::fmt::Debug, V2: ::core::fmt::Debug,
value_1: ::core::fmt::Debug, value_2: ::core::fmt::Debug>
::core::fmt::Debug for json_array_2<V1, V2, value_1, value_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"json_array_2", "value_1", &self.value_1, "value_2",
&self.value_2, "V1", &self.V1, "V2", &&self.V2)
}
}
#[automatically_derived]
impl<V1: ::core::clone::Clone, V2: ::core::clone::Clone,
value_1: ::core::clone::Clone, value_2: ::core::clone::Clone>
::core::clone::Clone for json_array_2<V1, V2, value_1, value_2> {
#[inline]
fn clone(&self) -> json_array_2<V1, V2, value_1, value_2> {
json_array_2 {
value_1: ::core::clone::Clone::clone(&self.value_1),
value_2: ::core::clone::Clone::clone(&self.value_2),
V1: ::core::clone::Clone::clone(&self.V1),
V2: ::core::clone::Clone::clone(&self.V2),
}
}
}
#[automatically_derived]
impl<V1: ::core::marker::Copy, V2: ::core::marker::Copy,
value_1: ::core::marker::Copy, value_2: ::core::marker::Copy>
::core::marker::Copy for json_array_2<V1, V2, value_1, value_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<V1: diesel::query_builder::QueryId,
V2: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId,
value_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_array_2<V1, V2, value_1, value_2> {
type QueryId =
json_array_2<<V1 as
diesel::query_builder::QueryId>::QueryId,
<V2 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId,
<value_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_array_2()`](fn@json_array_2)"]
pub type HelperType<V1, V2, value_1, value_2> =
json_array_2<V1, V2, <value_1 as AsExpression<V1>>::Expression,
<value_2 as AsExpression<V2>>::Expression>;
impl<V1: NotBlob, V2: NotBlob, value_1, value_2> Expression for
json_array_2<V1, V2, value_1, value_2> where
(value_1, value_2): Expression {
type SqlType = Json;
}
impl<V1: NotBlob, V2: NotBlob, value_1, value_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_array_2<V1, V2, value_1, value_2> where
value_1: SelectableExpression<__DieselInternal>,
value_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<V1: NotBlob, V2: NotBlob, value_1, value_2, __DieselInternal>
AppearsOnTable<__DieselInternal> for
json_array_2<V1, V2, value_1, value_2> where
value_1: AppearsOnTable<__DieselInternal>,
value_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<V1: NotBlob, V2: NotBlob, value_1, value_2, __DieselInternal>
FunctionFragment<__DieselInternal> for
json_array_2<V1, V2, value_1, value_2> where
__DieselInternal: diesel::backend::Backend,
value_1: QueryFragment<__DieselInternal>,
value_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_array";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<V1: NotBlob, V2: NotBlob, value_1, value_2>
QueryFragment<crate::sqlite::Sqlite> for
json_array_2<V1, V2, value_1, value_2> where
value_1: QueryFragment<crate::sqlite::Sqlite>,
value_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<value_1, value_2>(value_1, value_2);
const _: () =
{
use diesel;
impl<value_1, value_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<value_1, value_2> where
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_2: diesel::expression::ValidGrouping<__GroupByClause>,
<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<value_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<value_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<V1: NotBlob, V2: NotBlob, value_1, value_2, __DieselInternal>
ValidGrouping<__DieselInternal> for
json_array_2<V1, V2, value_1, value_2> where
__Derived<value_1, value_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<value_1, value_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __json_array_return_types {
#[doc(inline)]
pub use super::__json_array_0_return_type::*;
#[doc(inline)]
pub use super::__json_array_1_return_type::*;
#[doc(inline)]
pub use super::__json_array_2_return_type::*;
}
#[doc =
" The `jsonb_array()` SQL function accepts zero or more arguments and returns a well-formed JSON array"]
#[doc =
" that is composed from those arguments. Note that arguments of type BLOB will not be accepted by this"]
#[doc = " function."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_array_0`, `jsonb_array_1`, ... `jsonb_array_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_array")]
#[doc = ""]
#[doc =
" An argument with SQL type TEXT is normally converted into a quoted JSON string. However, if the"]
#[doc =
" argument is the output from another json function, then it is stored as JSON. This allows calls to"]
#[doc =
" `jsonb_array()` and `jsonb_object()` to be nested. The [`json()`] function can also be used to force"]
#[doc = " strings to be recognized as JSON."]
#[doc = ""]
#[doc =
" This function works just like the [`json_array()`](json_array_1()) function except that it returns the"]
#[doc =
" constructed JSON array in the SQLite\'s private JSONB format rather than in the standard RFC 8259 text"]
#[doc = " format."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Double};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(jsonb_array_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([]), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(jsonb_array_1::<Text, _>(\"abc\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\"]), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_array_2::<Text, Double, _, _>(\"abc\", 3.1415))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\", 3.1415]), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_array_0() -> jsonb_array_0 where {
jsonb_array_0_utils::jsonb_array_0 {}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_array_0()`](fn@jsonb_array_0)"]
pub type jsonb_array_0 = jsonb_array_0_utils::jsonb_array_0<>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_array_0_return_type {
#[doc =
"Return type of the [`jsonb_array_0()`](fn@super::jsonb_array_0) SQL function."]
pub type jsonb_array_0 = super::jsonb_array_0<>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_array_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_array_0 {}
#[automatically_derived]
impl ::core::fmt::Debug for jsonb_array_0 {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f, "jsonb_array_0")
}
}
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for jsonb_array_0 { }
#[automatically_derived]
impl ::core::clone::Clone for jsonb_array_0 {
#[inline]
fn clone(&self) -> jsonb_array_0 { *self }
}
#[automatically_derived]
impl ::core::marker::Copy for jsonb_array_0 { }
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl diesel::query_builder::QueryId for jsonb_array_0 {
type QueryId = jsonb_array_0<>;
const HAS_STATIC_QUERY_ID: bool = true;
const IS_WINDOW_FUNCTION: bool = false;
}
};
#[doc = "The return type of [`jsonb_array_0()`](fn@jsonb_array_0)"]
pub type HelperType = jsonb_array_0<>;
impl Expression for jsonb_array_0 where {
type SqlType = Jsonb;
}
impl<__DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_array_0 where Self: AppearsOnTable<__DieselInternal> {}
impl<__DieselInternal> AppearsOnTable<__DieselInternal> for jsonb_array_0
where Self: Expression {}
impl<__DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_array_0 where __DieselInternal: diesel::backend::Backend {
const FUNCTION_NAME: &'static str = "jsonb_array";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
Ok(())
}
}
impl QueryFragment<crate::sqlite::Sqlite> for jsonb_array_0 where {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived();
const _: () =
{
use diesel;
impl<__GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived {
type IsAggregate = diesel::expression::is_aggregate::Never;
}
};
impl<__DieselInternal> ValidGrouping<__DieselInternal> for jsonb_array_0
where __Derived<>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_array()` SQL function accepts zero or more arguments and returns a well-formed JSON array"]
#[doc =
" that is composed from those arguments. Note that arguments of type BLOB will not be accepted by this"]
#[doc = " function."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_array_0`, `jsonb_array_1`, ... `jsonb_array_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_array")]
#[doc = ""]
#[doc =
" An argument with SQL type TEXT is normally converted into a quoted JSON string. However, if the"]
#[doc =
" argument is the output from another json function, then it is stored as JSON. This allows calls to"]
#[doc =
" `jsonb_array()` and `jsonb_object()` to be nested. The [`json()`] function can also be used to force"]
#[doc = " strings to be recognized as JSON."]
#[doc = ""]
#[doc =
" This function works just like the [`json_array()`](json_array_1()) function except that it returns the"]
#[doc =
" constructed JSON array in the SQLite\'s private JSONB format rather than in the standard RFC 8259 text"]
#[doc = " format."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Double};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(jsonb_array_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([]), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(jsonb_array_1::<Text, _>(\"abc\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\"]), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_array_2::<Text, Double, _, _>(\"abc\", 3.1415))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\", 3.1415]), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_array_1<V1: NotBlob, value_1>(value_1: value_1)
-> jsonb_array_1<V1, value_1> where
value_1: diesel::expression::AsExpression<V1> {
jsonb_array_1_utils::jsonb_array_1 {
value_1: value_1.as_expression(),
V1: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_array_1()`](fn@jsonb_array_1)"]
pub type jsonb_array_1<V1, value_1> =
jsonb_array_1_utils::jsonb_array_1<V1,
<value_1 as diesel::expression::AsExpression<V1>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_array_1_return_type {
#[doc =
"Return type of the [`jsonb_array_1()`](fn@super::jsonb_array_1) SQL function."]
pub type jsonb_array_1<value_1> =
super::jsonb_array_1<<value_1 as
diesel::expression::Expression>::SqlType, value_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_array_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_array_1<V1, value_1> {
pub(in super) value_1: value_1,
pub(in super) V1: ::core::marker::PhantomData<V1>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<V1, value_1, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_array_1<V1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<V1, value_1, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_array_1<V1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<V1, value_1, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_array_1<V1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<V1, value_1, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_array_1<V1, value_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<V1: ::core::fmt::Debug, value_1: ::core::fmt::Debug>
::core::fmt::Debug for jsonb_array_1<V1, value_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"jsonb_array_1", "value_1", &self.value_1, "V1", &&self.V1)
}
}
#[automatically_derived]
impl<V1: ::core::clone::Clone, value_1: ::core::clone::Clone>
::core::clone::Clone for jsonb_array_1<V1, value_1> {
#[inline]
fn clone(&self) -> jsonb_array_1<V1, value_1> {
jsonb_array_1 {
value_1: ::core::clone::Clone::clone(&self.value_1),
V1: ::core::clone::Clone::clone(&self.V1),
}
}
}
#[automatically_derived]
impl<V1: ::core::marker::Copy, value_1: ::core::marker::Copy>
::core::marker::Copy for jsonb_array_1<V1, value_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<V1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for jsonb_array_1<V1, value_1>
{
type QueryId =
jsonb_array_1<<V1 as
diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_array_1()`](fn@jsonb_array_1)"]
pub type HelperType<V1, value_1> =
jsonb_array_1<V1, <value_1 as AsExpression<V1>>::Expression>;
impl<V1: NotBlob, value_1> Expression for jsonb_array_1<V1, value_1> where
(value_1): Expression {
type SqlType = Jsonb;
}
impl<V1: NotBlob, value_1, __DieselInternal>
SelectableExpression<__DieselInternal> for jsonb_array_1<V1, value_1>
where value_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<V1: NotBlob, value_1, __DieselInternal>
AppearsOnTable<__DieselInternal> for jsonb_array_1<V1, value_1> where
value_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<V1: NotBlob, value_1, __DieselInternal>
FunctionFragment<__DieselInternal> for jsonb_array_1<V1, value_1>
where __DieselInternal: diesel::backend::Backend,
value_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_array";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<V1: NotBlob, value_1> QueryFragment<crate::sqlite::Sqlite> for
jsonb_array_1<V1, value_1> where
value_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<value_1>(value_1);
const _: () =
{
use diesel;
impl<value_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<value_1> where
value_1: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<V1: NotBlob, value_1, __DieselInternal>
ValidGrouping<__DieselInternal> for jsonb_array_1<V1, value_1> where
__Derived<value_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<value_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_array()` SQL function accepts zero or more arguments and returns a well-formed JSON array"]
#[doc =
" that is composed from those arguments. Note that arguments of type BLOB will not be accepted by this"]
#[doc = " function."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_array_0`, `jsonb_array_1`, ... `jsonb_array_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_array")]
#[doc = ""]
#[doc =
" An argument with SQL type TEXT is normally converted into a quoted JSON string. However, if the"]
#[doc =
" argument is the output from another json function, then it is stored as JSON. This allows calls to"]
#[doc =
" `jsonb_array()` and `jsonb_object()` to be nested. The [`json()`] function can also be used to force"]
#[doc = " strings to be recognized as JSON."]
#[doc = ""]
#[doc =
" This function works just like the [`json_array()`](json_array_1()) function except that it returns the"]
#[doc =
" constructed JSON array in the SQLite\'s private JSONB format rather than in the standard RFC 8259 text"]
#[doc = " format."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Text, Double};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc =
" let result = diesel::select(jsonb_array_0()).get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([]), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(jsonb_array_1::<Text, _>(\"abc\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\"]), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_array_2::<Text, Double, _, _>(\"abc\", 3.1415))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\"abc\", 3.1415]), result);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_array_2<V1: NotBlob, V2: NotBlob, value_1,
value_2>(value_1: value_1, value_2: value_2)
-> jsonb_array_2<V1, V2, value_1, value_2> where
value_1: diesel::expression::AsExpression<V1>,
value_2: diesel::expression::AsExpression<V2> {
jsonb_array_2_utils::jsonb_array_2 {
value_1: value_1.as_expression(),
value_2: value_2.as_expression(),
V1: ::core::marker::PhantomData,
V2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_array_2()`](fn@jsonb_array_2)"]
pub type jsonb_array_2<V1, V2, value_1, value_2> =
jsonb_array_2_utils::jsonb_array_2<V1, V2,
<value_1 as diesel::expression::AsExpression<V1>>::Expression,
<value_2 as diesel::expression::AsExpression<V2>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_array_2_return_type {
#[doc =
"Return type of the [`jsonb_array_2()`](fn@super::jsonb_array_2) SQL function."]
pub type jsonb_array_2<value_1, value_2> =
super::jsonb_array_2<<value_1 as
diesel::expression::Expression>::SqlType,
<value_2 as diesel::expression::Expression>::SqlType, value_1,
value_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_array_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_array_2<V1, V2, value_1, value_2> {
pub(in super) value_1: value_1,
pub(in super) value_2: value_2,
pub(in super) V1: ::core::marker::PhantomData<V1>,
pub(in super) V2: ::core::marker::PhantomData<V2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<V1, V2, value_1, value_2, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_array_2<V1, V2, value_1, value_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<V1, V2, value_1, value_2, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_array_2<V1, V2, value_1, value_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<V1, V2, value_1, value_2, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_array_2<V1, V2, value_1, value_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<V1, V2, value_1, value_2, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_array_2<V1, V2, value_1, value_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<V1: ::core::fmt::Debug, V2: ::core::fmt::Debug,
value_1: ::core::fmt::Debug, value_2: ::core::fmt::Debug>
::core::fmt::Debug for jsonb_array_2<V1, V2, value_1, value_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"jsonb_array_2", "value_1", &self.value_1, "value_2",
&self.value_2, "V1", &self.V1, "V2", &&self.V2)
}
}
#[automatically_derived]
impl<V1: ::core::clone::Clone, V2: ::core::clone::Clone,
value_1: ::core::clone::Clone, value_2: ::core::clone::Clone>
::core::clone::Clone for jsonb_array_2<V1, V2, value_1, value_2> {
#[inline]
fn clone(&self) -> jsonb_array_2<V1, V2, value_1, value_2> {
jsonb_array_2 {
value_1: ::core::clone::Clone::clone(&self.value_1),
value_2: ::core::clone::Clone::clone(&self.value_2),
V1: ::core::clone::Clone::clone(&self.V1),
V2: ::core::clone::Clone::clone(&self.V2),
}
}
}
#[automatically_derived]
impl<V1: ::core::marker::Copy, V2: ::core::marker::Copy,
value_1: ::core::marker::Copy, value_2: ::core::marker::Copy>
::core::marker::Copy for jsonb_array_2<V1, V2, value_1, value_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<V1: diesel::query_builder::QueryId,
V2: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId,
value_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_array_2<V1, V2, value_1, value_2> {
type QueryId =
jsonb_array_2<<V1 as
diesel::query_builder::QueryId>::QueryId,
<V2 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId,
<value_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_array_2()`](fn@jsonb_array_2)"]
pub type HelperType<V1, V2, value_1, value_2> =
jsonb_array_2<V1, V2, <value_1 as AsExpression<V1>>::Expression,
<value_2 as AsExpression<V2>>::Expression>;
impl<V1: NotBlob, V2: NotBlob, value_1, value_2> Expression for
jsonb_array_2<V1, V2, value_1, value_2> where
(value_1, value_2): Expression {
type SqlType = Jsonb;
}
impl<V1: NotBlob, V2: NotBlob, value_1, value_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
jsonb_array_2<V1, V2, value_1, value_2> where
value_1: SelectableExpression<__DieselInternal>,
value_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<V1: NotBlob, V2: NotBlob, value_1, value_2, __DieselInternal>
AppearsOnTable<__DieselInternal> for
jsonb_array_2<V1, V2, value_1, value_2> where
value_1: AppearsOnTable<__DieselInternal>,
value_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<V1: NotBlob, V2: NotBlob, value_1, value_2, __DieselInternal>
FunctionFragment<__DieselInternal> for
jsonb_array_2<V1, V2, value_1, value_2> where
__DieselInternal: diesel::backend::Backend,
value_1: QueryFragment<__DieselInternal>,
value_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_array";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<V1: NotBlob, V2: NotBlob, value_1, value_2>
QueryFragment<crate::sqlite::Sqlite> for
jsonb_array_2<V1, V2, value_1, value_2> where
value_1: QueryFragment<crate::sqlite::Sqlite>,
value_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<value_1, value_2>(value_1, value_2);
const _: () =
{
use diesel;
impl<value_1, value_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<value_1, value_2> where
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_2: diesel::expression::ValidGrouping<__GroupByClause>,
<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<value_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<value_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<V1: NotBlob, V2: NotBlob, value_1, value_2, __DieselInternal>
ValidGrouping<__DieselInternal> for
jsonb_array_2<V1, V2, value_1, value_2> where
__Derived<value_1, value_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<value_1, value_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __jsonb_array_return_types {
#[doc(inline)]
pub use super::__jsonb_array_0_return_type::*;
#[doc(inline)]
pub use super::__jsonb_array_1_return_type::*;
#[doc(inline)]
pub use super::__jsonb_array_2_return_type::*;
}
#[doc =
" The `json_remove(X,P,...)` SQL function takes a single JSON value as its first argument followed by"]
#[doc =
" zero or more path arguments. The `json_remove(X,P,...)` function returns a copy of the X parameter"]
#[doc =
" with all the elements identified by path arguments removed. Paths that select elements not found in X"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_remove_0`, `json_remove_1`, ... `json_remove_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_remove")]
#[doc = " are silently ignored."]
#[doc = ""]
#[doc =
" Removals occurs sequentially from left to right. Changes caused by prior removals can affect the path"]
#[doc = " search for subsequent arguments."]
#[doc = ""]
#[doc =
" If the `json_remove(X)` function is called with no path arguments, then it returns the input X"]
#[doc = " reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_remove()` function throws an error if any of the path arguments is not a well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Text};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc = " let result = diesel::select(json_remove_0::<Json, _>(json))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'a\', \'b\', \'c\', \'d\'])), result);"]
#[doc = ""]
#[doc = " // Values are removed sequentially from left to right."]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc =
" let result = diesel::select(json_remove_2::<Json, _, _, _>(json, \"$[0]\", \"$[2]\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'b\', \'c\'])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(json_remove_1::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"b\": 20})), result);"]
#[doc = ""]
#[doc = " // Paths that select not existing elements are silently ignored."]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(json_remove_1::<Json, _, _>(json, \"$.c\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"a\": 10, \"b\": 20})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(json_remove_1::<Json, _, _>(json, \"$\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_remove_0<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json>(json: json) -> json_remove_0<J, json> where
json: diesel::expression::AsExpression<J> {
json_remove_0_utils::json_remove_0 {
json: json.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_remove_0()`](fn@json_remove_0)"]
pub type json_remove_0<J, json> =
json_remove_0_utils::json_remove_0<J,
<json as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_remove_0_return_type {
#[doc =
"Return type of the [`json_remove_0()`](fn@super::json_remove_0) SQL function."]
pub type json_remove_0<json> =
super::json_remove_0<<json as
diesel::expression::Expression>::SqlType, json>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_remove_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_remove_0<J, json> {
pub(in super) json: json,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, __Rhs> ::core::ops::Add<__Rhs> for
json_remove_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Sub<__Rhs> for
json_remove_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Mul<__Rhs> for
json_remove_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Div<__Rhs> for
json_remove_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug> ::core::fmt::Debug
for json_remove_0<J, json> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_remove_0", "json", &self.json, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone>
::core::clone::Clone for json_remove_0<J, json> {
#[inline]
fn clone(&self) -> json_remove_0<J, json> {
json_remove_0 {
json: ::core::clone::Clone::clone(&self.json),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy>
::core::marker::Copy for json_remove_0<J, json> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_remove_0<J, json> {
type QueryId =
json_remove_0<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc = "The return type of [`json_remove_0()`](fn@json_remove_0)"]
pub type HelperType<J, json> =
json_remove_0<J, <json as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json>
Expression for json_remove_0<J, json> where (json): Expression {
type SqlType = Nullable<Json>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
__DieselInternal> SelectableExpression<__DieselInternal> for
json_remove_0<J, json> where
json: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
__DieselInternal> AppearsOnTable<__DieselInternal> for
json_remove_0<J, json> where json: AppearsOnTable<__DieselInternal>,
Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
__DieselInternal> FunctionFragment<__DieselInternal> for
json_remove_0<J, json> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_remove";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json>
QueryFragment<crate::sqlite::Sqlite> for json_remove_0<J, json> where
json: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json>(json);
const _: () =
{
use diesel;
impl<json, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json> where
json: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
__DieselInternal> ValidGrouping<__DieselInternal> for
json_remove_0<J, json> where
__Derived<json>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_remove(X,P,...)` SQL function takes a single JSON value as its first argument followed by"]
#[doc =
" zero or more path arguments. The `json_remove(X,P,...)` function returns a copy of the X parameter"]
#[doc =
" with all the elements identified by path arguments removed. Paths that select elements not found in X"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_remove_0`, `json_remove_1`, ... `json_remove_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_remove")]
#[doc = " are silently ignored."]
#[doc = ""]
#[doc =
" Removals occurs sequentially from left to right. Changes caused by prior removals can affect the path"]
#[doc = " search for subsequent arguments."]
#[doc = ""]
#[doc =
" If the `json_remove(X)` function is called with no path arguments, then it returns the input X"]
#[doc = " reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_remove()` function throws an error if any of the path arguments is not a well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Text};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc = " let result = diesel::select(json_remove_0::<Json, _>(json))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'a\', \'b\', \'c\', \'d\'])), result);"]
#[doc = ""]
#[doc = " // Values are removed sequentially from left to right."]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc =
" let result = diesel::select(json_remove_2::<Json, _, _, _>(json, \"$[0]\", \"$[2]\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'b\', \'c\'])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(json_remove_1::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"b\": 20})), result);"]
#[doc = ""]
#[doc = " // Paths that select not existing elements are silently ignored."]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(json_remove_1::<Json, _, _>(json, \"$.c\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"a\": 10, \"b\": 20})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(json_remove_1::<Json, _, _>(json, \"$\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_remove_1<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, path_1>(json: json, path_1: path_1)
-> json_remove_1<J, json, path_1> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text> {
json_remove_1_utils::json_remove_1 {
json: json.as_expression(),
path_1: path_1.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_remove_1()`](fn@json_remove_1)"]
pub type json_remove_1<J, json, path_1> =
json_remove_1_utils::json_remove_1<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_remove_1_return_type {
#[doc =
"Return type of the [`json_remove_1()`](fn@super::json_remove_1) SQL function."]
pub type json_remove_1<json, path_1> =
super::json_remove_1<<json as
diesel::expression::Expression>::SqlType, json, path_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_remove_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_remove_1<J, json, path_1> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, path_1, __Rhs> ::core::ops::Add<__Rhs> for
json_remove_1<J, json, path_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, __Rhs> ::core::ops::Sub<__Rhs> for
json_remove_1<J, json, path_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, __Rhs> ::core::ops::Mul<__Rhs> for
json_remove_1<J, json, path_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, __Rhs> ::core::ops::Div<__Rhs> for
json_remove_1<J, json, path_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
path_1: ::core::fmt::Debug> ::core::fmt::Debug for
json_remove_1<J, json, path_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"json_remove_1", "json", &self.json, "path_1", &self.path_1,
"J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
path_1: ::core::clone::Clone> ::core::clone::Clone for
json_remove_1<J, json, path_1> {
#[inline]
fn clone(&self) -> json_remove_1<J, json, path_1> {
json_remove_1 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
path_1: ::core::marker::Copy> ::core::marker::Copy for
json_remove_1<J, json, path_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_remove_1<J, json, path_1> {
type QueryId =
json_remove_1<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_remove_1()`](fn@json_remove_1)"]
pub type HelperType<J, json, path_1> =
json_remove_1<J, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1> Expression for json_remove_1<J, json, path_1> where
(json, path_1): Expression {
type SqlType = Nullable<Json>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, __DieselInternal> SelectableExpression<__DieselInternal> for
json_remove_1<J, json, path_1> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_remove_1<J, json, path_1> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, __DieselInternal> FunctionFragment<__DieselInternal> for
json_remove_1<J, json, path_1> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_remove";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1> QueryFragment<crate::sqlite::Sqlite> for
json_remove_1<J, json, path_1> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1>(json, path_1);
const _: () =
{
use diesel;
impl<json, path_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, __DieselInternal> ValidGrouping<__DieselInternal> for
json_remove_1<J, json, path_1> where
__Derived<json, path_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_remove(X,P,...)` SQL function takes a single JSON value as its first argument followed by"]
#[doc =
" zero or more path arguments. The `json_remove(X,P,...)` function returns a copy of the X parameter"]
#[doc =
" with all the elements identified by path arguments removed. Paths that select elements not found in X"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_remove_0`, `json_remove_1`, ... `json_remove_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_remove")]
#[doc = " are silently ignored."]
#[doc = ""]
#[doc =
" Removals occurs sequentially from left to right. Changes caused by prior removals can affect the path"]
#[doc = " search for subsequent arguments."]
#[doc = ""]
#[doc =
" If the `json_remove(X)` function is called with no path arguments, then it returns the input X"]
#[doc = " reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_remove()` function throws an error if any of the path arguments is not a well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Json, Text};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc = " let result = diesel::select(json_remove_0::<Json, _>(json))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'a\', \'b\', \'c\', \'d\'])), result);"]
#[doc = ""]
#[doc = " // Values are removed sequentially from left to right."]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc =
" let result = diesel::select(json_remove_2::<Json, _, _, _>(json, \"$[0]\", \"$[2]\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'b\', \'c\'])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(json_remove_1::<Json, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"b\": 20})), result);"]
#[doc = ""]
#[doc = " // Paths that select not existing elements are silently ignored."]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(json_remove_1::<Json, _, _>(json, \"$.c\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"a\": 10, \"b\": 20})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(json_remove_1::<Json, _, _>(json, \"$\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_remove_2<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, path_1,
path_2>(json: json, path_1: path_1, path_2: path_2)
-> json_remove_2<J, json, path_1, path_2> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
path_2: diesel::expression::AsExpression<Text> {
json_remove_2_utils::json_remove_2 {
json: json.as_expression(),
path_1: path_1.as_expression(),
path_2: path_2.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_remove_2()`](fn@json_remove_2)"]
pub type json_remove_2<J, json, path_1, path_2> =
json_remove_2_utils::json_remove_2<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<path_2 as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_remove_2_return_type {
#[doc =
"Return type of the [`json_remove_2()`](fn@super::json_remove_2) SQL function."]
pub type json_remove_2<json, path_1, path_2> =
super::json_remove_2<<json as
diesel::expression::Expression>::SqlType, json, path_1, path_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_remove_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_remove_2<J, json, path_1, path_2> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) path_2: path_2,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, path_1, path_2, __Rhs> ::core::ops::Add<__Rhs> for
json_remove_2<J, json, path_1, path_2> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, path_2, __Rhs> ::core::ops::Sub<__Rhs> for
json_remove_2<J, json, path_1, path_2> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, path_2, __Rhs> ::core::ops::Mul<__Rhs> for
json_remove_2<J, json, path_1, path_2> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, path_2, __Rhs> ::core::ops::Div<__Rhs> for
json_remove_2<J, json, path_1, path_2> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
path_1: ::core::fmt::Debug, path_2: ::core::fmt::Debug>
::core::fmt::Debug for json_remove_2<J, json, path_1, path_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"json_remove_2", "json", &self.json, "path_1", &self.path_1,
"path_2", &self.path_2, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
path_1: ::core::clone::Clone, path_2: ::core::clone::Clone>
::core::clone::Clone for json_remove_2<J, json, path_1, path_2> {
#[inline]
fn clone(&self) -> json_remove_2<J, json, path_1, path_2> {
json_remove_2 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
path_2: ::core::clone::Clone::clone(&self.path_2),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
path_1: ::core::marker::Copy, path_2: ::core::marker::Copy>
::core::marker::Copy for json_remove_2<J, json, path_1, path_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
path_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_remove_2<J, json, path_1, path_2> {
type QueryId =
json_remove_2<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<path_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<path_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_remove_2()`](fn@json_remove_2)"]
pub type HelperType<J, json, path_1, path_2> =
json_remove_2<J, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<path_2 as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2> Expression for json_remove_2<J, json, path_1, path_2>
where (json, path_1, path_2): Expression {
type SqlType = Nullable<Json>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_remove_2<J, json, path_1, path_2> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
path_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_remove_2<J, json, path_1, path_2> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
path_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2, __DieselInternal> FunctionFragment<__DieselInternal>
for json_remove_2<J, json, path_1, path_2> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
path_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_remove";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2> QueryFragment<crate::sqlite::Sqlite> for
json_remove_2<J, json, path_1, path_2> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
path_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, path_2>(json, path_1, path_2);
const _: () =
{
use diesel;
impl<json, path_1, path_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, path_2> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
path_2: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<path_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2, __DieselInternal> ValidGrouping<__DieselInternal> for
json_remove_2<J, json, path_1, path_2> where
__Derived<json, path_1, path_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, path_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __json_remove_return_types {
#[doc(inline)]
pub use super::__json_remove_0_return_type::*;
#[doc(inline)]
pub use super::__json_remove_1_return_type::*;
#[doc(inline)]
pub use super::__json_remove_2_return_type::*;
}
#[doc =
" The `jsonb_remove(X,P,...)` SQL function takes a single JSON value as its first argument followed by"]
#[doc =
" zero or more path arguments. The `jsonb_remove(X,P,...)` function returns a copy of the X parameter"]
#[doc =
" with all the elements identified by path arguments removed. Paths that select elements not found in X"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_remove_0`, `jsonb_remove_1`, ... `jsonb_remove_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_remove")]
#[doc = " are silently ignored."]
#[doc = ""]
#[doc =
" Removals occurs sequentially from left to right. Changes caused by prior removals can affect the path"]
#[doc = " search for subsequent arguments."]
#[doc = ""]
#[doc =
" If the `jsonb_remove(X)` function is called with no path arguments, then it returns the input X"]
#[doc = " reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `jsonb_remove()` function throws an error if any of the path arguments is not a well-formed path."]
#[doc = ""]
#[doc = " This function returns value in a binary JSONB format."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Jsonb, Text};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc = " let result = diesel::select(jsonb_remove_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'a\', \'b\', \'c\', \'d\'])), result);"]
#[doc = ""]
#[doc = " // Values are removed sequentially from left to right."]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc =
" let result = diesel::select(jsonb_remove_2::<Jsonb, _, _, _>(json, \"$[0]\", \"$[2]\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'b\', \'c\'])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(jsonb_remove_1::<Jsonb, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"b\": 20})), result);"]
#[doc = ""]
#[doc = " // Paths that select not existing elements are silently ignored."]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(jsonb_remove_1::<Jsonb, _, _>(json, \"$.c\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"a\": 10, \"b\": 20})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(jsonb_remove_1::<Jsonb, _, _>(json, \"$\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_remove_0<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json>(json: json) -> jsonb_remove_0<J, json> where
json: diesel::expression::AsExpression<J> {
jsonb_remove_0_utils::jsonb_remove_0 {
json: json.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_remove_0()`](fn@jsonb_remove_0)"]
pub type jsonb_remove_0<J, json> =
jsonb_remove_0_utils::jsonb_remove_0<J,
<json as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_remove_0_return_type {
#[doc =
"Return type of the [`jsonb_remove_0()`](fn@super::jsonb_remove_0) SQL function."]
pub type jsonb_remove_0<json> =
super::jsonb_remove_0<<json as
diesel::expression::Expression>::SqlType, json>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_remove_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_remove_0<J, json> {
pub(in super) json: json,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_remove_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_remove_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_remove_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_remove_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug> ::core::fmt::Debug
for jsonb_remove_0<J, json> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"jsonb_remove_0", "json", &self.json, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone>
::core::clone::Clone for jsonb_remove_0<J, json> {
#[inline]
fn clone(&self) -> jsonb_remove_0<J, json> {
jsonb_remove_0 {
json: ::core::clone::Clone::clone(&self.json),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy>
::core::marker::Copy for jsonb_remove_0<J, json> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for jsonb_remove_0<J, json> {
type QueryId =
jsonb_remove_0<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc = "The return type of [`jsonb_remove_0()`](fn@jsonb_remove_0)"]
pub type HelperType<J, json> =
jsonb_remove_0<J, <json as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json>
Expression for jsonb_remove_0<J, json> where (json): Expression {
type SqlType = Nullable<Jsonb>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
__DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_remove_0<J, json> where
json: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
__DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_remove_0<J, json> where json: AppearsOnTable<__DieselInternal>,
Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
__DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_remove_0<J, json> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_remove";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json>
QueryFragment<crate::sqlite::Sqlite> for jsonb_remove_0<J, json> where
json: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json>(json);
const _: () =
{
use diesel;
impl<json, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json> where
json: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
__DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_remove_0<J, json> where
__Derived<json>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_remove(X,P,...)` SQL function takes a single JSON value as its first argument followed by"]
#[doc =
" zero or more path arguments. The `jsonb_remove(X,P,...)` function returns a copy of the X parameter"]
#[doc =
" with all the elements identified by path arguments removed. Paths that select elements not found in X"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_remove_0`, `jsonb_remove_1`, ... `jsonb_remove_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_remove")]
#[doc = " are silently ignored."]
#[doc = ""]
#[doc =
" Removals occurs sequentially from left to right. Changes caused by prior removals can affect the path"]
#[doc = " search for subsequent arguments."]
#[doc = ""]
#[doc =
" If the `jsonb_remove(X)` function is called with no path arguments, then it returns the input X"]
#[doc = " reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `jsonb_remove()` function throws an error if any of the path arguments is not a well-formed path."]
#[doc = ""]
#[doc = " This function returns value in a binary JSONB format."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Jsonb, Text};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc = " let result = diesel::select(jsonb_remove_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'a\', \'b\', \'c\', \'d\'])), result);"]
#[doc = ""]
#[doc = " // Values are removed sequentially from left to right."]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc =
" let result = diesel::select(jsonb_remove_2::<Jsonb, _, _, _>(json, \"$[0]\", \"$[2]\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'b\', \'c\'])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(jsonb_remove_1::<Jsonb, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"b\": 20})), result);"]
#[doc = ""]
#[doc = " // Paths that select not existing elements are silently ignored."]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(jsonb_remove_1::<Jsonb, _, _>(json, \"$.c\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"a\": 10, \"b\": 20})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(jsonb_remove_1::<Jsonb, _, _>(json, \"$\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_remove_1<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, path_1>(json: json, path_1: path_1)
-> jsonb_remove_1<J, json, path_1> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text> {
jsonb_remove_1_utils::jsonb_remove_1 {
json: json.as_expression(),
path_1: path_1.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_remove_1()`](fn@jsonb_remove_1)"]
pub type jsonb_remove_1<J, json, path_1> =
jsonb_remove_1_utils::jsonb_remove_1<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_remove_1_return_type {
#[doc =
"Return type of the [`jsonb_remove_1()`](fn@super::jsonb_remove_1) SQL function."]
pub type jsonb_remove_1<json, path_1> =
super::jsonb_remove_1<<json as
diesel::expression::Expression>::SqlType, json, path_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_remove_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_remove_1<J, json, path_1> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, path_1, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_remove_1<J, json, path_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_remove_1<J, json, path_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_remove_1<J, json, path_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_remove_1<J, json, path_1> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
path_1: ::core::fmt::Debug> ::core::fmt::Debug for
jsonb_remove_1<J, json, path_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"jsonb_remove_1", "json", &self.json, "path_1", &self.path_1,
"J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
path_1: ::core::clone::Clone> ::core::clone::Clone for
jsonb_remove_1<J, json, path_1> {
#[inline]
fn clone(&self) -> jsonb_remove_1<J, json, path_1> {
jsonb_remove_1 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
path_1: ::core::marker::Copy> ::core::marker::Copy for
jsonb_remove_1<J, json, path_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_remove_1<J, json, path_1> {
type QueryId =
jsonb_remove_1<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_remove_1()`](fn@jsonb_remove_1)"]
pub type HelperType<J, json, path_1> =
jsonb_remove_1<J, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1> Expression for jsonb_remove_1<J, json, path_1> where
(json, path_1): Expression {
type SqlType = Nullable<Jsonb>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, __DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_remove_1<J, json, path_1> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_remove_1<J, json, path_1> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, __DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_remove_1<J, json, path_1> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_remove";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1> QueryFragment<crate::sqlite::Sqlite> for
jsonb_remove_1<J, json, path_1> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1>(json, path_1);
const _: () =
{
use diesel;
impl<json, path_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_remove_1<J, json, path_1> where
__Derived<json, path_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_remove(X,P,...)` SQL function takes a single JSON value as its first argument followed by"]
#[doc =
" zero or more path arguments. The `jsonb_remove(X,P,...)` function returns a copy of the X parameter"]
#[doc =
" with all the elements identified by path arguments removed. Paths that select elements not found in X"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_remove_0`, `jsonb_remove_1`, ... `jsonb_remove_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_remove")]
#[doc = " are silently ignored."]
#[doc = ""]
#[doc =
" Removals occurs sequentially from left to right. Changes caused by prior removals can affect the path"]
#[doc = " search for subsequent arguments."]
#[doc = ""]
#[doc =
" If the `jsonb_remove(X)` function is called with no path arguments, then it returns the input X"]
#[doc = " reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `jsonb_remove()` function throws an error if any of the path arguments is not a well-formed path."]
#[doc = ""]
#[doc = " This function returns value in a binary JSONB format."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Jsonb, Text};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc = " let result = diesel::select(jsonb_remove_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'a\', \'b\', \'c\', \'d\'])), result);"]
#[doc = ""]
#[doc = " // Values are removed sequentially from left to right."]
#[doc = " let json = json!([\'a\', \'b\', \'c\', \'d\']);"]
#[doc =
" let result = diesel::select(jsonb_remove_2::<Jsonb, _, _, _>(json, \"$[0]\", \"$[2]\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!([\'b\', \'c\'])), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(jsonb_remove_1::<Jsonb, _, _>(json, \"$.a\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"b\": 20})), result);"]
#[doc = ""]
#[doc = " // Paths that select not existing elements are silently ignored."]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(jsonb_remove_1::<Jsonb, _, _>(json, \"$.c\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(Some(json!({\"a\": 10, \"b\": 20})), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 10, \"b\": 20});"]
#[doc =
" let result = diesel::select(jsonb_remove_1::<Jsonb, _, _>(json, \"$\"))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(None, result);"]
#[doc = ""]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_remove_2<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
SingleValue, json, path_1,
path_2>(json: json, path_1: path_1, path_2: path_2)
-> jsonb_remove_2<J, json, path_1, path_2> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
path_2: diesel::expression::AsExpression<Text> {
jsonb_remove_2_utils::jsonb_remove_2 {
json: json.as_expression(),
path_1: path_1.as_expression(),
path_2: path_2.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_remove_2()`](fn@jsonb_remove_2)"]
pub type jsonb_remove_2<J, json, path_1, path_2> =
jsonb_remove_2_utils::jsonb_remove_2<J,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<path_2 as diesel::expression::AsExpression<Text>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_remove_2_return_type {
#[doc =
"Return type of the [`jsonb_remove_2()`](fn@super::jsonb_remove_2) SQL function."]
pub type jsonb_remove_2<json, path_1, path_2> =
super::jsonb_remove_2<<json as
diesel::expression::Expression>::SqlType, json, path_1, path_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_remove_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_remove_2<J, json, path_1, path_2> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) path_2: path_2,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, path_1, path_2, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_remove_2<J, json, path_1, path_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, path_2, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_remove_2<J, json, path_1, path_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, path_2, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_remove_2<J, json, path_1, path_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, path_1, path_2, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_remove_2<J, json, path_1, path_2> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug,
path_1: ::core::fmt::Debug, path_2: ::core::fmt::Debug>
::core::fmt::Debug for jsonb_remove_2<J, json, path_1, path_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"jsonb_remove_2", "json", &self.json, "path_1", &self.path_1,
"path_2", &self.path_2, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone,
path_1: ::core::clone::Clone, path_2: ::core::clone::Clone>
::core::clone::Clone for jsonb_remove_2<J, json, path_1, path_2> {
#[inline]
fn clone(&self) -> jsonb_remove_2<J, json, path_1, path_2> {
jsonb_remove_2 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
path_2: ::core::clone::Clone::clone(&self.path_2),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy,
path_1: ::core::marker::Copy, path_2: ::core::marker::Copy>
::core::marker::Copy for jsonb_remove_2<J, json, path_1, path_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
path_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_remove_2<J, json, path_1, path_2> {
type QueryId =
jsonb_remove_2<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<path_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<path_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_remove_2()`](fn@jsonb_remove_2)"]
pub type HelperType<J, json, path_1, path_2> =
jsonb_remove_2<J, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<path_2 as AsExpression<Text>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2> Expression for jsonb_remove_2<J, json, path_1, path_2>
where (json, path_1, path_2): Expression {
type SqlType = Nullable<Jsonb>;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
jsonb_remove_2<J, json, path_1, path_2> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
path_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_remove_2<J, json, path_1, path_2> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
path_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2, __DieselInternal> FunctionFragment<__DieselInternal>
for jsonb_remove_2<J, json, path_1, path_2> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
path_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_remove";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2> QueryFragment<crate::sqlite::Sqlite> for
jsonb_remove_2<J, json, path_1, path_2> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
path_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, path_2>(json, path_1, path_2);
const _: () =
{
use diesel;
impl<json, path_1, path_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, path_2> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
path_2: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<path_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue, json,
path_1, path_2, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_remove_2<J, json, path_1, path_2> where
__Derived<json, path_1, path_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, path_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __jsonb_remove_return_types {
#[doc(inline)]
pub use super::__jsonb_remove_0_return_type::*;
#[doc(inline)]
pub use super::__jsonb_remove_1_return_type::*;
#[doc(inline)]
pub use super::__jsonb_remove_2_return_type::*;
}
#[doc =
" The `json_insert(X,P,V,...)` SQL function takes a single JSON value as its first argument"]
#[doc =
" followed by zero or more pairs of path and value arguments. It returns a copy of the X"]
#[doc =
" argument with the values V inserted at the paths P, but only where nothing already exists at"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_insert_0`, `json_insert_1`, ... `json_insert_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_insert")]
#[doc =
" the path. Paths that already select an element of X are left unchanged."]
#[doc = ""]
#[doc = " The path/value pairs are applied sequentially from left to right."]
#[doc = ""]
#[doc = " A path that ends in `[#]` appends the value to an existing array."]
#[doc = ""]
#[doc =
" If the `json_insert(X)` function is called with no path/value pairs, then it returns the"]
#[doc = " input X reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_insert()` function throws an error if any of the path arguments is not a"]
#[doc = " well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Json, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"c\": 3});"]
#[doc =
" let result = diesel::select(json_insert_1::<Json, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " // A path that already exists is left unchanged."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_insert_1::<Json, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(json_insert_1::<Json, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select("]
#[doc =
" json_insert_2::<Json, Integer, Integer, _, _, _, _, _>(json, \"$.b\", 2, \"$.c\", 3),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(json_insert_0::<Json, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_insert_1::<Nullable<Json>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_insert_0<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json>(json: json)
-> json_insert_0<J, json> where
json: diesel::expression::AsExpression<J> {
json_insert_0_utils::json_insert_0 {
json: json.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_insert_0()`](fn@json_insert_0)"]
pub type json_insert_0<J, json> =
json_insert_0_utils::json_insert_0<J,
<json as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_insert_0_return_type {
#[doc =
"Return type of the [`json_insert_0()`](fn@super::json_insert_0) SQL function."]
pub type json_insert_0<json> =
super::json_insert_0<<json as
diesel::expression::Expression>::SqlType, json>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_insert_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_insert_0<J, json> {
pub(in super) json: json,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, __Rhs> ::core::ops::Add<__Rhs> for
json_insert_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Sub<__Rhs> for
json_insert_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Mul<__Rhs> for
json_insert_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Div<__Rhs> for
json_insert_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug> ::core::fmt::Debug
for json_insert_0<J, json> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_insert_0", "json", &self.json, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone>
::core::clone::Clone for json_insert_0<J, json> {
#[inline]
fn clone(&self) -> json_insert_0<J, json> {
json_insert_0 {
json: ::core::clone::Clone::clone(&self.json),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy>
::core::marker::Copy for json_insert_0<J, json> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_insert_0<J, json> {
type QueryId =
json_insert_0<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc = "The return type of [`json_insert_0()`](fn@json_insert_0)"]
pub type HelperType<J, json> =
json_insert_0<J, <json as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json> Expression for
json_insert_0<J, json> where (json): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
SelectableExpression<__DieselInternal> for json_insert_0<J, json>
where json: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_insert_0<J, json> where
json: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
FunctionFragment<__DieselInternal> for json_insert_0<J, json> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_insert";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json>
QueryFragment<crate::sqlite::Sqlite> for json_insert_0<J, json> where
json: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json>(json);
const _: () =
{
use diesel;
impl<json, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json> where
json: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
ValidGrouping<__DieselInternal> for json_insert_0<J, json> where
__Derived<json>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_insert(X,P,V,...)` SQL function takes a single JSON value as its first argument"]
#[doc =
" followed by zero or more pairs of path and value arguments. It returns a copy of the X"]
#[doc =
" argument with the values V inserted at the paths P, but only where nothing already exists at"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_insert_0`, `json_insert_1`, ... `json_insert_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_insert")]
#[doc =
" the path. Paths that already select an element of X are left unchanged."]
#[doc = ""]
#[doc = " The path/value pairs are applied sequentially from left to right."]
#[doc = ""]
#[doc = " A path that ends in `[#]` appends the value to an existing array."]
#[doc = ""]
#[doc =
" If the `json_insert(X)` function is called with no path/value pairs, then it returns the"]
#[doc = " input X reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_insert()` function throws an error if any of the path arguments is not a"]
#[doc = " well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Json, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"c\": 3});"]
#[doc =
" let result = diesel::select(json_insert_1::<Json, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " // A path that already exists is left unchanged."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_insert_1::<Json, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(json_insert_1::<Json, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select("]
#[doc =
" json_insert_2::<Json, Integer, Integer, _, _, _, _, _>(json, \"$.b\", 2, \"$.c\", 3),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(json_insert_0::<Json, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_insert_1::<Nullable<Json>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_insert_1<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1>(json: json, path_1: path_1, value_1: value_1)
-> json_insert_1<J, V1, json, path_1, value_1> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1> {
json_insert_1_utils::json_insert_1 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_insert_1()`](fn@json_insert_1)"]
pub type json_insert_1<J, V1, json, path_1, value_1> =
json_insert_1_utils::json_insert_1<J, V1,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_insert_1_return_type {
#[doc =
"Return type of the [`json_insert_1()`](fn@super::json_insert_1) SQL function."]
pub type json_insert_1<json, path_1, value_1> =
super::json_insert_1<<json as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType, json, path_1,
value_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_insert_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_insert_1<J, V1, json, path_1, value_1> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Add<__Rhs>
for json_insert_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Sub<__Rhs>
for json_insert_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Mul<__Rhs>
for json_insert_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Div<__Rhs>
for json_insert_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
json: ::core::fmt::Debug, path_1: ::core::fmt::Debug,
value_1: ::core::fmt::Debug> ::core::fmt::Debug for
json_insert_1<J, V1, json, path_1, value_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f,
"json_insert_1", "json", &self.json, "path_1", &self.path_1,
"value_1", &self.value_1, "J", &self.J, "V1", &&self.V1)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
json: ::core::clone::Clone, path_1: ::core::clone::Clone,
value_1: ::core::clone::Clone> ::core::clone::Clone for
json_insert_1<J, V1, json, path_1, value_1> {
#[inline]
fn clone(&self) -> json_insert_1<J, V1, json, path_1, value_1> {
json_insert_1 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
json: ::core::marker::Copy, path_1: ::core::marker::Copy,
value_1: ::core::marker::Copy> ::core::marker::Copy for
json_insert_1<J, V1, json, path_1, value_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_insert_1<J, V1, json, path_1, value_1> {
type QueryId =
json_insert_1<<J as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_insert_1()`](fn@json_insert_1)"]
pub type HelperType<J, V1, json, path_1, value_1> =
json_insert_1<J, V1, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1> Expression for json_insert_1<J, V1, json, path_1, value_1>
where (json, path_1, value_1): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> SelectableExpression<__DieselInternal> for
json_insert_1<J, V1, json, path_1, value_1> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_insert_1<J, V1, json, path_1, value_1> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> FunctionFragment<__DieselInternal> for
json_insert_1<J, V1, json, path_1, value_1> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_insert";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1> QueryFragment<crate::sqlite::Sqlite> for
json_insert_1<J, V1, json, path_1, value_1> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1>(json, path_1, value_1);
const _: () =
{
use diesel;
impl<json, path_1, value_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> ValidGrouping<__DieselInternal> for
json_insert_1<J, V1, json, path_1, value_1> where
__Derived<json, path_1, value_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_insert(X,P,V,...)` SQL function takes a single JSON value as its first argument"]
#[doc =
" followed by zero or more pairs of path and value arguments. It returns a copy of the X"]
#[doc =
" argument with the values V inserted at the paths P, but only where nothing already exists at"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_insert_0`, `json_insert_1`, ... `json_insert_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_insert")]
#[doc =
" the path. Paths that already select an element of X are left unchanged."]
#[doc = ""]
#[doc = " The path/value pairs are applied sequentially from left to right."]
#[doc = ""]
#[doc = " A path that ends in `[#]` appends the value to an existing array."]
#[doc = ""]
#[doc =
" If the `json_insert(X)` function is called with no path/value pairs, then it returns the"]
#[doc = " input X reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_insert()` function throws an error if any of the path arguments is not a"]
#[doc = " well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Json, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"c\": 3});"]
#[doc =
" let result = diesel::select(json_insert_1::<Json, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " // A path that already exists is left unchanged."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_insert_1::<Json, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(json_insert_1::<Json, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select("]
#[doc =
" json_insert_2::<Json, Integer, Integer, _, _, _, _, _>(json, \"$.b\", 2, \"$.c\", 3),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(json_insert_0::<Json, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_insert_1::<Nullable<Json>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_insert_2<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob, json,
path_1, value_1, path_2,
value_2>(json: json, path_1: path_1, value_1: value_1, path_2: path_2,
value_2: value_2)
-> json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1>,
path_2: diesel::expression::AsExpression<Text>,
value_2: diesel::expression::AsExpression<V2> {
json_insert_2_utils::json_insert_2 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
path_2: path_2.as_expression(),
value_2: value_2.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
V2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_insert_2()`](fn@json_insert_2)"]
pub type json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> =
json_insert_2_utils::json_insert_2<J, V1, V2,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression,
<path_2 as diesel::expression::AsExpression<Text>>::Expression,
<value_2 as diesel::expression::AsExpression<V2>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_insert_2_return_type {
#[doc =
"Return type of the [`json_insert_2()`](fn@super::json_insert_2) SQL function."]
pub type json_insert_2<json, path_1, value_1, path_2, value_2> =
super::json_insert_2<<json as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType,
<value_2 as diesel::expression::Expression>::SqlType, json, path_1,
value_1, path_2, value_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_insert_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) path_2: path_2,
pub(in super) value_2: value_2,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
pub(in super) V2: ::core::marker::PhantomData<V2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Add<__Rhs> for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Sub<__Rhs> for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Mul<__Rhs> for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Div<__Rhs> for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
V2: ::core::fmt::Debug, json: ::core::fmt::Debug,
path_1: ::core::fmt::Debug, value_1: ::core::fmt::Debug,
path_2: ::core::fmt::Debug, value_2: ::core::fmt::Debug>
::core::fmt::Debug for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["json", "path_1", "value_1", "path_2", "value_2", "J", "V1",
"V2"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.json, &self.path_1, &self.value_1, &self.path_2,
&self.value_2, &self.J, &self.V1, &&self.V2];
::core::fmt::Formatter::debug_struct_fields_finish(f,
"json_insert_2", names, values)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
V2: ::core::clone::Clone, json: ::core::clone::Clone,
path_1: ::core::clone::Clone, value_1: ::core::clone::Clone,
path_2: ::core::clone::Clone, value_2: ::core::clone::Clone>
::core::clone::Clone for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn clone(&self)
->
json_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
json_insert_2 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
path_2: ::core::clone::Clone::clone(&self.path_2),
value_2: ::core::clone::Clone::clone(&self.value_2),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
V2: ::core::clone::Clone::clone(&self.V2),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
V2: ::core::marker::Copy, json: ::core::marker::Copy,
path_1: ::core::marker::Copy, value_1: ::core::marker::Copy,
path_2: ::core::marker::Copy, value_2: ::core::marker::Copy>
::core::marker::Copy for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
V2: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId,
path_2: diesel::query_builder::QueryId,
value_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
type QueryId =
json_insert_2<<J as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<V2 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId,
<path_2 as diesel::query_builder::QueryId>::QueryId,
<value_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<path_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_insert_2()`](fn@json_insert_2)"]
pub type HelperType<J, V1, V2, json, path_1, value_1, path_2, value_2> =
json_insert_2<J, V1, V2, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression,
<path_2 as AsExpression<Text>>::Expression,
<value_2 as AsExpression<V2>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2> Expression for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
(json, path_1, value_1, path_2, value_2): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
path_2: SelectableExpression<__DieselInternal>,
value_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
AppearsOnTable<__DieselInternal> for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>,
path_2: AppearsOnTable<__DieselInternal>,
value_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
FunctionFragment<__DieselInternal> for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal>,
path_2: QueryFragment<__DieselInternal>,
value_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_insert";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2>
QueryFragment<crate::sqlite::Sqlite> for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite>,
path_2: QueryFragment<crate::sqlite::Sqlite>,
value_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1, path_2,
value_2>(json, path_1, value_1, path_2, value_2);
const _: () =
{
use diesel;
impl<json, path_1, value_1, path_2, value_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1, path_2, value_2> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
path_2: diesel::expression::ValidGrouping<__GroupByClause>,
value_2: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<path_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
ValidGrouping<__DieselInternal> for
json_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
__Derived<json, path_1, value_1, path_2,
value_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1, path_2, value_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __json_insert_return_types {
#[doc(inline)]
pub use super::__json_insert_0_return_type::*;
#[doc(inline)]
pub use super::__json_insert_1_return_type::*;
#[doc(inline)]
pub use super::__json_insert_2_return_type::*;
}
#[doc =
" The `jsonb_insert(X,P,V,...)` SQL function works just like the [`json_insert()`](json_insert_1())"]
#[doc =
" function except that the result is returned in SQLite\'s private binary JSONB format rather than"]
#[doc = " in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_insert_0`, `jsonb_insert_1`, ... `jsonb_insert_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_insert")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Jsonb, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"c\": 3});"]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Jsonb, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " // A path that already exists is left unchanged."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Jsonb, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Jsonb, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select("]
#[doc =
" jsonb_insert_2::<Jsonb, Integer, Integer, _, _, _, _, _>(json, \"$.b\", 2, \"$.c\", 3),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(jsonb_insert_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Nullable<Jsonb>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_insert_0<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json>(json: json)
-> jsonb_insert_0<J, json> where
json: diesel::expression::AsExpression<J> {
jsonb_insert_0_utils::jsonb_insert_0 {
json: json.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_insert_0()`](fn@jsonb_insert_0)"]
pub type jsonb_insert_0<J, json> =
jsonb_insert_0_utils::jsonb_insert_0<J,
<json as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_insert_0_return_type {
#[doc =
"Return type of the [`jsonb_insert_0()`](fn@super::jsonb_insert_0) SQL function."]
pub type jsonb_insert_0<json> =
super::jsonb_insert_0<<json as
diesel::expression::Expression>::SqlType, json>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_insert_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_insert_0<J, json> {
pub(in super) json: json,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_insert_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_insert_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_insert_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_insert_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug> ::core::fmt::Debug
for jsonb_insert_0<J, json> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"jsonb_insert_0", "json", &self.json, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone>
::core::clone::Clone for jsonb_insert_0<J, json> {
#[inline]
fn clone(&self) -> jsonb_insert_0<J, json> {
jsonb_insert_0 {
json: ::core::clone::Clone::clone(&self.json),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy>
::core::marker::Copy for jsonb_insert_0<J, json> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for jsonb_insert_0<J, json> {
type QueryId =
jsonb_insert_0<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc = "The return type of [`jsonb_insert_0()`](fn@jsonb_insert_0)"]
pub type HelperType<J, json> =
jsonb_insert_0<J, <json as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json> Expression for
jsonb_insert_0<J, json> where (json): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
SelectableExpression<__DieselInternal> for jsonb_insert_0<J, json>
where json: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
AppearsOnTable<__DieselInternal> for jsonb_insert_0<J, json> where
json: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
FunctionFragment<__DieselInternal> for jsonb_insert_0<J, json> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_insert";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json>
QueryFragment<crate::sqlite::Sqlite> for jsonb_insert_0<J, json> where
json: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json>(json);
const _: () =
{
use diesel;
impl<json, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json> where
json: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
ValidGrouping<__DieselInternal> for jsonb_insert_0<J, json> where
__Derived<json>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_insert(X,P,V,...)` SQL function works just like the [`json_insert()`](json_insert_1())"]
#[doc =
" function except that the result is returned in SQLite\'s private binary JSONB format rather than"]
#[doc = " in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_insert_0`, `jsonb_insert_1`, ... `jsonb_insert_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_insert")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Jsonb, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"c\": 3});"]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Jsonb, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " // A path that already exists is left unchanged."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Jsonb, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Jsonb, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select("]
#[doc =
" jsonb_insert_2::<Jsonb, Integer, Integer, _, _, _, _, _>(json, \"$.b\", 2, \"$.c\", 3),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(jsonb_insert_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Nullable<Jsonb>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_insert_1<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1>(json: json, path_1: path_1, value_1: value_1)
-> jsonb_insert_1<J, V1, json, path_1, value_1> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1> {
jsonb_insert_1_utils::jsonb_insert_1 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_insert_1()`](fn@jsonb_insert_1)"]
pub type jsonb_insert_1<J, V1, json, path_1, value_1> =
jsonb_insert_1_utils::jsonb_insert_1<J, V1,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_insert_1_return_type {
#[doc =
"Return type of the [`jsonb_insert_1()`](fn@super::jsonb_insert_1) SQL function."]
pub type jsonb_insert_1<json, path_1, value_1> =
super::jsonb_insert_1<<json as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType, json, path_1,
value_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_insert_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_insert_1<J, V1, json, path_1, value_1> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Add<__Rhs>
for jsonb_insert_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Sub<__Rhs>
for jsonb_insert_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Mul<__Rhs>
for jsonb_insert_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Div<__Rhs>
for jsonb_insert_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
json: ::core::fmt::Debug, path_1: ::core::fmt::Debug,
value_1: ::core::fmt::Debug> ::core::fmt::Debug for
jsonb_insert_1<J, V1, json, path_1, value_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f,
"jsonb_insert_1", "json", &self.json, "path_1", &self.path_1,
"value_1", &self.value_1, "J", &self.J, "V1", &&self.V1)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
json: ::core::clone::Clone, path_1: ::core::clone::Clone,
value_1: ::core::clone::Clone> ::core::clone::Clone for
jsonb_insert_1<J, V1, json, path_1, value_1> {
#[inline]
fn clone(&self) -> jsonb_insert_1<J, V1, json, path_1, value_1> {
jsonb_insert_1 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
json: ::core::marker::Copy, path_1: ::core::marker::Copy,
value_1: ::core::marker::Copy> ::core::marker::Copy for
jsonb_insert_1<J, V1, json, path_1, value_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_insert_1<J, V1, json, path_1, value_1> {
type QueryId =
jsonb_insert_1<<J as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_insert_1()`](fn@jsonb_insert_1)"]
pub type HelperType<J, V1, json, path_1, value_1> =
jsonb_insert_1<J, V1, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1> Expression for jsonb_insert_1<J, V1, json, path_1, value_1>
where (json, path_1, value_1): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_insert_1<J, V1, json, path_1, value_1> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_insert_1<J, V1, json, path_1, value_1> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_insert_1<J, V1, json, path_1, value_1> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_insert";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1> QueryFragment<crate::sqlite::Sqlite> for
jsonb_insert_1<J, V1, json, path_1, value_1> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1>(json, path_1, value_1);
const _: () =
{
use diesel;
impl<json, path_1, value_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_insert_1<J, V1, json, path_1, value_1> where
__Derived<json, path_1, value_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_insert(X,P,V,...)` SQL function works just like the [`json_insert()`](json_insert_1())"]
#[doc =
" function except that the result is returned in SQLite\'s private binary JSONB format rather than"]
#[doc = " in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_insert_0`, `jsonb_insert_1`, ... `jsonb_insert_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_insert")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Jsonb, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"c\": 3});"]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Jsonb, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " // A path that already exists is left unchanged."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Jsonb, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Jsonb, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select("]
#[doc =
" jsonb_insert_2::<Jsonb, Integer, Integer, _, _, _, _, _>(json, \"$.b\", 2, \"$.c\", 3),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(jsonb_insert_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_insert_1::<Nullable<Jsonb>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_insert_2<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob, json,
path_1, value_1, path_2,
value_2>(json: json, path_1: path_1, value_1: value_1, path_2: path_2,
value_2: value_2)
-> jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1>,
path_2: diesel::expression::AsExpression<Text>,
value_2: diesel::expression::AsExpression<V2> {
jsonb_insert_2_utils::jsonb_insert_2 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
path_2: path_2.as_expression(),
value_2: value_2.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
V2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_insert_2()`](fn@jsonb_insert_2)"]
pub type jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> =
jsonb_insert_2_utils::jsonb_insert_2<J, V1, V2,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression,
<path_2 as diesel::expression::AsExpression<Text>>::Expression,
<value_2 as diesel::expression::AsExpression<V2>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_insert_2_return_type {
#[doc =
"Return type of the [`jsonb_insert_2()`](fn@super::jsonb_insert_2) SQL function."]
pub type jsonb_insert_2<json, path_1, value_1, path_2, value_2> =
super::jsonb_insert_2<<json as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType,
<value_2 as diesel::expression::Expression>::SqlType, json, path_1,
value_1, path_2, value_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_insert_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) path_2: path_2,
pub(in super) value_2: value_2,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
pub(in super) V2: ::core::marker::PhantomData<V2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Add<__Rhs> for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Sub<__Rhs> for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Mul<__Rhs> for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Div<__Rhs> for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
V2: ::core::fmt::Debug, json: ::core::fmt::Debug,
path_1: ::core::fmt::Debug, value_1: ::core::fmt::Debug,
path_2: ::core::fmt::Debug, value_2: ::core::fmt::Debug>
::core::fmt::Debug for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["json", "path_1", "value_1", "path_2", "value_2", "J", "V1",
"V2"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.json, &self.path_1, &self.value_1, &self.path_2,
&self.value_2, &self.J, &self.V1, &&self.V2];
::core::fmt::Formatter::debug_struct_fields_finish(f,
"jsonb_insert_2", names, values)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
V2: ::core::clone::Clone, json: ::core::clone::Clone,
path_1: ::core::clone::Clone, value_1: ::core::clone::Clone,
path_2: ::core::clone::Clone, value_2: ::core::clone::Clone>
::core::clone::Clone for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn clone(&self)
->
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
jsonb_insert_2 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
path_2: ::core::clone::Clone::clone(&self.path_2),
value_2: ::core::clone::Clone::clone(&self.value_2),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
V2: ::core::clone::Clone::clone(&self.V2),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
V2: ::core::marker::Copy, json: ::core::marker::Copy,
path_1: ::core::marker::Copy, value_1: ::core::marker::Copy,
path_2: ::core::marker::Copy, value_2: ::core::marker::Copy>
::core::marker::Copy for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
V2: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId,
path_2: diesel::query_builder::QueryId,
value_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
type QueryId =
jsonb_insert_2<<J as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<V2 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId,
<path_2 as diesel::query_builder::QueryId>::QueryId,
<value_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<path_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_insert_2()`](fn@jsonb_insert_2)"]
pub type HelperType<J, V1, V2, json, path_1, value_1, path_2, value_2> =
jsonb_insert_2<J, V1, V2, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression,
<path_2 as AsExpression<Text>>::Expression,
<value_2 as AsExpression<V2>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2> Expression for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where (json, path_1, value_1, path_2, value_2): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
path_2: SelectableExpression<__DieselInternal>,
value_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
AppearsOnTable<__DieselInternal> for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>,
path_2: AppearsOnTable<__DieselInternal>,
value_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
FunctionFragment<__DieselInternal> for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where __DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal>,
path_2: QueryFragment<__DieselInternal>,
value_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_insert";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2>
QueryFragment<crate::sqlite::Sqlite> for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite>,
path_2: QueryFragment<crate::sqlite::Sqlite>,
value_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1, path_2,
value_2>(json, path_1, value_1, path_2, value_2);
const _: () =
{
use diesel;
impl<json, path_1, value_1, path_2, value_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1, path_2, value_2> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
path_2: diesel::expression::ValidGrouping<__GroupByClause>,
value_2: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<path_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
ValidGrouping<__DieselInternal> for
jsonb_insert_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where
__Derived<json, path_1, value_1, path_2,
value_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1, path_2, value_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __jsonb_insert_return_types {
#[doc(inline)]
pub use super::__jsonb_insert_0_return_type::*;
#[doc(inline)]
pub use super::__jsonb_insert_1_return_type::*;
#[doc(inline)]
pub use super::__jsonb_insert_2_return_type::*;
}
#[doc =
" The `json_replace(X,P,V,...)` SQL function takes a single JSON value as its first argument"]
#[doc =
" followed by zero or more pairs of path and value arguments. It returns a copy of the X"]
#[doc =
" argument with values V substituted at the paths P, but only where something already exists"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_replace_0`, `json_replace_1`, ... `json_replace_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_replace")]
#[doc =
" at the path. Paths that select elements not found in X are silently ignored."]
#[doc = ""]
#[doc = " The path/value pairs are applied sequentially from left to right."]
#[doc = ""]
#[doc =
" If the `json_replace(X)` function is called with no path/value pairs, then it returns the"]
#[doc = " input X reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_replace()` function throws an error if any of the path arguments is not a"]
#[doc = " well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Json, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"b\": 2});"]
#[doc =
" let result = diesel::select(json_replace_1::<Json, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // A path that does not exist is silently ignored."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_replace_1::<Json, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1, \"b\": 2});"]
#[doc = " let result = diesel::select("]
#[doc =
" json_replace_2::<Json, Integer, Text, _, _, _, _, _>(json, \"$.a\", 99, \"$.b\", \"x\"),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99, \"b\": \"x\"}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(json_replace_0::<Json, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_replace_1::<Nullable<Json>, Integer, _, _, _>(None::<serde_json::Value>, \"$.a\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_replace_0<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json>(json: json)
-> json_replace_0<J, json> where
json: diesel::expression::AsExpression<J> {
json_replace_0_utils::json_replace_0 {
json: json.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_replace_0()`](fn@json_replace_0)"]
pub type json_replace_0<J, json> =
json_replace_0_utils::json_replace_0<J,
<json as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_replace_0_return_type {
#[doc =
"Return type of the [`json_replace_0()`](fn@super::json_replace_0) SQL function."]
pub type json_replace_0<json> =
super::json_replace_0<<json as
diesel::expression::Expression>::SqlType, json>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_replace_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_replace_0<J, json> {
pub(in super) json: json,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, __Rhs> ::core::ops::Add<__Rhs> for
json_replace_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Sub<__Rhs> for
json_replace_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Mul<__Rhs> for
json_replace_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Div<__Rhs> for
json_replace_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug> ::core::fmt::Debug
for json_replace_0<J, json> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_replace_0", "json", &self.json, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone>
::core::clone::Clone for json_replace_0<J, json> {
#[inline]
fn clone(&self) -> json_replace_0<J, json> {
json_replace_0 {
json: ::core::clone::Clone::clone(&self.json),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy>
::core::marker::Copy for json_replace_0<J, json> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_replace_0<J, json> {
type QueryId =
json_replace_0<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc = "The return type of [`json_replace_0()`](fn@json_replace_0)"]
pub type HelperType<J, json> =
json_replace_0<J, <json as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json> Expression for
json_replace_0<J, json> where (json): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
SelectableExpression<__DieselInternal> for json_replace_0<J, json>
where json: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_replace_0<J, json> where
json: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
FunctionFragment<__DieselInternal> for json_replace_0<J, json> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_replace";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json>
QueryFragment<crate::sqlite::Sqlite> for json_replace_0<J, json> where
json: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json>(json);
const _: () =
{
use diesel;
impl<json, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json> where
json: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
ValidGrouping<__DieselInternal> for json_replace_0<J, json> where
__Derived<json>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_replace(X,P,V,...)` SQL function takes a single JSON value as its first argument"]
#[doc =
" followed by zero or more pairs of path and value arguments. It returns a copy of the X"]
#[doc =
" argument with values V substituted at the paths P, but only where something already exists"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_replace_0`, `json_replace_1`, ... `json_replace_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_replace")]
#[doc =
" at the path. Paths that select elements not found in X are silently ignored."]
#[doc = ""]
#[doc = " The path/value pairs are applied sequentially from left to right."]
#[doc = ""]
#[doc =
" If the `json_replace(X)` function is called with no path/value pairs, then it returns the"]
#[doc = " input X reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_replace()` function throws an error if any of the path arguments is not a"]
#[doc = " well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Json, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"b\": 2});"]
#[doc =
" let result = diesel::select(json_replace_1::<Json, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // A path that does not exist is silently ignored."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_replace_1::<Json, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1, \"b\": 2});"]
#[doc = " let result = diesel::select("]
#[doc =
" json_replace_2::<Json, Integer, Text, _, _, _, _, _>(json, \"$.a\", 99, \"$.b\", \"x\"),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99, \"b\": \"x\"}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(json_replace_0::<Json, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_replace_1::<Nullable<Json>, Integer, _, _, _>(None::<serde_json::Value>, \"$.a\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_replace_1<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1>(json: json, path_1: path_1, value_1: value_1)
-> json_replace_1<J, V1, json, path_1, value_1> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1> {
json_replace_1_utils::json_replace_1 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_replace_1()`](fn@json_replace_1)"]
pub type json_replace_1<J, V1, json, path_1, value_1> =
json_replace_1_utils::json_replace_1<J, V1,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_replace_1_return_type {
#[doc =
"Return type of the [`json_replace_1()`](fn@super::json_replace_1) SQL function."]
pub type json_replace_1<json, path_1, value_1> =
super::json_replace_1<<json as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType, json, path_1,
value_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_replace_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_replace_1<J, V1, json, path_1, value_1> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Add<__Rhs>
for json_replace_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Sub<__Rhs>
for json_replace_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Mul<__Rhs>
for json_replace_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Div<__Rhs>
for json_replace_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
json: ::core::fmt::Debug, path_1: ::core::fmt::Debug,
value_1: ::core::fmt::Debug> ::core::fmt::Debug for
json_replace_1<J, V1, json, path_1, value_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f,
"json_replace_1", "json", &self.json, "path_1", &self.path_1,
"value_1", &self.value_1, "J", &self.J, "V1", &&self.V1)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
json: ::core::clone::Clone, path_1: ::core::clone::Clone,
value_1: ::core::clone::Clone> ::core::clone::Clone for
json_replace_1<J, V1, json, path_1, value_1> {
#[inline]
fn clone(&self) -> json_replace_1<J, V1, json, path_1, value_1> {
json_replace_1 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
json: ::core::marker::Copy, path_1: ::core::marker::Copy,
value_1: ::core::marker::Copy> ::core::marker::Copy for
json_replace_1<J, V1, json, path_1, value_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_replace_1<J, V1, json, path_1, value_1> {
type QueryId =
json_replace_1<<J as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_replace_1()`](fn@json_replace_1)"]
pub type HelperType<J, V1, json, path_1, value_1> =
json_replace_1<J, V1, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1> Expression for json_replace_1<J, V1, json, path_1, value_1>
where (json, path_1, value_1): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> SelectableExpression<__DieselInternal> for
json_replace_1<J, V1, json, path_1, value_1> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_replace_1<J, V1, json, path_1, value_1> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> FunctionFragment<__DieselInternal> for
json_replace_1<J, V1, json, path_1, value_1> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_replace";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1> QueryFragment<crate::sqlite::Sqlite> for
json_replace_1<J, V1, json, path_1, value_1> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1>(json, path_1, value_1);
const _: () =
{
use diesel;
impl<json, path_1, value_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> ValidGrouping<__DieselInternal> for
json_replace_1<J, V1, json, path_1, value_1> where
__Derived<json, path_1, value_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_replace(X,P,V,...)` SQL function takes a single JSON value as its first argument"]
#[doc =
" followed by zero or more pairs of path and value arguments. It returns a copy of the X"]
#[doc =
" argument with values V substituted at the paths P, but only where something already exists"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_replace_0`, `json_replace_1`, ... `json_replace_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_replace")]
#[doc =
" at the path. Paths that select elements not found in X are silently ignored."]
#[doc = ""]
#[doc = " The path/value pairs are applied sequentially from left to right."]
#[doc = ""]
#[doc =
" If the `json_replace(X)` function is called with no path/value pairs, then it returns the"]
#[doc = " input X reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_replace()` function throws an error if any of the path arguments is not a"]
#[doc = " well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Json, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"b\": 2});"]
#[doc =
" let result = diesel::select(json_replace_1::<Json, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // A path that does not exist is silently ignored."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_replace_1::<Json, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1, \"b\": 2});"]
#[doc = " let result = diesel::select("]
#[doc =
" json_replace_2::<Json, Integer, Text, _, _, _, _, _>(json, \"$.a\", 99, \"$.b\", \"x\"),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99, \"b\": \"x\"}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(json_replace_0::<Json, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_replace_1::<Nullable<Json>, Integer, _, _, _>(None::<serde_json::Value>, \"$.a\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_replace_2<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob, json,
path_1, value_1, path_2,
value_2>(json: json, path_1: path_1, value_1: value_1, path_2: path_2,
value_2: value_2)
-> json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1>,
path_2: diesel::expression::AsExpression<Text>,
value_2: diesel::expression::AsExpression<V2> {
json_replace_2_utils::json_replace_2 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
path_2: path_2.as_expression(),
value_2: value_2.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
V2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_replace_2()`](fn@json_replace_2)"]
pub type json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2> =
json_replace_2_utils::json_replace_2<J, V1, V2,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression,
<path_2 as diesel::expression::AsExpression<Text>>::Expression,
<value_2 as diesel::expression::AsExpression<V2>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_replace_2_return_type {
#[doc =
"Return type of the [`json_replace_2()`](fn@super::json_replace_2) SQL function."]
pub type json_replace_2<json, path_1, value_1, path_2, value_2> =
super::json_replace_2<<json as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType,
<value_2 as diesel::expression::Expression>::SqlType, json, path_1,
value_1, path_2, value_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_replace_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) path_2: path_2,
pub(in super) value_2: value_2,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
pub(in super) V2: ::core::marker::PhantomData<V2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Add<__Rhs> for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Sub<__Rhs> for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Mul<__Rhs> for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Div<__Rhs> for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
V2: ::core::fmt::Debug, json: ::core::fmt::Debug,
path_1: ::core::fmt::Debug, value_1: ::core::fmt::Debug,
path_2: ::core::fmt::Debug, value_2: ::core::fmt::Debug>
::core::fmt::Debug for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["json", "path_1", "value_1", "path_2", "value_2", "J", "V1",
"V2"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.json, &self.path_1, &self.value_1, &self.path_2,
&self.value_2, &self.J, &self.V1, &&self.V2];
::core::fmt::Formatter::debug_struct_fields_finish(f,
"json_replace_2", names, values)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
V2: ::core::clone::Clone, json: ::core::clone::Clone,
path_1: ::core::clone::Clone, value_1: ::core::clone::Clone,
path_2: ::core::clone::Clone, value_2: ::core::clone::Clone>
::core::clone::Clone for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn clone(&self)
->
json_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
json_replace_2 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
path_2: ::core::clone::Clone::clone(&self.path_2),
value_2: ::core::clone::Clone::clone(&self.value_2),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
V2: ::core::clone::Clone::clone(&self.V2),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
V2: ::core::marker::Copy, json: ::core::marker::Copy,
path_1: ::core::marker::Copy, value_1: ::core::marker::Copy,
path_2: ::core::marker::Copy, value_2: ::core::marker::Copy>
::core::marker::Copy for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
V2: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId,
path_2: diesel::query_builder::QueryId,
value_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
type QueryId =
json_replace_2<<J as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<V2 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId,
<path_2 as diesel::query_builder::QueryId>::QueryId,
<value_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<path_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_replace_2()`](fn@json_replace_2)"]
pub type HelperType<J, V1, V2, json, path_1, value_1, path_2, value_2> =
json_replace_2<J, V1, V2, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression,
<path_2 as AsExpression<Text>>::Expression,
<value_2 as AsExpression<V2>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2> Expression for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where (json, path_1, value_1, path_2, value_2): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
path_2: SelectableExpression<__DieselInternal>,
value_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
AppearsOnTable<__DieselInternal> for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>,
path_2: AppearsOnTable<__DieselInternal>,
value_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
FunctionFragment<__DieselInternal> for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where __DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal>,
path_2: QueryFragment<__DieselInternal>,
value_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_replace";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2>
QueryFragment<crate::sqlite::Sqlite> for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite>,
path_2: QueryFragment<crate::sqlite::Sqlite>,
value_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1, path_2,
value_2>(json, path_1, value_1, path_2, value_2);
const _: () =
{
use diesel;
impl<json, path_1, value_1, path_2, value_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1, path_2, value_2> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
path_2: diesel::expression::ValidGrouping<__GroupByClause>,
value_2: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<path_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
ValidGrouping<__DieselInternal> for
json_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where
__Derived<json, path_1, value_1, path_2,
value_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1, path_2, value_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __json_replace_return_types {
#[doc(inline)]
pub use super::__json_replace_0_return_type::*;
#[doc(inline)]
pub use super::__json_replace_1_return_type::*;
#[doc(inline)]
pub use super::__json_replace_2_return_type::*;
}
#[doc =
" The `jsonb_replace(X,P,V,...)` SQL function works just like the [`json_replace()`](json_replace_1())"]
#[doc =
" function except that the result is returned in SQLite\'s private binary JSONB format rather than"]
#[doc = " in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_replace_0`, `jsonb_replace_1`, ... `jsonb_replace_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_replace")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Jsonb, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"b\": 2});"]
#[doc =
" let result = diesel::select(jsonb_replace_1::<Jsonb, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // A path that does not exist is silently ignored."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_replace_1::<Jsonb, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(jsonb_replace_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_replace_1::<Nullable<Jsonb>, Integer, _, _, _>(None::<serde_json::Value>, \"$.a\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_replace_0<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json>(json: json)
-> jsonb_replace_0<J, json> where
json: diesel::expression::AsExpression<J> {
jsonb_replace_0_utils::jsonb_replace_0 {
json: json.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_replace_0()`](fn@jsonb_replace_0)"]
pub type jsonb_replace_0<J, json> =
jsonb_replace_0_utils::jsonb_replace_0<J,
<json as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_replace_0_return_type {
#[doc =
"Return type of the [`jsonb_replace_0()`](fn@super::jsonb_replace_0) SQL function."]
pub type jsonb_replace_0<json> =
super::jsonb_replace_0<<json as
diesel::expression::Expression>::SqlType, json>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_replace_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_replace_0<J, json> {
pub(in super) json: json,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_replace_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_replace_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_replace_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_replace_0<J, json> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug> ::core::fmt::Debug
for jsonb_replace_0<J, json> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"jsonb_replace_0", "json", &self.json, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone>
::core::clone::Clone for jsonb_replace_0<J, json> {
#[inline]
fn clone(&self) -> jsonb_replace_0<J, json> {
jsonb_replace_0 {
json: ::core::clone::Clone::clone(&self.json),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy>
::core::marker::Copy for jsonb_replace_0<J, json> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for jsonb_replace_0<J, json> {
type QueryId =
jsonb_replace_0<<J as
diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc = "The return type of [`jsonb_replace_0()`](fn@jsonb_replace_0)"]
pub type HelperType<J, json> =
jsonb_replace_0<J, <json as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json> Expression for
jsonb_replace_0<J, json> where (json): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
SelectableExpression<__DieselInternal> for jsonb_replace_0<J, json>
where json: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
AppearsOnTable<__DieselInternal> for jsonb_replace_0<J, json> where
json: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
FunctionFragment<__DieselInternal> for jsonb_replace_0<J, json> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_replace";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json>
QueryFragment<crate::sqlite::Sqlite> for jsonb_replace_0<J, json>
where json: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json>(json);
const _: () =
{
use diesel;
impl<json, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json> where
json: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
ValidGrouping<__DieselInternal> for jsonb_replace_0<J, json> where
__Derived<json>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_replace(X,P,V,...)` SQL function works just like the [`json_replace()`](json_replace_1())"]
#[doc =
" function except that the result is returned in SQLite\'s private binary JSONB format rather than"]
#[doc = " in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_replace_0`, `jsonb_replace_1`, ... `jsonb_replace_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_replace")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Jsonb, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"b\": 2});"]
#[doc =
" let result = diesel::select(jsonb_replace_1::<Jsonb, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // A path that does not exist is silently ignored."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_replace_1::<Jsonb, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(jsonb_replace_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_replace_1::<Nullable<Jsonb>, Integer, _, _, _>(None::<serde_json::Value>, \"$.a\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_replace_1<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1>(json: json, path_1: path_1, value_1: value_1)
-> jsonb_replace_1<J, V1, json, path_1, value_1> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1> {
jsonb_replace_1_utils::jsonb_replace_1 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_replace_1()`](fn@jsonb_replace_1)"]
pub type jsonb_replace_1<J, V1, json, path_1, value_1> =
jsonb_replace_1_utils::jsonb_replace_1<J, V1,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_replace_1_return_type {
#[doc =
"Return type of the [`jsonb_replace_1()`](fn@super::jsonb_replace_1) SQL function."]
pub type jsonb_replace_1<json, path_1, value_1> =
super::jsonb_replace_1<<json as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType, json, path_1,
value_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_replace_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_replace_1<J, V1, json, path_1, value_1> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Add<__Rhs>
for jsonb_replace_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Sub<__Rhs>
for jsonb_replace_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Mul<__Rhs>
for jsonb_replace_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Div<__Rhs>
for jsonb_replace_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
json: ::core::fmt::Debug, path_1: ::core::fmt::Debug,
value_1: ::core::fmt::Debug> ::core::fmt::Debug for
jsonb_replace_1<J, V1, json, path_1, value_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f,
"jsonb_replace_1", "json", &self.json, "path_1", &self.path_1,
"value_1", &self.value_1, "J", &self.J, "V1", &&self.V1)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
json: ::core::clone::Clone, path_1: ::core::clone::Clone,
value_1: ::core::clone::Clone> ::core::clone::Clone for
jsonb_replace_1<J, V1, json, path_1, value_1> {
#[inline]
fn clone(&self) -> jsonb_replace_1<J, V1, json, path_1, value_1> {
jsonb_replace_1 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
json: ::core::marker::Copy, path_1: ::core::marker::Copy,
value_1: ::core::marker::Copy> ::core::marker::Copy for
jsonb_replace_1<J, V1, json, path_1, value_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_replace_1<J, V1, json, path_1, value_1> {
type QueryId =
jsonb_replace_1<<J as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_replace_1()`](fn@jsonb_replace_1)"]
pub type HelperType<J, V1, json, path_1, value_1> =
jsonb_replace_1<J, V1, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1> Expression for jsonb_replace_1<J, V1, json, path_1, value_1>
where (json, path_1, value_1): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_replace_1<J, V1, json, path_1, value_1> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_replace_1<J, V1, json, path_1, value_1> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_replace_1<J, V1, json, path_1, value_1> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_replace";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1> QueryFragment<crate::sqlite::Sqlite> for
jsonb_replace_1<J, V1, json, path_1, value_1> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1>(json, path_1, value_1);
const _: () =
{
use diesel;
impl<json, path_1, value_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_replace_1<J, V1, json, path_1, value_1> where
__Derived<json, path_1, value_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_replace(X,P,V,...)` SQL function works just like the [`json_replace()`](json_replace_1())"]
#[doc =
" function except that the result is returned in SQLite\'s private binary JSONB format rather than"]
#[doc = " in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_replace_0`, `jsonb_replace_1`, ... `jsonb_replace_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_replace")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Jsonb, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1, \"b\": 2});"]
#[doc =
" let result = diesel::select(jsonb_replace_1::<Jsonb, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // A path that does not exist is silently ignored."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_replace_1::<Jsonb, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(jsonb_replace_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_replace_1::<Nullable<Jsonb>, Integer, _, _, _>(None::<serde_json::Value>, \"$.a\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_replace_2<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob, json,
path_1, value_1, path_2,
value_2>(json: json, path_1: path_1, value_1: value_1, path_2: path_2,
value_2: value_2)
-> jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1>,
path_2: diesel::expression::AsExpression<Text>,
value_2: diesel::expression::AsExpression<V2> {
jsonb_replace_2_utils::jsonb_replace_2 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
path_2: path_2.as_expression(),
value_2: value_2.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
V2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_replace_2()`](fn@jsonb_replace_2)"]
pub type jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2> =
jsonb_replace_2_utils::jsonb_replace_2<J, V1, V2,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression,
<path_2 as diesel::expression::AsExpression<Text>>::Expression,
<value_2 as diesel::expression::AsExpression<V2>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_replace_2_return_type {
#[doc =
"Return type of the [`jsonb_replace_2()`](fn@super::jsonb_replace_2) SQL function."]
pub type jsonb_replace_2<json, path_1, value_1, path_2, value_2> =
super::jsonb_replace_2<<json as
diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType,
<value_2 as diesel::expression::Expression>::SqlType, json, path_1,
value_1, path_2, value_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_replace_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) path_2: path_2,
pub(in super) value_2: value_2,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
pub(in super) V2: ::core::marker::PhantomData<V2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Add<__Rhs> for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Sub<__Rhs> for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Mul<__Rhs> for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Div<__Rhs> for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
V2: ::core::fmt::Debug, json: ::core::fmt::Debug,
path_1: ::core::fmt::Debug, value_1: ::core::fmt::Debug,
path_2: ::core::fmt::Debug, value_2: ::core::fmt::Debug>
::core::fmt::Debug for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["json", "path_1", "value_1", "path_2", "value_2", "J", "V1",
"V2"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.json, &self.path_1, &self.value_1, &self.path_2,
&self.value_2, &self.J, &self.V1, &&self.V2];
::core::fmt::Formatter::debug_struct_fields_finish(f,
"jsonb_replace_2", names, values)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
V2: ::core::clone::Clone, json: ::core::clone::Clone,
path_1: ::core::clone::Clone, value_1: ::core::clone::Clone,
path_2: ::core::clone::Clone, value_2: ::core::clone::Clone>
::core::clone::Clone for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn clone(&self)
->
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
jsonb_replace_2 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
path_2: ::core::clone::Clone::clone(&self.path_2),
value_2: ::core::clone::Clone::clone(&self.value_2),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
V2: ::core::clone::Clone::clone(&self.V2),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
V2: ::core::marker::Copy, json: ::core::marker::Copy,
path_1: ::core::marker::Copy, value_1: ::core::marker::Copy,
path_2: ::core::marker::Copy, value_2: ::core::marker::Copy>
::core::marker::Copy for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
V2: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId,
path_2: diesel::query_builder::QueryId,
value_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
type QueryId =
jsonb_replace_2<<J as
diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<V2 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId,
<path_2 as diesel::query_builder::QueryId>::QueryId,
<value_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<path_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_replace_2()`](fn@jsonb_replace_2)"]
pub type HelperType<J, V1, V2, json, path_1, value_1, path_2, value_2> =
jsonb_replace_2<J, V1, V2, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression,
<path_2 as AsExpression<Text>>::Expression,
<value_2 as AsExpression<V2>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2> Expression for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where (json, path_1, value_1, path_2, value_2): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
path_2: SelectableExpression<__DieselInternal>,
value_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
AppearsOnTable<__DieselInternal> for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>,
path_2: AppearsOnTable<__DieselInternal>,
value_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
FunctionFragment<__DieselInternal> for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where __DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal>,
path_2: QueryFragment<__DieselInternal>,
value_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_replace";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2>
QueryFragment<crate::sqlite::Sqlite> for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite>,
path_2: QueryFragment<crate::sqlite::Sqlite>,
value_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1, path_2,
value_2>(json, path_1, value_1, path_2, value_2);
const _: () =
{
use diesel;
impl<json, path_1, value_1, path_2, value_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1, path_2, value_2> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
path_2: diesel::expression::ValidGrouping<__GroupByClause>,
value_2: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<path_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
ValidGrouping<__DieselInternal> for
jsonb_replace_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where
__Derived<json, path_1, value_1, path_2,
value_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1, path_2, value_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __jsonb_replace_return_types {
#[doc(inline)]
pub use super::__jsonb_replace_0_return_type::*;
#[doc(inline)]
pub use super::__jsonb_replace_1_return_type::*;
#[doc(inline)]
pub use super::__jsonb_replace_2_return_type::*;
}
#[doc =
" The `json_set(X,P,V,...)` SQL function takes a single JSON value as its first argument"]
#[doc =
" followed by zero or more pairs of path and value arguments. It returns a copy of the X"]
#[doc =
" argument with values V inserted or replaced at the paths P. Unlike [`json_replace()`](json_replace_1()),"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_set_0`, `json_set_1`, ... `json_set_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_set")]
#[doc =
" `json_set()` also inserts new values where the path does not already exist."]
#[doc = ""]
#[doc = " The path/value pairs are applied sequentially from left to right."]
#[doc = ""]
#[doc = " A path that ends in `[#]` appends the value to an existing array."]
#[doc = ""]
#[doc =
" If the `json_set(X)` function is called with no path/value pairs, then it returns the"]
#[doc = " input X reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_set()` function throws an error if any of the path arguments is not a"]
#[doc = " well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Json, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_set_1::<Json, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // Existing values are replaced."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_set_1::<Json, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(json_set_1::<Json, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select("]
#[doc =
" json_set_2::<Json, Integer, Integer, _, _, _, _, _>(json, \"$.b\", 2, \"$.c\", 3),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(json_set_0::<Json, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_set_1::<Nullable<Json>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_set_0<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json>(json: json)
-> json_set_0<J, json> where json: diesel::expression::AsExpression<J> {
json_set_0_utils::json_set_0 {
json: json.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_set_0()`](fn@json_set_0)"]
pub type json_set_0<J, json> =
json_set_0_utils::json_set_0<J,
<json as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_set_0_return_type {
#[doc =
"Return type of the [`json_set_0()`](fn@super::json_set_0) SQL function."]
pub type json_set_0<json> =
super::json_set_0<<json as diesel::expression::Expression>::SqlType,
json>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_set_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_set_0<J, json> {
pub(in super) json: json,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, __Rhs> ::core::ops::Add<__Rhs> for
json_set_0<J, json> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Sub<__Rhs> for
json_set_0<J, json> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Mul<__Rhs> for
json_set_0<J, json> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Div<__Rhs> for
json_set_0<J, json> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug> ::core::fmt::Debug
for json_set_0<J, json> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"json_set_0", "json", &self.json, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone>
::core::clone::Clone for json_set_0<J, json> {
#[inline]
fn clone(&self) -> json_set_0<J, json> {
json_set_0 {
json: ::core::clone::Clone::clone(&self.json),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy>
::core::marker::Copy for json_set_0<J, json> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for json_set_0<J, json> {
type QueryId =
json_set_0<<J as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc = "The return type of [`json_set_0()`](fn@json_set_0)"]
pub type HelperType<J, json> =
json_set_0<J, <json as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json> Expression for
json_set_0<J, json> where (json): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
SelectableExpression<__DieselInternal> for json_set_0<J, json> where
json: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_set_0<J, json> where
json: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
FunctionFragment<__DieselInternal> for json_set_0<J, json> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_set";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json>
QueryFragment<crate::sqlite::Sqlite> for json_set_0<J, json> where
json: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json>(json);
const _: () =
{
use diesel;
impl<json, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json> where
json: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, json, __DieselInternal>
ValidGrouping<__DieselInternal> for json_set_0<J, json> where
__Derived<json>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_set(X,P,V,...)` SQL function takes a single JSON value as its first argument"]
#[doc =
" followed by zero or more pairs of path and value arguments. It returns a copy of the X"]
#[doc =
" argument with values V inserted or replaced at the paths P. Unlike [`json_replace()`](json_replace_1()),"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_set_0`, `json_set_1`, ... `json_set_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_set")]
#[doc =
" `json_set()` also inserts new values where the path does not already exist."]
#[doc = ""]
#[doc = " The path/value pairs are applied sequentially from left to right."]
#[doc = ""]
#[doc = " A path that ends in `[#]` appends the value to an existing array."]
#[doc = ""]
#[doc =
" If the `json_set(X)` function is called with no path/value pairs, then it returns the"]
#[doc = " input X reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_set()` function throws an error if any of the path arguments is not a"]
#[doc = " well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Json, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_set_1::<Json, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // Existing values are replaced."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_set_1::<Json, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(json_set_1::<Json, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select("]
#[doc =
" json_set_2::<Json, Integer, Integer, _, _, _, _, _>(json, \"$.b\", 2, \"$.c\", 3),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(json_set_0::<Json, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_set_1::<Nullable<Json>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_set_1<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1>(json: json, path_1: path_1, value_1: value_1)
-> json_set_1<J, V1, json, path_1, value_1> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1> {
json_set_1_utils::json_set_1 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_set_1()`](fn@json_set_1)"]
pub type json_set_1<J, V1, json, path_1, value_1> =
json_set_1_utils::json_set_1<J, V1,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_set_1_return_type {
#[doc =
"Return type of the [`json_set_1()`](fn@super::json_set_1) SQL function."]
pub type json_set_1<json, path_1, value_1> =
super::json_set_1<<json as diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType, json, path_1,
value_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_set_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_set_1<J, V1, json, path_1, value_1> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Add<__Rhs>
for json_set_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Sub<__Rhs>
for json_set_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Mul<__Rhs>
for json_set_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Div<__Rhs>
for json_set_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
json: ::core::fmt::Debug, path_1: ::core::fmt::Debug,
value_1: ::core::fmt::Debug> ::core::fmt::Debug for
json_set_1<J, V1, json, path_1, value_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f,
"json_set_1", "json", &self.json, "path_1", &self.path_1,
"value_1", &self.value_1, "J", &self.J, "V1", &&self.V1)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
json: ::core::clone::Clone, path_1: ::core::clone::Clone,
value_1: ::core::clone::Clone> ::core::clone::Clone for
json_set_1<J, V1, json, path_1, value_1> {
#[inline]
fn clone(&self) -> json_set_1<J, V1, json, path_1, value_1> {
json_set_1 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
json: ::core::marker::Copy, path_1: ::core::marker::Copy,
value_1: ::core::marker::Copy> ::core::marker::Copy for
json_set_1<J, V1, json, path_1, value_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_set_1<J, V1, json, path_1, value_1> {
type QueryId =
json_set_1<<J as diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_set_1()`](fn@json_set_1)"]
pub type HelperType<J, V1, json, path_1, value_1> =
json_set_1<J, V1, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1> Expression for json_set_1<J, V1, json, path_1, value_1> where
(json, path_1, value_1): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> SelectableExpression<__DieselInternal> for
json_set_1<J, V1, json, path_1, value_1> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
json_set_1<J, V1, json, path_1, value_1> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> FunctionFragment<__DieselInternal> for
json_set_1<J, V1, json, path_1, value_1> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_set";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1> QueryFragment<crate::sqlite::Sqlite> for
json_set_1<J, V1, json, path_1, value_1> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1>(json, path_1, value_1);
const _: () =
{
use diesel;
impl<json, path_1, value_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> ValidGrouping<__DieselInternal> for
json_set_1<J, V1, json, path_1, value_1> where
__Derived<json, path_1, value_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `json_set(X,P,V,...)` SQL function takes a single JSON value as its first argument"]
#[doc =
" followed by zero or more pairs of path and value arguments. It returns a copy of the X"]
#[doc =
" argument with values V inserted or replaced at the paths P. Unlike [`json_replace()`](json_replace_1()),"]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`json_set_0`, `json_set_1`, ... `json_set_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "json_set")]
#[doc =
" `json_set()` also inserts new values where the path does not already exist."]
#[doc = ""]
#[doc = " The path/value pairs are applied sequentially from left to right."]
#[doc = ""]
#[doc = " A path that ends in `[#]` appends the value to an existing array."]
#[doc = ""]
#[doc =
" If the `json_set(X)` function is called with no path/value pairs, then it returns the"]
#[doc = " input X reformatted, with excess whitespace removed."]
#[doc = ""]
#[doc =
" The `json_set()` function throws an error if any of the path arguments is not a"]
#[doc = " well-formed path."]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Json, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_set_1::<Json, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // Existing values are replaced."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(json_set_1::<Json, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(json_set_1::<Json, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select("]
#[doc =
" json_set_2::<Json, Integer, Integer, _, _, _, _, _>(json, \"$.b\", 2, \"$.c\", 3),"]
#[doc = " )"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2, \"c\": 3}), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(json_set_0::<Json, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(json_set_1::<Nullable<Json>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_set_2<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob, json,
path_1, value_1, path_2,
value_2>(json: json, path_1: path_1, value_1: value_1, path_2: path_2,
value_2: value_2)
-> json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1>,
path_2: diesel::expression::AsExpression<Text>,
value_2: diesel::expression::AsExpression<V2> {
json_set_2_utils::json_set_2 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
path_2: path_2.as_expression(),
value_2: value_2.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
V2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_set_2()`](fn@json_set_2)"]
pub type json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> =
json_set_2_utils::json_set_2<J, V1, V2,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression,
<path_2 as diesel::expression::AsExpression<Text>>::Expression,
<value_2 as diesel::expression::AsExpression<V2>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_set_2_return_type {
#[doc =
"Return type of the [`json_set_2()`](fn@super::json_set_2) SQL function."]
pub type json_set_2<json, path_1, value_1, path_2, value_2> =
super::json_set_2<<json as diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType,
<value_2 as diesel::expression::Expression>::SqlType, json, path_1,
value_1, path_2, value_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_set_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) path_2: path_2,
pub(in super) value_2: value_2,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
pub(in super) V2: ::core::marker::PhantomData<V2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Add<__Rhs> for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Sub<__Rhs> for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Mul<__Rhs> for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Div<__Rhs> for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
V2: ::core::fmt::Debug, json: ::core::fmt::Debug,
path_1: ::core::fmt::Debug, value_1: ::core::fmt::Debug,
path_2: ::core::fmt::Debug, value_2: ::core::fmt::Debug>
::core::fmt::Debug for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["json", "path_1", "value_1", "path_2", "value_2", "J", "V1",
"V2"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.json, &self.path_1, &self.value_1, &self.path_2,
&self.value_2, &self.J, &self.V1, &&self.V2];
::core::fmt::Formatter::debug_struct_fields_finish(f,
"json_set_2", names, values)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
V2: ::core::clone::Clone, json: ::core::clone::Clone,
path_1: ::core::clone::Clone, value_1: ::core::clone::Clone,
path_2: ::core::clone::Clone, value_2: ::core::clone::Clone>
::core::clone::Clone for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn clone(&self)
-> json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
json_set_2 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
path_2: ::core::clone::Clone::clone(&self.path_2),
value_2: ::core::clone::Clone::clone(&self.value_2),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
V2: ::core::clone::Clone::clone(&self.V2),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
V2: ::core::marker::Copy, json: ::core::marker::Copy,
path_1: ::core::marker::Copy, value_1: ::core::marker::Copy,
path_2: ::core::marker::Copy, value_2: ::core::marker::Copy>
::core::marker::Copy for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
V2: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId,
path_2: diesel::query_builder::QueryId,
value_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
{
type QueryId =
json_set_2<<J as diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<V2 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId,
<path_2 as diesel::query_builder::QueryId>::QueryId,
<value_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<path_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_set_2()`](fn@json_set_2)"]
pub type HelperType<J, V1, V2, json, path_1, value_1, path_2, value_2> =
json_set_2<J, V1, V2, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression,
<path_2 as AsExpression<Text>>::Expression,
<value_2 as AsExpression<V2>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2> Expression for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
(json, path_1, value_1, path_2, value_2): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
path_2: SelectableExpression<__DieselInternal>,
value_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
AppearsOnTable<__DieselInternal> for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>,
path_2: AppearsOnTable<__DieselInternal>,
value_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
FunctionFragment<__DieselInternal> for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal>,
path_2: QueryFragment<__DieselInternal>,
value_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_set";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2>
QueryFragment<crate::sqlite::Sqlite> for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite>,
path_2: QueryFragment<crate::sqlite::Sqlite>,
value_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1, path_2,
value_2>(json, path_1, value_1, path_2, value_2);
const _: () =
{
use diesel;
impl<json, path_1, value_1, path_2, value_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1, path_2, value_2> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
path_2: diesel::expression::ValidGrouping<__GroupByClause>,
value_2: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<path_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Json> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
ValidGrouping<__DieselInternal> for
json_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
__Derived<json, path_1, value_1, path_2,
value_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1, path_2, value_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __json_set_return_types {
#[doc(inline)]
pub use super::__json_set_0_return_type::*;
#[doc(inline)]
pub use super::__json_set_1_return_type::*;
#[doc(inline)]
pub use super::__json_set_2_return_type::*;
}
#[doc =
" The `jsonb_set(X,P,V,...)` SQL function works just like the [`json_set()`](json_set_1())"]
#[doc =
" function except that the result is returned in SQLite\'s private binary JSONB format rather than"]
#[doc = " in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_set_0`, `jsonb_set_1`, ... `jsonb_set_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_set")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Jsonb, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_set_1::<Jsonb, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // Existing values are replaced."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_set_1::<Jsonb, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(jsonb_set_1::<Jsonb, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(jsonb_set_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_set_1::<Nullable<Jsonb>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_set_0<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json>(json: json)
-> jsonb_set_0<J, json> where json: diesel::expression::AsExpression<J> {
jsonb_set_0_utils::jsonb_set_0 {
json: json.as_expression(),
J: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_set_0()`](fn@jsonb_set_0)"]
pub type jsonb_set_0<J, json> =
jsonb_set_0_utils::jsonb_set_0<J,
<json as diesel::expression::AsExpression<J>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_set_0_return_type {
#[doc =
"Return type of the [`jsonb_set_0()`](fn@super::jsonb_set_0) SQL function."]
pub type jsonb_set_0<json> =
super::jsonb_set_0<<json as diesel::expression::Expression>::SqlType,
json>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_set_0_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_set_0<J, json> {
pub(in super) json: json,
pub(in super) J: ::core::marker::PhantomData<J>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, json, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_set_0<J, json> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_set_0<J, json> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_set_0<J, json> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, json, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_set_0<J, json> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, json: ::core::fmt::Debug> ::core::fmt::Debug
for jsonb_set_0<J, json> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"jsonb_set_0", "json", &self.json, "J", &&self.J)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, json: ::core::clone::Clone>
::core::clone::Clone for jsonb_set_0<J, json> {
#[inline]
fn clone(&self) -> jsonb_set_0<J, json> {
jsonb_set_0 {
json: ::core::clone::Clone::clone(&self.json),
J: ::core::clone::Clone::clone(&self.J),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, json: ::core::marker::Copy>
::core::marker::Copy for jsonb_set_0<J, json> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for jsonb_set_0<J, json> {
type QueryId =
jsonb_set_0<<J as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
#[doc = "The return type of [`jsonb_set_0()`](fn@jsonb_set_0)"]
pub type HelperType<J, json> =
jsonb_set_0<J, <json as AsExpression<J>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json> Expression for
jsonb_set_0<J, json> where (json): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
SelectableExpression<__DieselInternal> for jsonb_set_0<J, json> where
json: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
AppearsOnTable<__DieselInternal> for jsonb_set_0<J, json> where
json: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
FunctionFragment<__DieselInternal> for jsonb_set_0<J, json> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_set";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json>
QueryFragment<crate::sqlite::Sqlite> for jsonb_set_0<J, json> where
json: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json>(json);
const _: () =
{
use diesel;
impl<json, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json> where
json: diesel::expression::ValidGrouping<__GroupByClause> {
type IsAggregate =
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, json, __DieselInternal>
ValidGrouping<__DieselInternal> for jsonb_set_0<J, json> where
__Derived<json>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json> as ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_set(X,P,V,...)` SQL function works just like the [`json_set()`](json_set_1())"]
#[doc =
" function except that the result is returned in SQLite\'s private binary JSONB format rather than"]
#[doc = " in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_set_0`, `jsonb_set_1`, ... `jsonb_set_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_set")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Jsonb, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_set_1::<Jsonb, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // Existing values are replaced."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_set_1::<Jsonb, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(jsonb_set_1::<Jsonb, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(jsonb_set_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_set_1::<Nullable<Jsonb>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_set_1<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1>(json: json, path_1: path_1, value_1: value_1)
-> jsonb_set_1<J, V1, json, path_1, value_1> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1> {
jsonb_set_1_utils::jsonb_set_1 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_set_1()`](fn@jsonb_set_1)"]
pub type jsonb_set_1<J, V1, json, path_1, value_1> =
jsonb_set_1_utils::jsonb_set_1<J, V1,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_set_1_return_type {
#[doc =
"Return type of the [`jsonb_set_1()`](fn@super::jsonb_set_1) SQL function."]
pub type jsonb_set_1<json, path_1, value_1> =
super::jsonb_set_1<<json as diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType, json, path_1,
value_1>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_set_1_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_set_1<J, V1, json, path_1, value_1> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Add<__Rhs>
for jsonb_set_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Sub<__Rhs>
for jsonb_set_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Mul<__Rhs>
for jsonb_set_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, json, path_1, value_1, __Rhs> ::core::ops::Div<__Rhs>
for jsonb_set_1<J, V1, json, path_1, value_1> where
Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
json: ::core::fmt::Debug, path_1: ::core::fmt::Debug,
value_1: ::core::fmt::Debug> ::core::fmt::Debug for
jsonb_set_1<J, V1, json, path_1, value_1> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f,
"jsonb_set_1", "json", &self.json, "path_1", &self.path_1,
"value_1", &self.value_1, "J", &self.J, "V1", &&self.V1)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
json: ::core::clone::Clone, path_1: ::core::clone::Clone,
value_1: ::core::clone::Clone> ::core::clone::Clone for
jsonb_set_1<J, V1, json, path_1, value_1> {
#[inline]
fn clone(&self) -> jsonb_set_1<J, V1, json, path_1, value_1> {
jsonb_set_1 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
json: ::core::marker::Copy, path_1: ::core::marker::Copy,
value_1: ::core::marker::Copy> ::core::marker::Copy for
jsonb_set_1<J, V1, json, path_1, value_1> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_set_1<J, V1, json, path_1, value_1> {
type QueryId =
jsonb_set_1<<J as diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_set_1()`](fn@jsonb_set_1)"]
pub type HelperType<J, V1, json, path_1, value_1> =
jsonb_set_1<J, V1, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1> Expression for jsonb_set_1<J, V1, json, path_1, value_1>
where (json, path_1, value_1): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> SelectableExpression<__DieselInternal> for
jsonb_set_1<J, V1, json, path_1, value_1> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> AppearsOnTable<__DieselInternal> for
jsonb_set_1<J, V1, json, path_1, value_1> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> FunctionFragment<__DieselInternal> for
jsonb_set_1<J, V1, json, path_1, value_1> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_set";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1> QueryFragment<crate::sqlite::Sqlite> for
jsonb_set_1<J, V1, json, path_1, value_1> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1>(json, path_1, value_1);
const _: () =
{
use diesel;
impl<json, path_1, value_1, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, json, path_1,
value_1, __DieselInternal> ValidGrouping<__DieselInternal> for
jsonb_set_1<J, V1, json, path_1, value_1> where
__Derived<json, path_1, value_1>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" The `jsonb_set(X,P,V,...)` SQL function works just like the [`json_set()`](json_set_1())"]
#[doc =
" function except that the result is returned in SQLite\'s private binary JSONB format rather than"]
#[doc = " in the standard RFC 8259 text format."]
#[doc = r""]
#[doc = r" # Variadic functions"]
#[doc = r""]
#[doc =
r" This function is variadic in SQL, so there's a family of functions"]
#[doc = r" on a diesel side:"]
#[doc = r""]
#[doc = "`jsonb_set_0`, `jsonb_set_1`, ... `jsonb_set_n`"]
#[doc = r""]
#[doc =
r" Here, the postfix number indicates repetitions of variadic arguments."]
#[doc = r" To use this function, the appropriate version with the correct"]
#[doc = r" argument count must be selected."]
#[doc = r""]
#[doc = r" ## Controlling the generation of variadic function variants"]
#[doc = r""]
#[doc =
r" By default, only variants with 0, 1, and 2 repetitions of variadic"]
#[doc = r" arguments are generated. To generate more variants, set the"]
#[doc =
r" `DIESEL_VARIADIC_FUNCTION_ARGS` environment variable to the desired"]
#[doc = r" number of variants."]
#[doc = r""]
#[doc =
r" For a greater convenience this environment variable can also be set"]
#[doc = r" in a `.cargo/config.toml` file as described in the"]
#[doc =
r" [cargo documentation](https://doc.rust-lang.org/cargo/reference/config.html#env)."]
#[doc(alias = "jsonb_set")]
#[doc = ""]
#[doc = " This function requires at least SQLite 3.38 or newer"]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Jsonb, Text, Nullable};"]
#[doc = " # use serde_json::json;"]
#[doc = " #"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 38, 0);"]
#[doc = " #"]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_set_1::<Jsonb, Integer, _, _, _>(json, \"$.b\", 2))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1, \"b\": 2}), result);"]
#[doc = ""]
#[doc = " // Existing values are replaced."]
#[doc = " let json = json!({\"a\": 1});"]
#[doc =
" let result = diesel::select(jsonb_set_1::<Jsonb, Integer, _, _, _>(json, \"$.a\", 99))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 99}), result);"]
#[doc = ""]
#[doc = " // A path ending in \"[#]\" appends to an array."]
#[doc = " let json = json!([\'a\', \'b\', \'c\']);"]
#[doc =
" let result = diesel::select(jsonb_set_1::<Jsonb, Text, _, _, _>(json, \"$[#]\", \"d\"))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!([\'a\', \'b\', \'c\', \'d\']), result);"]
#[doc = ""]
#[doc = " let json = json!({\"a\": 1});"]
#[doc = " let result = diesel::select(jsonb_set_0::<Jsonb, _>(json))"]
#[doc = " .get_result::<serde_json::Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\": 1}), result);"]
#[doc = ""]
#[doc =
" let result = diesel::select(jsonb_set_1::<Nullable<Jsonb>, Integer, _, _, _>(None::<serde_json::Value>, \"$.b\", 1))"]
#[doc = " .get_result::<Option<serde_json::Value>>(connection)?;"]
#[doc = " assert_eq!(result, None);"]
#[doc = " #"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_set_2<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob, json,
path_1, value_1, path_2,
value_2>(json: json, path_1: path_1, value_1: value_1, path_2: path_2,
value_2: value_2)
-> jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: diesel::expression::AsExpression<J>,
path_1: diesel::expression::AsExpression<Text>,
value_1: diesel::expression::AsExpression<V1>,
path_2: diesel::expression::AsExpression<Text>,
value_2: diesel::expression::AsExpression<V2> {
jsonb_set_2_utils::jsonb_set_2 {
json: json.as_expression(),
path_1: path_1.as_expression(),
value_1: value_1.as_expression(),
path_2: path_2.as_expression(),
value_2: value_2.as_expression(),
J: ::core::marker::PhantomData,
V1: ::core::marker::PhantomData,
V2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_set_2()`](fn@jsonb_set_2)"]
pub type jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> =
jsonb_set_2_utils::jsonb_set_2<J, V1, V2,
<json as diesel::expression::AsExpression<J>>::Expression,
<path_1 as diesel::expression::AsExpression<Text>>::Expression,
<value_1 as diesel::expression::AsExpression<V1>>::Expression,
<path_2 as diesel::expression::AsExpression<Text>>::Expression,
<value_2 as diesel::expression::AsExpression<V2>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_set_2_return_type {
#[doc =
"Return type of the [`jsonb_set_2()`](fn@super::jsonb_set_2) SQL function."]
pub type jsonb_set_2<json, path_1, value_1, path_2, value_2> =
super::jsonb_set_2<<json as diesel::expression::Expression>::SqlType,
<value_1 as diesel::expression::Expression>::SqlType,
<value_2 as diesel::expression::Expression>::SqlType, json, path_1,
value_1, path_2, value_2>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_set_2_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
pub(in super) json: json,
pub(in super) path_1: path_1,
pub(in super) value_1: value_1,
pub(in super) path_2: path_2,
pub(in super) value_2: value_2,
pub(in super) J: ::core::marker::PhantomData<J>,
pub(in super) V1: ::core::marker::PhantomData<V1>,
pub(in super) V2: ::core::marker::PhantomData<V2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Add<__Rhs> for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Sub<__Rhs> for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Mul<__Rhs> for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<J, V1, V2, json, path_1, value_1, path_2, value_2, __Rhs>
::core::ops::Div<__Rhs> for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<J: ::core::fmt::Debug, V1: ::core::fmt::Debug,
V2: ::core::fmt::Debug, json: ::core::fmt::Debug,
path_1: ::core::fmt::Debug, value_1: ::core::fmt::Debug,
path_2: ::core::fmt::Debug, value_2: ::core::fmt::Debug>
::core::fmt::Debug for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["json", "path_1", "value_1", "path_2", "value_2", "J", "V1",
"V2"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.json, &self.path_1, &self.value_1, &self.path_2,
&self.value_2, &self.J, &self.V1, &&self.V2];
::core::fmt::Formatter::debug_struct_fields_finish(f,
"jsonb_set_2", names, values)
}
}
#[automatically_derived]
impl<J: ::core::clone::Clone, V1: ::core::clone::Clone,
V2: ::core::clone::Clone, json: ::core::clone::Clone,
path_1: ::core::clone::Clone, value_1: ::core::clone::Clone,
path_2: ::core::clone::Clone, value_2: ::core::clone::Clone>
::core::clone::Clone for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
#[inline]
fn clone(&self)
->
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2,
value_2> {
jsonb_set_2 {
json: ::core::clone::Clone::clone(&self.json),
path_1: ::core::clone::Clone::clone(&self.path_1),
value_1: ::core::clone::Clone::clone(&self.value_1),
path_2: ::core::clone::Clone::clone(&self.path_2),
value_2: ::core::clone::Clone::clone(&self.value_2),
J: ::core::clone::Clone::clone(&self.J),
V1: ::core::clone::Clone::clone(&self.V1),
V2: ::core::clone::Clone::clone(&self.V2),
}
}
}
#[automatically_derived]
impl<J: ::core::marker::Copy, V1: ::core::marker::Copy,
V2: ::core::marker::Copy, json: ::core::marker::Copy,
path_1: ::core::marker::Copy, value_1: ::core::marker::Copy,
path_2: ::core::marker::Copy, value_2: ::core::marker::Copy>
::core::marker::Copy for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<J: diesel::query_builder::QueryId,
V1: diesel::query_builder::QueryId,
V2: diesel::query_builder::QueryId,
json: diesel::query_builder::QueryId,
path_1: diesel::query_builder::QueryId,
value_1: diesel::query_builder::QueryId,
path_2: diesel::query_builder::QueryId,
value_2: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2>
{
type QueryId =
jsonb_set_2<<J as diesel::query_builder::QueryId>::QueryId,
<V1 as diesel::query_builder::QueryId>::QueryId,
<V2 as diesel::query_builder::QueryId>::QueryId,
<json as diesel::query_builder::QueryId>::QueryId,
<path_1 as diesel::query_builder::QueryId>::QueryId,
<value_1 as diesel::query_builder::QueryId>::QueryId,
<path_2 as diesel::query_builder::QueryId>::QueryId,
<value_2 as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<J as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<V2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<json as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_1 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<path_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<value_2 as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<J as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<V1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<V2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<json as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<path_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_1 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<path_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value_2 as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_set_2()`](fn@jsonb_set_2)"]
pub type HelperType<J, V1, V2, json, path_1, value_1, path_2, value_2> =
jsonb_set_2<J, V1, V2, <json as AsExpression<J>>::Expression,
<path_1 as AsExpression<Text>>::Expression,
<value_1 as AsExpression<V1>>::Expression,
<path_2 as AsExpression<Text>>::Expression,
<value_2 as AsExpression<V2>>::Expression>;
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2> Expression for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
(json, path_1, value_1, path_2, value_2): Expression {
type SqlType = J::Out;
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
SelectableExpression<__DieselInternal> for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: SelectableExpression<__DieselInternal>,
path_1: SelectableExpression<__DieselInternal>,
value_1: SelectableExpression<__DieselInternal>,
path_2: SelectableExpression<__DieselInternal>,
value_2: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
AppearsOnTable<__DieselInternal> for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: AppearsOnTable<__DieselInternal>,
path_1: AppearsOnTable<__DieselInternal>,
value_1: AppearsOnTable<__DieselInternal>,
path_2: AppearsOnTable<__DieselInternal>,
value_2: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
FunctionFragment<__DieselInternal> for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
__DieselInternal: diesel::backend::Backend,
json: QueryFragment<__DieselInternal>,
path_1: QueryFragment<__DieselInternal>,
value_1: QueryFragment<__DieselInternal>,
path_2: QueryFragment<__DieselInternal>,
value_2: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_set";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.json.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.json.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_1.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_1.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.path_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.path_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.value_2.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value_2.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2>
QueryFragment<crate::sqlite::Sqlite> for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
json: QueryFragment<crate::sqlite::Sqlite>,
path_1: QueryFragment<crate::sqlite::Sqlite>,
value_1: QueryFragment<crate::sqlite::Sqlite>,
path_2: QueryFragment<crate::sqlite::Sqlite>,
value_2: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<json, path_1, value_1, path_2,
value_2>(json, path_1, value_1, path_2, value_2);
const _: () =
{
use diesel;
impl<json, path_1, value_1, path_2, value_2, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<json, path_1, value_1, path_2, value_2> where
json: diesel::expression::ValidGrouping<__GroupByClause>,
path_1: diesel::expression::ValidGrouping<__GroupByClause>,
value_1: diesel::expression::ValidGrouping<__GroupByClause>,
path_2: diesel::expression::ValidGrouping<__GroupByClause>,
value_2: diesel::expression::ValidGrouping<__GroupByClause>,
<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<path_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_1
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<path_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<value_2
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<<<<json as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<path_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_1 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<path_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
as
diesel::expression::MixedAggregates<<value_2 as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<J: JsonOrNullableJsonOrJsonbOrNullableJsonb +
MaybeNullableValue<Jsonb> + SingleValue, V1: NotBlob, V2: NotBlob,
json, path_1, value_1, path_2, value_2, __DieselInternal>
ValidGrouping<__DieselInternal> for
jsonb_set_2<J, V1, V2, json, path_1, value_1, path_2, value_2> where
__Derived<json, path_1, value_1, path_2,
value_2>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<json, path_1, value_1, path_2, value_2> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(inline)]
mod __jsonb_set_return_types {
#[doc(inline)]
pub use super::__jsonb_set_0_return_type::*;
#[doc(inline)]
pub use super::__jsonb_set_1_return_type::*;
#[doc(inline)]
pub use super::__jsonb_set_2_return_type::*;
}
#[doc =
" Applies an RFC 7396 MergePatch `patch` to the input JSON `target` and"]
#[doc = " returns the patched JSON value."]
#[doc = ""]
#[doc =
" MergePatch can add, modify, or delete elements of a JSON object. Arrays are"]
#[doc =
" treated as atomic values: they can only be inserted, replaced, or deleted as a"]
#[doc = " whole, not modified element-wise."]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::json_patch;"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Json, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = ""]
#[doc = " let result = diesel::select(json_patch::<Json, Json, _, _>("]
#[doc = " json!( {\"a\":1,\"b\":2} ),"]
#[doc = " json!( {\"c\":3,\"d\":4} ),"]
#[doc = " ))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\":1,\"b\":2,\"c\":3,\"d\":4}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_patch::<Json, Json, _, _>("]
#[doc = " json!( {\"a\":[1,2],\"b\":2} ),"]
#[doc = " json!( {\"a\":9} ),"]
#[doc = " ))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\":9,\"b\":2}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_patch::<Json, Json, _, _>("]
#[doc = " json!( {\"a\":[1,2],\"b\":2} ),"]
#[doc = " json!( {\"a\":null} ),"]
#[doc = " ))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"b\":2}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_patch::<Json, Json, _, _>("]
#[doc = " json!( {\"a\":1,\"b\":2} ),"]
#[doc = " json!( {\"a\":9,\"b\":null,\"c\":8} ),"]
#[doc = " ))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\":9,\"c\":8}), result);"]
#[doc = ""]
#[doc = " let result = diesel::select(json_patch::<Json, Json, _, _>("]
#[doc = " json!( {\"a\":{\"x\":1,\"y\":2},\"b\":3} ),"]
#[doc = " json!( {\"a\":{\"y\":9},\"c\":8} ),"]
#[doc = " ))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!("]
#[doc = " json!({\"a\":{\"x\":1,\"y\":9},\"b\":3,\"c\":8}),"]
#[doc = " result"]
#[doc = " );"]
#[doc = ""]
#[doc = " // Nullable input yields nullable output"]
#[doc =
" let result = diesel::select(json_patch::<Nullable<Json>, Json, _, _>("]
#[doc = " None::<Value>,"]
#[doc = " json!({}),"]
#[doc = " ))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn json_patch<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Json>, target,
patch>(target: target, patch: patch) -> json_patch<T, P, target, patch>
where target: diesel::expression::AsExpression<T>,
patch: diesel::expression::AsExpression<P> {
json_patch_utils::json_patch {
target: target.as_expression(),
patch: patch.as_expression(),
T: ::core::marker::PhantomData,
P: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`json_patch()`](fn@json_patch)"]
pub type json_patch<T, P, target, patch> =
json_patch_utils::json_patch<T, P,
<target as diesel::expression::AsExpression<T>>::Expression,
<patch as diesel::expression::AsExpression<P>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __json_patch_return_type {
#[doc =
"Return type of the [`json_patch()`](fn@super::json_patch) SQL function."]
pub type json_patch<target, patch> =
super::json_patch<<target as diesel::expression::Expression>::SqlType,
<patch as diesel::expression::Expression>::SqlType, target, patch>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod json_patch_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct json_patch<T, P, target, patch> {
pub(in super) target: target,
pub(in super) patch: patch,
pub(in super) T: ::core::marker::PhantomData<T>,
pub(in super) P: ::core::marker::PhantomData<P>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, P, target, patch, __Rhs> ::core::ops::Add<__Rhs> for
json_patch<T, P, target, patch> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, P, target, patch, __Rhs> ::core::ops::Sub<__Rhs> for
json_patch<T, P, target, patch> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, P, target, patch, __Rhs> ::core::ops::Mul<__Rhs> for
json_patch<T, P, target, patch> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, P, target, patch, __Rhs> ::core::ops::Div<__Rhs> for
json_patch<T, P, target, patch> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, P: ::core::fmt::Debug,
target: ::core::fmt::Debug, patch: ::core::fmt::Debug>
::core::fmt::Debug for json_patch<T, P, target, patch> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"json_patch", "target", &self.target, "patch", &self.patch,
"T", &self.T, "P", &&self.P)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, P: ::core::clone::Clone,
target: ::core::clone::Clone, patch: ::core::clone::Clone>
::core::clone::Clone for json_patch<T, P, target, patch> {
#[inline]
fn clone(&self) -> json_patch<T, P, target, patch> {
json_patch {
target: ::core::clone::Clone::clone(&self.target),
patch: ::core::clone::Clone::clone(&self.patch),
T: ::core::clone::Clone::clone(&self.T),
P: ::core::clone::Clone::clone(&self.P),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, P: ::core::marker::Copy,
target: ::core::marker::Copy, patch: ::core::marker::Copy>
::core::marker::Copy for json_patch<T, P, target, patch> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
P: diesel::query_builder::QueryId,
target: diesel::query_builder::QueryId,
patch: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
json_patch<T, P, target, patch> {
type QueryId =
json_patch<<T as diesel::query_builder::QueryId>::QueryId,
<P as diesel::query_builder::QueryId>::QueryId,
<target as diesel::query_builder::QueryId>::QueryId,
<patch as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<P as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<target as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<patch as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<P as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<target as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<patch as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`json_patch()`](fn@json_patch)"]
pub type HelperType<T, P, target, patch> =
json_patch<T, P, <target as AsExpression<T>>::Expression,
<patch as AsExpression<P>>::Expression>;
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Json>, target, patch> Expression for
json_patch<T, P, target, patch> where (target, patch): Expression {
type SqlType = P::Out;
}
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Json>, target, patch, __DieselInternal>
SelectableExpression<__DieselInternal> for
json_patch<T, P, target, patch> where
target: SelectableExpression<__DieselInternal>,
patch: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Json>, target, patch, __DieselInternal>
AppearsOnTable<__DieselInternal> for json_patch<T, P, target, patch>
where target: AppearsOnTable<__DieselInternal>,
patch: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Json>, target, patch, __DieselInternal>
FunctionFragment<__DieselInternal> for json_patch<T, P, target, patch>
where __DieselInternal: diesel::backend::Backend,
target: QueryFragment<__DieselInternal>,
patch: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "json_patch";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.target.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.target.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.patch.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.patch.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Json>, target, patch>
QueryFragment<crate::sqlite::Sqlite> for
json_patch<T, P, target, patch> where
target: QueryFragment<crate::sqlite::Sqlite>,
patch: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<target, patch>(target, patch);
const _: () =
{
use diesel;
impl<target, patch, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<target, patch> where
target: diesel::expression::ValidGrouping<__GroupByClause>,
patch: diesel::expression::ValidGrouping<__GroupByClause>,
<target as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<patch
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<target as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<patch as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Json>, target, patch, __DieselInternal>
ValidGrouping<__DieselInternal> for json_patch<T, P, target, patch>
where __Derived<target, patch>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<target, patch> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[doc =
" Applies an RFC 7396 MergePatch `patch` to the input JSON `target` and"]
#[doc = " returns the patched JSON value in SQLite\'s binary JSONB format."]
#[doc = ""]
#[doc =
" See [`json_patch`](json_patch()) for details about the MergePatch semantics."]
#[doc = ""]
#[doc = " # Examples"]
#[doc = ""]
#[doc = " ```rust"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " #"]
#[doc = " # fn main() {"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # run_test().unwrap();"]
#[doc = " # }"]
#[doc = " #"]
#[doc = " # #[cfg(feature = \"serde_json\")]"]
#[doc = " # fn run_test() -> QueryResult<()> {"]
#[doc = " # use diesel::dsl::jsonb_patch;"]
#[doc = " # use serde_json::{json, Value};"]
#[doc = " # use diesel::sql_types::{Jsonb, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " # assert_version!(connection, 3, 45, 0);"]
#[doc = ""]
#[doc = " let result = diesel::select(jsonb_patch::<Jsonb, Jsonb, _, _>("]
#[doc = " json!( {\"a\":1,\"b\":2} ),"]
#[doc = " json!( {\"c\":3,\"d\":4} ),"]
#[doc = " ))"]
#[doc = " .get_result::<Value>(connection)?;"]
#[doc = " assert_eq!(json!({\"a\":1,\"b\":2,\"c\":3,\"d\":4}), result);"]
#[doc = ""]
#[doc = " // Nullable input yields nullable output"]
#[doc =
" let result = diesel::select(jsonb_patch::<Nullable<Jsonb>, Jsonb, _, _>("]
#[doc = " None::<Value>,"]
#[doc = " json!({}),"]
#[doc = " ))"]
#[doc = " .get_result::<Option<Value>>(connection)?;"]
#[doc = " assert!(result.is_none());"]
#[doc = ""]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn jsonb_patch<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Jsonb>, target,
patch>(target: target, patch: patch) -> jsonb_patch<T, P, target, patch>
where target: diesel::expression::AsExpression<T>,
patch: diesel::expression::AsExpression<P> {
jsonb_patch_utils::jsonb_patch {
target: target.as_expression(),
patch: patch.as_expression(),
T: ::core::marker::PhantomData,
P: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`jsonb_patch()`](fn@jsonb_patch)"]
pub type jsonb_patch<T, P, target, patch> =
jsonb_patch_utils::jsonb_patch<T, P,
<target as diesel::expression::AsExpression<T>>::Expression,
<patch as diesel::expression::AsExpression<P>>::Expression>;
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
#[doc(inline)]
mod __jsonb_patch_return_type {
#[doc =
"Return type of the [`jsonb_patch()`](fn@super::jsonb_patch) SQL function."]
pub type jsonb_patch<target, patch> =
super::jsonb_patch<<target as
diesel::expression::Expression>::SqlType,
<patch as diesel::expression::Expression>::SqlType, target, patch>;
}
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod jsonb_patch_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct jsonb_patch<T, P, target, patch> {
pub(in super) target: target,
pub(in super) patch: patch,
pub(in super) T: ::core::marker::PhantomData<T>,
pub(in super) P: ::core::marker::PhantomData<P>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, P, target, patch, __Rhs> ::core::ops::Add<__Rhs> for
jsonb_patch<T, P, target, patch> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, P, target, patch, __Rhs> ::core::ops::Sub<__Rhs> for
jsonb_patch<T, P, target, patch> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, P, target, patch, __Rhs> ::core::ops::Mul<__Rhs> for
jsonb_patch<T, P, target, patch> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, P, target, patch, __Rhs> ::core::ops::Div<__Rhs> for
jsonb_patch<T, P, target, patch> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, P: ::core::fmt::Debug,
target: ::core::fmt::Debug, patch: ::core::fmt::Debug>
::core::fmt::Debug for jsonb_patch<T, P, target, patch> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f,
"jsonb_patch", "target", &self.target, "patch", &self.patch,
"T", &self.T, "P", &&self.P)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, P: ::core::clone::Clone,
target: ::core::clone::Clone, patch: ::core::clone::Clone>
::core::clone::Clone for jsonb_patch<T, P, target, patch> {
#[inline]
fn clone(&self) -> jsonb_patch<T, P, target, patch> {
jsonb_patch {
target: ::core::clone::Clone::clone(&self.target),
patch: ::core::clone::Clone::clone(&self.patch),
T: ::core::clone::Clone::clone(&self.T),
P: ::core::clone::Clone::clone(&self.P),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, P: ::core::marker::Copy,
target: ::core::marker::Copy, patch: ::core::marker::Copy>
::core::marker::Copy for jsonb_patch<T, P, target, patch> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
P: diesel::query_builder::QueryId,
target: diesel::query_builder::QueryId,
patch: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
jsonb_patch<T, P, target, patch> {
type QueryId =
jsonb_patch<<T as diesel::query_builder::QueryId>::QueryId,
<P as diesel::query_builder::QueryId>::QueryId,
<target as diesel::query_builder::QueryId>::QueryId,
<patch as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<P as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<target as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<patch as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<P as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<target as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<patch as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`jsonb_patch()`](fn@jsonb_patch)"]
pub type HelperType<T, P, target, patch> =
jsonb_patch<T, P, <target as AsExpression<T>>::Expression,
<patch as AsExpression<P>>::Expression>;
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Jsonb>, target, patch> Expression for
jsonb_patch<T, P, target, patch> where (target, patch): Expression {
type SqlType = P::Out;
}
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Jsonb>, target, patch, __DieselInternal>
SelectableExpression<__DieselInternal> for
jsonb_patch<T, P, target, patch> where
target: SelectableExpression<__DieselInternal>,
patch: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Jsonb>, target, patch, __DieselInternal>
AppearsOnTable<__DieselInternal> for jsonb_patch<T, P, target, patch>
where target: AppearsOnTable<__DieselInternal>,
patch: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Jsonb>, target, patch, __DieselInternal>
FunctionFragment<__DieselInternal> for
jsonb_patch<T, P, target, patch> where
__DieselInternal: diesel::backend::Backend,
target: QueryFragment<__DieselInternal>,
patch: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "jsonb_patch";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.target.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.target.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.patch.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.patch.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Jsonb>, target, patch>
QueryFragment<crate::sqlite::Sqlite> for
jsonb_patch<T, P, target, patch> where
target: QueryFragment<crate::sqlite::Sqlite>,
patch: QueryFragment<crate::sqlite::Sqlite> {
fn walk_ast<'__b>(&'__b self,
mut out: AstPass<'_, '__b, crate::sqlite::Sqlite>)
-> QueryResult<()> {
out.push_sql(<Self as
FunctionFragment<crate::sqlite::Sqlite>>::FUNCTION_NAME);
out.push_sql("(");
self.walk_arguments(out.reborrow())?;
out.push_sql(")");
Ok(())
}
}
pub struct __Derived<target, patch>(target, patch);
const _: () =
{
use diesel;
impl<target, patch, __GroupByClause>
diesel::expression::ValidGrouping<__GroupByClause> for
__Derived<target, patch> where
target: diesel::expression::ValidGrouping<__GroupByClause>,
patch: diesel::expression::ValidGrouping<__GroupByClause>,
<target as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<patch
as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
{
type IsAggregate =
<<target as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
as
diesel::expression::MixedAggregates<<patch as
diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
};
impl<T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue +
CombinedNullableValue<T, Jsonb>, target, patch, __DieselInternal>
ValidGrouping<__DieselInternal> for jsonb_patch<T, P, target, patch>
where __Derived<target, patch>: ValidGrouping<__DieselInternal> {
type IsAggregate =
<__Derived<target, patch> as
ValidGrouping<__DieselInternal>>::IsAggregate;
}
}
#[allow(unused_imports)]
#[doc(hidden)]
mod return_type_helpers {
#[doc(inline)]
pub use super::__json_return_type::*;
#[doc(inline)]
pub use super::__jsonb_return_type::*;
#[doc(inline)]
pub use super::__json_array_length_return_type::*;
#[doc(inline)]
pub use super::__json_array_length_with_path_return_type::*;
#[doc(inline)]
pub use super::__json_error_position_return_type::*;
#[doc(inline)]
pub use super::__json_extract_string_return_type::*;
#[doc(inline)]
pub use super::__json_extract_integer_return_type::*;
#[doc(inline)]
pub use super::__json_extract_double_return_type::*;
#[doc(inline)]
pub use super::__json_extract_json_return_types::*;
#[doc(inline)]
pub use super::__jsonb_extract_string_return_type::*;
#[doc(inline)]
pub use super::__jsonb_extract_integer_return_type::*;
#[doc(inline)]
pub use super::__jsonb_extract_double_return_type::*;
#[doc(inline)]
pub use super::__jsonb_extract_jsonb_return_types::*;
#[doc(inline)]
pub use super::__json_pretty_return_type::*;
#[doc(inline)]
pub use super::__json_pretty_with_indentation_return_type::*;
#[doc(inline)]
pub use super::__json_valid_return_type::*;
#[doc(inline)]
pub use super::__json_valid_with_flags_return_type::*;
#[doc(inline)]
pub use super::__json_type_return_type::*;
#[doc(inline)]
pub use super::__json_type_with_path_return_type::*;
#[doc(inline)]
pub use super::__json_quote_return_type::*;
#[doc(inline)]
pub use super::__json_group_array_return_type::*;
#[doc(inline)]
pub use super::__jsonb_group_array_return_type::*;
#[doc(inline)]
pub use super::__json_object_return_types::*;
#[doc(inline)]
pub use super::__jsonb_object_return_types::*;
#[doc(inline)]
pub use super::__json_group_object_return_type::*;
#[doc(inline)]
pub use super::__jsonb_group_object_return_type::*;
#[doc(inline)]
pub use super::__json_array_return_types::*;
#[doc(inline)]
pub use super::__jsonb_array_return_types::*;
#[doc(inline)]
pub use super::__json_remove_return_types::*;
#[doc(inline)]
pub use super::__jsonb_remove_return_types::*;
#[doc(inline)]
pub use super::__json_insert_return_types::*;
#[doc(inline)]
pub use super::__jsonb_insert_return_types::*;
#[doc(inline)]
pub use super::__json_replace_return_types::*;
#[doc(inline)]
pub use super::__jsonb_replace_return_types::*;
#[doc(inline)]
pub use super::__json_set_return_types::*;
#[doc(inline)]
pub use super::__jsonb_set_return_types::*;
#[doc(inline)]
pub use super::__json_patch_return_type::*;
#[doc(inline)]
pub use super::__jsonb_patch_return_type::*;
}#[declare_sql_function(generate_return_type_helpers = true)]
17#[backends(crate::sqlite::Sqlite)]
18extern "SQL" {
19 fn json<E: TextOrNullableText + MaybeNullableValue<Json>>(e: E) -> E::Out;
58
59 fn jsonb<E: BinaryOrNullableBinary + MaybeNullableValue<Jsonb>>(e: E) -> E::Out;
100
101 #[cfg(feature = "__sqlite-shared")]
159 fn json_array_length<
160 J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Integer>,
161 >(
162 j: J,
163 ) -> J::Out;
164
165 #[sql_name = "json_array_length"]
236 #[cfg(feature = "__sqlite-shared")]
237 fn json_array_length_with_path<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
238 j: J,
239 path: Text,
240 ) -> Nullable<Integer>;
241
242 #[cfg(feature = "__sqlite-shared")]
330 fn json_error_position<
331 X: TextOrNullableTextOrBinaryOrNullableBinary + MaybeNullableValue<Integer>,
332 >(
333 x: X,
334 ) -> X::Out;
335
336 #[cfg(feature = "__sqlite-shared")]
387 #[sql_name = "json_extract"]
388 fn json_extract_string<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
389 json: J,
390 text: Text,
391 ) -> Nullable<Text>;
392
393 #[cfg(feature = "__sqlite-shared")]
444 #[sql_name = "json_extract"]
445 fn json_extract_integer<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
446 json: J,
447 text: Text,
448 ) -> Nullable<Integer>;
449
450 #[cfg(feature = "__sqlite-shared")]
501 #[sql_name = "json_extract"]
502 fn json_extract_double<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
503 json: J,
504 text: Text,
505 ) -> Nullable<Double>;
506
507 #[cfg(feature = "__sqlite-shared")]
577 #[sql_name = "json_extract"]
578 #[variadic(last_arguments = 1, skip_zero_argument_variant = true)]
579 fn json_extract_json<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
580 json: J,
581 text: Text,
582 ) -> Nullable<Json>;
583
584 #[cfg(feature = "__sqlite-shared")]
637 #[sql_name = "jsonb_extract"]
638 fn jsonb_extract_string<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
639 json: J,
640 text: Text,
641 ) -> Nullable<Text>;
642
643 #[cfg(feature = "__sqlite-shared")]
696 #[sql_name = "jsonb_extract"]
697 fn jsonb_extract_integer<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
698 json: J,
699 text: Text,
700 ) -> Nullable<Integer>;
701
702 #[cfg(feature = "__sqlite-shared")]
755 #[sql_name = "jsonb_extract"]
756 fn jsonb_extract_double<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
757 json: J,
758 text: Text,
759 ) -> Nullable<Double>;
760
761 #[cfg(feature = "__sqlite-shared")]
841 #[sql_name = "jsonb_extract"]
842 #[variadic(last_arguments = 1, skip_zero_argument_variant = true)]
843 fn jsonb_extract_jsonb<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
844 json: J,
845 text: Text,
846 ) -> Nullable<Jsonb>;
847
848 fn json_pretty<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Text>>(
975 j: J,
976 ) -> J::Out;
977
978 #[sql_name = "json_pretty"]
1132 fn json_pretty_with_indentation<
1133 J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Text>,
1134 >(
1135 j: J,
1136 indentation: Nullable<Text>,
1137 ) -> J::Out;
1138
1139 #[sql_name = "json_valid"]
1175 #[cfg(feature = "__sqlite-shared")]
1176 fn json_valid<J: JsonOrNullableJson + MaybeNullableValue<Bool>>(j: J) -> J::Out;
1177
1178 #[sql_name = "json_valid"]
1251 #[cfg(feature = "__sqlite-shared")]
1252 fn json_valid_with_flags<
1253 X: TextOrNullableTextOrBinaryOrNullableBinary + SingleValue + MaybeNullableValue<Bool>,
1254 >(
1255 x: X,
1256 flags: crate::sqlite::types::JsonValidFlags,
1257 ) -> X::Out;
1258
1259 #[sql_name = "json_type"]
1302 #[cfg(feature = "__sqlite-shared")]
1303 fn json_type<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Text>>(
1304 j: J,
1305 ) -> J::Out;
1306
1307 #[sql_name = "json_type"]
1371 #[cfg(feature = "__sqlite-shared")]
1372 fn json_type_with_path<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
1373 j: J,
1374 path: Text,
1375 ) -> Nullable<Text>;
1376
1377 #[sql_name = "json_quote"]
1429 #[cfg(feature = "__sqlite-shared")]
1430 fn json_quote<J: SqlType + SingleValue>(j: J) -> Json;
1431
1432 #[cfg(feature = "__sqlite-shared")]
1508 #[aggregate]
1509 fn json_group_array<E: SqlType + SingleValue>(elements: E) -> Json;
1510
1511 #[cfg(feature = "__sqlite-shared")]
1588 #[aggregate]
1589 fn jsonb_group_array<E: SqlType + SingleValue>(elements: E) -> Jsonb;
1590
1591 #[cfg(feature = "__sqlite-shared")]
1646 #[variadic(2)]
1647 fn json_object<K: NotBlob<IsNull = is_nullable::NotNull>, V: NotBlob>(key: K, value: V)
1648 -> Json;
1649
1650 #[cfg(feature = "__sqlite-shared")]
1692 #[variadic(2)]
1693 fn jsonb_object<K: NotBlob<IsNull = is_nullable::NotNull>, V: NotBlob>(
1694 key: K,
1695 value: V,
1696 ) -> Jsonb;
1697
1698 #[cfg(feature = "__sqlite-shared")]
1782 #[aggregate]
1783 fn json_group_object<
1784 N: SqlType<IsNull = is_nullable::NotNull> + SingleValue,
1785 V: SqlType + SingleValue,
1786 >(
1787 names: N,
1788 values: V,
1789 ) -> Json;
1790
1791 #[cfg(feature = "__sqlite-shared")]
1875 #[aggregate]
1876 fn jsonb_group_object<
1877 N: SqlType<IsNull = is_nullable::NotNull> + SingleValue,
1878 V: SqlType + SingleValue,
1879 >(
1880 names: N,
1881 values: V,
1882 ) -> Jsonb;
1883
1884 #[cfg(feature = "__sqlite-shared")]
1929 #[variadic(1)]
1930 fn json_array<V: NotBlob>(value: V) -> Json;
1931
1932 #[cfg(feature = "__sqlite-shared")]
1981 #[variadic(1)]
1982 fn jsonb_array<V: NotBlob>(value: V) -> Jsonb;
1983
1984 #[cfg(feature = "__sqlite-shared")]
2050 #[variadic(1)]
2051 fn json_remove<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
2052 json: J,
2053 path: Text,
2054 ) -> Nullable<Json>;
2055
2056 #[cfg(feature = "__sqlite-shared")]
2124 #[variadic(1)]
2125 fn jsonb_remove<J: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue>(
2126 json: J,
2127 path: Text,
2128 ) -> Nullable<Jsonb>;
2129
2130 #[cfg(feature = "__sqlite-shared")]
2203 #[variadic(2)]
2204 fn json_insert<
2205 J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Json> + SingleValue,
2206 V: NotBlob,
2207 >(
2208 json: J,
2209 path: Text,
2210 value: V,
2211 ) -> J::Out;
2212
2213 #[cfg(feature = "__sqlite-shared")]
2275 #[variadic(2)]
2276 fn jsonb_insert<
2277 J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Jsonb> + SingleValue,
2278 V: NotBlob,
2279 >(
2280 json: J,
2281 path: Text,
2282 value: V,
2283 ) -> J::Out;
2284
2285 #[cfg(feature = "__sqlite-shared")]
2350 #[variadic(2)]
2351 fn json_replace<
2352 J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Json> + SingleValue,
2353 V: NotBlob,
2354 >(
2355 json: J,
2356 path: Text,
2357 value: V,
2358 ) -> J::Out;
2359
2360 #[cfg(feature = "__sqlite-shared")]
2409 #[variadic(2)]
2410 fn jsonb_replace<
2411 J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Jsonb> + SingleValue,
2412 V: NotBlob,
2413 >(
2414 json: J,
2415 path: Text,
2416 value: V,
2417 ) -> J::Out;
2418
2419 #[cfg(feature = "__sqlite-shared")]
2492 #[variadic(2)]
2493 fn json_set<
2494 J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Json> + SingleValue,
2495 V: NotBlob,
2496 >(
2497 json: J,
2498 path: Text,
2499 value: V,
2500 ) -> J::Out;
2501
2502 #[cfg(feature = "__sqlite-shared")]
2557 #[variadic(2)]
2558 fn jsonb_set<
2559 J: JsonOrNullableJsonOrJsonbOrNullableJsonb + MaybeNullableValue<Jsonb> + SingleValue,
2560 V: NotBlob,
2561 >(
2562 json: J,
2563 path: Text,
2564 value: V,
2565 ) -> J::Out;
2566
2567 #[cfg(feature = "__sqlite-shared")]
2641 fn json_patch<
2642 T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
2643 P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue + CombinedNullableValue<T, Json>,
2644 >(
2645 target: T,
2646 patch: P,
2647 ) -> P::Out;
2648
2649 #[cfg(feature = "__sqlite-shared")]
2691 fn jsonb_patch<
2692 T: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue,
2693 P: JsonOrNullableJsonOrJsonbOrNullableJsonb + SingleValue + CombinedNullableValue<T, Jsonb>,
2694 >(
2695 target: T,
2696 patch: P,
2697 ) -> P::Out;
2698}
2699
2700pub(super) mod return_type_helpers_reexported {
2701 #[allow(unused_imports)]
2702 #[doc(inline)]
2703 pub use super::return_type_helpers::*;
2704}