MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / plan_statements

Function plan_statements

nodedb-sql/src/lib.rs:126–181  ·  view source on GitHub ↗

Plan a list of parsed statements.

(
    statements: &[sqlparser::ast::Statement],
    is_upsert: bool,
    temporal: TemporalScope,
    catalog: &dyn SqlCatalog,
)

Source from the content-addressed store, hash-verified

124
125/// Plan a list of parsed statements.
126fn plan_statements(
127 statements: &[sqlparser::ast::Statement],
128 is_upsert: bool,
129 temporal: TemporalScope,
130 catalog: &dyn SqlCatalog,
131) -> Result<Vec<SqlPlan>> {
132 let functions = FunctionRegistry::new();
133 let mut plans = Vec::new();
134
135 for stmt in statements {
136 match classify(stmt) {
137 StatementKind::Select(query) => {
138 let plan = planner::select::plan_query(query, catalog, &functions, temporal)?;
139 let plan = optimizer::optimize(plan);
140 plans.push(plan);
141 }
142 StatementKind::Insert(ins) => {
143 let mut dml_plans = if is_upsert {
144 planner::dml::plan_upsert(ins, catalog)?
145 } else {
146 planner::dml::plan_insert(ins, catalog)?
147 };
148 plans.append(&mut dml_plans);
149 }
150 StatementKind::Update(stmt) => {
151 let mut update_plans = planner::dml::plan_update(stmt, catalog)?;
152 plans.append(&mut update_plans);
153 }
154 StatementKind::Delete(stmt) => {
155 let mut delete_plans = planner::dml::plan_delete(stmt, catalog)?;
156 plans.append(&mut delete_plans);
157 }
158 StatementKind::Truncate(stmt) => {
159 let mut trunc_plans = planner::dml::plan_truncate_stmt(stmt)?;
160 plans.append(&mut trunc_plans);
161 }
162 StatementKind::Merge(stmt) => {
163 let mut merge_plans = planner::merge::plan_merge(stmt, catalog)?;
164 plans.append(&mut merge_plans);
165 }
166 StatementKind::CreateIndex(ci) => {
167 plans.push(planner::index_ddl::plan_create_index(ci)?);
168 }
169 StatementKind::DropIndex(stmt) => {
170 plans.push(planner::index_ddl::plan_drop_index(stmt)?);
171 }
172 StatementKind::Other => {
173 return Err(SqlError::Unsupported {
174 detail: format!("statement type: {stmt}"),
175 });
176 }
177 }
178 }
179
180 Ok(plans)
181}
182
183/// Plan one parsed array statement.

Callers 2

plan_sqlFunction · 0.85
plan_sql_with_paramsFunction · 0.85

Calls 13

plan_queryFunction · 0.85
plan_upsertFunction · 0.85
plan_insertFunction · 0.85
plan_updateFunction · 0.85
plan_deleteFunction · 0.85
plan_truncate_stmtFunction · 0.85
plan_mergeFunction · 0.85
plan_create_indexFunction · 0.85
plan_drop_indexFunction · 0.85
classifyFunction · 0.50
optimizeFunction · 0.50
pushMethod · 0.45

Tested by

no test coverage detected