| 65 | |
| 66 | @register(nodetype=sql_expr.Case) |
| 67 | def _case(node: sql_expr.Case, context: ContextType) -> expr.IfElseExpression: |
| 68 | args = [] |
| 69 | for arg in node.args.pop("ifs"): |
| 70 | args.extend(_run(arg, context)) |
| 71 | |
| 72 | if (default_field := node.args.pop("default", None)) is not None: |
| 73 | args.append(_run(default_field, context)) |
| 74 | else: |
| 75 | args.append(None) |
| 76 | assert len(args) >= 3, "Wrong number of arguments." |
| 77 | while len(args) >= 3: |
| 78 | _else = args.pop() |
| 79 | _then = args.pop() |
| 80 | _if = args.pop() |
| 81 | args.append(if_else(_if, _then, _else)) |
| 82 | |
| 83 | [ret] = args |
| 84 | |
| 85 | return ret |
| 86 | |
| 87 | |
| 88 | @register(nodetype=sql_expr.Between) |