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

Function collect_columns

nodedb-query/src/expr_parse/parser.rs:456–498  ·  view source on GitHub ↗
(expr: &SqlExpr, deps: &mut Vec<String>)

Source from the content-addressed store, hash-verified

454}
455
456pub(crate) fn collect_columns(expr: &SqlExpr, deps: &mut Vec<String>) {
457 match expr {
458 SqlExpr::Column(name) => deps.push(name.clone()),
459 SqlExpr::BinaryOp { left, right, .. } => {
460 collect_columns(left, deps);
461 collect_columns(right, deps);
462 }
463 SqlExpr::Negate(inner) => collect_columns(inner, deps),
464 SqlExpr::Function { args, .. } => {
465 for arg in args {
466 collect_columns(arg, deps);
467 }
468 }
469 SqlExpr::Coalesce(args) => {
470 for arg in args {
471 collect_columns(arg, deps);
472 }
473 }
474 SqlExpr::Case {
475 operand,
476 when_thens,
477 else_expr,
478 } => {
479 if let Some(op) = operand {
480 collect_columns(op, deps);
481 }
482 for (cond, then) in when_thens {
483 collect_columns(cond, deps);
484 collect_columns(then, deps);
485 }
486 if let Some(e) = else_expr {
487 collect_columns(e, deps);
488 }
489 }
490 SqlExpr::Cast { expr, .. } => collect_columns(expr, deps),
491 SqlExpr::NullIf(a, b) => {
492 collect_columns(a, deps);
493 collect_columns(b, deps);
494 }
495 SqlExpr::IsNull { expr, .. } => collect_columns(expr, deps),
496 SqlExpr::Literal(_) | SqlExpr::OldColumn(_) | SqlExpr::ExcludedColumn(_) => {}
497 }
498}
499
500#[cfg(test)]
501mod tests {

Callers 1

parse_generated_exprFunction · 0.85

Calls 2

pushMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected