(expr: &SqlExpr, deps: &mut Vec<String>)
| 454 | } |
| 455 | |
| 456 | pub(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)] |
| 501 | mod tests { |
no test coverage detected