Evaluate a single SQL expression string with an optional row context.
(
sql_text: &str,
ctx: &HashMap<String, nodedb_types::Value>,
)
| 176 | |
| 177 | /// Evaluate a single SQL expression string with an optional row context. |
| 178 | fn eval_sql_expr( |
| 179 | sql_text: &str, |
| 180 | ctx: &HashMap<String, nodedb_types::Value>, |
| 181 | ) -> Option<nodedb_types::Value> { |
| 182 | let dialect = sqlparser::dialect::PostgreSqlDialect {}; |
| 183 | let full_sql = format!("SELECT {sql_text}"); |
| 184 | let stmts = sqlparser::parser::Parser::parse_sql(&dialect, &full_sql).ok()?; |
| 185 | let stmt = stmts.into_iter().next()?; |
| 186 | |
| 187 | if let sqlparser::ast::Statement::Query(query) = stmt |
| 188 | && let sqlparser::ast::SetExpr::Select(select) = &*query.body |
| 189 | && let Some(item) = select.projection.first() |
| 190 | { |
| 191 | let expr = match item { |
| 192 | sqlparser::ast::SelectItem::UnnamedExpr(e) => e, |
| 193 | sqlparser::ast::SelectItem::ExprWithAlias { expr: e, .. } => e, |
| 194 | _ => return None, |
| 195 | }; |
| 196 | return eval_ast_expr(expr, ctx); |
| 197 | } |
| 198 | None |
| 199 | } |
| 200 | |
| 201 | /// Evaluate a WHERE condition expression; returns `None` on failure (treated as false). |
| 202 | fn eval_condition(sql_text: &str, ctx: &HashMap<String, nodedb_types::Value>) -> Option<bool> { |
no test coverage detected