Skip to main content

diesel/pg/expression/
operators.rs

1use crate::backend::{Backend, DieselReserveSpecialization};
2use crate::expression::expression_types::NotSelectable;
3use crate::expression::{Expression, TypedExpressionType, ValidGrouping};
4use crate::pg::Pg;
5use crate::pg::expression::expression_methods::{ArrayOrNullableArray, IntegerOrNullableInteger};
6use crate::query_builder::update_statement::changeset::AssignmentTarget;
7use crate::query_builder::{AstPass, QueryFragment, QueryId};
8use crate::query_dsl::positional_order_dsl::{IntoPositionalOrderExpr, PositionalOrderExpr};
9use crate::sql_types::is_nullable::{
10    IsOneNullable, IsSqlTypeNullable, MaybeNullable, NotNull, OneNullable,
11};
12use crate::sql_types::{
13    Array, Bigint, Bool, DieselNumericOps, Inet, Integer, Jsonb, MaybeNullableType, OneIsNullable,
14    SqlType, Text,
15};
16use crate::{Column, QueryResult};
17
18#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsDistinctFrom<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
19#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsNotDistinctFrom<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
20#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct OverlapsWith<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
21#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct Contains<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
22#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsContainedBy<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
23#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct ILike<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
24#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct ExtendsRightTo<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
25#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct ExtendsLeftTo<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
26#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct NotILike<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
27#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct SimilarTo<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
28#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct NotSimilarTo<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
29#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct NullsFirst<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
30#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct NullsLast<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
31#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsJson<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
32#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsNotJson<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
33#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsJsonObject<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
34#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsNotJsonObject<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
35#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsJsonArray<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
36#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsNotJsonArray<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
37#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsJsonScalar<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
38#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsNotJsonScalar<Expr> {
    pub(crate) expr: Expr,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
