@@ -2078,3 +2078,100 @@ define_sql_function! {
2078
2078
2079
2079
fn jsonb_array_length<E : JsonbOrNullableJsonb + MaybeNullableValue <Integer >>( jsonb: E ) -> E :: Out ;
2080
2080
}
2081
+
2082
+ #[ cfg( feature = "postgres_backend" ) ]
2083
+ define_sql_function ! {
2084
+ /// Returns target with new_value inserted, if the item designated by the path is an array element.
2085
+ ///
2086
+ /// # Example
2087
+ ///
2088
+ /// ```rust
2089
+ /// # include!("../../doctest_setup.rs");
2090
+ /// #
2091
+ /// # fn main() {
2092
+ /// # run_test().unwrap();
2093
+ /// # }
2094
+ /// #
2095
+ /// # fn run_test() -> QueryResult<()> {
2096
+ /// # use diesel::dsl::jsonb_insert;
2097
+ /// # use diesel::sql_types::{Array, Jsonb, Nullable, Text};
2098
+ /// # use serde_json::{Value, json};
2099
+ /// # let connection = &mut establish_connection();
2100
+ /// let result = diesel::select(jsonb_insert::<Jsonb, Array<Text>, _, _, _>(json!([1, 2, 3]), vec!["2"], json!(1)))
2101
+ /// .get_result::<Value>(connection)?;
2102
+ /// assert_eq!(json!([1, 2, 1, 3]), result);
2103
+ ///
2104
+ /// let result = diesel::select(jsonb_insert::<Jsonb, Array<Text>, _, _, _>(json!([1, 2, 3]), Vec::<String>::new(), json!(1)))
2105
+ /// .get_result::<Value>(connection)?;
2106
+ /// assert_eq!(json!([1, 2, 3]), result);
2107
+ ///
2108
+ /// let result = diesel::select(jsonb_insert::<Nullable<Jsonb>, Array<Text>, _, _, _>(Option::<Value>::None, vec!["1"], json!(1)))
2109
+ /// .get_result::<Option<Value>>(connection)?;
2110
+ /// assert_eq!(None, result);
2111
+ ///
2112
+ /// let result = diesel::select(jsonb_insert::<Jsonb, Nullable<Array<Text>>, _, _, _>(json!([1, 2, 3]), None::<Vec<String>>, json!(1)))
2113
+ /// .get_result::<Option<Value>>(connection)?;
2114
+ /// assert_eq!(None, result);
2115
+ ///
2116
+ /// let result = diesel::select(jsonb_insert::<Nullable<Jsonb>, Array<Text>, _, _, _>(json!([1, 2, 3]), vec!["1"], Option::<Value>::None))
2117
+ /// .get_result::<Option<Value>>(connection)?;
2118
+ /// assert_eq!(None, result);
2119
+ ///
2120
+ ///
2121
+ /// # Ok(())
2122
+ /// # }
2123
+ /// ```
2124
+ fn jsonb_insert<J : JsonbOrNullableJsonb + SingleValue , P : TextArrayOrNullableTextArray + CombinedNullableValue <J , Jsonb >>( target: J , path: P , value: J ) -> P :: Out ;
2125
+ }
2126
+
2127
+ #[ cfg( feature = "postgres_backend" ) ]
2128
+ define_sql_function ! {
2129
+ /// Returns target with new_value inserted, if the item designated by the path is an array element.
2130
+ /// If insert_after is true, the value is inserted after the path specified
2131
+ ///
2132
+ ///
2133
+ /// # Example
2134
+ ///
2135
+ /// ```rust
2136
+ /// # include!("../../doctest_setup.rs");
2137
+ /// #
2138
+ /// # fn main() {
2139
+ /// # run_test().unwrap();
2140
+ /// # }
2141
+ /// #
2142
+ /// # fn run_test() -> QueryResult<()> {
2143
+ /// # use diesel::dsl::jsonb_insert_with_option_after;
2144
+ /// # use diesel::sql_types::{Array, Jsonb, Nullable, Text};
2145
+ /// # use serde_json::{Value, json};
2146
+ /// # let connection = &mut establish_connection();
2147
+ /// let result = diesel::select(jsonb_insert_with_option_after::<Jsonb, Array<Text>, _, _, _, _>(json!([1, 2, 3]), vec!["2"], json!(1), true))
2148
+ /// .get_result::<Value>(connection)?;
2149
+ /// assert_eq!(json!([1, 2, 3, 1]), result);
2150
+ ///
2151
+ /// let result = diesel::select(jsonb_insert_with_option_after::<Jsonb, Array<Text>, _, _, _, _>(json!([1, 2, 3]), vec!["2"], json!(1), false))
2152
+ /// .get_result::<Value>(connection)?;
2153
+ /// assert_eq!(json!([1, 2, 1, 3]), result);
2154
+ ///
2155
+ /// let result = diesel::select(jsonb_insert_with_option_after::<Jsonb, Array<Text>, _, _, _, _>(json!([1, 2, 3]), Vec::<String>::new(), json!(1), true))
2156
+ /// .get_result::<Value>(connection)?;
2157
+ /// assert_eq!(json!([1, 2, 3]), result);
2158
+ ///
2159
+ /// let result = diesel::select(jsonb_insert_with_option_after::<Nullable<Jsonb>, Array<Text>, _, _, _, _>(Option::<Value>::None, vec!["1"], json!(1), true))
2160
+ /// .get_result::<Option<Value>>(connection)?;
2161
+ /// assert_eq!(None, result);
2162
+ ///
2163
+ /// let result = diesel::select(jsonb_insert_with_option_after::<Jsonb, Nullable<Array<Text>>, _, _, _, _>(json!([1, 2, 3]), None::<Vec<String>>, json!(1), true))
2164
+ /// .get_result::<Option<Value>>(connection)?;
2165
+ /// assert_eq!(None, result);
2166
+ ///
2167
+ /// let result = diesel::select(jsonb_insert_with_option_after::<Nullable<Jsonb>, Array<Text>, _, _, _, _>(json!([1, 2, 3]), vec!["1"], Option::<Value>::None, true))
2168
+ /// .get_result::<Option<Value>>(connection)?;
2169
+ /// assert_eq!(None, result);
2170
+ ///
2171
+ ///
2172
+ /// # Ok(())
2173
+ /// # }
2174
+ /// ```
2175
+ #[ sql_name = "jsonb_insert" ]
2176
+ fn jsonb_insert_with_option_after<J : JsonbOrNullableJsonb + SingleValue , P : TextArrayOrNullableTextArray + CombinedNullableValue <J , Jsonb >>( target: J , path: P , value: J , insert_after: Bool ) -> P :: Out ;
2177
+ }
0 commit comments