#[non_exhaustive]pub enum WhereOperator {
Show 57 variants
Eq(Field, Value),
Neq(Field, Value),
Gt(Field, Value),
Gte(Field, Value),
Lt(Field, Value),
Lte(Field, Value),
In(Field, Vec<Value>),
Nin(Field, Vec<Value>),
Contains(Field, String),
ArrayContains(Field, Value),
ArrayContainedBy(Field, Value),
ArrayOverlaps(Field, Vec<Value>),
LenEq(Field, usize),
LenGt(Field, usize),
LenGte(Field, usize),
LenLt(Field, usize),
LenLte(Field, usize),
Icontains(Field, String),
Startswith(Field, String),
Istartswith(Field, String),
Endswith(Field, String),
Iendswith(Field, String),
Like(Field, String),
Ilike(Field, String),
IsNull(Field, bool),
L2Distance {
field: Field,
vector: Vec<f32>,
threshold: f32,
},
CosineDistance {
field: Field,
vector: Vec<f32>,
threshold: f32,
},
InnerProduct {
field: Field,
vector: Vec<f32>,
threshold: f32,
},
L1Distance {
field: Field,
vector: Vec<f32>,
threshold: f32,
},
HammingDistance {
field: Field,
vector: Vec<f32>,
threshold: f32,
},
JaccardDistance {
field: Field,
set: Vec<String>,
threshold: f32,
},
Matches {
field: Field,
query: String,
language: Option<String>,
},
PlainQuery {
field: Field,
query: String,
},
PhraseQuery {
field: Field,
query: String,
language: Option<String>,
},
WebsearchQuery {
field: Field,
query: String,
language: Option<String>,
},
IsIPv4(Field),
IsIPv6(Field),
IsPrivate(Field),
IsPublic(Field),
IsLoopback(Field),
InSubnet {
field: Field,
subnet: String,
},
ContainsSubnet {
field: Field,
subnet: String,
},
ContainsIP {
field: Field,
ip: String,
},
IPRangeOverlap {
field: Field,
range: String,
},
StrictlyContains(Field, Value),
AncestorOf {
field: Field,
path: String,
},
DescendantOf {
field: Field,
path: String,
},
MatchesLquery {
field: Field,
pattern: String,
},
MatchesLtxtquery {
field: Field,
query: String,
},
MatchesAnyLquery {
field: Field,
patterns: Vec<String>,
},
DepthEq {
field: Field,
depth: usize,
},
DepthNeq {
field: Field,
depth: usize,
},
DepthGt {
field: Field,
depth: usize,
},
DepthGte {
field: Field,
depth: usize,
},
DepthLt {
field: Field,
depth: usize,
},
DepthLte {
field: Field,
depth: usize,
},
Lca {
field: Field,
paths: Vec<String>,
},
}Expand description
WHERE clause operators
Supports type-safe, audit-friendly WHERE clause construction without raw SQL strings.
§Categories
- Comparison: Eq, Neq, Gt, Gte, Lt, Lte
- Array: In, Nin, Contains,
ArrayContains,ArrayContainedBy,ArrayOverlaps - Array Length:
LenEq,LenGt,LenGte,LenLt,LenLte - String: Icontains, Startswith, Istartswith, Endswith, Iendswith, Like, Ilike
- Null:
IsNull - Vector Distance:
L2Distance,CosineDistance,InnerProduct,L1Distance,HammingDistance,JaccardDistance - Full-Text Search: Matches,
PlainQuery,PhraseQuery,WebsearchQuery - Network:
IsIPv4,IsIPv6,IsPrivate,IsPublic,IsLoopback,InSubnet,ContainsSubnet,ContainsIP,IPRangeOverlap - JSONB:
StrictlyContains LTree:AncestorOf,DescendantOf,MatchesLquery,MatchesLtxtquery,MatchesAnyLquery,DepthEq,DepthNeq,DepthGt,DepthGte,DepthLt,DepthLte, Lca
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Eq(Field, Value)
Equal: field = value
Neq(Field, Value)
Not equal: field != value or field <> value
Gt(Field, Value)
Greater than: field > value
Gte(Field, Value)
Greater than or equal: field >= value
Lt(Field, Value)
Less than: field < value
Lte(Field, Value)
Less than or equal: field <= value
In(Field, Vec<Value>)
Array contains value: field IN (...)
Nin(Field, Vec<Value>)
Array does not contain value: field NOT IN (...)
Contains(Field, String)
String contains substring: field LIKE '%substring%'
§Warning — LIKE wildcard injection
The substring is embedded between % anchors. Characters % (any sequence) and
_ (any single character) in the substring itself are also treated as LIKE
wildcards, causing broader matches than intended. Escape user-supplied values
(replace % → \% and _ → \_) before constructing this variant.
ArrayContains(Field, Value)
Array contains element: PostgreSQL array operator @>
Generated SQL: field @> array[value]
ArrayContainedBy(Field, Value)
Array is contained by: PostgreSQL array operator <@
Generated SQL: field <@ array[value]
ArrayOverlaps(Field, Vec<Value>)
Arrays overlap: PostgreSQL array operator &&
Generated SQL: field && array[value]
LenEq(Field, usize)
Array length equals: array_length(field, 1) = value
LenGt(Field, usize)
Array length greater than: array_length(field, 1) > value
LenGte(Field, usize)
Array length greater than or equal: array_length(field, 1) >= value
LenLt(Field, usize)
Array length less than: array_length(field, 1) < value
LenLte(Field, usize)
Array length less than or equal: array_length(field, 1) <= value
Icontains(Field, String)
Case-insensitive contains: field ILIKE '%substring%'
§Warning — LIKE wildcard injection
Same escaping requirements as WhereOperator::Contains. ILIKE applies the same
wildcard semantics, so % and _ in the substring expand unexpectedly.
Startswith(Field, String)
Starts with: field LIKE 'prefix%'
§Warning — LIKE wildcard injection
The prefix string is passed verbatim before the trailing %. Characters % and _
in the prefix are treated as wildcards; escape user-supplied values before use.
Istartswith(Field, String)
Starts with (case-insensitive): field ILIKE 'prefix%'
§Warning — LIKE wildcard injection
Same escaping requirements as WhereOperator::Startswith.
Endswith(Field, String)
Ends with: field LIKE '%suffix'
§Warning — LIKE wildcard injection
The suffix string is passed verbatim after the leading %. Characters % and _
in the suffix are treated as wildcards; escape user-supplied values before use.
Iendswith(Field, String)
Ends with (case-insensitive): field ILIKE '%suffix'
§Warning — LIKE wildcard injection
Same escaping requirements as WhereOperator::Endswith.
Like(Field, String)
LIKE pattern matching: field LIKE pattern
§Warning — LIKE wildcard injection
The pattern string is passed to the database as-is. Characters % (any
sequence) and _ (any single character) are SQL LIKE wildcards. If the
pattern originates from user input, callers must escape these
characters (e.g. replace % → \% and _ → \_) before constructing
this variant, and append the appropriate ESCAPE '\' clause.
Ilike(Field, String)
Case-insensitive LIKE: field ILIKE pattern
§Warning — LIKE wildcard injection
Same escaping requirements as WhereOperator::Like. The % and _
wildcards apply to ILIKE patterns as well.
IsNull(Field, bool)
IS NULL: field IS NULL or field IS NOT NULL
When the boolean is true, generates IS NULL
When false, generates IS NOT NULL
L2Distance
L2 (Euclidean) distance: l2_distance(field, vector) < threshold
Requires pgvector extension.
Fields
CosineDistance
Cosine distance: cosine_distance(field, vector) < threshold
Requires pgvector extension.
Fields
InnerProduct
Inner product: inner_product(field, vector) > threshold
Requires pgvector extension.
Fields
L1Distance
L1 (Manhattan) distance: l1_distance(field, vector) < threshold
Requires pgvector extension.
Fields
HammingDistance
Hamming distance: hamming_distance(field, vector) < threshold
Requires pgvector extension. Works with bit vectors.
Fields
JaccardDistance
Jaccard distance: jaccard_distance(field, set) < threshold
Works with text arrays, measures set overlap.
Fields
Matches
Full-text search with language: field @@ plainto_tsquery(language, query)
If language is None, defaults to ‘english’
Fields
PlainQuery
Plain text query: field @@ plainto_tsquery(query)
Uses no language specification
PhraseQuery
Phrase query with language: field @@ phraseto_tsquery(language, query)
If language is None, defaults to ‘english’
Fields
WebsearchQuery
Web search query with language: field @@ websearch_to_tsquery(language, query)
If language is None, defaults to ‘english’
Fields
IsIPv4(Field)
Check if IP is IPv4: family(field) = 4
IsIPv6(Field)
Check if IP is IPv6: family(field) = 6
IsPrivate(Field)
Check if IP is private (RFC1918): matches private ranges
IsPublic(Field)
Check if IP is public (not private): opposite of IsPrivate
IsLoopback(Field)
Check if IP is loopback: IPv4 127.0.0.0/8 or IPv6 ::1/128
InSubnet
IP is in subnet: field << subnet
The subnet should be in CIDR notation (e.g., “192.168.0.0/24”)
ContainsSubnet
Network contains subnet: field >> subnet
The subnet should be in CIDR notation
Fields
ContainsIP
Network/range contains IP: field >> ip
The IP should be a single address (e.g., “192.168.1.1”)
IPRangeOverlap
IP ranges overlap: field && range
The range should be in CIDR notation
StrictlyContains(Field, Value)
JSONB strictly contains: field @> value
Checks if the JSONB field strictly contains the given value
AncestorOf
Ancestor of: field @> path
Checks if the ltree field is an ancestor of the given path
DescendantOf
Descendant of: field <@ path
Checks if the ltree field is a descendant of the given path
MatchesLquery
Matches lquery: field ~ lquery
Checks if the ltree field matches the given lquery pattern
MatchesLtxtquery
Matches ltxtquery: field @ ltxtquery
Checks if the ltree field matches the given ltxtquery pattern (Boolean query syntax)
Fields
MatchesAnyLquery
Matches any lquery: field ? array[lqueries]
Checks if the ltree field matches any of the given lquery patterns
Fields
DepthEq
LTree depth equals: nlevel(field) = depth
DepthNeq
LTree depth not equals: nlevel(field) != depth
DepthGt
LTree depth greater than: nlevel(field) > depth
DepthGte
LTree depth greater than or equal: nlevel(field) >= depth
DepthLt
LTree depth less than: nlevel(field) < depth
DepthLte
LTree depth less than or equal: nlevel(field) <= depth
Lca
Lowest common ancestor: lca(field, paths)
Checks if the ltree field equals the lowest common ancestor of the given paths
Implementations§
Source§impl WhereOperator
impl WhereOperator
Trait Implementations§
Source§impl Clone for WhereOperator
impl Clone for WhereOperator
Source§fn clone(&self) -> WhereOperator
fn clone(&self) -> WhereOperator
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more