39#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct ContainsNet<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
40#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct ContainsNetLoose<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
41#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsContainedByNet<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
42#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IsContainedByNetLoose<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
43#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct AndNet<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
44#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct OrNet<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
45#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct DifferenceNet<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
46#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct HasKeyJsonb<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
47#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct HasAnyKeyJsonb<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
48#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct HasAllKeysJsonb<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
49#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct RangeAdjacent<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
50#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct RemoveFromJsonb<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
51#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct RetrieveAsObjectJson<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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!(RetrieveAsObjectJson, " -> ", __diesel_internal_SameResultAsInput, backend: Pg);
52#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct RetrieveByPathAsObjectJson<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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!(
53    RetrieveByPathAsObjectJson,
54    " #> ",
55    __diesel_internal_SameResultAsInput,
56    backend: Pg
57);
58#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct RetrieveByPathAsTextJson<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
59#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct RemoveByPathFromJsonb<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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);
60
61#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct UnionsRange<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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!(
62    UnionsRange,
63    " + ",
64    __diesel_internal_SameResultAsInput,
65    backend: Pg
66);
67
68#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct DifferenceRange<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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!(
69    DifferenceRange,
70    " - ",
71    __diesel_internal_SameResultAsInput,
72    backend: Pg
73);
74
75#[doc(hidden)]
#[allow(unreachable_pub)]
pub struct IntersectionRange<T, U> {
    pub(crate) left: T,
    pub(crate) right: U,
}
#[automatically_derived]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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]
#[allow(unreachable_pub)]
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> ::core::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> ::core::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> ::core::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> ::core::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> {
    #[allow(dead_code)]
    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!(
76    IntersectionRange,
77    " * ",
78    __diesel_internal_SameResultAsInput,
79    backend: Pg
80);
81
82impl<T: PositionalOrderExpr> PositionalOrderExpr for NullsFirst<T> {}
83impl<T: PositionalOrderExpr> PositionalOrderExpr for NullsLast<T> {}
84
85impl<T: PositionalOrderExpr> IntoPositionalOrderExpr for NullsFirst<T> {
86    type Output = NullsFirst<T>;
87
88    fn into_positional_expr(self) -> Self::Output {
89        self
90    }
91}
92impl<T: PositionalOrderExpr> IntoPositionalOrderExpr for NullsLast<T> {
93    type Output = NullsLast<T>;
94
95    fn into_positional_expr(self) -> Self::Output {
96        self
97    }
98}
99
100#[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> ::core::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> ::core::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> ::core::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> ::core::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)]
101#[doc(hidden)]
102pub struct ArrayIndex<L, R> {
103    pub(crate) array_expr: L,
104    pub(crate) index_expr: R,
105}
106
107impl<L, R> ArrayIndex<L, R> {
108    pub fn new(array_expr: L, index_expr: R) -> Self {
109        Self {
110            array_expr,
111            index_expr,
112        }
113    }
114}
115
116impl<L, R, ST> Expression for ArrayIndex<L, R>
117where
118    L: Expression<SqlType: SqlType + ArrayOrNullableArray<Inner = ST>>,
119    R: Expression<SqlType: SqlType + IntegerOrNullableInteger>,
120    ST: SqlType + TypedExpressionType,
121    IsSqlTypeNullable<L::SqlType>:
122        OneIsNullable<IsSqlTypeNullable<R::SqlType>, Out: MaybeNullableType<ST>>,
123{
124    type SqlType = MaybeNullable<IsOneNullable<L::SqlType, R::SqlType>, ST>;
125}
126
127impl<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>);
128
129impl<L, R> QueryFragment<Pg> for ArrayIndex<L, R>
130where
131    L: QueryFragment<Pg>,
132    R: QueryFragment<Pg>,
133{
134    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, Pg>) -> QueryResult<()> {
135        out.push_sql("(");
136        self.array_expr.walk_ast(out.reborrow())?;
137        out.push_sql(")");
138        out.push_sql("[");
139        self.index_expr.walk_ast(out.reborrow())?;
140        out.push_sql("]");
141        Ok(())
142    }
143}
144
145// we cannot use the additional parenthesis for updates
146#[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)]
147pub struct UpdateArrayIndex<L, R>(ArrayIndex<L, R>);
148
149impl<L, R> QueryFragment<Pg> for UpdateArrayIndex<L, R>
150where
151    L: QueryFragment<Pg>,
152    R: QueryFragment<Pg>,
153{
154    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, Pg>) -> QueryResult<()> {
155        self.0.array_expr.walk_ast(out.reborrow())?;
156        out.push_sql("[");
157        self.0.index_expr.walk_ast(out.reborrow())?;
158        out.push_sql("]");
159        Ok(())
160    }
161}
162
163impl<L, R> AssignmentTarget for ArrayIndex<L, R>
164where
165    L: Column,
166    // Null value in array subscript is forbidden in assignment
167    R: Expression<SqlType = Integer>,
168{
169    type Table = <L as Column>::Table;
170    type QueryAstNode = UpdateArrayIndex<UncorrelatedColumn<L>, R>;
171
172    fn into_target(self) -> Self::QueryAstNode {
173        UpdateArrayIndex(ArrayIndex::new(
174            UncorrelatedColumn(self.array_expr),
175            self.index_expr,
176        ))
177    }
178}
179
180#[derive(#[automatically_derived]
impl<L: ::core::fmt::Debug, R1: ::core::fmt::Debug, R2: ::core::fmt::Debug>
    ::core::fmt::Debug for ArraySlice<L, R1, R2> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "ArraySlice",
            "array_expr", &self.array_expr, "slice_start_expr",
            &self.slice_start_expr, "slice_end_expr", &&self.slice_end_expr)
    }
}Debug, #[automatically_derived]
impl<L: ::core::clone::Clone, R1: ::core::clone::Clone,
    R2: ::core::clone::Clone> ::core::clone::Clone for ArraySlice<L, R1, R2> {
    #[inline]
    fn clone(&self) -> ArraySlice<L, R1, R2> {
        ArraySlice {
            array_expr: ::core::clone::Clone::clone(&self.array_expr),
            slice_start_expr: ::core::clone::Clone::clone(&self.slice_start_expr),
            slice_end_expr: ::core::clone::Clone::clone(&self.slice_end_expr),
        }
    }
}Clone, #[automatically_derived]
impl<L: ::core::marker::Copy, R1: ::core::marker::Copy,
    R2: ::core::marker::Copy> ::core::marker::Copy for ArraySlice<L, R1, R2> {
}Copy, const _: () =
    {
        use diesel;
        #[allow(non_camel_case_types)]
        impl<L: diesel::query_builder::QueryId,
            R1: diesel::query_builder::QueryId,
            R2: diesel::query_builder::QueryId> diesel::query_builder::QueryId
            for ArraySlice<L, R1, R2> {
            type QueryId =
                ArraySlice<<L as diesel::query_builder::QueryId>::QueryId,
                <R1 as diesel::query_builder::QueryId>::QueryId,
                <R2 as diesel::query_builder::QueryId>::QueryId>;
            const HAS_STATIC_QUERY_ID: bool =
                <L as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
                            <R1 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                        &&
                        <R2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
                    && true;
            const IS_WINDOW_FUNCTION: bool =
                <L as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
                            <R1 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                        ||
                        <R2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
                    || false;
        }
    };QueryId, const _: () =
    {
        use diesel;
        impl<L, R1, R2, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            ArraySlice<L, R1, R2> where
            L: diesel::expression::ValidGrouping<__GroupByClause>,
            R1: diesel::expression::ValidGrouping<__GroupByClause>,
            R2: diesel::expression::ValidGrouping<__GroupByClause>,
            <L as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate: diesel::expression::MixedAggregates<<R1
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>,
            <<L as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
            as
            diesel::expression::MixedAggregates<<R1 as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output: diesel::expression::MixedAggregates<<R2
            as
            diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>
            {
            type IsAggregate =
                <<<L as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate
                as
                diesel::expression::MixedAggregates<<R1 as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output
                as
                diesel::expression::MixedAggregates<<R2 as
                diesel::expression::ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
        }
    };ValidGrouping)]
