|
3 | 3 | use super::expression_methods::InetOrCidr;
|
4 | 4 | use crate::expression::functions::define_sql_function;
|
5 | 5 | use crate::pg::expression::expression_methods::ArrayOrNullableArray;
|
| 6 | +use crate::pg::expression::expression_methods::MaybeNullableValue; |
6 | 7 | use crate::pg::expression::expression_methods::MultirangeOrNullableMultirange;
|
7 | 8 | use crate::pg::expression::expression_methods::MultirangeOrRangeMaybeNullable;
|
8 | 9 | use crate::pg::expression::expression_methods::RangeOrNullableRange;
|
@@ -1423,3 +1424,49 @@ define_sql_function! {
|
1423 | 1424 | /// ```
|
1424 | 1425 | fn array_upper<Arr: ArrayOrNullableArray + SingleValue>(array: Arr, dimension: Integer) -> Nullable<Integer>;
|
1425 | 1426 | }
|
| 1427 | + |
| 1428 | +#[cfg(feature = "postgres_backend")] |
| 1429 | +define_sql_function! { |
| 1430 | + /// Converts any SQL value to json |
| 1431 | + /// |
| 1432 | + /// # Example |
| 1433 | + /// |
| 1434 | + /// ```rust |
| 1435 | + /// # include!("../../doctest_setup.rs"); |
| 1436 | + /// # |
| 1437 | + /// # fn main() { |
| 1438 | + /// # #[cfg(feature = "serde_json")] |
| 1439 | + /// # run_test().unwrap(); |
| 1440 | + /// # } |
| 1441 | + /// # |
| 1442 | + /// # #[cfg(feature = "serde_json")] |
| 1443 | + /// # fn run_test() -> QueryResult<()> { |
| 1444 | + /// # use diesel::dsl::to_json; |
| 1445 | + /// # use serde_json::{json, Value}; |
| 1446 | + /// # use diesel::sql_types::{Integer, Array, Json, Text, Nullable}; |
| 1447 | + /// # let connection = &mut establish_connection(); |
| 1448 | + /// let result = diesel::select(to_json::<Integer, _>(1)) |
| 1449 | + /// .get_result::<Value>(connection)?; |
| 1450 | + /// |
| 1451 | + /// assert_eq!(json!(1), result); |
| 1452 | + /// |
| 1453 | + /// let result = diesel::select(to_json::<Array<Text>, _>(vec!["abc", "xyz"])) |
| 1454 | + /// .get_result::<Value>(connection)?; |
| 1455 | + /// |
| 1456 | + /// assert_eq!(json!(["abc", "xyz"]), result); |
| 1457 | + /// |
| 1458 | + /// let result = diesel::select(to_json::<Array<Nullable<Text>>, _>(Vec::<String>::new())) |
| 1459 | + /// .get_result::<Value>(connection)?; |
| 1460 | + /// |
| 1461 | + /// assert_eq!(json!([]), result); |
| 1462 | + /// |
| 1463 | + /// let result = diesel::select(to_json::<Nullable<Text>, _>(None::<String>)) |
| 1464 | + /// .get_result::<Option<Value>>(connection)?; |
| 1465 | + /// |
| 1466 | + /// assert!(result.is_none()); |
| 1467 | + /// |
| 1468 | + /// # Ok(()) |
| 1469 | + /// # } |
| 1470 | + /// ``` |
| 1471 | + fn to_json<E: MaybeNullableValue<Json>>(e: E) -> E::Out; |
| 1472 | +} |
0 commit comments