Plan a list of parsed statements.
(
statements: &[sqlparser::ast::Statement],
is_upsert: bool,
temporal: TemporalScope,
catalog: &dyn SqlCatalog,
)
| 124 | |
| 125 | /// Plan a list of parsed statements. |
| 126 | fn 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. |
no test coverage detected