GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — feat: reuse table constraint grammar for PostgreSQL ALTER ADD by minleejae · Pull Request #2612 · JSQLParser/JSqlParser

Conversation

@minleejae

@minleejae minleejae commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

In PostgreSQL mode, ALTER TABLE ADD cannot parse constraint forms already handled by CREATE TABLE, including EXCLUDE, CHECK ... NOT VALID and INITIALLY attributes. Reuse a shared table-constraint production with CREATE/ALTER-specific index-option boundaries, and centralize population of the legacy key accessors from structured indexes.

Regression tests cover named and unnamed constraints, PostgreSQL options and attributes, multiple actions, referenced-table discovery, legacy accessors and invalid tails. Existing non-PostgreSQL ALTER paths remain covered by the full suite.

Validation: Java 17 ./gradlew check passed, including the full test suite, a zero-choice-conflict grammar check and static analysis.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@minleejae
feat: reuse table constraint grammar for PostgreSQL ALTER ADD
a86f90c
@manticore-projects
manticore-projects merged commit e4cf316 into JSQLParser:master Sep 12, 2026
10 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@minleejae minleejae mentioned this pull request Oct 23, 2026
fix: reuse table constraints for ALTER TABLE ADD in every dialect #2847
Merged
@hutiefang76 hutiefang76 mentioned this pull request Oct 24, 2026
[BUG] PostgreSQL: ALTER TABLE ... ADD CONSTRAINT with DEFERRABLE INITIALLY DEFERRED / NOT VALID does not parse #2850
Open
manticore-projects pushed a commit that referenced this pull request Oct 24, 2026
@minleejae
fix: reuse table constraints for ALTER TABLE ADD in every dialect (#2847
cec9fb8
)

* fix: reuse table constraints for ALTER TABLE ADD in every dialect

ALTER TABLE ADD parsed table constraints with the shared CREATE TABLE
production only for the MySQL and PostgreSQL dialects (#2612, #2654).
Without one of them, the generic ALTER branches rejected forms that
CREATE TABLE accepts in every dialect: an unnamed CHECK (c > 0),
NOT VALID, DEFERRABLE INITIALLY DEFERRED, an unnamed FOREIGN KEY with
attributes and EXCLUDE.

Route an ADD to the shared production in every dialect when it uses a
form that only that production accepts: an unnamed CHECK, FOREIGN KEY,
EXCLUDE, or INITIALLY IMMEDIATE|DEFERRED, NOT VALID or ENFORCED outside
a CHECK before the end of the action. Forms that already parsed keep
their generic representation, accessors and output; the PostgreSQL-only
UNIQUE USING INDEX and NOT NULL constraints still need that dialect.

The scan lives in the package-private AlterConstraintLookahead, like
RoutineBodyBoundary, because the generated CCJSqlParser class is close
to the size JaCoCo can still instrument.

Signed-off-by: minleejae <[email protected]>

* fix: parse VALIDATE CONSTRAINT as a structured action in every dialect

ALTER TABLE t VALIDATE CONSTRAINT ck was a structured RelationAlterAction
only with the PostgreSQL dialect. Elsewhere the remaining text became
an UNSPECIFIC expression, so the constraint name could not be read and
the action could not follow an ADD that now parses in every dialect.

VALIDATE CONSTRAINT starts no other ALTER TABLE action, so recognise it
in every dialect. Its output is unchanged.

Signed-off-by: minleejae <[email protected]>

* refactor: keep the ALTER constraint lookahead in the grammar

Move AlterConstraintLookahead from its own file into the grammar as a
private nested class, as done for TokenNesting in #2849. Split
needsSharedTableConstraint into a check for the forms only the shared
production accepts and a scan for constraint attributes. Codacy's PMD
reported an NPath complexity of 440 for the combined method; the
largest part is now 14. The nested class keeps its branches out of
CCJSqlParser.class. Behaviour does not change.

Signed-off-by: minleejae <[email protected]>

---------

Signed-off-by: minleejae <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@minleejae @manticore-projects
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.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.