refactor(sql): extract aggregate handling out into common utility class #9222
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is an initial refactor moving towards #9170.
Previously every backend implemented their own
_aggregate
function - many of them copy-pasted (with slight variations) of each other.To add a new
order_by
kwarg to_aggregate
would require editing all 16 copies of this function, which would be annoying. This PR is an attempt to centralize their implementations into a commonGen
class. The class takes a config flag to handle the common cases, the uncommon cases are then handled by backend-specific subclasses.This also extracts the
.agg
attribute out to be a class variable (err, descriptor) rather than an instance variable.An alternative implementation would be adding boolean flags directly to the
SQLGlotCompiler
class, but IIRC we intentionally moved away from those in the SQLAlchemy -> SQLGlot refactor. Could go either way here.