sqlglot 30 changed how the generator dispatch is built. In 28 the
auto-discovery walked all expression subclasses; in 30 it only
considers classes registered in sqlglot.expressions.EXPR_CLASSES,
which is populated once at module load via subclasses(__name__, Expr)
— i.e. ONLY built-in expression types. Custom user-defined
Expression subclasses defined outside that module — like our
DB2Interval — no longer get auto-wired to their <name>_sql handler.
Adding DB2Interval to TRANSFORMS as a lambda → db2interval_sql
restores the dispatch. All 24 dialects/db2_tests.py tests pass.
sqlglot 30 changed Parser.expression() to accept a pre-constructed
expression instance instead of a class + keyword arguments.
Old: self.expression(exp.Not, this=..., expressions=...)
New: self.expression(exp.Not(this=..., expressions=...))
Update all four call sites in firebolt.py: UNARY_PARSERS lambda,
_negate_range, _parse_join, and _parse_unnest.
Co-Authored-By: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>