181#[doc(hidden)]
182pub struct ArraySlice<L, R1, R2> {
183    pub(crate) array_expr: L,
184    pub(crate) slice_start_expr: R1,
185    pub(crate) slice_end_expr: R2,
186}
187
188impl<L, R1, R2> ArraySlice<L, R1, R2> {
189    pub fn new(array_expr: L, slice_start_expr: R1, slice_end_expr: R2) -> Self {
190        Self {
191            array_expr,
192            slice_start_expr,
193            slice_end_expr,
194        }
195    }
196}
197
198impl<L, R1, R2, ST> Expression for ArraySlice<L, R1, R2>
199where
200    L: Expression<SqlType: SqlType + ArrayOrNullableArray<Inner = ST>>,
201    R1: Expression<SqlType: SqlType + IntegerOrNullableInteger>,
202    R2: Expression<SqlType: SqlType + IntegerOrNullableInteger>,
203    ST: SqlType + TypedExpressionType,
204    IsSqlTypeNullable<L::SqlType>: OneIsNullable<IsSqlTypeNullable<R1::SqlType>>,
205    IsOneNullable<L::SqlType, R1::SqlType>: OneIsNullable<IsSqlTypeNullable<R2::SqlType>>,
206    OneNullable<IsOneNullable<L::SqlType, R1::SqlType>, IsSqlTypeNullable<R2::SqlType>>:
207        MaybeNullableType<Array<ST>>,
208{
209    type SqlType = MaybeNullable<
210        OneNullable<IsOneNullable<L::SqlType, R1::SqlType>, IsSqlTypeNullable<R2::SqlType>>,
211        Array<ST>,
212    >;
213}
214
215impl<L, R1, R2, QS> crate::expression::SelectableExpression<QS> for
    ArraySlice<L, R1, R2> where
    ArraySlice<L, R1, R2>: crate::expression::AppearsOnTable<QS>,
    L: crate::expression::SelectableExpression<QS>,
    R1: crate::expression::SelectableExpression<QS>,
    R2: crate::expression::SelectableExpression<QS> {}
impl<L, R1, R2, QS> crate::expression::AppearsOnTable<QS> for
    ArraySlice<L, R1, R2> where
    ArraySlice<L, R1, R2>: crate::expression::Expression,
    L: crate::expression::AppearsOnTable<QS>,
    R1: crate::expression::AppearsOnTable<QS>,
    R2: crate::expression::AppearsOnTable<QS> {}impl_selectable_expression!(ArraySlice<L, R1, R2>);
