diesel/pg/expression/
operators.rs

1use crate::backend::{Backend, DieselReserveSpecialization};
2use crate::expression::expression_types::NotSelectable;
3use crate::expression::{TypedExpressionType, ValidGrouping};
4use crate::pg::Pg;
5use crate::query_builder::update_statement::changeset::AssignmentTarget;
6use crate::query_builder::{AstPass, QueryFragment, QueryId};
7use crate::query_dsl::positional_order_dsl::{IntoPositionalOrderExpr, PositionalOrderExpr};
8use crate::sql_types::{
9    Array, Bigint, Bool, DieselNumericOps, Inet, Integer, Jsonb, SqlType, Text,
10};
11use crate::{Column, QueryResult};
12
13#[doc(hidden)]
pub struct IsDistinctFrom<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    IsDistinctFrom<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "IsDistinctFrom", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for IsDistinctFrom<T, U> {
    #[inline]
    fn clone(&self) -> IsDistinctFrom<T, U> {
        IsDistinctFrom {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for IsDistinctFrom<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for IsDistinctFrom<T, U> {
            type QueryId =
                IsDistinctFrom<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for IsDistinctFrom<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for IsDistinctFrom<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for IsDistinctFrom<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for IsDistinctFrom<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsDistinctFrom<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> IsDistinctFrom<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        IsDistinctFrom { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    IsDistinctFrom<T, U> where
    IsDistinctFrom<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for IsDistinctFrom<T, U>
    where IsDistinctFrom<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for IsDistinctFrom<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType {
    type SqlType = Bool;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for IsDistinctFrom<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" IS DISTINCT FROM ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsDistinctFrom<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsDistinctFrom<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsDistinctFrom {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}__diesel_infix_operator!(IsDistinctFrom, " IS DISTINCT FROM ", ConstantNullability Bool, backend: Pg);
14#[doc(hidden)]
pub struct IsNotDistinctFrom<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    IsNotDistinctFrom<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "IsNotDistinctFrom", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for IsNotDistinctFrom<T, U> {
    #[inline]
    fn clone(&self) -> IsNotDistinctFrom<T, U> {
        IsNotDistinctFrom {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for IsNotDistinctFrom<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for IsNotDistinctFrom<T, U> {
            type QueryId =
                IsNotDistinctFrom<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for IsNotDistinctFrom<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for IsNotDistinctFrom<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for IsNotDistinctFrom<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for IsNotDistinctFrom<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsNotDistinctFrom<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> IsNotDistinctFrom<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        IsNotDistinctFrom { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    IsNotDistinctFrom<T, U> where
    IsNotDistinctFrom<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for
    IsNotDistinctFrom<T, U> where
    IsNotDistinctFrom<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for IsNotDistinctFrom<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType {
    type SqlType = Bool;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for IsNotDistinctFrom<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" IS NOT DISTINCT FROM ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsNotDistinctFrom<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsNotDistinctFrom<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsNotDistinctFrom {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}__diesel_infix_operator!(IsNotDistinctFrom, " IS NOT DISTINCT FROM ", ConstantNullability Bool, backend: Pg);
15#[doc(hidden)]
pub struct OverlapsWith<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    OverlapsWith<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "OverlapsWith",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for OverlapsWith<T, U> {
    #[inline]
    fn clone(&self) -> OverlapsWith<T, U> {
        OverlapsWith {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for OverlapsWith<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for OverlapsWith<T, U> {
            type QueryId =
                OverlapsWith<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for OverlapsWith<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for OverlapsWith<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for OverlapsWith<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for OverlapsWith<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            OverlapsWith<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> OverlapsWith<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        OverlapsWith { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    OverlapsWith<T, U> where
    OverlapsWith<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for OverlapsWith<T, U>
    where OverlapsWith<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for OverlapsWith<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for OverlapsWith<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" && ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    OverlapsWith<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        OverlapsWith<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        OverlapsWith {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(OverlapsWith, " && ", backend: Pg);
16#[doc(hidden)]
pub struct Contains<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    Contains<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "Contains",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for Contains<T, U> {
    #[inline]
    fn clone(&self) -> Contains<T, U> {
        Contains {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for Contains<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for Contains<T, U> {
            type QueryId =
                Contains<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for Contains<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for Contains<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for Contains<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for Contains<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            Contains<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> Contains<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self { Contains { left, right } }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for Contains<T, U>
    where Contains<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for Contains<T, U> where
    Contains<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for Contains<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for Contains<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" @> ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    Contains<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        Contains<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        Contains { left: self.left.map(alias), right: self.right.map(alias) }
    }
}infix_operator!(Contains, " @> ", backend: Pg);
17#[doc(hidden)]
pub struct IsContainedBy<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    IsContainedBy<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "IsContainedBy",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for IsContainedBy<T, U> {
    #[inline]
    fn clone(&self) -> IsContainedBy<T, U> {
        IsContainedBy {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for IsContainedBy<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for IsContainedBy<T, U> {
            type QueryId =
                IsContainedBy<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for IsContainedBy<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for IsContainedBy<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for IsContainedBy<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for IsContainedBy<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsContainedBy<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> IsContainedBy<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        IsContainedBy { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    IsContainedBy<T, U> where
    IsContainedBy<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for IsContainedBy<T, U>
    where IsContainedBy<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for IsContainedBy<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for IsContainedBy<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" <@ ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsContainedBy<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsContainedBy<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsContainedBy {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(IsContainedBy, " <@ ", backend: Pg);
18#[doc(hidden)]
pub struct ILike<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    ILike<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "ILike", "left",
            &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for ILike<T, U> {
    #[inline]
    fn clone(&self) -> ILike<T, U> {
        ILike {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for ILike<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for ILike<T, U> {
            type QueryId =
                ILike<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for ILike<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for ILike<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for ILike<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for ILike<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for ILike<T, U>
            where T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> ILike<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self { ILike { left, right } }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for ILike<T, U>
    where ILike<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for ILike<T, U> where
    ILike<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for ILike<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for ILike<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" ILIKE ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    ILike<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        ILike<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        ILike { left: self.left.map(alias), right: self.right.map(alias) }
    }
}infix_operator!(ILike, " ILIKE ", backend: Pg);
19#[doc(hidden)]
pub struct ExtendsRightTo<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    ExtendsRightTo<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "ExtendsRightTo", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for ExtendsRightTo<T, U> {
    #[inline]
    fn clone(&self) -> ExtendsRightTo<T, U> {
        ExtendsRightTo {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for ExtendsRightTo<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for ExtendsRightTo<T, U> {
            type QueryId =
                ExtendsRightTo<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for ExtendsRightTo<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for ExtendsRightTo<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for ExtendsRightTo<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for ExtendsRightTo<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            ExtendsRightTo<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> ExtendsRightTo<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        ExtendsRightTo { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    ExtendsRightTo<T, U> where
    ExtendsRightTo<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for ExtendsRightTo<T, U>
    where ExtendsRightTo<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for ExtendsRightTo<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for ExtendsRightTo<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" &< ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    ExtendsRightTo<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        ExtendsRightTo<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        ExtendsRightTo {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(ExtendsRightTo, " &< ", backend: Pg);
20#[doc(hidden)]
pub struct ExtendsLeftTo<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    ExtendsLeftTo<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "ExtendsLeftTo",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for ExtendsLeftTo<T, U> {
    #[inline]
    fn clone(&self) -> ExtendsLeftTo<T, U> {
        ExtendsLeftTo {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for ExtendsLeftTo<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for ExtendsLeftTo<T, U> {
            type QueryId =
                ExtendsLeftTo<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for ExtendsLeftTo<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for ExtendsLeftTo<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for ExtendsLeftTo<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for ExtendsLeftTo<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            ExtendsLeftTo<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> ExtendsLeftTo<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        ExtendsLeftTo { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    ExtendsLeftTo<T, U> where
    ExtendsLeftTo<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for ExtendsLeftTo<T, U>
    where ExtendsLeftTo<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for ExtendsLeftTo<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for ExtendsLeftTo<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" &> ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    ExtendsLeftTo<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        ExtendsLeftTo<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        ExtendsLeftTo {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(ExtendsLeftTo, " &> ", backend: Pg);
21#[doc(hidden)]
pub struct NotILike<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    NotILike<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "NotILike",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for NotILike<T, U> {
    #[inline]
    fn clone(&self) -> NotILike<T, U> {
        NotILike {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for NotILike<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for NotILike<T, U> {
            type QueryId =
                NotILike<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for NotILike<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for NotILike<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for NotILike<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for NotILike<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            NotILike<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> NotILike<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self { NotILike { left, right } }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for NotILike<T, U>
    where NotILike<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for NotILike<T, U> where
    NotILike<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for NotILike<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for NotILike<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" NOT ILIKE ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    NotILike<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        NotILike<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        NotILike { left: self.left.map(alias), right: self.right.map(alias) }
    }
}infix_operator!(NotILike, " NOT ILIKE ", backend: Pg);
22#[doc(hidden)]
pub struct SimilarTo<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    SimilarTo<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "SimilarTo",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for SimilarTo<T, U> {
    #[inline]
    fn clone(&self) -> SimilarTo<T, U> {
        SimilarTo {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for SimilarTo<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for SimilarTo<T, U> {
            type QueryId =
                SimilarTo<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for SimilarTo<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for SimilarTo<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for SimilarTo<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for SimilarTo<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            SimilarTo<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> SimilarTo<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self { SimilarTo { left, right } }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for SimilarTo<T, U>
    where SimilarTo<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for SimilarTo<T, U> where
    SimilarTo<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for SimilarTo<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for SimilarTo<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" SIMILAR TO ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    SimilarTo<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        SimilarTo<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        SimilarTo { left: self.left.map(alias), right: self.right.map(alias) }
    }
}infix_operator!(SimilarTo, " SIMILAR TO ", backend: Pg);
23#[doc(hidden)]
pub struct NotSimilarTo<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    NotSimilarTo<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "NotSimilarTo",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for NotSimilarTo<T, U> {
    #[inline]
    fn clone(&self) -> NotSimilarTo<T, U> {
        NotSimilarTo {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for NotSimilarTo<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for NotSimilarTo<T, U> {
            type QueryId =
                NotSimilarTo<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for NotSimilarTo<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for NotSimilarTo<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for NotSimilarTo<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for NotSimilarTo<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            NotSimilarTo<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> NotSimilarTo<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        NotSimilarTo { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    NotSimilarTo<T, U> where
    NotSimilarTo<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for NotSimilarTo<T, U>
    where NotSimilarTo<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for NotSimilarTo<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for NotSimilarTo<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" NOT SIMILAR TO ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    NotSimilarTo<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        NotSimilarTo<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        NotSimilarTo {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(NotSimilarTo, " NOT SIMILAR TO ", backend: Pg);
24#[doc(hidden)]
pub struct NullsFirst<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for NullsFirst<Expr> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "NullsFirst",
            "expr", &&self.expr)
    }
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for NullsFirst<Expr> {
    #[inline]
    fn clone(&self) -> NullsFirst<Expr> {
        NullsFirst { expr: ::core::clone::Clone::clone(&self.expr) }
    }
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for NullsFirst<Expr> { }
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<Expr: diesel::query_builder::QueryId>
            diesel::query_builder::QueryId for NullsFirst<Expr> {
            type QueryId =
                NullsFirst<<Expr as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };
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<Expr, __Rhs> ::std::ops::Add<__Rhs> for NullsFirst<Expr> 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<Expr, __Rhs> ::std::ops::Sub<__Rhs> for NullsFirst<Expr> 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<Expr, __Rhs> ::std::ops::Mul<__Rhs> for NullsFirst<Expr> 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<Expr, __Rhs> ::std::ops::Div<__Rhs> for NullsFirst<Expr> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<Expr, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            NullsFirst<Expr> where
            Expr: diesel::expression::ValidGrouping<__GroupByClause> {
            type IsAggregate =
                <Expr as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
        }
    };
impl<Expr> NullsFirst<Expr> {
    pub(crate) fn new(expr: Expr) -> Self { NullsFirst { expr } }
}
impl<Expr, QS> crate::expression::SelectableExpression<QS> for
    NullsFirst<Expr> where
    NullsFirst<Expr>: crate::expression::AppearsOnTable<QS>,
    Expr: crate::expression::SelectableExpression<QS> {}
impl<Expr, QS> crate::expression::AppearsOnTable<QS> for NullsFirst<Expr>
    where NullsFirst<Expr>: crate::expression::Expression,
    Expr: crate::expression::AppearsOnTable<QS> {}
impl<Expr> crate::expression::Expression for NullsFirst<Expr> where
    Expr: crate::expression::Expression {
    type SqlType = NotSelectable;
}
impl<Expr> crate::query_builder::QueryFragment<Pg> for NullsFirst<Expr> where
    Expr: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.expr.walk_ast(out.reborrow())?;
        out.push_sql(" NULLS FIRST");
        ;
        Ok(())
    }
}
impl<S, Expr> crate::internal::operators_macro::FieldAliasMapper<S> for
    NullsFirst<Expr> where S: crate::query_source::AliasSource,
    Expr: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        NullsFirst<<Expr as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        NullsFirst { expr: self.expr.map(alias) }
    }
}postfix_operator!(NullsFirst, " NULLS FIRST", NotSelectable, backend: Pg);
25#[doc(hidden)]
pub struct NullsLast<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for NullsLast<Expr> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "NullsLast",
            "expr", &&self.expr)
    }
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for NullsLast<Expr> {
    #[inline]
    fn clone(&self) -> NullsLast<Expr> {
        NullsLast { expr: ::core::clone::Clone::clone(&self.expr) }
    }
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for NullsLast<Expr> { }
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<Expr: diesel::query_builder::QueryId>
            diesel::query_builder::QueryId for NullsLast<Expr> {
            type QueryId =
                NullsLast<<Expr as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };
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<Expr, __Rhs> ::std::ops::Add<__Rhs> for NullsLast<Expr> 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<Expr, __Rhs> ::std::ops::Sub<__Rhs> for NullsLast<Expr> 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<Expr, __Rhs> ::std::ops::Mul<__Rhs> for NullsLast<Expr> 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<Expr, __Rhs> ::std::ops::Div<__Rhs> for NullsLast<Expr> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<Expr, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            NullsLast<Expr> where
            Expr: diesel::expression::ValidGrouping<__GroupByClause> {
            type IsAggregate =
                <Expr as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
        }
    };
impl<Expr> NullsLast<Expr> {
    pub(crate) fn new(expr: Expr) -> Self { NullsLast { expr } }
}
impl<Expr, QS> crate::expression::SelectableExpression<QS> for NullsLast<Expr>
    where NullsLast<Expr>: crate::expression::AppearsOnTable<QS>,
    Expr: crate::expression::SelectableExpression<QS> {}
impl<Expr, QS> crate::expression::AppearsOnTable<QS> for NullsLast<Expr> where
    NullsLast<Expr>: crate::expression::Expression,
    Expr: crate::expression::AppearsOnTable<QS> {}
impl<Expr> crate::expression::Expression for NullsLast<Expr> where
    Expr: crate::expression::Expression {
    type SqlType = NotSelectable;
}
impl<Expr> crate::query_builder::QueryFragment<Pg> for NullsLast<Expr> where
    Expr: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.expr.walk_ast(out.reborrow())?;
        out.push_sql(" NULLS LAST");
        ;
        Ok(())
    }
}
impl<S, Expr> crate::internal::operators_macro::FieldAliasMapper<S> for
    NullsLast<Expr> where S: crate::query_source::AliasSource,
    Expr: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        NullsLast<<Expr as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        NullsLast { expr: self.expr.map(alias) }
    }
}postfix_operator!(NullsLast, " NULLS LAST", NotSelectable, backend: Pg);
26#[doc(hidden)]
pub struct IsJson<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for IsJson<Expr> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "IsJson",
            "expr", &&self.expr)
    }
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for IsJson<Expr> {
    #[inline]
    fn clone(&self) -> IsJson<Expr> {
        IsJson { expr: ::core::clone::Clone::clone(&self.expr) }
    }
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for IsJson<Expr> { }
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<Expr: diesel::query_builder::QueryId>
            diesel::query_builder::QueryId for IsJson<Expr> {
            type QueryId =
                IsJson<<Expr as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };
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<Expr, __Rhs> ::std::ops::Add<__Rhs> for IsJson<Expr> 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<Expr, __Rhs> ::std::ops::Sub<__Rhs> for IsJson<Expr> 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<Expr, __Rhs> ::std::ops::Mul<__Rhs> for IsJson<Expr> 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<Expr, __Rhs> ::std::ops::Div<__Rhs> for IsJson<Expr> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<Expr, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsJson<Expr> where
            Expr: diesel::expression::ValidGrouping<__GroupByClause> {
            type IsAggregate =
                <Expr as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
        }
    };
impl<Expr> IsJson<Expr> {
    pub(crate) fn new(expr: Expr) -> Self { IsJson { expr } }
}
impl<Expr, QS> crate::expression::SelectableExpression<QS> for IsJson<Expr>
    where IsJson<Expr>: crate::expression::AppearsOnTable<QS>,
    Expr: crate::expression::SelectableExpression<QS> {}
impl<Expr, QS> crate::expression::AppearsOnTable<QS> for IsJson<Expr> where
    IsJson<Expr>: crate::expression::Expression,
    Expr: crate::expression::AppearsOnTable<QS> {}
impl<Expr> crate::expression::Expression for IsJson<Expr> where
    Expr: crate::expression::Expression,
    <Expr as
    crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsOneNullable<<Expr as
    crate::expression::Expression>::SqlType,
    Bool>: crate::sql_types::MaybeNullableType<Bool> {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<Expr
        as crate::expression::Expression>::SqlType, Bool>, Bool>;
}
impl<Expr> crate::query_builder::QueryFragment<Pg> for IsJson<Expr> where
    Expr: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.expr.walk_ast(out.reborrow())?;
        out.push_sql(" IS JSON");
        ;
        Ok(())
    }
}
impl<S, Expr> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsJson<Expr> where S: crate::query_source::AliasSource,
    Expr: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsJson<<Expr as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsJson { expr: self.expr.map(alias) }
    }
}postfix_operator!(IsJson, " IS JSON", ConditionalNullability Bool, backend: Pg);
27#[doc(hidden)]
pub struct IsNotJson<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for IsNotJson<Expr> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "IsNotJson",
            "expr", &&self.expr)
    }
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for IsNotJson<Expr> {
    #[inline]
    fn clone(&self) -> IsNotJson<Expr> {
        IsNotJson { expr: ::core::clone::Clone::clone(&self.expr) }
    }
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for IsNotJson<Expr> { }
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<Expr: diesel::query_builder::QueryId>
            diesel::query_builder::QueryId for IsNotJson<Expr> {
            type QueryId =
                IsNotJson<<Expr as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };
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<Expr, __Rhs> ::std::ops::Add<__Rhs> for IsNotJson<Expr> 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<Expr, __Rhs> ::std::ops::Sub<__Rhs> for IsNotJson<Expr> 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<Expr, __Rhs> ::std::ops::Mul<__Rhs> for IsNotJson<Expr> 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<Expr, __Rhs> ::std::ops::Div<__Rhs> for IsNotJson<Expr> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<Expr, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsNotJson<Expr> where
            Expr: diesel::expression::ValidGrouping<__GroupByClause> {
            type IsAggregate =
                <Expr as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
        }
    };
impl<Expr> IsNotJson<Expr> {
    pub(crate) fn new(expr: Expr) -> Self { IsNotJson { expr } }
}
impl<Expr, QS> crate::expression::SelectableExpression<QS> for IsNotJson<Expr>
    where IsNotJson<Expr>: crate::expression::AppearsOnTable<QS>,
    Expr: crate::expression::SelectableExpression<QS> {}
impl<Expr, QS> crate::expression::AppearsOnTable<QS> for IsNotJson<Expr> where
    IsNotJson<Expr>: crate::expression::Expression,
    Expr: crate::expression::AppearsOnTable<QS> {}
impl<Expr> crate::expression::Expression for IsNotJson<Expr> where
    Expr: crate::expression::Expression,
    <Expr as
    crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsOneNullable<<Expr as
    crate::expression::Expression>::SqlType,
    Bool>: crate::sql_types::MaybeNullableType<Bool> {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<Expr
        as crate::expression::Expression>::SqlType, Bool>, Bool>;
}
impl<Expr> crate::query_builder::QueryFragment<Pg> for IsNotJson<Expr> where
    Expr: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.expr.walk_ast(out.reborrow())?;
        out.push_sql(" IS NOT JSON");
        ;
        Ok(())
    }
}
impl<S, Expr> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsNotJson<Expr> where S: crate::query_source::AliasSource,
    Expr: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsNotJson<<Expr as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsNotJson { expr: self.expr.map(alias) }
    }
}postfix_operator!(IsNotJson, " IS NOT JSON", ConditionalNullability Bool, backend: Pg);
28#[doc(hidden)]
pub struct IsJsonObject<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for IsJsonObject<Expr> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "IsJsonObject",
            "expr", &&self.expr)
    }
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for IsJsonObject<Expr> {
    #[inline]
    fn clone(&self) -> IsJsonObject<Expr> {
        IsJsonObject { expr: ::core::clone::Clone::clone(&self.expr) }
    }
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for IsJsonObject<Expr> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<Expr: diesel::query_builder::QueryId>
            diesel::query_builder::QueryId for IsJsonObject<Expr> {
            type QueryId =
                IsJsonObject<<Expr as
                diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };
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<Expr, __Rhs> ::std::ops::Add<__Rhs> for IsJsonObject<Expr> 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<Expr, __Rhs> ::std::ops::Sub<__Rhs> for IsJsonObject<Expr> 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<Expr, __Rhs> ::std::ops::Mul<__Rhs> for IsJsonObject<Expr> 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<Expr, __Rhs> ::std::ops::Div<__Rhs> for IsJsonObject<Expr> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<Expr, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsJsonObject<Expr> where
            Expr: diesel::expression::ValidGrouping<__GroupByClause> {
            type IsAggregate =
                <Expr as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
        }
    };
impl<Expr> IsJsonObject<Expr> {
    pub(crate) fn new(expr: Expr) -> Self { IsJsonObject { expr } }
}
impl<Expr, QS> crate::expression::SelectableExpression<QS> for
    IsJsonObject<Expr> where
    IsJsonObject<Expr>: crate::expression::AppearsOnTable<QS>,
    Expr: crate::expression::SelectableExpression<QS> {}
impl<Expr, QS> crate::expression::AppearsOnTable<QS> for IsJsonObject<Expr>
    where IsJsonObject<Expr>: crate::expression::Expression,
    Expr: crate::expression::AppearsOnTable<QS> {}
impl<Expr> crate::expression::Expression for IsJsonObject<Expr> where
    Expr: crate::expression::Expression,
    <Expr as
    crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsOneNullable<<Expr as
    crate::expression::Expression>::SqlType,
    Bool>: crate::sql_types::MaybeNullableType<Bool> {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<Expr
        as crate::expression::Expression>::SqlType, Bool>, Bool>;
}
impl<Expr> crate::query_builder::QueryFragment<Pg> for IsJsonObject<Expr>
    where Expr: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.expr.walk_ast(out.reborrow())?;
        out.push_sql(" IS JSON OBJECT");
        ;
        Ok(())
    }
}
impl<S, Expr> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsJsonObject<Expr> where S: crate::query_source::AliasSource,
    Expr: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsJsonObject<<Expr as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsJsonObject { expr: self.expr.map(alias) }
    }
}postfix_operator!(IsJsonObject, " IS JSON OBJECT", ConditionalNullability Bool, backend: Pg);
29#[doc(hidden)]
pub struct IsNotJsonObject<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for IsNotJsonObject<Expr> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f,
            "IsNotJsonObject", "expr", &&self.expr)
    }
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for
    IsNotJsonObject<Expr> {
    #[inline]
    fn clone(&self) -> IsNotJsonObject<Expr> {
        IsNotJsonObject { expr: ::core::clone::Clone::clone(&self.expr) }
    }
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for
    IsNotJsonObject<Expr> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<Expr: diesel::query_builder::QueryId>
            diesel::query_builder::QueryId for IsNotJsonObject<Expr> {
            type QueryId =
                IsNotJsonObject<<Expr as
                diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };
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<Expr, __Rhs> ::std::ops::Add<__Rhs> for IsNotJsonObject<Expr>
            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<Expr, __Rhs> ::std::ops::Sub<__Rhs> for IsNotJsonObject<Expr>
            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<Expr, __Rhs> ::std::ops::Mul<__Rhs> for IsNotJsonObject<Expr>
            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<Expr, __Rhs> ::std::ops::Div<__Rhs> for IsNotJsonObject<Expr>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<Expr, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsNotJsonObject<Expr> where
            Expr: diesel::expression::ValidGrouping<__GroupByClause> {
            type IsAggregate =
                <Expr as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
        }
    };
impl<Expr> IsNotJsonObject<Expr> {
    pub(crate) fn new(expr: Expr) -> Self { IsNotJsonObject { expr } }
}
impl<Expr, QS> crate::expression::SelectableExpression<QS> for
    IsNotJsonObject<Expr> where
    IsNotJsonObject<Expr>: crate::expression::AppearsOnTable<QS>,
    Expr: crate::expression::SelectableExpression<QS> {}
impl<Expr, QS> crate::expression::AppearsOnTable<QS> for IsNotJsonObject<Expr>
    where IsNotJsonObject<Expr>: crate::expression::Expression,
    Expr: crate::expression::AppearsOnTable<QS> {}
impl<Expr> crate::expression::Expression for IsNotJsonObject<Expr> where
    Expr: crate::expression::Expression,
    <Expr as
    crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsOneNullable<<Expr as
    crate::expression::Expression>::SqlType,
    Bool>: crate::sql_types::MaybeNullableType<Bool> {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<Expr
        as crate::expression::Expression>::SqlType, Bool>, Bool>;
}
impl<Expr> crate::query_builder::QueryFragment<Pg> for IsNotJsonObject<Expr>
    where Expr: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.expr.walk_ast(out.reborrow())?;
        out.push_sql(" IS NOT JSON OBJECT");
        ;
        Ok(())
    }
}
impl<S, Expr> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsNotJsonObject<Expr> where S: crate::query_source::AliasSource,
    Expr: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsNotJsonObject<<Expr as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsNotJsonObject { expr: self.expr.map(alias) }
    }
}postfix_operator!(IsNotJsonObject, " IS NOT JSON OBJECT", ConditionalNullability Bool, backend: Pg);
30#[doc(hidden)]
pub struct IsJsonArray<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for IsJsonArray<Expr> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "IsJsonArray",
            "expr", &&self.expr)
    }
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for IsJsonArray<Expr> {
    #[inline]
    fn clone(&self) -> IsJsonArray<Expr> {
        IsJsonArray { expr: ::core::clone::Clone::clone(&self.expr) }
    }
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for IsJsonArray<Expr> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<Expr: diesel::query_builder::QueryId>
            diesel::query_builder::QueryId for IsJsonArray<Expr> {
            type QueryId =
                IsJsonArray<<Expr as
                diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };
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<Expr, __Rhs> ::std::ops::Add<__Rhs> for IsJsonArray<Expr> 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<Expr, __Rhs> ::std::ops::Sub<__Rhs> for IsJsonArray<Expr> 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<Expr, __Rhs> ::std::ops::Mul<__Rhs> for IsJsonArray<Expr> 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<Expr, __Rhs> ::std::ops::Div<__Rhs> for IsJsonArray<Expr> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<Expr, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsJsonArray<Expr> where
            Expr: diesel::expression::ValidGrouping<__GroupByClause> {
            type IsAggregate =
                <Expr as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
        }
    };
impl<Expr> IsJsonArray<Expr> {
    pub(crate) fn new(expr: Expr) -> Self { IsJsonArray { expr } }
}
impl<Expr, QS> crate::expression::SelectableExpression<QS> for
    IsJsonArray<Expr> where
    IsJsonArray<Expr>: crate::expression::AppearsOnTable<QS>,
    Expr: crate::expression::SelectableExpression<QS> {}
impl<Expr, QS> crate::expression::AppearsOnTable<QS> for IsJsonArray<Expr>
    where IsJsonArray<Expr>: crate::expression::Expression,
    Expr: crate::expression::AppearsOnTable<QS> {}
impl<Expr> crate::expression::Expression for IsJsonArray<Expr> where
    Expr: crate::expression::Expression,
    <Expr as
    crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsOneNullable<<Expr as
    crate::expression::Expression>::SqlType,
    Bool>: crate::sql_types::MaybeNullableType<Bool> {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<Expr
        as crate::expression::Expression>::SqlType, Bool>, Bool>;
}
impl<Expr> crate::query_builder::QueryFragment<Pg> for IsJsonArray<Expr> where
    Expr: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.expr.walk_ast(out.reborrow())?;
        out.push_sql(" IS JSON ARRAY");
        ;
        Ok(())
    }
}
impl<S, Expr> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsJsonArray<Expr> where S: crate::query_source::AliasSource,
    Expr: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsJsonArray<<Expr as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsJsonArray { expr: self.expr.map(alias) }
    }
}postfix_operator!(IsJsonArray, " IS JSON ARRAY", ConditionalNullability Bool, backend: Pg);
31#[doc(hidden)]
pub struct IsNotJsonArray<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for IsNotJsonArray<Expr> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f,
            "IsNotJsonArray", "expr", &&self.expr)
    }
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for IsNotJsonArray<Expr>
    {
    #[inline]
    fn clone(&self) -> IsNotJsonArray<Expr> {
        IsNotJsonArray { expr: ::core::clone::Clone::clone(&self.expr) }
    }
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for IsNotJsonArray<Expr>
    {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<Expr: diesel::query_builder::QueryId>
            diesel::query_builder::QueryId for IsNotJsonArray<Expr> {
            type QueryId =
                IsNotJsonArray<<Expr as
                diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };
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<Expr, __Rhs> ::std::ops::Add<__Rhs> for IsNotJsonArray<Expr>
            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<Expr, __Rhs> ::std::ops::Sub<__Rhs> for IsNotJsonArray<Expr>
            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<Expr, __Rhs> ::std::ops::Mul<__Rhs> for IsNotJsonArray<Expr>
            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<Expr, __Rhs> ::std::ops::Div<__Rhs> for IsNotJsonArray<Expr>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<Expr, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsNotJsonArray<Expr> where
            Expr: diesel::expression::ValidGrouping<__GroupByClause> {
            type IsAggregate =
                <Expr as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
        }
    };
impl<Expr> IsNotJsonArray<Expr> {
    pub(crate) fn new(expr: Expr) -> Self { IsNotJsonArray { expr } }
}
impl<Expr, QS> crate::expression::SelectableExpression<QS> for
    IsNotJsonArray<Expr> where
    IsNotJsonArray<Expr>: crate::expression::AppearsOnTable<QS>,
    Expr: crate::expression::SelectableExpression<QS> {}
impl<Expr, QS> crate::expression::AppearsOnTable<QS> for IsNotJsonArray<Expr>
    where IsNotJsonArray<Expr>: crate::expression::Expression,
    Expr: crate::expression::AppearsOnTable<QS> {}
impl<Expr> crate::expression::Expression for IsNotJsonArray<Expr> where
    Expr: crate::expression::Expression,
    <Expr as
    crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsOneNullable<<Expr as
    crate::expression::Expression>::SqlType,
    Bool>: crate::sql_types::MaybeNullableType<Bool> {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<Expr
        as crate::expression::Expression>::SqlType, Bool>, Bool>;
}
impl<Expr> crate::query_builder::QueryFragment<Pg> for IsNotJsonArray<Expr>
    where Expr: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.expr.walk_ast(out.reborrow())?;
        out.push_sql(" IS NOT JSON ARRAY");
        ;
        Ok(())
    }
}
impl<S, Expr> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsNotJsonArray<Expr> where S: crate::query_source::AliasSource,
    Expr: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsNotJsonArray<<Expr as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsNotJsonArray { expr: self.expr.map(alias) }
    }
}postfix_operator!(IsNotJsonArray, " IS NOT JSON ARRAY", ConditionalNullability Bool, backend: Pg);
32#[doc(hidden)]
pub struct IsJsonScalar<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for IsJsonScalar<Expr> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "IsJsonScalar",
            "expr", &&self.expr)
    }
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for IsJsonScalar<Expr> {
    #[inline]
    fn clone(&self) -> IsJsonScalar<Expr> {
        IsJsonScalar { expr: ::core::clone::Clone::clone(&self.expr) }
    }
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for IsJsonScalar<Expr> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<Expr: diesel::query_builder::QueryId>
            diesel::query_builder::QueryId for IsJsonScalar<Expr> {
            type QueryId =
                IsJsonScalar<<Expr as
                diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };
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<Expr, __Rhs> ::std::ops::Add<__Rhs> for IsJsonScalar<Expr> 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<Expr, __Rhs> ::std::ops::Sub<__Rhs> for IsJsonScalar<Expr> 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<Expr, __Rhs> ::std::ops::Mul<__Rhs> for IsJsonScalar<Expr> 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<Expr, __Rhs> ::std::ops::Div<__Rhs> for IsJsonScalar<Expr> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<Expr, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsJsonScalar<Expr> where
            Expr: diesel::expression::ValidGrouping<__GroupByClause> {
            type IsAggregate =
                <Expr as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
        }
    };
impl<Expr> IsJsonScalar<Expr> {
    pub(crate) fn new(expr: Expr) -> Self { IsJsonScalar { expr } }
}
impl<Expr, QS> crate::expression::SelectableExpression<QS> for
    IsJsonScalar<Expr> where
    IsJsonScalar<Expr>: crate::expression::AppearsOnTable<QS>,
    Expr: crate::expression::SelectableExpression<QS> {}
impl<Expr, QS> crate::expression::AppearsOnTable<QS> for IsJsonScalar<Expr>
    where IsJsonScalar<Expr>: crate::expression::Expression,
    Expr: crate::expression::AppearsOnTable<QS> {}
impl<Expr> crate::expression::Expression for IsJsonScalar<Expr> where
    Expr: crate::expression::Expression,
    <Expr as
    crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsOneNullable<<Expr as
    crate::expression::Expression>::SqlType,
    Bool>: crate::sql_types::MaybeNullableType<Bool> {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<Expr
        as crate::expression::Expression>::SqlType, Bool>, Bool>;
}
impl<Expr> crate::query_builder::QueryFragment<Pg> for IsJsonScalar<Expr>
    where Expr: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.expr.walk_ast(out.reborrow())?;
        out.push_sql(" IS JSON SCALAR");
        ;
        Ok(())
    }
}
impl<S, Expr> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsJsonScalar<Expr> where S: crate::query_source::AliasSource,
    Expr: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsJsonScalar<<Expr as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsJsonScalar { expr: self.expr.map(alias) }
    }
}postfix_operator!(IsJsonScalar, " IS JSON SCALAR", ConditionalNullability Bool, backend: Pg);
33#[doc(hidden)]
pub struct IsNotJsonScalar<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for IsNotJsonScalar<Expr> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f,
            "IsNotJsonScalar", "expr", &&self.expr)
    }
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for
    IsNotJsonScalar<Expr> {
    #[inline]
    fn clone(&self) -> IsNotJsonScalar<Expr> {
        IsNotJsonScalar { expr: ::core::clone::Clone::clone(&self.expr) }
    }
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for
    IsNotJsonScalar<Expr> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<Expr: diesel::query_builder::QueryId>
            diesel::query_builder::QueryId for IsNotJsonScalar<Expr> {
            type QueryId =
                IsNotJsonScalar<<Expr as
                diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };
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<Expr, __Rhs> ::std::ops::Add<__Rhs> for IsNotJsonScalar<Expr>
            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<Expr, __Rhs> ::std::ops::Sub<__Rhs> for IsNotJsonScalar<Expr>
            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<Expr, __Rhs> ::std::ops::Mul<__Rhs> for IsNotJsonScalar<Expr>
            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<Expr, __Rhs> ::std::ops::Div<__Rhs> for IsNotJsonScalar<Expr>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<Expr, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsNotJsonScalar<Expr> where
            Expr: diesel::expression::ValidGrouping<__GroupByClause> {
            type IsAggregate =
                <Expr as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate;
        }
    };
impl<Expr> IsNotJsonScalar<Expr> {
    pub(crate) fn new(expr: Expr) -> Self { IsNotJsonScalar { expr } }
}
impl<Expr, QS> crate::expression::SelectableExpression<QS> for
    IsNotJsonScalar<Expr> where
    IsNotJsonScalar<Expr>: crate::expression::AppearsOnTable<QS>,
    Expr: crate::expression::SelectableExpression<QS> {}
impl<Expr, QS> crate::expression::AppearsOnTable<QS> for IsNotJsonScalar<Expr>
    where IsNotJsonScalar<Expr>: crate::expression::Expression,
    Expr: crate::expression::AppearsOnTable<QS> {}
impl<Expr> crate::expression::Expression for IsNotJsonScalar<Expr> where
    Expr: crate::expression::Expression,
    <Expr as
    crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsOneNullable<<Expr as
    crate::expression::Expression>::SqlType,
    Bool>: crate::sql_types::MaybeNullableType<Bool> {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<Expr
        as crate::expression::Expression>::SqlType, Bool>, Bool>;
}
impl<Expr> crate::query_builder::QueryFragment<Pg> for IsNotJsonScalar<Expr>
    where Expr: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.expr.walk_ast(out.reborrow())?;
        out.push_sql(" IS NOT JSON SCALAR");
        ;
        Ok(())
    }
}
impl<S, Expr> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsNotJsonScalar<Expr> where S: crate::query_source::AliasSource,
    Expr: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsNotJsonScalar<<Expr as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsNotJsonScalar { expr: self.expr.map(alias) }
    }
}postfix_operator!(IsNotJsonScalar, " IS NOT JSON SCALAR", ConditionalNullability Bool, backend: Pg);
34#[doc(hidden)]
pub struct ContainsNet<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    ContainsNet<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "ContainsNet",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for ContainsNet<T, U> {
    #[inline]
    fn clone(&self) -> ContainsNet<T, U> {
        ContainsNet {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for ContainsNet<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for ContainsNet<T, U> {
            type QueryId =
                ContainsNet<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for ContainsNet<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for ContainsNet<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for ContainsNet<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for ContainsNet<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            ContainsNet<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> ContainsNet<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        ContainsNet { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    ContainsNet<T, U> where
    ContainsNet<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for ContainsNet<T, U>
    where ContainsNet<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for ContainsNet<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for ContainsNet<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" >> ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    ContainsNet<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        ContainsNet<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        ContainsNet {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(ContainsNet, " >> ", backend: Pg);
35#[doc(hidden)]
pub struct ContainsNetLoose<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    ContainsNetLoose<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "ContainsNetLoose", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for ContainsNetLoose<T, U> {
    #[inline]
    fn clone(&self) -> ContainsNetLoose<T, U> {
        ContainsNetLoose {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for ContainsNetLoose<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for ContainsNetLoose<T, U> {
            type QueryId =
                ContainsNetLoose<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for ContainsNetLoose<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for ContainsNetLoose<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for ContainsNetLoose<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for ContainsNetLoose<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            ContainsNetLoose<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> ContainsNetLoose<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        ContainsNetLoose { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    ContainsNetLoose<T, U> where
    ContainsNetLoose<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for
    ContainsNetLoose<T, U> where
    ContainsNetLoose<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for ContainsNetLoose<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for ContainsNetLoose<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" >>= ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    ContainsNetLoose<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        ContainsNetLoose<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        ContainsNetLoose {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(ContainsNetLoose, " >>= ", backend: Pg);
36#[doc(hidden)]
pub struct IsContainedByNet<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    IsContainedByNet<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "IsContainedByNet", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for IsContainedByNet<T, U> {
    #[inline]
    fn clone(&self) -> IsContainedByNet<T, U> {
        IsContainedByNet {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for IsContainedByNet<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for IsContainedByNet<T, U> {
            type QueryId =
                IsContainedByNet<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for IsContainedByNet<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for IsContainedByNet<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for IsContainedByNet<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for IsContainedByNet<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsContainedByNet<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> IsContainedByNet<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        IsContainedByNet { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    IsContainedByNet<T, U> where
    IsContainedByNet<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for
    IsContainedByNet<T, U> where
    IsContainedByNet<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for IsContainedByNet<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for IsContainedByNet<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" << ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsContainedByNet<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsContainedByNet<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsContainedByNet {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(IsContainedByNet, " << ", backend: Pg);
37#[doc(hidden)]
pub struct IsContainedByNetLoose<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    IsContainedByNetLoose<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "IsContainedByNetLoose", "left", &self.left, "right",
            &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for IsContainedByNetLoose<T, U> {
    #[inline]
    fn clone(&self) -> IsContainedByNetLoose<T, U> {
        IsContainedByNetLoose {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for IsContainedByNetLoose<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for IsContainedByNetLoose<T, U> {
            type QueryId =
                IsContainedByNetLoose<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for
            IsContainedByNetLoose<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for
            IsContainedByNetLoose<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for
            IsContainedByNetLoose<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for
            IsContainedByNetLoose<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IsContainedByNetLoose<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> IsContainedByNetLoose<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        IsContainedByNetLoose { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    IsContainedByNetLoose<T, U> where
    IsContainedByNetLoose<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for
    IsContainedByNetLoose<T, U> where
    IsContainedByNetLoose<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for IsContainedByNetLoose<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for
    IsContainedByNetLoose<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" <<= ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    IsContainedByNetLoose<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IsContainedByNetLoose<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IsContainedByNetLoose {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(IsContainedByNetLoose, " <<= ", backend: Pg);
38#[doc(hidden)]
pub struct AndNet<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    AndNet<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "AndNet",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for AndNet<T, U> {
    #[inline]
    fn clone(&self) -> AndNet<T, U> {
        AndNet {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for AndNet<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for AndNet<T, U> {
            type QueryId =
                AndNet<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for AndNet<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for AndNet<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for AndNet<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for AndNet<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            AndNet<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> AndNet<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self { AndNet { left, right } }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for AndNet<T, U>
    where AndNet<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for AndNet<T, U> where
    AndNet<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for AndNet<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<Inet>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>, Inet>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for AndNet<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" & ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    AndNet<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        AndNet<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        AndNet { left: self.left.map(alias), right: self.right.map(alias) }
    }
}infix_operator!(AndNet, " & ", Inet, backend: Pg);
39#[doc(hidden)]
pub struct OrNet<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    OrNet<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "OrNet", "left",
            &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for OrNet<T, U> {
    #[inline]
    fn clone(&self) -> OrNet<T, U> {
        OrNet {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for OrNet<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for OrNet<T, U> {
            type QueryId =
                OrNet<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for OrNet<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for OrNet<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for OrNet<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for OrNet<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for OrNet<T, U>
            where T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> OrNet<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self { OrNet { left, right } }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for OrNet<T, U>
    where OrNet<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for OrNet<T, U> where
    OrNet<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for OrNet<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<Inet>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>, Inet>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for OrNet<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" | ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    OrNet<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        OrNet<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        OrNet { left: self.left.map(alias), right: self.right.map(alias) }
    }
}infix_operator!(OrNet, " | ", Inet, backend: Pg);
40#[doc(hidden)]
pub struct DifferenceNet<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    DifferenceNet<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "DifferenceNet",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for DifferenceNet<T, U> {
    #[inline]
    fn clone(&self) -> DifferenceNet<T, U> {
        DifferenceNet {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for DifferenceNet<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for DifferenceNet<T, U> {
            type QueryId =
                DifferenceNet<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for DifferenceNet<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for DifferenceNet<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for DifferenceNet<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for DifferenceNet<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            DifferenceNet<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> DifferenceNet<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        DifferenceNet { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    DifferenceNet<T, U> where
    DifferenceNet<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for DifferenceNet<T, U>
    where DifferenceNet<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for DifferenceNet<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<Bigint>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>, Bigint>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for DifferenceNet<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" - ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    DifferenceNet<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        DifferenceNet<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        DifferenceNet {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(DifferenceNet, " - ", Bigint, backend: Pg);
41#[doc(hidden)]
pub struct HasKeyJsonb<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    HasKeyJsonb<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "HasKeyJsonb",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for HasKeyJsonb<T, U> {
    #[inline]
    fn clone(&self) -> HasKeyJsonb<T, U> {
        HasKeyJsonb {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for HasKeyJsonb<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for HasKeyJsonb<T, U> {
            type QueryId =
                HasKeyJsonb<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for HasKeyJsonb<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for HasKeyJsonb<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for HasKeyJsonb<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for HasKeyJsonb<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            HasKeyJsonb<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> HasKeyJsonb<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        HasKeyJsonb { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    HasKeyJsonb<T, U> where
    HasKeyJsonb<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for HasKeyJsonb<T, U>
    where HasKeyJsonb<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for HasKeyJsonb<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for HasKeyJsonb<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" ? ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    HasKeyJsonb<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        HasKeyJsonb<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        HasKeyJsonb {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(HasKeyJsonb, " ? ", backend: Pg);
42#[doc(hidden)]
pub struct HasAnyKeyJsonb<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    HasAnyKeyJsonb<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "HasAnyKeyJsonb", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for HasAnyKeyJsonb<T, U> {
    #[inline]
    fn clone(&self) -> HasAnyKeyJsonb<T, U> {
        HasAnyKeyJsonb {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for HasAnyKeyJsonb<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for HasAnyKeyJsonb<T, U> {
            type QueryId =
                HasAnyKeyJsonb<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for HasAnyKeyJsonb<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for HasAnyKeyJsonb<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for HasAnyKeyJsonb<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for HasAnyKeyJsonb<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            HasAnyKeyJsonb<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> HasAnyKeyJsonb<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        HasAnyKeyJsonb { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    HasAnyKeyJsonb<T, U> where
    HasAnyKeyJsonb<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for HasAnyKeyJsonb<T, U>
    where HasAnyKeyJsonb<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for HasAnyKeyJsonb<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for HasAnyKeyJsonb<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" ?| ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    HasAnyKeyJsonb<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        HasAnyKeyJsonb<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        HasAnyKeyJsonb {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(HasAnyKeyJsonb, " ?| ", backend: Pg);
43#[doc(hidden)]
pub struct HasAllKeysJsonb<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    HasAllKeysJsonb<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "HasAllKeysJsonb", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for HasAllKeysJsonb<T, U> {
    #[inline]
    fn clone(&self) -> HasAllKeysJsonb<T, U> {
        HasAllKeysJsonb {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for HasAllKeysJsonb<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for HasAllKeysJsonb<T, U> {
            type QueryId =
                HasAllKeysJsonb<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for HasAllKeysJsonb<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for HasAllKeysJsonb<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for HasAllKeysJsonb<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for HasAllKeysJsonb<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            HasAllKeysJsonb<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> HasAllKeysJsonb<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        HasAllKeysJsonb { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    HasAllKeysJsonb<T, U> where
    HasAllKeysJsonb<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for HasAllKeysJsonb<T, U>
    where HasAllKeysJsonb<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for HasAllKeysJsonb<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for HasAllKeysJsonb<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" ?& ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    HasAllKeysJsonb<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        HasAllKeysJsonb<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        HasAllKeysJsonb {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(HasAllKeysJsonb, " ?& ", backend: Pg);
44#[doc(hidden)]
pub struct RangeAdjacent<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    RangeAdjacent<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "RangeAdjacent",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for RangeAdjacent<T, U> {
    #[inline]
    fn clone(&self) -> RangeAdjacent<T, U> {
        RangeAdjacent {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for RangeAdjacent<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for RangeAdjacent<T, U> {
            type QueryId =
                RangeAdjacent<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for RangeAdjacent<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for RangeAdjacent<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for RangeAdjacent<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for RangeAdjacent<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            RangeAdjacent<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> RangeAdjacent<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        RangeAdjacent { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    RangeAdjacent<T, U> where
    RangeAdjacent<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for RangeAdjacent<T, U>
    where RangeAdjacent<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for RangeAdjacent<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<crate::sql_types::Bool>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>,
        crate::sql_types::Bool>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for RangeAdjacent<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" -|- ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    RangeAdjacent<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        RangeAdjacent<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        RangeAdjacent {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(RangeAdjacent, " -|- ", backend: Pg);
45#[doc(hidden)]
pub struct RemoveFromJsonb<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    RemoveFromJsonb<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "RemoveFromJsonb", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for RemoveFromJsonb<T, U> {
    #[inline]
    fn clone(&self) -> RemoveFromJsonb<T, U> {
        RemoveFromJsonb {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for RemoveFromJsonb<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for RemoveFromJsonb<T, U> {
            type QueryId =
                RemoveFromJsonb<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for RemoveFromJsonb<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for RemoveFromJsonb<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for RemoveFromJsonb<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for RemoveFromJsonb<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            RemoveFromJsonb<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> RemoveFromJsonb<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        RemoveFromJsonb { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    RemoveFromJsonb<T, U> where
    RemoveFromJsonb<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for RemoveFromJsonb<T, U>
    where RemoveFromJsonb<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for RemoveFromJsonb<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<Jsonb>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>, Jsonb>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for RemoveFromJsonb<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" - ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    RemoveFromJsonb<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        RemoveFromJsonb<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        RemoveFromJsonb {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(RemoveFromJsonb, " - ", Jsonb, backend: Pg);
46#[doc(hidden)]
pub struct RetrieveAsObjectJson<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    RetrieveAsObjectJson<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "RetrieveAsObjectJson", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for RetrieveAsObjectJson<T, U> {
    #[inline]
    fn clone(&self) -> RetrieveAsObjectJson<T, U> {
        RetrieveAsObjectJson {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for RetrieveAsObjectJson<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for RetrieveAsObjectJson<T, U> {
            type QueryId =
                RetrieveAsObjectJson<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for
            RetrieveAsObjectJson<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for
            RetrieveAsObjectJson<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for
            RetrieveAsObjectJson<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for
            RetrieveAsObjectJson<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            RetrieveAsObjectJson<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> RetrieveAsObjectJson<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        RetrieveAsObjectJson { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    RetrieveAsObjectJson<T, U> where
    RetrieveAsObjectJson<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for
    RetrieveAsObjectJson<T, U> where
    RetrieveAsObjectJson<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for RetrieveAsObjectJson<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType {
    type SqlType = <T as crate::expression::Expression>::SqlType;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for
    RetrieveAsObjectJson<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" -> ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    RetrieveAsObjectJson<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        RetrieveAsObjectJson<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        RetrieveAsObjectJson {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}__diesel_infix_operator!(
47    RetrieveAsObjectJson,
48    " -> ",
49    __diesel_internal_SameResultAsInput,
50    backend: Pg
51);
52#[doc(hidden)]
pub struct RetrieveAsTextJson<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    RetrieveAsTextJson<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "RetrieveAsTextJson", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for RetrieveAsTextJson<T, U> {
    #[inline]
    fn clone(&self) -> RetrieveAsTextJson<T, U> {
        RetrieveAsTextJson {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for RetrieveAsTextJson<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for RetrieveAsTextJson<T, U> {
            type QueryId =
                RetrieveAsTextJson<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for RetrieveAsTextJson<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for RetrieveAsTextJson<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for RetrieveAsTextJson<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for RetrieveAsTextJson<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            RetrieveAsTextJson<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> RetrieveAsTextJson<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        RetrieveAsTextJson { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    RetrieveAsTextJson<T, U> where
    RetrieveAsTextJson<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for
    RetrieveAsTextJson<T, U> where
    RetrieveAsTextJson<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for RetrieveAsTextJson<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<Text>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>, Text>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for
    RetrieveAsTextJson<T, U> where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" ->> ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    RetrieveAsTextJson<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        RetrieveAsTextJson<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        RetrieveAsTextJson {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(RetrieveAsTextJson, " ->> ", Text, backend: Pg);
53#[doc(hidden)]
pub struct RetrieveByPathAsObjectJson<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    RetrieveByPathAsObjectJson<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "RetrieveByPathAsObjectJson", "left", &self.left, "right",
            &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for RetrieveByPathAsObjectJson<T, U> {
    #[inline]
    fn clone(&self) -> RetrieveByPathAsObjectJson<T, U> {
        RetrieveByPathAsObjectJson {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for RetrieveByPathAsObjectJson<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for RetrieveByPathAsObjectJson<T, U> {
            type QueryId =
                RetrieveByPathAsObjectJson<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for
            RetrieveByPathAsObjectJson<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for
            RetrieveByPathAsObjectJson<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for
            RetrieveByPathAsObjectJson<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for
            RetrieveByPathAsObjectJson<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            RetrieveByPathAsObjectJson<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> RetrieveByPathAsObjectJson<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        RetrieveByPathAsObjectJson { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    RetrieveByPathAsObjectJson<T, U> where
    RetrieveByPathAsObjectJson<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for
    RetrieveByPathAsObjectJson<T, U> where
    RetrieveByPathAsObjectJson<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for RetrieveByPathAsObjectJson<T, U>
    where T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType {
    type SqlType = <T as crate::expression::Expression>::SqlType;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for
    RetrieveByPathAsObjectJson<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" #> ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    RetrieveByPathAsObjectJson<T, U> where
    S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        RetrieveByPathAsObjectJson<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        RetrieveByPathAsObjectJson {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}__diesel_infix_operator!(
54    RetrieveByPathAsObjectJson,
55    " #> ",
56    __diesel_internal_SameResultAsInput,
57    backend: Pg
58);
59#[doc(hidden)]
pub struct RetrieveByPathAsTextJson<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    RetrieveByPathAsTextJson<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "RetrieveByPathAsTextJson", "left", &self.left, "right",
            &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for RetrieveByPathAsTextJson<T, U> {
    #[inline]
    fn clone(&self) -> RetrieveByPathAsTextJson<T, U> {
        RetrieveByPathAsTextJson {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for RetrieveByPathAsTextJson<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for RetrieveByPathAsTextJson<T, U> {
            type QueryId =
                RetrieveByPathAsTextJson<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for
            RetrieveByPathAsTextJson<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for
            RetrieveByPathAsTextJson<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for
            RetrieveByPathAsTextJson<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for
            RetrieveByPathAsTextJson<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            RetrieveByPathAsTextJson<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> RetrieveByPathAsTextJson<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        RetrieveByPathAsTextJson { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    RetrieveByPathAsTextJson<T, U> where
    RetrieveByPathAsTextJson<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for
    RetrieveByPathAsTextJson<T, U> where
    RetrieveByPathAsTextJson<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for RetrieveByPathAsTextJson<T, U>
    where T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<Text>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>, Text>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for
    RetrieveByPathAsTextJson<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" #>> ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    RetrieveByPathAsTextJson<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        RetrieveByPathAsTextJson<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        RetrieveByPathAsTextJson {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(RetrieveByPathAsTextJson, " #>> ", Text, backend: Pg);
60#[doc(hidden)]
pub struct RemoveByPathFromJsonb<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    RemoveByPathFromJsonb<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "RemoveByPathFromJsonb", "left", &self.left, "right",
            &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for RemoveByPathFromJsonb<T, U> {
    #[inline]
    fn clone(&self) -> RemoveByPathFromJsonb<T, U> {
        RemoveByPathFromJsonb {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for RemoveByPathFromJsonb<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for RemoveByPathFromJsonb<T, U> {
            type QueryId =
                RemoveByPathFromJsonb<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for
            RemoveByPathFromJsonb<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for
            RemoveByPathFromJsonb<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for
            RemoveByPathFromJsonb<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for
            RemoveByPathFromJsonb<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            RemoveByPathFromJsonb<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> RemoveByPathFromJsonb<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        RemoveByPathFromJsonb { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    RemoveByPathFromJsonb<T, U> where
    RemoveByPathFromJsonb<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for
    RemoveByPathFromJsonb<T, U> where
    RemoveByPathFromJsonb<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for RemoveByPathFromJsonb<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    crate::sql_types::is_nullable::IsSqlTypeNullable<<T as
    crate::expression::Expression>::SqlType>: crate::sql_types::OneIsNullable<crate::sql_types::is_nullable::IsSqlTypeNullable<<U
    as crate::expression::Expression>::SqlType>>,
    crate::sql_types::is_nullable::IsOneNullable<<T as
    crate::expression::Expression>::SqlType,
    <U as
    crate::expression::Expression>::SqlType>: crate::sql_types::MaybeNullableType<Jsonb>
    {
    type SqlType =
        crate::sql_types::is_nullable::MaybeNullable<crate::sql_types::is_nullable::IsOneNullable<<T
        as crate::expression::Expression>::SqlType,
        <U as crate::expression::Expression>::SqlType>, Jsonb>;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for
    RemoveByPathFromJsonb<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" #-");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    RemoveByPathFromJsonb<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        RemoveByPathFromJsonb<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        RemoveByPathFromJsonb {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}infix_operator!(RemoveByPathFromJsonb, " #-", Jsonb, backend: Pg);
61
62#[doc(hidden)]
pub struct UnionsRange<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    UnionsRange<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "UnionsRange",
            "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for UnionsRange<T, U> {
    #[inline]
    fn clone(&self) -> UnionsRange<T, U> {
        UnionsRange {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for UnionsRange<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for UnionsRange<T, U> {
            type QueryId =
                UnionsRange<<T as diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for UnionsRange<T, U> 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, U, __Rhs> ::std::ops::Sub<__Rhs> for UnionsRange<T, U> 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, U, __Rhs> ::std::ops::Mul<__Rhs> for UnionsRange<T, U> 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, U, __Rhs> ::std::ops::Div<__Rhs> for UnionsRange<T, U> 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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            UnionsRange<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> UnionsRange<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        UnionsRange { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    UnionsRange<T, U> where
    UnionsRange<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for UnionsRange<T, U>
    where UnionsRange<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for UnionsRange<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType {
    type SqlType = <T as crate::expression::Expression>::SqlType;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for UnionsRange<T, U> where
    T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" + ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    UnionsRange<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        UnionsRange<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        UnionsRange {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}__diesel_infix_operator!(
63    UnionsRange,
64    " + ",
65    __diesel_internal_SameResultAsInput,
66    backend: Pg
67);
68
69#[doc(hidden)]
pub struct DifferenceRange<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    DifferenceRange<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "DifferenceRange", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for DifferenceRange<T, U> {
    #[inline]
    fn clone(&self) -> DifferenceRange<T, U> {
        DifferenceRange {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for DifferenceRange<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for DifferenceRange<T, U> {
            type QueryId =
                DifferenceRange<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for DifferenceRange<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for DifferenceRange<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for DifferenceRange<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for DifferenceRange<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            DifferenceRange<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> DifferenceRange<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        DifferenceRange { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    DifferenceRange<T, U> where
    DifferenceRange<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for DifferenceRange<T, U>
    where DifferenceRange<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for DifferenceRange<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType {
    type SqlType = <T as crate::expression::Expression>::SqlType;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for DifferenceRange<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" - ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    DifferenceRange<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        DifferenceRange<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        DifferenceRange {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}__diesel_infix_operator!(
70    DifferenceRange,
71    " - ",
72    __diesel_internal_SameResultAsInput,
73    backend: Pg
74);
75
76#[doc(hidden)]
pub struct IntersectionRange<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
    IntersectionRange<T, U> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "IntersectionRange", "left", &self.left, "right", &&self.right)
    }
}
#[automatically_derived]
impl<T: ::core::clone::Clone, U: ::core::clone::Clone> ::core::clone::Clone
    for IntersectionRange<T, U> {
    #[inline]
    fn clone(&self) -> IntersectionRange<T, U> {
        IntersectionRange {
            left: ::core::clone::Clone::clone(&self.left),
            right: ::core::clone::Clone::clone(&self.right),
        }
    }
}
#[automatically_derived]
impl<T: ::core::marker::Copy, U: ::core::marker::Copy> ::core::marker::Copy
    for IntersectionRange<T, U> {
}
const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<T: diesel::query_builder::QueryId,
            U: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for IntersectionRange<T, U> {
            type QueryId =
                IntersectionRange<<T as
                diesel::query_builder::QueryId>::QueryId,
                <U as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <U as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <U as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };
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, U, __Rhs> ::std::ops::Add<__Rhs> for IntersectionRange<T, U>
            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, U, __Rhs> ::std::ops::Sub<__Rhs> for IntersectionRange<T, U>
            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, U, __Rhs> ::std::ops::Mul<__Rhs> for IntersectionRange<T, U>
            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, U, __Rhs> ::std::ops::Div<__Rhs> for IntersectionRange<T, U>
            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())
            }
        }
    };
const _: () =
    {
        use diesel;
        impl<T, U, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            IntersectionRange<T, U> where
            T: diesel::expression::ValidGrouping<__GroupByClause>,
            U: diesel::expression::ValidGrouping<__GroupByClause>,
            <T as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<U
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<T as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<U as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };
impl<T, U> IntersectionRange<T, U> {
    pub(crate) fn new(left: T, right: U) -> Self {
        IntersectionRange { left, right }
    }
}
impl<T, U, QS> crate::expression::SelectableExpression<QS> for
    IntersectionRange<T, U> where
    IntersectionRange<T, U>: crate::expression::AppearsOnTable<QS>,
    T: crate::expression::SelectableExpression<QS>,
    U: crate::expression::SelectableExpression<QS> {}
impl<T, U, QS> crate::expression::AppearsOnTable<QS> for
    IntersectionRange<T, U> where
    IntersectionRange<T, U>: crate::expression::Expression,
    T: crate::expression::AppearsOnTable<QS>,
    U: crate::expression::AppearsOnTable<QS> {}
impl<T, U> crate::expression::Expression for IntersectionRange<T, U> where
    T: crate::expression::Expression, U: crate::expression::Expression,
    <T as crate::expression::Expression>::SqlType: crate::sql_types::SqlType,
    <U as crate::expression::Expression>::SqlType: crate::sql_types::SqlType {
    type SqlType = <T as crate::expression::Expression>::SqlType;
}
impl<T, U> crate::query_builder::QueryFragment<Pg> for IntersectionRange<T, U>
    where T: crate::query_builder::QueryFragment<Pg>,
    U: crate::query_builder::QueryFragment<Pg> {
    fn walk_ast<'b>(&'b self,
        mut out: crate::query_builder::AstPass<'_, 'b, Pg>)
        -> crate::result::QueryResult<()> {
        self.left.walk_ast(out.reborrow())?;
        out.push_sql(" * ");
        self.right.walk_ast(out.reborrow())?;
        ;
        Ok(())
    }
}
impl<S, T, U> crate::internal::operators_macro::FieldAliasMapper<S> for
    IntersectionRange<T, U> where S: crate::query_source::AliasSource,
    T: crate::internal::operators_macro::FieldAliasMapper<S>,
    U: crate::internal::operators_macro::FieldAliasMapper<S> {
    type Out =
        IntersectionRange<<T as
        crate::internal::operators_macro::FieldAliasMapper<S>>::Out,
        <U as crate::internal::operators_macro::FieldAliasMapper<S>>::Out>;
    fn map(self, alias: &crate::query_source::Alias<S>) -> Self::Out {
        IntersectionRange {
            left: self.left.map(alias),
            right: self.right.map(alias),
        }
    }
}__diesel_infix_operator!(
77    IntersectionRange,
78    " * ",
79    __diesel_internal_SameResultAsInput,
80    backend: Pg
81);
82
83impl<T: PositionalOrderExpr> PositionalOrderExpr for NullsFirst<T> {}
84impl<T: PositionalOrderExpr> PositionalOrderExpr for NullsLast<T> {}
85
86impl<T: PositionalOrderExpr> IntoPositionalOrderExpr for NullsFirst<T> {
87    type Output = NullsFirst<T>;
88
89    fn into_positional_expr(self) -> Self::Output {
90        self
91    }
92}
93impl<T: PositionalOrderExpr> IntoPositionalOrderExpr for NullsLast<T> {
94    type Output = NullsLast<T>;
95
96    fn into_positional_expr(self) -> Self::Output {
97        self
98    }
99}
100
101#[derive(#[automatically_derived]
impl<L: ::core::fmt::Debug, R: ::core::fmt::Debug> ::core::fmt::Debug for
    ArrayIndex<L, R> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "ArrayIndex",
            "array_expr", &self.array_expr, "index_expr", &&self.index_expr)
    }
}Debug, #[automatically_derived]
impl<L: ::core::clone::Clone, R: ::core::clone::Clone> ::core::clone::Clone
    for ArrayIndex<L, R> {
    #[inline]
    fn clone(&self) -> ArrayIndex<L, R> {
        ArrayIndex {
            array_expr: ::core::clone::Clone::clone(&self.array_expr),
            index_expr: ::core::clone::Clone::clone(&self.index_expr),
        }
    }
}Clone, #[automatically_derived]
impl<L: ::core::marker::Copy, R: ::core::marker::Copy> ::core::marker::Copy
    for ArrayIndex<L, R> {
}Copy, const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<L: diesel::query_builder::QueryId,
            R: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for ArrayIndex<L, R> {
            type QueryId =
                ArrayIndex<<L as diesel::query_builder::QueryId>::QueryId,
                <R as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <L as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                        <R as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <L as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                        <R as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                    false;
        }
    };QueryId, 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<L, R, __Rhs> ::std::ops::Add<__Rhs> for ArrayIndex<L, R> 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<L, R, __Rhs> ::std::ops::Sub<__Rhs> for ArrayIndex<L, R> 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<L, R, __Rhs> ::std::ops::Mul<__Rhs> for ArrayIndex<L, R> 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<L, R, __Rhs> ::std::ops::Div<__Rhs> for ArrayIndex<L, R> 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())
            }
        }
    };DieselNumericOps, const _: () =
    {
        use diesel;
        impl<L, R, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            ArrayIndex<L, R> where
            L: diesel::expression::ValidGrouping<__GroupByClause>,
            R: diesel::expression::ValidGrouping<__GroupByClause>,
            <L as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<R
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<L as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<R as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };ValidGrouping)]
102#[doc(hidden)]
103pub struct ArrayIndex<L, R> {
104    pub(crate) array_expr: L,
105    pub(crate) index_expr: R,
106}
107
108impl<L, R> ArrayIndex<L, R> {
109    pub fn new(array_expr: L, index_expr: R) -> Self {
110        Self {
111            array_expr,
112            index_expr,
113        }
114    }
115}
116
117impl<L, R, ST> crate::expression::Expression for ArrayIndex<L, R>
118where
119    L: crate::expression::Expression<SqlType = Array<ST>>,
120    R: crate::expression::Expression<SqlType = Integer>,
121    ST: SqlType + TypedExpressionType,
122{
123    type SqlType = ST;
124}
125
126impl<L, R, QS> crate::expression::SelectableExpression<QS> for
    ArrayIndex<L, R> where
    ArrayIndex<L, R>: crate::expression::AppearsOnTable<QS>,
    L: crate::expression::SelectableExpression<QS>,
    R: crate::expression::SelectableExpression<QS> {}
impl<L, R, QS> crate::expression::AppearsOnTable<QS> for ArrayIndex<L, R>
    where ArrayIndex<L, R>: crate::expression::Expression,
    L: crate::expression::AppearsOnTable<QS>,
    R: crate::expression::AppearsOnTable<QS> {}impl_selectable_expression!(ArrayIndex<L, R>);
127
128impl<L, R> QueryFragment<Pg> for ArrayIndex<L, R>
129where
130    L: QueryFragment<Pg>,
131    R: QueryFragment<Pg>,
132{
133    fn walk_ast<'b>(
134        &'b self,
135        mut out: crate::query_builder::AstPass<'_, 'b, Pg>,
136    ) -> crate::result::QueryResult<()> {
137        out.push_sql("(");
138        self.array_expr.walk_ast(out.reborrow())?;
139        out.push_sql(")");
140        out.push_sql("[");
141        self.index_expr.walk_ast(out.reborrow())?;
142        out.push_sql("]");
143        Ok(())
144    }
145}
146
147// we cannot use the additional
148// parenthesis for updates
149#[derive(#[automatically_derived]
impl<L: ::core::fmt::Debug, R: ::core::fmt::Debug> ::core::fmt::Debug for
    UpdateArrayIndex<L, R> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f,
            "UpdateArrayIndex", &&self.0)
    }
}Debug)]
150pub struct UpdateArrayIndex<L, R>(ArrayIndex<L, R>);
151
152impl<L, R> QueryFragment<Pg> for UpdateArrayIndex<L, R>
153where
154    L: QueryFragment<Pg>,
155    R: QueryFragment<Pg>,
156{
157    fn walk_ast<'b>(
158        &'b self,
159        mut out: crate::query_builder::AstPass<'_, 'b, Pg>,
160    ) -> crate::result::QueryResult<()> {
161        self.0.array_expr.walk_ast(out.reborrow())?;
162        out.push_sql("[");
163        self.0.index_expr.walk_ast(out.reborrow())?;
164        out.push_sql("]");
165        Ok(())
166    }
167}
168
169impl<L, R> AssignmentTarget for ArrayIndex<L, R>
170where
171    L: Column,
172{
173    type Table = <L as Column>::Table;
174    type QueryAstNode = UpdateArrayIndex<UncorrelatedColumn<L>, R>;
175
176    fn into_target(self) -> Self::QueryAstNode {
177        UpdateArrayIndex(ArrayIndex::new(
178            UncorrelatedColumn(self.array_expr),
179            self.index_expr,
180        ))
181    }
182}
183
184/// Signifies that this column should be rendered without its 'correlation'
185/// (i.e. table name prefix). For update statements, fully qualified column
186/// names aren't allowed.
187#[derive(#[automatically_derived]
impl<C: ::core::fmt::Debug> ::core::fmt::Debug for UncorrelatedColumn<C> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f,
            "UncorrelatedColumn", &&self.0)
    }
}Debug)]
188pub struct UncorrelatedColumn<C>(C);
189
190impl<C, DB> QueryFragment<DB> for UncorrelatedColumn<C>
191where
192    C: Column,
193    DB: Backend + DieselReserveSpecialization,
194{
195    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, DB>) -> QueryResult<()> {
196        out.push_identifier(C::NAME)
197    }
198}