diesel::sql_types

Struct Jsonb

Source
pub struct Jsonb;
Expand description

The jsonb SQL type. This type can only be used with feature = "serde_json"

In SQLite, jsonb brings mainly performance improvements over regular JSON:

The advantage of JSONB in SQLite is that it is smaller and faster than text JSON - potentially several times faster. There is space in the on-disk JSONB format to add enhancements and future versions of SQLite might include options to provide O(1) lookup of elements in JSONB, but no such capability is currently available.

In SQLite, JSONB is intended for internal use by SQLite only. Thus, future SQLite updates might break our JSONB implementation. And one might have to wait and then upgrade diesel for those changes to be accounted for. If you do not want this, prefer the regular Json type.

In PostgreSQL, jsonb offers several advantages over regular JSON:

There are two JSON data types: json and jsonb. They accept almost identical sets of values as input. The major practical difference is one of efficiency. The json data type stores an exact copy of the input text, which processing functions must reparse on each execution; while jsonb data is stored in a decomposed binary format that makes it slightly slower to input due to added conversion overhead, but significantly faster to process, since no reparsing is needed. jsonb also supports indexing, which can be a significant advantage.

…In general, most applications should prefer to store JSON data as jsonb, unless there are quite specialized needs, such as legacy assumptions about ordering of object keys.

§ToSql impls

§FromSql impls

§Examples

table! {
    contacts {
        id -> Integer,
        name -> Text,
        address -> Jsonb,
    }
}

let santas_address: serde_json::Value = serde_json::from_str(r#"{
    "street": "Article Circle Expressway 1",
    "city": "North Pole",
    "postcode": "99705",
    "state": "Alaska"
}"#)?;
let inserted_address = insert_into(contacts)
    .values((name.eq("Claus"), address.eq(&santas_address)))
    .returning(address)
    .get_result::<serde_json::Value>(connection)?;
assert_eq!(santas_address, inserted_address);

Trait Implementations§

Source§

impl<'__expr, '__expr2> AsExpression<Jsonb> for &'__expr2 &'__expr Value

Available on crate feature serde_json and (crate features postgres_backend or mysql_backend or sqlite) only.
Source§

type Expression = Bound<Jsonb, &'__expr2 &'__expr Value>

The expression being returned
Source§

fn as_expression(self) -> Self::Expression

Perform the conversion
Source§

impl<'__expr> AsExpression<Jsonb> for &'__expr Value

Available on crate feature serde_json and (crate features postgres_backend or mysql_backend or sqlite) only.
Source§

type Expression = Bound<Jsonb, &'__expr Value>

The expression being returned
Source§

fn as_expression(self) -> Self::Expression

Perform the conversion
Source§

impl AsExpression<Jsonb> for Value

Available on crate feature serde_json and (crate features postgres_backend or mysql_backend or sqlite) only.
Source§

type Expression = Bound<Jsonb, Value>

The expression being returned
Source§

fn as_expression(self) -> Self::Expression

Perform the conversion
Source§

impl Clone for Jsonb

Source§

fn clone(&self) -> Jsonb

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Jsonb

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Jsonb

Source§

fn default() -> Jsonb

Returns the “default value” for a type. Read more
Source§

impl FromSql<Jsonb, Pg> for Value

Available on crate features serde_json and postgres_backend only.
Source§

fn from_sql(value: PgValue<'_>) -> Result<Self>

See the trait documentation.
Source§

fn from_nullable_sql(bytes: Option<DB::RawValue<'_>>) -> Result<Self>

A specialized variant of from_sql for handling null values. Read more
Source§

impl FromSql<Jsonb, Sqlite> for Value

Available on crate features sqlite and serde_json only.
Source§

fn from_sql(value: SqliteValue<'_, '_, '_>) -> Result<Self>

See the trait documentation.
Source§

fn from_nullable_sql(bytes: Option<DB::RawValue<'_>>) -> Result<Self>

A specialized variant of from_sql for handling null values. Read more
Source§

impl HasSqlType<Jsonb> for Pg

Source§

fn metadata(_: &mut Self::MetadataLookup) -> PgTypeMetadata

Fetch the metadata for the given type Read more
Source§

impl HasSqlType<Jsonb> for Sqlite

Source§

fn metadata(_: &mut ()) -> SqliteType

Fetch the metadata for the given type Read more
Source§

impl QueryId for Jsonb

Source§

const HAS_STATIC_QUERY_ID: bool = true

Can the SQL generated by Self be uniquely identified by its type? Read more
Source§

type QueryId = Jsonb

A type which uniquely represents Self in a SQL query. Read more
Source§

fn query_id() -> Option<TypeId>

Returns the type id of Self::QueryId if Self::HAS_STATIC_QUERY_ID. Returns None otherwise. Read more
Source§

impl SqlType for Jsonb

Source§

type IsNull = NotNull

Is this type nullable? Read more
Source§

impl ToSql<Jsonb, Pg> for Value

Available on crate features serde_json and postgres_backend only.
Source§

fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, Pg>) -> Result

See the trait documentation.
Source§

impl ToSql<Jsonb, Sqlite> for Value

Available on crate features sqlite and serde_json only.
Source§

fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, Sqlite>) -> Result

See the trait documentation.
Source§

impl Copy for Jsonb

Source§

impl SingleValue for Jsonb

Auto Trait Implementations§

§

impl Freeze for Jsonb

§

impl RefUnwindSafe for Jsonb

§

impl Send for Jsonb

§

impl Sync for Jsonb

§

impl Unpin for Jsonb

§

impl UnwindSafe for Jsonb

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<ST, U, DB> CompatibleType<U, DB> for ST
where DB: Backend, ST: SqlType + SingleValue, U: FromSqlRow<ST, DB>,

Source§

type SqlType = ST

Available on crate feature i-implement-a-third-party-backend-and-opt-into-breaking-changes only.
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoNotNullable for T
where T: SqlType<IsNull = NotNull>,

Source§

type NotNullable = T

The not nullable representation of this type. Read more
Source§

impl<T> IntoNullable for T
where T: SqlType<IsNull = NotNull> + SingleValue,

Source§

type Nullable = Nullable<T>

The nullable representation of this type. Read more
Source§

impl<T> IntoSql for T

Source§

fn into_sql<T>(self) -> AsExprOf<Self, T>

Convert self to an expression for Diesel’s query builder. Read more
Source§

fn as_sql<'a, T>(&'a self) -> AsExprOf<&'a Self, T>
where &'a Self: AsExpression<T>, T: SqlType + TypedExpressionType,

Convert &self to an expression for Diesel’s query builder. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T

Source§

impl<ST> TypedExpressionType for ST
where ST: SingleValue,