216
217impl<L, R1, R2> QueryFragment<Pg> for ArraySlice<L, R1, R2>
218where
219    L: QueryFragment<Pg>,
220    R1: QueryFragment<Pg>,
221    R2: QueryFragment<Pg>,
222{
223    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, Pg>) -> QueryResult<()> {
224        out.push_sql("(");
225        self.array_expr.walk_ast(out.reborrow())?;
226        out.push_sql(")");
227        out.push_sql("[");
228        self.slice_start_expr.walk_ast(out.reborrow())?;
229        out.push_sql(":");
230        self.slice_end_expr.walk_ast(out.reborrow())?;
231        out.push_sql("]");
232        Ok(())
233    }
234}
235
236// we cannot use the additional parenthesis for updates
237#[derive(#[automatically_derived]
impl<L: ::core::fmt::Debug, R1: ::core::fmt::Debug, R2: ::core::fmt::Debug>
    ::core::fmt::Debug for UpdateArraySlice<L, R1, R2> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f,
            "UpdateArraySlice", &&self.0)
    }
}Debug)]
238pub struct UpdateArraySlice<L, R1, R2>(ArraySlice<L, R1, R2>);
239
240impl<L, R1, R2> QueryFragment<Pg> for UpdateArraySlice<L, R1, R2>
241where
242    L: QueryFragment<Pg>,
243    R1: QueryFragment<Pg>,
244    R2: QueryFragment<Pg>,
245{
246    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, Pg>) -> QueryResult<()> {
247        self.0.array_expr.walk_ast(out.reborrow())?;
248        out.push_sql("[");
249        self.0.slice_start_expr.walk_ast(out.reborrow())?;
250        out.push_sql(":");
251        self.0.slice_end_expr.walk_ast(out.reborrow())?;
252        out.push_sql("]");
253        Ok(())
254    }
255}
256
257impl<L, R1, R2> AssignmentTarget for ArraySlice<L, R1, R2>
258where
259    L: Column,
260    // Null value in array subscript is forbidden in assignment
261    R1: Expression<SqlType = Integer>,
262    R2: Expression<SqlType = Integer>,
263{
264    type Table = <L as Column>::Table;
265    type QueryAstNode = UpdateArraySlice<UncorrelatedColumn<L>, R1, R2>;
266
267    fn into_target(self) -> Self::QueryAstNode {
268        UpdateArraySlice(ArraySlice::new(
269            UncorrelatedColumn(self.array_expr),
270            self.slice_start_expr,
271            self.slice_end_expr,
272        ))
273    }
274}
275
276#[derive(#[automatically_derived]
impl<L: ::core::fmt::Debug, R: ::core::fmt::Debug> ::core::fmt::Debug for
    ArraySliceFrom<L, R> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "ArraySliceFrom", "array_expr", &self.array_expr,
            "slice_start_expr", &&self.slice_start_expr)
    }
}Debug, #[automatically_derived]
impl<L: ::core::clone::Clone, R: ::core::clone::Clone> ::core::clone::Clone
    for ArraySliceFrom<L, R> {
    #[inline]
    fn clone(&self) -> ArraySliceFrom<L, R> {
        ArraySliceFrom {
            array_expr: ::core::clone::Clone::clone(&self.array_expr),
            slice_start_expr: ::core::clone::Clone::clone(&self.slice_start_expr),
        }
    }
}Clone, #[automatically_derived]
impl<L: ::core::marker::Copy, R: ::core::marker::Copy> ::core::marker::Copy
    for ArraySliceFrom<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 ArraySliceFrom<L, R> {
            type QueryId =
                ArraySliceFrom<<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;
        impl<L, R, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            ArraySliceFrom<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)]
