1use super::array_comparison::{AsInExpression, In, NotIn};
5use super::grouped::Grouped;
6use super::select_by::SelectBy;
7use super::{AsExpression, Expression};
8use crate::expression;
9use crate::expression_methods::PreferredBoolSqlType;
10use crate::sql_types;
11
12pub type SqlTypeOf<Expr> = <Expr as Expression>::SqlType;
14
15pub type AsExpr<Item, TargetExpr> = AsExprOf<Item, SqlTypeOf<TargetExpr>>;
17
18pub type AsExprOf<Item, Type> = <Item as AsExpression<Type>>::Expression;
20
21pub type Eq<Lhs, Rhs> = Grouped<super::operators::Eq<Lhs, AsExpr<Rhs, Lhs>>>;
24
25pub type NotEq<Lhs, Rhs> = Grouped<super::operators::NotEq<Lhs, AsExpr<Rhs, Lhs>>>;
28
29#[doc(hidden)] pub type Ne<Lhs, Rhs> = NotEq<Lhs, Rhs>;
31
32pub type EqAny<Lhs, Rhs> = Grouped<In<Lhs, <Rhs as AsInExpression<SqlTypeOf<Lhs>>>::InExpression>>;
35
36pub type NeAny<Lhs, Rhs> =
39 Grouped<NotIn<Lhs, <Rhs as AsInExpression<SqlTypeOf<Lhs>>>::InExpression>>;
40
41#[doc(hidden)] pub type NeAll<Lhs, Rhs> = NeAny<Lhs, Rhs>;
43
44pub type IsNull<Expr> = Grouped<super::operators::IsNull<Expr>>;
47
48pub type IsNotNull<Expr> = Grouped<super::operators::IsNotNull<Expr>>;
51
52pub type Gt<Lhs, Rhs> = Grouped<super::operators::Gt<Lhs, AsExpr<Rhs, Lhs>>>;
55
56pub type GtEq<Lhs, Rhs> = Grouped<super::operators::GtEq<Lhs, AsExpr<Rhs, Lhs>>>;
59
60#[doc(hidden)] pub type Ge<Lhs, Rhs> = GtEq<Lhs, Rhs>;
62
63pub type Lt<Lhs, Rhs> = Grouped<super::operators::Lt<Lhs, AsExpr<Rhs, Lhs>>>;
66
67pub type LtEq<Lhs, Rhs> = Grouped<super::operators::LtEq<Lhs, AsExpr<Rhs, Lhs>>>;
70
71#[doc(hidden)] pub type Le<Lhs, Rhs> = LtEq<Lhs, Rhs>;
73
74pub type Between<Lhs, Lower, Upper> = Grouped<
77 super::operators::Between<Lhs, super::operators::And<AsExpr<Lower, Lhs>, AsExpr<Upper, Lhs>>>,
78>;
79
80pub type NotBetween<Lhs, Lower, Upper> = Grouped<
83 super::operators::NotBetween<
84 Lhs,
85 super::operators::And<AsExpr<Lower, Lhs>, AsExpr<Upper, Lhs>>,
86 >,
87>;
88
89pub type Concat<Lhs, Rhs> = Grouped<super::operators::Concat<Lhs, AsExpr<Rhs, Lhs>>>;
92
93pub type Cast<Expr, ST> = super::cast::Cast<Expr, ST>;
96
97pub type Desc<Expr> = super::operators::Desc<Expr>;
100
101pub type Asc<Expr> = super::operators::Asc<Expr>;
104
105pub type Nullable<Expr> = super::nullable::Nullable<Expr>;
108
109pub type AssumeNotNull<Expr> = super::assume_not_null::AssumeNotNull<Expr>;
112
113pub type And<Lhs, Rhs, ST = <Rhs as PreferredBoolSqlType>::PreferredSqlType> =
116 Grouped<super::operators::And<Lhs, AsExprOf<Rhs, ST>>>;
117
118pub type Or<Lhs, Rhs, ST = <Rhs as PreferredBoolSqlType>::PreferredSqlType> =
121 Grouped<super::operators::Or<Lhs, AsExprOf<Rhs, ST>>>;
122
123pub type Escape<Lhs> = Grouped<
126 super::operators::Escape<
127 <Lhs as crate::expression_methods::EscapeExpressionMethods>::TextExpression,
128 AsExprOf<String, sql_types::VarChar>,
129 >,
130>;
131
132pub type Like<Lhs, Rhs> = Grouped<super::operators::Like<Lhs, AsExprOf<Rhs, SqlTypeOf<Lhs>>>>;
135
136pub type NotLike<Lhs, Rhs> = Grouped<super::operators::NotLike<Lhs, AsExprOf<Rhs, SqlTypeOf<Lhs>>>>;
139
140#[allow(non_camel_case_types)] pub type case_when<C, T, ST = <T as Expression>::SqlType> = expression::case_when::CaseWhen<
143 expression::case_when::CaseWhenConditionsLeaf<Grouped<C>, Grouped<AsExprOf<T, ST>>>,
144 expression::case_when::NoElseExpression,
145>;
146pub type When<W, C, T> = expression::case_when::CaseWhen<
148 expression::case_when::CaseWhenConditionsIntermediateNode<
149 Grouped<C>,
150 Grouped<AsExprOf<T, <W as expression::case_when::CaseWhenTypesExtractor>::OutputExpressionSpecifiedSqlType>>,
151 <W as expression::case_when::CaseWhenTypesExtractor>::Whens,
152 >,
153 <W as expression::case_when::CaseWhenTypesExtractor>::Else,
154>;
155pub type Otherwise<W, E> = expression::case_when::CaseWhen<
157 <W as expression::case_when::CaseWhenTypesExtractor>::Whens,
158 expression::case_when::ElseExpression<Grouped<AsExprOf<E, <W as expression::case_when::CaseWhenTypesExtractor>::OutputExpressionSpecifiedSqlType>>>,
159>;
160
161pub type AsSelect<Source, DB> = SelectBy<Source, DB>;
163
164pub type IntoSql<Item, SqlType> = AsExprOf<Item, SqlType>;
166
167pub type Field<Alias, Field> = Fields<Alias, Field>;
169
170pub type Fields<Alias, Fields> = <Fields as crate::query_source::aliasing::FieldAliasMapper<
172 <Alias as crate::query_source::aliasing::GetAliasSourceFromAlias>::Source,
173>>::Out;
174
175pub type Add<L, R> = <L as ::core::ops::Add<R>>::Output;
178
179pub type Sub<L, R> = <L as ::core::ops::Sub<R>>::Output;
182
183pub type Mul<L, R> = <L as ::core::ops::Mul<R>>::Output;
186
187pub type Div<L, R> = <L as ::core::ops::Div<R>>::Output;
190
191#[doc(inline)]
196#[allow(unreachable_pub)]
197pub use super::functions::helper_types::*;
198
199#[doc(inline)]
200#[cfg(feature = "postgres_backend")]
201#[allow(unreachable_pub)]
202pub use crate::pg::expression::helper_types::*;
203
204#[doc(inline)]
205#[cfg(feature = "sqlite")]
206#[allow(unreachable_pub)]
207pub use crate::sqlite::expression::helper_types::*;