use crate::{BoolExpr, ValueExpr};
use super::function;
pub fn length(expr: impl Into<ValueExpr>) -> ValueExpr {
function("length", [expr])
}
pub fn char_length(expr: impl Into<ValueExpr>) -> ValueExpr {
function("char_length", [expr])
}
pub fn octet_length(expr: impl Into<ValueExpr>) -> ValueExpr {
function("octet_length", [expr])
}
pub fn lower(expr: impl Into<ValueExpr>) -> ValueExpr {
function("lower", [expr])
}
pub fn upper(expr: impl Into<ValueExpr>) -> ValueExpr {
function("upper", [expr])
}
pub fn initcap(expr: impl Into<ValueExpr>) -> ValueExpr {
function("initcap", [expr])
}
pub fn casefold(expr: impl Into<ValueExpr>) -> ValueExpr {
function("casefold", [expr])
}
pub fn normalize(expr: impl Into<ValueExpr>) -> ValueExpr {
function("normalize", [expr])
}
pub fn normalize_form(expr: impl Into<ValueExpr>, form: &'static str) -> ValueExpr {
function("normalize", [expr.into(), ValueExpr::Keyword(form)])
}
pub fn unicode_assigned(expr: impl Into<ValueExpr>) -> BoolExpr {
function("unicode_assigned", [expr]).is_true()
}
pub fn substring(args: impl IntoIterator<Item = impl Into<ValueExpr>>) -> ValueExpr {
function("substring", args)
}
pub fn replace(
text: impl Into<ValueExpr>,
from: impl Into<ValueExpr>,
to: impl Into<ValueExpr>,
) -> ValueExpr {
function("replace", [text.into(), from.into(), to.into()])
}
pub fn regexp_replace(args: impl IntoIterator<Item = impl Into<ValueExpr>>) -> ValueExpr {
function("regexp_replace", args)
}
pub fn regexp_matches(args: impl IntoIterator<Item = impl Into<ValueExpr>>) -> ValueExpr {
function("regexp_matches", args)
}
pub fn regexp_split_to_array(
text: impl Into<ValueExpr>,
pattern: impl Into<ValueExpr>,
) -> ValueExpr {
function("regexp_split_to_array", [text.into(), pattern.into()])
}
pub fn split_part(
text: impl Into<ValueExpr>,
delimiter: impl Into<ValueExpr>,
field: impl Into<ValueExpr>,
) -> ValueExpr {
function("split_part", [text.into(), delimiter.into(), field.into()])
}
pub fn strpos(text: impl Into<ValueExpr>, substring: impl Into<ValueExpr>) -> ValueExpr {
function("strpos", [text.into(), substring.into()])
}
pub fn format(
format: impl Into<ValueExpr>,
args: impl IntoIterator<Item = impl Into<ValueExpr>>,
) -> ValueExpr {
let mut values = vec![format.into()];
values.extend(args.into_iter().map(Into::into));
function("format", values)
}
pub fn translate(
text: impl Into<ValueExpr>,
from: impl Into<ValueExpr>,
to: impl Into<ValueExpr>,
) -> ValueExpr {
function("translate", [text.into(), from.into(), to.into()])
}
pub fn repeat(text: impl Into<ValueExpr>, count: impl Into<ValueExpr>) -> ValueExpr {
function("repeat", [text.into(), count.into()])
}
pub fn ascii(expr: impl Into<ValueExpr>) -> ValueExpr {
function("ascii", [expr])
}
pub fn chr(code: impl Into<ValueExpr>) -> ValueExpr {
function("chr", [code])
}
pub fn encode(bytea: impl Into<ValueExpr>, format: impl Into<ValueExpr>) -> ValueExpr {
function("encode", [bytea.into(), format.into()])
}
pub fn decode(text: impl Into<ValueExpr>, format: impl Into<ValueExpr>) -> ValueExpr {
function("decode", [text.into(), format.into()])
}
pub fn starts_with(text: impl Into<ValueExpr>, prefix: impl Into<ValueExpr>) -> BoolExpr {
function("starts_with", [text.into(), prefix.into()]).is_true()
}
pub fn trim(expr: impl Into<ValueExpr>) -> ValueExpr {
function("trim", [expr])
}
pub fn ltrim(expr: impl Into<ValueExpr>) -> ValueExpr {
function("ltrim", [expr])
}
pub fn rtrim(expr: impl Into<ValueExpr>) -> ValueExpr {
function("rtrim", [expr])
}
pub fn btrim(expr: impl Into<ValueExpr>) -> ValueExpr {
function("btrim", [expr])
}
pub fn left(expr: impl Into<ValueExpr>, count: impl Into<ValueExpr>) -> ValueExpr {
function("left", [expr.into(), count.into()])
}
pub fn right(expr: impl Into<ValueExpr>, count: impl Into<ValueExpr>) -> ValueExpr {
function("right", [expr.into(), count.into()])
}
pub fn lpad(
expr: impl Into<ValueExpr>,
length: impl Into<ValueExpr>,
fill: impl Into<ValueExpr>,
) -> ValueExpr {
function("lpad", [expr.into(), length.into(), fill.into()])
}
pub fn rpad(
expr: impl Into<ValueExpr>,
length: impl Into<ValueExpr>,
fill: impl Into<ValueExpr>,
) -> ValueExpr {
function("rpad", [expr.into(), length.into(), fill.into()])
}
pub fn concat(args: impl IntoIterator<Item = impl Into<ValueExpr>>) -> ValueExpr {
function("concat", args)
}
pub fn concat_ws(
separator: impl Into<ValueExpr>,
args: impl IntoIterator<Item = impl Into<ValueExpr>>,
) -> ValueExpr {
let mut values = vec![separator.into()];
values.extend(args.into_iter().map(Into::into));
function("concat_ws", values)
}
pub fn reverse(expr: impl Into<ValueExpr>) -> ValueExpr {
function("reverse", [expr])
}
pub fn md5(expr: impl Into<ValueExpr>) -> ValueExpr {
function("md5", [expr])
}