277#[doc(hidden)]
278pub struct ArraySliceFrom<L, R> {
279    pub(crate) array_expr: L,
280    pub(crate) slice_start_expr: R,
281}
282
283impl<L, R> ArraySliceFrom<L, R> {
284    pub fn new(array_expr: L, slice_start_expr: R) -> Self {
285        Self {
286            array_expr,
287            slice_start_expr,
288        }
289    }
290}
291
292impl<L, R, ST> Expression for ArraySliceFrom<L, R>
293where
294    L: Expression<SqlType: SqlType + ArrayOrNullableArray<Inner = ST>>,
295    R: Expression<SqlType: SqlType + IntegerOrNullableInteger>,
296    ST: SqlType + TypedExpressionType,
297    IsSqlTypeNullable<L::SqlType>:
298        OneIsNullable<IsSqlTypeNullable<R::SqlType>, Out: MaybeNullableType<Array<ST>>>,
299{
300    type SqlType = MaybeNullable<IsOneNullable<L::SqlType, R::SqlType>, Array<ST>>;
301}
302
303impl<L, R, QS> crate::expression::SelectableExpression<QS> for
    ArraySliceFrom<L, R> where
    ArraySliceFrom<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 ArraySliceFrom<L, R>
    where ArraySliceFrom<L, R>: crate::expression::Expression,
    L: crate::expression::AppearsOnTable<QS>,
    R: crate::expression::AppearsOnTable<QS> {}impl_selectable_expression!(ArraySliceFrom<L, R>);
304
305impl<L, R> QueryFragment<Pg> for ArraySliceFrom<L, R>
306where
307    L: QueryFragment<Pg>,
308    R: QueryFragment<Pg>,
309{
310    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, Pg>) -> QueryResult<()> {
311        out.push_sql("(");
312        self.array_expr.walk_ast(out.reborrow())?;
313        out.push_sql(")");
314        out.push_sql("[");
315        self.slice_start_expr.walk_ast(out.reborrow())?;
316        out.push_sql(":]");
317        Ok(())
318    }
319}
320
321// we cannot use the additional parenthesis for updates
322#[derive(#[automatically_derived]
impl<L: ::core::fmt::Debug, R: ::core::fmt::Debug> ::core::fmt::Debug for
    UpdateArraySliceFrom<L, R> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f,
            "UpdateArraySliceFrom", &&self.0)
    }
}Debug)]
323pub struct UpdateArraySliceFrom<L, R>(ArraySliceFrom<L, R>);
324
325impl<L, R> QueryFragment<Pg> for UpdateArraySliceFrom<L, R>
326where
327    L: QueryFragment<Pg>,
328    R: QueryFragment<Pg>,
329{
330    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, Pg>) -> QueryResult<()> {
331        self.0.array_expr.walk_ast(out.reborrow())?;
332        out.push_sql("[");
333        self.0.slice_start_expr.walk_ast(out.reborrow())?;
334        out.push_sql(":]");
335        Ok(())
336    }
337}
338
339impl<L, R> AssignmentTarget for ArraySliceFrom<L, R>
340where
341    // Column cannot be null if slice boundaries are not fully specified
342    L: Column<SqlType: SqlType<IsNull = NotNull>>,
343    // Null value in array subscript is forbidden in assignment
344    R: Expression<SqlType = Integer>,
345{
346    type Table = <L as Column>::Table;
347    type QueryAstNode = UpdateArraySliceFrom<UncorrelatedColumn<L>, R>;
348
349    fn into_target(self) -> Self::QueryAstNode {
350        UpdateArraySliceFrom(ArraySliceFrom::new(
351            UncorrelatedColumn(self.array_expr),
352            self.slice_start_expr,
353        ))
354    }
355}
356
357#[derive(#[automatically_derived]
impl<L: ::core::fmt::Debug, R: ::core::fmt::Debug> ::core::fmt::Debug for
    ArraySliceTo<L, R> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "ArraySliceTo",
            "array_expr", &self.array_expr, "slice_end_expr",
            &&self.slice_end_expr)
    }
}Debug, #[automatically_derived]
impl<L: ::core::clone::Clone, R: ::core::clone::Clone> ::core::clone::Clone
    for ArraySliceTo<L, R> {
    #[inline]
    fn clone(&self) -> ArraySliceTo<L, R> {
        ArraySliceTo {
            array_expr: ::core::clone::Clone::clone(&self.array_expr),
            slice_end_expr: ::core::clone::Clone::clone(&self.slice_end_expr),
        }
    }
}Clone, #[automatically_derived]
impl<L: ::core::marker::Copy, R: ::core::marker::Copy> ::core::marker::Copy
    for ArraySliceTo<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 ArraySliceTo<L, R> {
            type QueryId =
                ArraySliceTo<<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;
        impl<L, R, __GroupByClause>
            diesel::expression::ValidGrouping<__GroupByClause> for
            ArraySliceTo<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)]
