99 */
1010package net .sf .jsqlparser .statement .alter ;
1111
12+ import static net .sf .jsqlparser .test .TestUtils .assertSqlCanBeParsedAndDeparsed ;
1213import static org .junit .jupiter .api .Assertions .*;
1314import java .util .ArrayList ;
1415import java .util .List ;
@@ -80,6 +81,7 @@ class PostgreSqlRelationAlterTest {
8081 "ALTER TABLE t RESET(toast.autovacuum_enabled,fillfactor)" ,
8182 "ALTER TABLE t INHERIT p" ,
8283 "ALTER TABLE t NO INHERIT p" ,
84+ "ALTER TABLE t REPLICA IDENTITY NOTHING" ,
8385 "ALTER TABLE t REPLICA IDENTITY USING INDEX ix" ,
8486 "ALTER TABLE t SET ACCESS METHOD heap" })
8587 void auditedActionsAreStructuredAndRoundTrip (String sql ) throws JSQLParserException {
@@ -96,6 +98,23 @@ void auditedActionsAreStructuredAndRoundTrip(String sql) throws JSQLParserExcept
9698 p -> p .withDialect (Dialect .POSTGRESQL )).size ());
9799 }
98100
101+ @ ParameterizedTest
102+ @ ValueSource (strings = {"DEFAULT" , "FULL" , "NOTHING" })
103+ void replicaIdentityModesAreStructuredAndEditable (String mode ) throws JSQLParserException {
104+ Alter statement = (Alter ) assertSqlCanBeParsedAndDeparsed (
105+ "ALTER TABLE t REPLICA IDENTITY " + mode , false ,
106+ parser -> parser .withDialect (Dialect .POSTGRESQL ));
107+ RelationAlterAction action = assertInstanceOf (RelationAlterAction .class ,
108+ statement .getAlterExpressions ().get (0 ));
109+ assertEquals (RelationAlterAction .Kind .REPLICA_IDENTITY , action .getKind ());
110+ assertEquals (RelationAlterAction .ReplicaIdentity .valueOf (mode ), action .getReplicaIdentity ());
111+ assertRoundTrip (statement );
112+
113+ action .setReplicaIdentity (RelationAlterAction .ReplicaIdentity .NOTHING );
114+ assertEquals ("ALTER TABLE t REPLICA IDENTITY NOTHING" , statement .toString ());
115+ assertRoundTrip (statement );
116+ }
117+
99118 @ Test
100119 void indexNameAndActionParametersCanBeReplaced () throws JSQLParserException {
101120 AlterRelation index =
0 commit comments