#[macro_use]
#[doc(hidden)]
pub mod ops;
#[doc(hidden)]
pub mod aliased;
#[doc(hidden)]
pub mod array_comparison;
#[doc(hidden)]
pub mod bound;
#[doc(hidden)]
pub mod count;
pub mod expression_methods;
pub mod extensions;
#[doc(hidden)]
pub mod functions;
#[doc(hidden)]
pub mod grouped;
pub mod helper_types;
#[doc(hidden)]
pub mod ordering;
#[doc(hidden)]
pub mod predicates;
pub mod sql_literal;
pub mod dsl {
#[doc(inline)]
pub use super::array_comparison::any;
#[doc(inline)]
pub use super::count::{count, count_star};
#[doc(inline)]
pub use super::functions::date_and_time::*;
#[doc(inline)]
pub use super::functions::aggregate_ordering::*;
pub use super::extensions::*;
}
pub use self::dsl::*;
pub use self::sql_literal::SqlLiteral;
use query_builder::{QueryBuilder, BuildQueryResult};
use types::NativeSqlType;
pub trait Expression {
type SqlType: NativeSqlType;
fn to_sql(&self, out: &mut QueryBuilder) -> BuildQueryResult;
#[doc(hidden)]
fn to_insert_sql(&self, out: &mut QueryBuilder) -> BuildQueryResult {
self.to_sql(out)
}
}
impl<T: Expression + ?Sized> Expression for Box<T> {
type SqlType = T::SqlType;
fn to_sql(&self, out: &mut QueryBuilder) -> BuildQueryResult {
Expression::to_sql(&**self, out)
}
fn to_insert_sql(&self, out: &mut QueryBuilder) -> BuildQueryResult {
Expression::to_insert_sql(&**self, out)
}
}
impl<'a, T: Expression + ?Sized> Expression for &'a T {
type SqlType = T::SqlType;
fn to_sql(&self, out: &mut QueryBuilder) -> BuildQueryResult {
Expression::to_sql(&**self, out)
}
fn to_insert_sql(&self, out: &mut QueryBuilder) -> BuildQueryResult {
Expression::to_insert_sql(&**self, out)
}
}
pub trait AsExpression<T: NativeSqlType> {
type Expression: Expression<SqlType=T>;
fn as_expression(self) -> Self::Expression;
}
impl<T: Expression> AsExpression<T::SqlType> for T {
type Expression = Self;
fn as_expression(self) -> Self {
self
}
}
pub trait SelectableExpression<
QS,
Type: NativeSqlType = <Self as Expression>::SqlType,
>: Expression {
}
impl<T: ?Sized, ST, QS> SelectableExpression<QS, ST> for Box<T> where
T: SelectableExpression<QS, ST>,
ST: NativeSqlType,
Box<T>: Expression,
{
}
impl<'a, T: ?Sized, ST, QS> SelectableExpression<QS, ST> for &'a T where
T: SelectableExpression<QS, ST>,
ST: NativeSqlType,
&'a T: Expression,
{
}
pub trait NonAggregate: Expression {
}
impl<T: NonAggregate + ?Sized> NonAggregate for Box<T> {
}
impl<'a, T: NonAggregate + ?Sized> NonAggregate for &'a T {
}
pub trait BoxableExpression<QS, ST: NativeSqlType>: Expression + SelectableExpression<QS, ST> + NonAggregate {
}
impl<QS, T, ST> BoxableExpression<QS, ST> for T where
ST: NativeSqlType,
T: Expression + SelectableExpression<QS, ST> + NonAggregate,
{
}