| 15 | use crate::types_array::{ArrayAttrLiteral, ArrayAttrType, ArrayCoordLiteral, ArrayDimType}; |
| 16 | |
| 17 | pub fn plan_insert_array(ast: &InsertArrayAst, catalog: &dyn SqlCatalog) -> Result<Vec<SqlPlan>> { |
| 18 | let view = catalog |
| 19 | .lookup_array(&ast.name) |
| 20 | .ok_or_else(|| SqlError::Parse { |
| 21 | detail: format!("INSERT INTO ARRAY {}: array not found", ast.name), |
| 22 | })?; |
| 23 | if ast.rows.is_empty() { |
| 24 | return Err(SqlError::Parse { |
| 25 | detail: format!("INSERT INTO ARRAY {}: at least one row required", ast.name), |
| 26 | }); |
| 27 | } |
| 28 | for (ri, row) in ast.rows.iter().enumerate() { |
| 29 | validate_coords(&ast.name, ri, &row.coords, &view)?; |
| 30 | validate_attrs(&ast.name, ri, &row.attrs, &view)?; |
| 31 | } |
| 32 | Ok(vec![SqlPlan::InsertArray { |
| 33 | name: ast.name.clone(), |
| 34 | rows: ast.rows.clone(), |
| 35 | }]) |
| 36 | } |
| 37 | |
| 38 | pub fn plan_delete_array(ast: &DeleteArrayAst, catalog: &dyn SqlCatalog) -> Result<Vec<SqlPlan>> { |
| 39 | let view = catalog |