Skip to main content

mentedb_query/
ast.rs

1//! AST types for MQL statements.
2
3use mentedb_core::edge::EdgeType;
4use mentedb_core::memory::MemoryType;
5use mentedb_core::types::MemoryId;
6use serde::{Deserialize, Serialize};
7use uuid::Uuid;
8
9/// Top-level MQL statement.
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub enum Statement {
12    Recall(RecallStatement),
13    Relate(RelateStatement),
14    Forget(ForgetStatement),
15    Consolidate(ConsolidateStatement),
16    Traverse(TraverseStatement),
17}
18
19#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
20pub struct RecallStatement {
21    pub filters: Vec<Filter>,
22    pub near: Option<Vec<f32>>,
23    pub limit: Option<usize>,
24    pub order_by: Option<OrderBy>,
25}
26
27#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
28pub struct RelateStatement {
29    pub source: MemoryId,
30    pub target: MemoryId,
31    pub edge_type: EdgeType,
32    pub weight: Option<f32>,
33}
34
35#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
36pub struct ForgetStatement {
37    pub target: MemoryId,
38}
39
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
41pub struct ConsolidateStatement {
42    pub filters: Vec<Filter>,
43}
44
45#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
46pub struct TraverseStatement {
47    pub start: MemoryId,
48    pub depth: usize,
49    pub edge_filter: Option<Vec<EdgeType>>,
50}
51
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
53pub struct Filter {
54    pub field: Field,
55    pub op: Operator,
56    pub value: Value,
57}
58
59#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
60pub enum Field {
61    Content,
62    Type,
63    Tag,
64    Agent,
65    Space,
66    Salience,
67    Confidence,
68    Created,
69    Accessed,
70    /// Temporal validity at a point in time: `AS OF <t>` keeps only memories that
71    /// were valid at timestamp `t` (valid_from <= t < valid_until), so a query can
72    /// see what was true at a past moment, including facts later superseded.
73    ValidAt,
74}
75
76#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
77pub enum Operator {
78    Eq,
79    Neq,
80    Gt,
81    Lt,
82    Gte,
83    Lte,
84    SimilarTo,
85    /// Set membership: the field equals any element of a list value.
86    In,
87    /// Substring (content) or membership (tag) test against a text value.
88    Contains,
89}
90
91#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
92pub enum Value {
93    Text(String),
94    Number(f64),
95    Integer(i64),
96    Bool(bool),
97    Uuid(Uuid),
98    Vector(Vec<f32>),
99    MemoryType(MemoryType),
100    EdgeType(EdgeType),
101    /// A list of values, for the `IN` operator.
102    List(Vec<Value>),
103}
104
105#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
106pub struct OrderBy {
107    pub field: Field,
108    pub descending: bool,
109}