1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//! Built-in SQL functions and operators supported by the easy-sql macros.
//!
//! The items below are recognized by [`query!`](crate::query) and [`query_lazy!`](crate::query_lazy)
//! across all drivers. Individual drivers opt into support by implementing the corresponding
//! marker traits (typically via [`impl_supports_fn`](crate::driver::impl_supports_fn),
//! [`impl_supports_fn_any`](crate::driver::impl_supports_fn_any), or manual impls).
//!
//! For custom SQL functions not listed here, use
//! [`custom_sql_function!`](crate::custom_sql_function).
//!
//! ## Built-in SQL functions
//! - Aggregates:
//! - `COUNT` → [`SupportsCount`](crate::driver::functions::SupportsCount)
//! - `SUM` → [`SupportsSum`](crate::driver::functions::SupportsSum)
//! - `AVG` → [`SupportsAvg`](crate::driver::functions::SupportsAvg)
//! - `MIN` → [`SupportsMin`](crate::driver::functions::SupportsMin)
//! - `MAX` → [`SupportsMax`](crate::driver::functions::SupportsMax)
//! - Text:
//! - `CONCAT` → [`SupportsConcat`](crate::driver::functions::SupportsConcat)
//! - `UPPER` → [`SupportsUpper`](crate::driver::functions::SupportsUpper)
//! - `LOWER` → [`SupportsLower`](crate::driver::functions::SupportsLower)
//! - `LENGTH` → [`SupportsLength`](crate::driver::functions::SupportsLength)
//! - `TRIM` → [`SupportsTrim`](crate::driver::functions::SupportsTrim)
//! - `SUBSTRING` → [`SupportsSubstring`](crate::driver::functions::SupportsSubstring)
//! - `SUBSTR` → [`SupportsSubstr`](crate::driver::functions::SupportsSubstr)
//! - Null handling:
//! - `COALESCE` → [`SupportsCoalesce`](crate::driver::functions::SupportsCoalesce)
//! - `NULLIF` → [`SupportsNullif`](crate::driver::functions::SupportsNullif)
//! - `IFNULL` → [`SupportsIfnull`](crate::driver::functions::SupportsIfnull)
//! - Date/time:
//! - `NOW` → [`SupportsNow`](crate::driver::functions::SupportsNow)
//! - `DATE` → [`SupportsDate`](crate::driver::functions::SupportsDate)
//! - `TIME` → [`SupportsTime`](crate::driver::functions::SupportsTime)
//! - `DATETIME` → [`SupportsDatetime`](crate::driver::functions::SupportsDatetime)
//! - `CURRENT_TIMESTAMP` → [`SupportsCurrentTimestamp`](crate::driver::functions::SupportsCurrentTimestamp)
//! - `CURRENT_DATE` → [`SupportsCurrentDate`](crate::driver::functions::SupportsCurrentDate)
//! - `CURRENT_TIME` → [`SupportsCurrentTime`](crate::driver::functions::SupportsCurrentTime)
//! - Math:
//! - `ABS` → [`SupportsAbs`](crate::driver::functions::SupportsAbs)
//! - `ROUND` → [`SupportsRound`](crate::driver::functions::SupportsRound)
//! - `CEIL` → [`SupportsCeil`](crate::driver::functions::SupportsCeil)
//! - `CEILING` → [`SupportsCeiling`](crate::driver::functions::SupportsCeiling)
//! - `FLOOR` → [`SupportsFloor`](crate::driver::functions::SupportsFloor)
//! - `POWER` → [`SupportsPower`](crate::driver::functions::SupportsPower)
//! - `POW` → [`SupportsPow`](crate::driver::functions::SupportsPow)
//! - `SQRT` → [`SupportsSqrt`](crate::driver::functions::SupportsSqrt)
//! - `MOD` → [`SupportsMod`](crate::driver::functions::SupportsMod)
//! - Misc:
//! - `CAST` → [`SupportsCast`](crate::driver::functions::SupportsCast)
//! - `DISTINCT` → [`SupportsDistinct`](crate::driver::functions::SupportsDistinct)
//!
//! ## Built-in operators
//! - Boolean logic:
//! - `AND` → [`SupportsAnd`](crate::driver::operators::SupportsAnd)
//! - `OR` → [`SupportsOr`](crate::driver::operators::SupportsOr)
//! - Arithmetic:
//! - `+` → [`SupportsAdd`](crate::driver::operators::SupportsAdd)
//! - `-` → [`SupportsSub`](crate::driver::operators::SupportsSub)
//! - `*` → [`SupportsMul`](crate::driver::operators::SupportsMul)
//! - `/` → [`SupportsDiv`](crate::driver::operators::SupportsDiv)
//! - `%` → [`SupportsModOperator`](crate::driver::operators::SupportsModOperator)
//! - String/json:
//! - `||` → [`SupportsConcatOperator`](crate::driver::operators::SupportsConcatOperator)
//! - `->` → [`SupportsJsonExtract`](crate::driver::operators::SupportsJsonExtract)
//! - `->>` → [`SupportsJsonExtractText`](crate::driver::operators::SupportsJsonExtractText)
//! - Bitwise:
//! - `&` → [`SupportsBitAnd`](crate::driver::operators::SupportsBitAnd)
//! - `|` → [`SupportsBitOr`](crate::driver::operators::SupportsBitOr)
//! - `<<` → [`SupportsBitShiftLeft`](crate::driver::operators::SupportsBitShiftLeft)
//! - `>>` → [`SupportsBitShiftRight`](crate::driver::operators::SupportsBitShiftRight)
//! - Comparison:
//! - `=` → [`SupportsEqual`](crate::driver::operators::SupportsEqual)
//! - `!=` → [`SupportsNotEqual`](crate::driver::operators::SupportsNotEqual)
//! - `>` → [`SupportsGreaterThan`](crate::driver::operators::SupportsGreaterThan)
//! - `>=` → [`SupportsGreaterThanOrEqual`](crate::driver::operators::SupportsGreaterThanOrEqual)
//! - `<` → [`SupportsLessThan`](crate::driver::operators::SupportsLessThan)
//! - `<=` → [`SupportsLessThanOrEqual`](crate::driver::operators::SupportsLessThanOrEqual)
//! - `LIKE` → [`SupportsLike`](crate::driver::operators::SupportsLike)
//! - `IS NULL` → [`SupportsIsNull`](crate::driver::operators::SupportsIsNull)
//! - `IS NOT NULL` → [`SupportsIsNotNull`](crate::driver::operators::SupportsIsNotNull)
//! - `IN` → [`SupportsIn`](crate::driver::operators::SupportsIn)
//! - `BETWEEN` → [`SupportsBetween`](crate::driver::operators::SupportsBetween)