qql-core 0.2.1

Parser, typed AST, validation, and transformations for the Qdrant Query Language
Documentation
use super::{FilterExpr, Value};
use alloc::boxed::Box;
use alloc::string::String;
use alloc::vec::Vec;

#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum FormulaExpr {
    Constant {
        value: f64,
    },
    Variable {
        name: String,
    },
    Sum {
        left: Box<FormulaExpr>,
        right: Box<FormulaExpr>,
    },
    Sub {
        left: Box<FormulaExpr>,
        right: Box<FormulaExpr>,
    },
    Mul {
        left: Box<FormulaExpr>,
        right: Box<FormulaExpr>,
    },
    Div {
        left: Box<FormulaExpr>,
        right: Box<FormulaExpr>,
        by_zero_default: Option<f64>,
    },
    Neg {
        operand: Box<FormulaExpr>,
    },
    Abs {
        x: Box<FormulaExpr>,
    },
    Sqrt {
        x: Box<FormulaExpr>,
    },
    Log {
        x: Box<FormulaExpr>,
    },
    Ln {
        x: Box<FormulaExpr>,
    },
    Exp {
        x: Box<FormulaExpr>,
    },
    Pow {
        base: Box<FormulaExpr>,
        exponent: Box<FormulaExpr>,
    },
    GeoDistance {
        lat: f64,
        lon: f64,
        field: String,
    },
    Decay {
        kind: String,
        x: Box<FormulaExpr>,
        target: Option<Box<FormulaExpr>>,
        scale: Option<f64>,
        midpoint: Option<f64>,
    },
    Case {
        cond: Box<FilterExpr>,
        then_: Box<FormulaExpr>,
        else_: Box<FormulaExpr>,
    },
    MatchCondition {
        field: String,
        values: Vec<Value>,
    },
    Datetime {
        value: String,
    },
    DatetimeKey {
        key: String,
    },
}