358#[doc(hidden)]
359pub struct ArraySliceTo<L, R> {
360    pub(crate) array_expr: L,
361    pub(crate) slice_end_expr: R,
362}
363
364impl<L, R> ArraySliceTo<L, R> {
365    pub fn new(array_expr: L, slice_end_expr: R) -> Self {
366        Self {
367            array_expr,
368            slice_end_expr,
369        }
370    }
371}
372
373impl<L, R, ST> Expression for ArraySliceTo<L, R>
374where
375    L: Expression<SqlType: SqlType + ArrayOrNullableArray<Inner = ST>>,
376    R: Expression<SqlType: SqlType + IntegerOrNullableInteger>,
377    ST: SqlType + TypedExpressionType,
378    IsSqlTypeNullable<L::SqlType>:
379        OneIsNullable<IsSqlTypeNullable<R::SqlType>, Out: MaybeNullableType<Array<ST>>>,
380{
381    type SqlType = MaybeNullable<IsOneNullable<L::SqlType, R::SqlType>, Array<ST>>;
382}
383
384impl<L, R, QS> crate::expression::SelectableExpression<QS> for
    ArraySliceTo<L, R> where
    ArraySliceTo<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 ArraySliceTo<L, R>
    where ArraySliceTo<L, R>: crate::expression::Expression,
    L: crate::expression::AppearsOnTable<QS>,
    R: crate::expression::AppearsOnTable<QS> {}impl_selectable_expression!(ArraySliceTo<L, R>);
385
386impl<L, R> QueryFragment<Pg> for ArraySliceTo<L, R>
387where
388    L: QueryFragment<Pg>,
389    R: QueryFragment<Pg>,
390{
391    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, Pg>) -> QueryResult<()> {
392        out.push_sql("(");
393        self.array_expr.walk_ast(out.reborrow())?;
394        out.push_sql(")");
395        out.push_sql("[:");
396        self.slice_end_expr.walk_ast(out.reborrow())?;
397        out.push_sql("]");
398        Ok(())
399    }
400}
401
402// we cannot use the additional parenthesis for updates
403#[derive(#[automatically_derived]
impl<L: ::core::fmt::Debug, R: ::core::fmt::Debug> ::core::fmt::Debug for
    UpdateArraySliceTo<L, R> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f,
            "UpdateArraySliceTo", &&self.0)
    }
}Debug)]
404pub struct UpdateArraySliceTo<L, R>(ArraySliceTo<L, R>);
405
406impl<L, R> QueryFragment<Pg> for UpdateArraySliceTo<L, R>
407where
408    L: QueryFragment<Pg>,
409    R: QueryFragment<Pg>,
410{
411    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, Pg>) -> QueryResult<()> {
412        self.0.array_expr.walk_ast(out.reborrow())?;
413        out.push_sql("[:");
414        self.0.slice_end_expr.walk_ast(out.reborrow())?;
415        out.push_sql("]");
416        Ok(())
417    }
418}
419
420impl<L, R> AssignmentTarget for ArraySliceTo<L, R>
421where
422    // Column cannot be null if slice boundaries are not fully specified
423    L: Column<SqlType: SqlType<IsNull = NotNull>>,
424    // Null value in array subscript is forbidden in assignment
425    R: Expression<SqlType = Integer>,
426{
427    type Table = <L as Column>::Table;
428    type QueryAstNode = UpdateArraySliceTo<UncorrelatedColumn<L>, R>;
429
430    fn into_target(self) -> Self::QueryAstNode {
431        UpdateArraySliceTo(ArraySliceTo::new(
432            UncorrelatedColumn(self.array_expr),
433            self.slice_end_expr,
434        ))
435    }
436}
437
438/// Signifies that this column should be rendered without its 'correlation'
439/// (i.e. table name prefix). For update statements, fully qualified column
440/// names aren't allowed.
441#[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)]
442pub struct UncorrelatedColumn<C>(C);
443
444impl<C, DB> QueryFragment<DB> for UncorrelatedColumn<C>
445where
446    C: Column,
447    DB: Backend + DieselReserveSpecialization,
448{
449    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, DB>) -> QueryResult<()> {
450        out.push_identifier(C::NAME)
451    }
452}