Introduce AbstractDeleteGenerator extending AbstractGenerator, and make
AbstractInsertGenerator and AbstractUpdateGenerator also extend it, eliminating
duplicate sb/errors field declarations across all generator classes.
Convert all 15 DELETE generators (CockroachDB, Databend, Doris, DuckDB, H2,
MariaDB, Materialize, MySQL, OceanBase, Postgres, Presto, SQLite3, TiDB,
YCQL, YSQL) from static-utility classes to the instance-based buildStatement()
pattern. Add canonicalizeString field to AbstractGenerator (defaulting to true)
so generators like Presto/Hive/Spark can opt out of semicolon canonicalization.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduce AbstractDeleteGenerator extending AbstractGenerator, and make AbstractInsertGenerator and AbstractUpdateGenerator also extend it, eliminating duplicate sb/errors field declarations across all generator classes.
Convert all 15 DELETE generators (CockroachDB, Databend, Doris, DuckDB, H2, MariaDB, Materialize, MySQL, OceanBase, Postgres, Presto, SQLite3, TiDB, YCQL, YSQL) from static-utility classes to the instance-based buildStatement() pattern. Add canonicalizeString field to AbstractGenerator (defaulting to true) so generators like Presto/Hive/Spark can opt out of semicolon canonicalization.