Skip to content

Reuse MySQL table option parsing across CREATE and ALTER TABLE - #2715

Open
minleejae wants to merge 1 commit into
JSQLParser:masterfrom
minleejae:feat/mysql-shared-table-options-20260925
Open

minleejae wants to merge 1 commit into
JSQLParser:masterfrom
minleejae:feat/mysql-shared-table-options-20260925

Conversation

@minleejae

Copy link
Copy Markdown
Contributor

Valid MySQL table options such as ALTER TABLE t ENGINE='InnoDB', UNION=(m1,m2), and TABLESPACE=innodb_file_per_table were rejected, while other options fell back to unstructured ALTER text. CREATE TABLE already handled many of the same options.

Reuse the table-option parser for CREATE and ALTER, including quoted values, charset aliases, numeric options, UNION targets, and TABLESPACE storage qualifiers. Preserve legacy ALTER accessors as live projections and visit UNION table references. Space-separated options are supported alongside comma-separated ALTER actions; CONVERT TO CHARACTER SET retains its distinct meaning.

Tests cover CREATE/ALTER parity, option pairs, action and statement boundaries, AST mutations, legacy accessors, and table traversal. Executed the audit corpus on MySQL 9.7.2 and 26.7.0: all 338 server-accepted scenarios on each version pass parsing, both SQL renderers, and SHOW CREATE/catalog comparison. Unsupported engine/environment combinations are excluded from that count.

Syntax references: ALTER TABLE, CREATE TABLE.

Validation: focused tests, JavaCC ambiguity checks, Checkstyle and Spotless on this independent branch. The combined implementation also passes the full Gradle check and Maven verify; the 1,304-input prior regression corpus has no previously successful input regressions.

Signed-off-by: minleejae <mmj9808@gmail.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant