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 pub on_conflict_updates: Vec<(String, SqlExpr)>,
66}
67
68pub struct AggregateParams {
70 pub collection: String,
71 pub alias: Option<String>,
72 pub filters: Vec<Filter>,
73 pub group_by: Vec<SqlExpr>,
74 pub aggregates: Vec<AggregateExpr>,
75 pub having: Vec<Filter>,
76 pub limit: usize,
77 pub bucket_interval_ms: Option<i64>,
79 pub group_columns: Vec<String>,
81 pub has_auto_tier: bool,
83}
84
85pub trait EngineRules {
92 fn plan_insert(&self, params: InsertParams) -> Result<Vec<SqlPlan>>;
95 fn plan_upsert(&self, params: UpsertParams) -> Result<Vec<SqlPlan>>;
98 fn plan_scan(&self, params: ScanParams) -> Result<SqlPlan>;
100 fn plan_point_get(&self, params: PointGetParams) -> Result<SqlPlan>;
103 fn plan_update(&self, params: UpdateParams) -> Result<Vec<SqlPlan>>;
105 fn plan_delete(&self, params: DeleteParams) -> Result<Vec<SqlPlan>>;
107 fn plan_aggregate(&self, params: AggregateParams) -> Result<SqlPlan>;
109}
110
111pub fn resolve_engine_rules(engine: EngineType) -> &'static dyn EngineRules {
115 match engine {
116 EngineType::DocumentSchemaless => &document_schemaless::SchemalessRules,
117 EngineType::DocumentStrict => &document_strict::StrictRules,
118 EngineType::KeyValue => &kv::KvRules,
119 EngineType::Columnar => &columnar::ColumnarRules,
120 EngineType::Timeseries => ×eries::TimeseriesRules,
121 EngineType::Spatial => &spatial::SpatialRules,
122 }
123}