use crate::backend::Backend;
use crate::query_builder::{AstPass, QueryFragment, QueryId};
use crate::result::QueryResult;
pub trait Collation: QueryId + Clone + Send + Sync + 'static {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Custom(pub &'static str);
impl Collation for Custom {}
impl<DB: Backend> QueryFragment<DB> for Custom {
fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, DB>) -> QueryResult<()> {
out.push_sql(self.0);
Ok(())
}
}
impl QueryId for Custom {
type QueryId = ();
const HAS_STATIC_QUERY_ID: bool = false;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, QueryId)]
#[cfg(feature = "__sqlite-shared")]
pub struct Binary;
#[cfg(feature = "__sqlite-shared")]
impl Collation for Binary {}
#[cfg(feature = "__sqlite-shared")]
impl QueryFragment<crate::sqlite::Sqlite> for Binary {
fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, crate::sqlite::Sqlite>) -> QueryResult<()> {
out.push_sql("BINARY");
Ok(())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, QueryId)]
#[cfg(feature = "postgres_backend")]
pub struct C;
#[cfg(feature = "postgres_backend")]
impl Collation for C {}
#[cfg(feature = "postgres_backend")]
impl QueryFragment<crate::pg::Pg> for C {
fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, crate::pg::Pg>) -> QueryResult<()> {
out.push_sql("\"C\"");
Ok(())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, QueryId)]
#[cfg(feature = "__sqlite-shared")]
pub struct NoCase;
#[cfg(feature = "__sqlite-shared")]
impl Collation for NoCase {}
#[cfg(feature = "__sqlite-shared")]
impl QueryFragment<crate::sqlite::Sqlite> for NoCase {
fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, crate::sqlite::Sqlite>) -> QueryResult<()> {
out.push_sql("NOCASE");
Ok(())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, QueryId)]
#[cfg(feature = "postgres_backend")]
pub struct Posix;
#[cfg(feature = "postgres_backend")]
impl Collation for Posix {}
#[cfg(feature = "postgres_backend")]
impl QueryFragment<crate::pg::Pg> for Posix {
fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, crate::pg::Pg>) -> QueryResult<()> {
out.push_sql("\"POSIX\"");
Ok(())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, QueryId)]
#[cfg(feature = "__sqlite-shared")]
pub struct RTrim;
#[cfg(feature = "__sqlite-shared")]
impl Collation for RTrim {}
#[cfg(feature = "__sqlite-shared")]
impl QueryFragment<crate::sqlite::Sqlite> for RTrim {
fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, crate::sqlite::Sqlite>) -> QueryResult<()> {
out.push_sql("RTRIM");
Ok(())
}
}