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}
86
87#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
88pub enum Value {
89    Text(String),
90    Number(f64),
91    Integer(i64),
92    Bool(bool),
93    Uuid(Uuid),
94    Vector(Vec<f32>),
95    MemoryType(MemoryType),
96    EdgeType(EdgeType),
97}
98
99#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
100pub struct OrderBy {
101    pub field: Field,
102    pub descending: bool,
103}