nodedb_sql/planner/array_fn/
maint_fn.rs1use sqlparser::ast;
7
8use super::helpers::{collect_args, require_array_name};
9use crate::error::Result;
10use crate::types::{SqlCatalog, SqlPlan};
11
12pub fn try_plan_array_maint_fn(
16 items: &[ast::SelectItem],
17 catalog: &dyn SqlCatalog,
18) -> Result<Option<SqlPlan>> {
19 if items.len() != 1 {
20 return Ok(None);
21 }
22 let func = match &items[0] {
23 ast::SelectItem::UnnamedExpr(ast::Expr::Function(f))
24 | ast::SelectItem::ExprWithAlias {
25 expr: ast::Expr::Function(f),
26 ..
27 } => f,
28 _ => return Ok(None),
29 };
30 let fn_name = crate::parser::normalize::normalize_object_name_checked(&func.name)?;
31 let arg_exprs = match &func.args {
32 ast::FunctionArguments::List(list) => collect_args(&list.args),
33 _ => Vec::new(),
34 };
35 match fn_name.as_str() {
36 "array_flush" => {
37 let name = require_array_name(&arg_exprs, 0, "ARRAY_FLUSH", catalog)?;
38 Ok(Some(SqlPlan::ArrayFlush { name }))
39 }
40 "array_compact" => {
41 let name = require_array_name(&arg_exprs, 0, "ARRAY_COMPACT", catalog)?;
42 Ok(Some(SqlPlan::ArrayCompact { name }))
43 }
44 _ => Ok(None),
45 }
46}