fletch-orm 1.0.0

Lightweight database toolkit built on SQLx
Documentation
//! Filter types for building WHERE clauses.

use crate::value::Value;

/// Comparison operators for filter expressions.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Op {
    /// Equal (`=`)
    Eq,
    /// Not equal (`!=` / `<>`)
    Ne,
    /// Less than (`<`)
    Lt,
    /// Less than or equal (`<=`)
    Le,
    /// Greater than (`>`)
    Gt,
    /// Greater than or equal (`>=`)
    Ge,
    /// `LIKE` pattern match
    Like,
    /// `IN` a list of values
    In,
    /// `IS NULL`
    IsNull,
    /// `IS NOT NULL`
    IsNotNull,
}

/// A single filter condition: column, operator, and bound value(s).
#[derive(Debug, Clone)]
pub struct Filter {
    pub(crate) column: String,
    pub(crate) op: Op,
    pub(crate) values: Vec<Value>,
}

impl Filter {
    /// Create a filter for a single-value operator (Eq, Ne, Lt, Le, Gt, Ge, Like).
    pub fn new(column: impl Into<String>, op: Op, value: impl Into<Value>) -> Self {
        Self {
            column: column.into(),
            op,
            values: vec![value.into()],
        }
    }

    /// Create an `IN` filter with multiple values.
    pub fn in_list(column: impl Into<String>, values: Vec<Value>) -> Self {
        Self {
            column: column.into(),
            op: Op::In,
            values,
        }
    }

    /// Create an `IS NULL` filter.
    pub fn is_null(column: impl Into<String>) -> Self {
        Self {
            column: column.into(),
            op: Op::IsNull,
            values: vec![],
        }
    }

    /// Create an `IS NOT NULL` filter.
    pub fn is_not_null(column: impl Into<String>) -> Self {
        Self {
            column: column.into(),
            op: Op::IsNotNull,
            values: vec![],
        }
    }
}