From 6980f430030efa54e5d98b99cd4ac24ac4c8691a Mon Sep 17 00:00:00 2001 From: minleejae Date: Mon, 28 Sep 2026 17:22:27 +0900 Subject: [PATCH 1/2] fix(parser): restore PostgreSQL REPLICA IDENTITY NOTHING Signed-off-by: minleejae --- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 2 +- .../alter/PostgreSqlRelationAlterTest.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 3076fb241..5f651b67f 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -18880,7 +18880,7 @@ RelationAlterAction PostgreSqlRelationAction(): ( name=RelObjectName() { action.setReplicaIdentity(RelationAlterAction.ReplicaIdentity.USING_INDEX); action.setValue(name); } - | ( token= | token= | token= ) + | ( token= | token= | token= | token= ) { action.setReplicaIdentity(accessEnum(RelationAlterAction.ReplicaIdentity.class, token.image)); } ) | diff --git a/src/test/java/net/sf/jsqlparser/statement/alter/PostgreSqlRelationAlterTest.java b/src/test/java/net/sf/jsqlparser/statement/alter/PostgreSqlRelationAlterTest.java index c332046d8..89ec33b5c 100644 --- a/src/test/java/net/sf/jsqlparser/statement/alter/PostgreSqlRelationAlterTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/alter/PostgreSqlRelationAlterTest.java @@ -9,6 +9,7 @@ */ package net.sf.jsqlparser.statement.alter; +import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed; import static org.junit.jupiter.api.Assertions.*; import java.util.ArrayList; import java.util.List; @@ -80,6 +81,7 @@ class PostgreSqlRelationAlterTest { "ALTER TABLE t RESET(toast.autovacuum_enabled,fillfactor)", "ALTER TABLE t INHERIT p", "ALTER TABLE t NO INHERIT p", + "ALTER TABLE t REPLICA IDENTITY NOTHING", "ALTER TABLE t REPLICA IDENTITY USING INDEX ix", "ALTER TABLE t SET ACCESS METHOD heap"}) void auditedActionsAreStructuredAndRoundTrip(String sql) throws JSQLParserException { @@ -96,6 +98,23 @@ void auditedActionsAreStructuredAndRoundTrip(String sql) throws JSQLParserExcept p -> p.withDialect(Dialect.POSTGRESQL)).size()); } + @ParameterizedTest + @ValueSource(strings = {"DEFAULT", "FULL", "NOTHING"}) + void replicaIdentityModesAreStructuredAndEditable(String mode) throws JSQLParserException { + Alter statement = (Alter) assertSqlCanBeParsedAndDeparsed( + "ALTER TABLE t REPLICA IDENTITY " + mode, false, + parser -> parser.withDialect(Dialect.POSTGRESQL)); + RelationAlterAction action = assertInstanceOf(RelationAlterAction.class, + statement.getAlterExpressions().get(0)); + assertEquals(RelationAlterAction.Kind.REPLICA_IDENTITY, action.getKind()); + assertEquals(RelationAlterAction.ReplicaIdentity.valueOf(mode), action.getReplicaIdentity()); + assertRoundTrip(statement); + + action.setReplicaIdentity(RelationAlterAction.ReplicaIdentity.NOTHING); + assertEquals("ALTER TABLE t REPLICA IDENTITY NOTHING", statement.toString()); + assertRoundTrip(statement); + } + @Test void indexNameAndActionParametersCanBeReplaced() throws JSQLParserException { AlterRelation index = From 8b627d1c60e73ec9c5f8a87e0600740fad9a6282 Mon Sep 17 00:00:00 2001 From: minleejae Date: Mon, 28 Sep 2026 17:45:15 +0900 Subject: [PATCH 2/2] style: format replica identity regression assertion Signed-off-by: minleejae --- .../statement/alter/PostgreSqlRelationAlterTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/net/sf/jsqlparser/statement/alter/PostgreSqlRelationAlterTest.java b/src/test/java/net/sf/jsqlparser/statement/alter/PostgreSqlRelationAlterTest.java index 89ec33b5c..06bd472d9 100644 --- a/src/test/java/net/sf/jsqlparser/statement/alter/PostgreSqlRelationAlterTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/alter/PostgreSqlRelationAlterTest.java @@ -107,7 +107,8 @@ void replicaIdentityModesAreStructuredAndEditable(String mode) throws JSQLParser RelationAlterAction action = assertInstanceOf(RelationAlterAction.class, statement.getAlterExpressions().get(0)); assertEquals(RelationAlterAction.Kind.REPLICA_IDENTITY, action.getKind()); - assertEquals(RelationAlterAction.ReplicaIdentity.valueOf(mode), action.getReplicaIdentity()); + assertEquals(RelationAlterAction.ReplicaIdentity.valueOf(mode), + action.getReplicaIdentity()); assertRoundTrip(statement); action.setReplicaIdentity(RelationAlterAction.ReplicaIdentity.NOTHING);