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}
71
72#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
73pub enum Operator {
74    Eq,
75    Neq,
76    Gt,
77    Lt,
78    Gte,
79    Lte,
80    SimilarTo,
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
84pub enum Value {
85    Text(String),
86    Number(f64),
87    Integer(i64),
88    Bool(bool),
89    Uuid(Uuid),
90    Vector(Vec<f32>),
91    MemoryType(MemoryType),
92    EdgeType(EdgeType),
93}
94
95#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
96pub struct OrderBy {
97    pub field: Field,
98    pub descending: bool,
99}