Skip to main content

Module operators

Module operators 

Source
Expand description

Operator-based SQL generation system

This module provides type-safe operator abstractions for building WHERE clauses, ORDER BY clauses, and query modifiers (LIMIT/OFFSET) without raw SQL strings.

§Design Philosophy

fraiseql-wire maintains backward compatibility with the existing string-based API while offering operator abstractions for type safety and auditability:

use std::collections::HashMap;
use fraiseql_wire::operators::{WhereOperator, Field, Value, generate_where_operator_sql};

// Build a type-safe operator
let op = WhereOperator::Eq(
    Field::JsonbField("name".to_string()),
    Value::String("John".to_string()),
);

// Generate parameterized SQL
let mut idx = 1;
let mut params = HashMap::new();
let sql = generate_where_operator_sql(&op, &mut idx, &mut params).unwrap();
assert!(sql.contains("name"));

§Operator Coverage

  • Comparison: Eq, Neq, Gt, Gte, Lt, Lte
  • Array: In, Nin, Contains, ArrayContains, ArrayContainedBy, ArrayOverlaps
  • Array Length: LenEq, LenGt, LenGte, LenLt, LenLte
  • String: Contains, Icontains, Startswith, Endswith, Like, Ilike
  • Null: IsNull
  • Vector Distance: L2Distance, CosineDistance, InnerProduct, JaccardDistance
  • Full-Text Search: Matches, PlainQuery, PhraseQuery, WebsearchQuery
  • Network: IsIPv4, IsIPv6, IsPrivate, IsLoopback, InSubnet, ContainsSubnet, ContainsIP, IPRangeOverlap

Re-exports§

pub use field::Field;
pub use field::Value;
pub use order_by::Collation;
pub use order_by::FieldSource;
pub use order_by::NullsHandling;
pub use order_by::OrderByClause;
pub use order_by::SortOrder;
pub use sql_gen::generate_where_operator_sql;
pub use where_operator::WhereOperator;

Modules§

field
Field and value type definitions for operators
order_by
ORDER BY clause specification
sql_gen
SQL generation from operators
where_operator
WHERE clause operators