| 446 | |
| 447 | |
| 448 | class _ReducersGatherer(IdentityTransform): |
| 449 | gathered_reducers: dict[str, expr.ColumnExpression] |
| 450 | |
| 451 | def __init__(self) -> None: |
| 452 | self.count = itertools.count(0) |
| 453 | self.gathered_reducers = {} |
| 454 | |
| 455 | def add_expression(self, expression: expr.ColumnExpression) -> expr.ColumnReference: |
| 456 | name = f"_pw_having_{next(self.count)}" |
| 457 | self.gathered_reducers[name] = expression |
| 458 | return thisclass.this[name] |
| 459 | |
| 460 | def eval_column_val(self, expression: expr.ColumnReference, **kwargs): |
| 461 | if isinstance(expression.table, thisclass.ThisMetaclass): |
| 462 | return super().eval_column_val(expression, **kwargs) |
| 463 | else: |
| 464 | return self.add_expression(expression) |
| 465 | |
| 466 | def eval_reducer(self, expression: expr.ReducerExpression, **kwargs): |
| 467 | return self.add_expression(expression) |
| 468 | |
| 469 | |
| 470 | class _HavingHelper(IdentityTransform): |