nodedb_sql/engine_rules/
mod.rs1pub mod columnar;
2pub mod document_schemaless;
3pub mod document_strict;
4pub mod kv;
5pub mod spatial;
6pub mod timeseries;
7
8use crate::error::Result;
9use crate::types::*;
10
11pub struct InsertParams {
13 pub collection: String,
14 pub columns: Vec<String>,
15 pub rows: Vec<Vec<(String, SqlValue)>>,
16 pub column_defaults: Vec<(String, String)>,
17}
18
19pub struct ScanParams {
21 pub collection: String,
22 pub alias: Option<String>,
23 pub filters: Vec<Filter>,
24 pub projection: Vec<Projection>,
25 pub sort_keys: Vec<SortKey>,
26 pub limit: Option<usize>,
27 pub offset: usize,
28 pub distinct: bool,
29 pub window_functions: Vec<WindowSpec>,
30}
31
32pub struct PointGetParams {
34 pub collection: String,
35 pub alias: Option<String>,
36 pub key_column: String,
37 pub key_value: SqlValue,
38}
39
40pub struct UpdateParams {
42 pub collection: String,
43 pub assignments: Vec<(String, SqlExpr)>,
44 pub filters: Vec<Filter>,
45 pub target_keys: Vec<SqlValue>,
46 pub returning: bool,
47}
48
49pub struct DeleteParams {
51 pub collection: String,
52 pub filters: Vec<Filter>,
53 pub target_keys: Vec<SqlValue>,
54}
55
56pub struct UpsertParams {
58 pub collection: String,
59 pub columns: Vec<String>,
60 pub rows: Vec<Vec<(String, SqlValue)>>,
61 pub column_defaults: Vec<(String, String)>,
62}
63
64pub struct AggregateParams {
66 pub collection: String,
67 pub alias: Option<String>,
68 pub filters: Vec<Filter>,
69 pub group_by: Vec<SqlExpr>,
70 pub aggregates: Vec<AggregateExpr>,
71 pub having: Vec<Filter>,
72 pub limit: usize,
73 pub bucket_interval_ms: Option<i64>,
75 pub group_columns: Vec<String>,
77 pub has_auto_tier: bool,
79}
80
81pub trait EngineRules {
88 fn plan_insert(&self, params: InsertParams) -> Result<Vec<SqlPlan>>;
91 fn plan_upsert(&self, params: UpsertParams) -> Result<Vec<SqlPlan>>;
94 fn plan_scan(&self, params: ScanParams) -> Result<SqlPlan>;
96 fn plan_point_get(&self, params: PointGetParams) -> Result<SqlPlan>;
99 fn plan_update(&self, params: UpdateParams) -> Result<Vec<SqlPlan>>;
101 fn plan_delete(&self, params: DeleteParams) -> Result<Vec<SqlPlan>>;
103 fn plan_aggregate(&self, params: AggregateParams) -> Result<SqlPlan>;
105}
106
107pub fn resolve_engine_rules(engine: EngineType) -> &'static dyn EngineRules {
111 match engine {
112 EngineType::DocumentSchemaless => &document_schemaless::SchemalessRules,
113 EngineType::DocumentStrict => &document_strict::StrictRules,
114 EngineType::KeyValue => &kv::KvRules,
115 EngineType::Columnar => &columnar::ColumnarRules,
116 EngineType::Timeseries => ×eries::TimeseriesRules,
117 EngineType::Spatial => &spatial::SpatialRules,
118 }
119}