use diesel::expression::AsExpression;
use diesel::sql_types::{Array, Float, Text};
use super::operators::*;
diesel::define_sql_function! {
fn similarity(a: Text, b: Text) -> Float;
}
diesel::define_sql_function! {
fn word_similarity(a: Text, b: Text) -> Float;
}
diesel::define_sql_function! {
fn strict_word_similarity(a: Text, b: Text) -> Float;
}
diesel::define_sql_function! {
fn show_trgm(text: Text) -> Array<Text>;
}
diesel::define_sql_function! {
fn show_limit() -> Float;
}
diesel::define_sql_function! {
fn set_limit(threshold: Float) -> Float;
}
diesel::define_sql_function! {
fn array_to_string(array: Array<Text>, delimiter: Text) -> Text;
}
pub fn word_similar<T, U>(left: T, right: U) -> WordSimilarLeft<T::Expression, U::Expression>
where
T: AsExpression<Text>,
U: AsExpression<Text>,
{
WordSimilarLeft::new(left.as_expression(), right.as_expression())
}
pub fn strict_word_similar<T, U>(
left: T,
right: U,
) -> StrictWordSimilarLeft<T::Expression, U::Expression>
where
T: AsExpression<Text>,
U: AsExpression<Text>,
{
StrictWordSimilarLeft::new(left.as_expression(), right.as_expression())
}
pub fn word_distance_left<T, U>(left: T, right: U) -> WordDistanceLeft<T::Expression, U::Expression>
where
T: AsExpression<Text>,
U: AsExpression<Text>,
{
WordDistanceLeft::new(left.as_expression(), right.as_expression())
}
pub fn strict_word_distance_left<T, U>(
left: T,
right: U,
) -> StrictWordDistanceLeft<T::Expression, U::Expression>
where
T: AsExpression<Text>,
U: AsExpression<Text>,
{
StrictWordDistanceLeft::new(left.as_expression(), right.as_expression())
}