From b46bf6750c85c6ce3c4ba11be42ab09c0a192dcb Mon Sep 17 00:00:00 2001 From: minleejae Date: Fri, 2 Oct 2026 00:39:28 +0900 Subject: [PATCH] Consolidate CASCADE and RESTRICT behavior enums Replace five nested public enums with statement.CascadeBehavior, including AlterType attribute changes. Preserve omitted clauses and existing render/parser behavior, and document the breaking API migration. Signed-off-by: minleejae --- .../jsqlparser/statement/CascadeBehavior.java | 18 +++ .../statement/alter/AlterDomain.java | 10 +- .../jsqlparser/statement/alter/AlterType.java | 16 +- .../jsqlparser/statement/drop/DropPolicy.java | 11 +- .../sf/jsqlparser/statement/grant/Revoke.java | 11 +- .../statement/truncate/Truncate.java | 14 +- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 24 +-- src/site/sphinx/usage.rst | 23 +++ .../statement/CascadeBehaviorTest.java | 143 ++++++++++++++++++ .../create/PostgreSqlAccessDdlTest.java | 3 +- .../create/PostgreSqlPolicyDdlTest.java | 3 +- .../create/PostgreSqlTypeDdlTest.java | 3 +- .../truncate/PostgreSqlTruncateTest.java | 7 +- 13 files changed, 231 insertions(+), 55 deletions(-) create mode 100644 src/main/java/net/sf/jsqlparser/statement/CascadeBehavior.java create mode 100644 src/test/java/net/sf/jsqlparser/statement/CascadeBehaviorTest.java diff --git a/src/main/java/net/sf/jsqlparser/statement/CascadeBehavior.java b/src/main/java/net/sf/jsqlparser/statement/CascadeBehavior.java new file mode 100644 index 0000000000..a67de27309 --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/statement/CascadeBehavior.java @@ -0,0 +1,18 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2026 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ +package net.sf.jsqlparser.statement; + +/** + * An explicit CASCADE or RESTRICT clause. A null field leaves the clause omitted and preserves the + * database's default behavior for that statement. + */ +public enum CascadeBehavior { + CASCADE, RESTRICT +} diff --git a/src/main/java/net/sf/jsqlparser/statement/alter/AlterDomain.java b/src/main/java/net/sf/jsqlparser/statement/alter/AlterDomain.java index 3531ba8146..ca75f8faa6 100644 --- a/src/main/java/net/sf/jsqlparser/statement/alter/AlterDomain.java +++ b/src/main/java/net/sf/jsqlparser/statement/alter/AlterDomain.java @@ -11,6 +11,7 @@ import java.util.function.Consumer; import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.statement.CascadeBehavior; import net.sf.jsqlparser.statement.create.domain.DomainConstraint; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.StatementVisitor; @@ -24,7 +25,7 @@ public class AlterDomain implements Statement { private String newName; private boolean notValid; private boolean ifExists; - private Behavior behavior; + private CascadeBehavior behavior; public String getName() { return name; @@ -90,11 +91,11 @@ public void setIfExists(boolean ifExists) { this.ifExists = ifExists; } - public Behavior getBehavior() { + public CascadeBehavior getBehavior() { return behavior; } - public void setBehavior(Behavior behavior) { + public void setBehavior(CascadeBehavior behavior) { this.behavior = behavior; } @@ -106,9 +107,6 @@ public T accept(StatementVisitor visitor, S context) { public enum Action { SET_DEFAULT, DROP_DEFAULT, SET_NOT_NULL, DROP_NOT_NULL, ADD_CONSTRAINT, DROP_CONSTRAINT, RENAME_CONSTRAINT, VALIDATE_CONSTRAINT, OWNER, RENAME, SET_SCHEMA } - public enum Behavior { - CASCADE, RESTRICT - } public void appendTo(StringBuilder sql, Consumer expressions) { sql.append("ALTER DOMAIN ").append(name).append(' '); diff --git a/src/main/java/net/sf/jsqlparser/statement/alter/AlterType.java b/src/main/java/net/sf/jsqlparser/statement/alter/AlterType.java index f49936d41e..25361bbc4d 100644 --- a/src/main/java/net/sf/jsqlparser/statement/alter/AlterType.java +++ b/src/main/java/net/sf/jsqlparser/statement/alter/AlterType.java @@ -13,6 +13,7 @@ import java.util.List; import java.util.stream.Collectors; import net.sf.jsqlparser.expression.StringValue; +import net.sf.jsqlparser.statement.CascadeBehavior; import net.sf.jsqlparser.statement.create.type.TypeAttribute; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.StatementVisitor; @@ -27,7 +28,7 @@ public class AlterType implements Statement { private StringValue neighborValue; private Position position; private boolean ifNotExists; - private Behavior behavior; + private CascadeBehavior behavior; private List attributeChanges = new ArrayList<>(); public String getName() { @@ -102,11 +103,11 @@ public void setIfNotExists(boolean ifNotExists) { this.ifNotExists = ifNotExists; } - public Behavior getBehavior() { + public CascadeBehavior getBehavior() { return behavior; } - public void setBehavior(Behavior behavior) { + public void setBehavior(CascadeBehavior behavior) { this.behavior = behavior; } @@ -129,9 +130,6 @@ public enum Action { public enum Position { BEFORE, AFTER } - public enum Behavior { - CASCADE, RESTRICT - } public static class AttributeChange implements java.io.Serializable { public enum Kind { ADD, DROP, ALTER @@ -141,7 +139,7 @@ public enum Kind { private TypeAttribute attribute; private boolean ifExists; private boolean useSetData; - private Behavior behavior; + private CascadeBehavior behavior; public Kind getKind() { return kind; @@ -175,11 +173,11 @@ public void setUseSetData(boolean useSetData) { this.useSetData = useSetData; } - public Behavior getBehavior() { + public CascadeBehavior getBehavior() { return behavior; } - public void setBehavior(Behavior behavior) { + public void setBehavior(CascadeBehavior behavior) { this.behavior = behavior; } diff --git a/src/main/java/net/sf/jsqlparser/statement/drop/DropPolicy.java b/src/main/java/net/sf/jsqlparser/statement/drop/DropPolicy.java index f9500f7710..41f8f01b0b 100644 --- a/src/main/java/net/sf/jsqlparser/statement/drop/DropPolicy.java +++ b/src/main/java/net/sf/jsqlparser/statement/drop/DropPolicy.java @@ -9,6 +9,7 @@ */ package net.sf.jsqlparser.statement.drop; +import net.sf.jsqlparser.statement.CascadeBehavior; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.StatementVisitor; @@ -16,7 +17,7 @@ public class DropPolicy implements Statement { private String policyName; private net.sf.jsqlparser.schema.Table table; private boolean ifExists = false; - private Behavior behavior; + private CascadeBehavior behavior; public String getPolicyName() { return policyName; @@ -45,19 +46,15 @@ public DropPolicy setIfExists(boolean ifExists) { return this; } - public Behavior getBehavior() { + public CascadeBehavior getBehavior() { return behavior; } - public DropPolicy setBehavior(Behavior behavior) { + public DropPolicy setBehavior(CascadeBehavior behavior) { this.behavior = behavior; return this; } - public enum Behavior { - CASCADE, RESTRICT - } - public StringBuilder appendTo(StringBuilder sql) { sql.append("DROP POLICY "); if (ifExists) { diff --git a/src/main/java/net/sf/jsqlparser/statement/grant/Revoke.java b/src/main/java/net/sf/jsqlparser/statement/grant/Revoke.java index 157eccc8a0..f613e2d028 100644 --- a/src/main/java/net/sf/jsqlparser/statement/grant/Revoke.java +++ b/src/main/java/net/sf/jsqlparser/statement/grant/Revoke.java @@ -11,17 +11,14 @@ import java.util.function.Consumer; import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.statement.CascadeBehavior; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.StatementVisitor; public class Revoke implements Statement { - public enum Behavior { - CASCADE, RESTRICT - } - private PrivilegeClause clause = new PrivilegeClause(); private GrantOption.Kind optionFor; - private Behavior behavior; + private CascadeBehavior behavior; public PrivilegeClause getClause() { return clause; @@ -39,11 +36,11 @@ public void setOptionFor(GrantOption.Kind optionFor) { this.optionFor = optionFor; } - public Behavior getBehavior() { + public CascadeBehavior getBehavior() { return behavior; } - public void setBehavior(Behavior behavior) { + public void setBehavior(CascadeBehavior behavior) { this.behavior = behavior; } diff --git a/src/main/java/net/sf/jsqlparser/statement/truncate/Truncate.java b/src/main/java/net/sf/jsqlparser/statement/truncate/Truncate.java index 4ffc75b2fe..34e03d17f6 100644 --- a/src/main/java/net/sf/jsqlparser/statement/truncate/Truncate.java +++ b/src/main/java/net/sf/jsqlparser/statement/truncate/Truncate.java @@ -14,6 +14,7 @@ import java.util.List; import net.sf.jsqlparser.schema.Table; import net.sf.jsqlparser.schema.TableReference; +import net.sf.jsqlparser.statement.CascadeBehavior; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.StatementVisitor; @@ -21,15 +22,12 @@ public class Truncate implements Statement { public enum IdentityOption { RESTART, CONTINUE } - public enum DropBehavior { - CASCADE, RESTRICT - } private boolean tableToken; private boolean only; private final List targets = new ArrayList<>(); private IdentityOption identityOption; - private DropBehavior dropBehavior; + private CascadeBehavior dropBehavior; @Override public T accept(StatementVisitor statementVisitor, S context) { @@ -109,20 +107,20 @@ public void setIdentityOption(IdentityOption option) { identityOption = option; } - public DropBehavior getDropBehavior() { + public CascadeBehavior getDropBehavior() { return dropBehavior; } - public void setDropBehavior(DropBehavior behavior) { + public void setDropBehavior(CascadeBehavior behavior) { dropBehavior = behavior; } public boolean getCascade() { - return dropBehavior == DropBehavior.CASCADE; + return dropBehavior == CascadeBehavior.CASCADE; } public void setCascade(boolean cascade) { - dropBehavior = cascade ? DropBehavior.CASCADE : null; + dropBehavior = cascade ? CascadeBehavior.CASCADE : null; } public boolean isTableToken() { diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index c94af87302..24c3017278 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -17064,8 +17064,8 @@ Truncate Truncate(): [ ( { truncate.setIdentityOption(Truncate.IdentityOption.RESTART); } | ContextualKeyword("CONTINUE") { truncate.setIdentityOption(Truncate.IdentityOption.CONTINUE); } ) ] - [ { truncate.setDropBehavior(Truncate.DropBehavior.CASCADE); } - | { truncate.setDropBehavior(Truncate.DropBehavior.RESTRICT); } ] + [ { truncate.setDropBehavior(CascadeBehavior.CASCADE); } + | { truncate.setDropBehavior(CascadeBehavior.RESTRICT); } ] { return truncate; } } @@ -19651,7 +19651,7 @@ Revoke Revoke(boolean defaults): clause=AccessClause(true, defaults) { revoke.setClause(clause); } [ LOOKAHEAD({ isAccessKeywordAhead("GRANTED") }) AccessKeyword("GRANTED") name=RelObjectName() { requireAccessSyntax(!defaults, "GRANTED BY is not part of default privileges"); clause.setGrantedBy(name); } ] - [ ( { revoke.setBehavior(Revoke.Behavior.CASCADE); } | { revoke.setBehavior(Revoke.Behavior.RESTRICT); } ) ] + [ ( { revoke.setBehavior(CascadeBehavior.CASCADE); } | { revoke.setBehavior(CascadeBehavior.RESTRICT); } ) ] { requireAccessSyntax(revoke.getOptionFor() == null || (clause.getPrivileges() == null ? revoke.getOptionFor() != GrantOption.Kind.GRANT : revoke.getOptionFor() == GrantOption.Kind.GRANT), "Invalid REVOKE option"); return revoke; } @@ -20271,11 +20271,11 @@ RangeTypeDefinition.Option RangeTypeOption(): ) } -AlterType.Behavior TypeAlterBehavior(): -{ AlterType.Behavior result; } +CascadeBehavior TypeAlterBehavior(): +{ CascadeBehavior result; } { - ( { result = AlterType.Behavior.CASCADE; } - | { result = AlterType.Behavior.RESTRICT; } ) + ( { result = CascadeBehavior.CASCADE; } + | { result = CascadeBehavior.RESTRICT; } ) { return result; } } @@ -20283,7 +20283,7 @@ AlterType.AttributeChange TypeAttributeChange(): { AlterType.AttributeChange result = new AlterType.AttributeChange(); TypeAttribute attribute = new TypeAttribute(); - String name; ColDataType type; AlterType.Behavior behavior; + String name; ColDataType type; CascadeBehavior behavior; boolean useSetData; } { @@ -20304,7 +20304,7 @@ AlterType.AttributeChange TypeAttributeChange(): AlterType AlterType(): { AlterType result = new AlterType(); String name; Token label; - AlterType.AttributeChange change; AlterType.Behavior behavior; + AlterType.AttributeChange change; CascadeBehavior behavior; } { name=TypeDdlName() { result.setName(name); } @@ -20376,8 +20376,8 @@ AlterDomain AlterDomain(): | { result.setAction(AlterDomain.Action.DROP_NOT_NULL); } | [ LOOKAHEAD(2) { result.setIfExists(true); } ] name=RelObjectName() { result.setAction(AlterDomain.Action.DROP_CONSTRAINT); result.setConstraintName(name); } - [ { result.setBehavior(AlterDomain.Behavior.CASCADE); } - | { result.setBehavior(AlterDomain.Behavior.RESTRICT); } ] + [ { result.setBehavior(CascadeBehavior.CASCADE); } + | { result.setBehavior(CascadeBehavior.RESTRICT); } ] ) | constraint=DomainConstraint(false) { result.setAction(AlterDomain.Action.ADD_CONSTRAINT); result.setConstraint(constraint); } [ TypeDdlKeyword("VALID") { @@ -20794,7 +20794,7 @@ DropPolicy DropPolicy(): [ LOOKAHEAD(2) { statement.setIfExists(true); } ] name=RelObjectName() { statement.setPolicyName(name); } table=Table() { statement.setTable(table); } - [ (behavior= | behavior=) { statement.setBehavior(DropPolicy.Behavior.valueOf(behavior.image.toUpperCase(Locale.ROOT))); } ] + [ (behavior= | behavior=) { statement.setBehavior(CascadeBehavior.valueOf(behavior.image.toUpperCase(Locale.ROOT))); } ] { return statement; } } diff --git a/src/site/sphinx/usage.rst b/src/site/sphinx/usage.rst index a4a8a304fc..d9fa068261 100644 --- a/src/site/sphinx/usage.rst +++ b/src/site/sphinx/usage.rst @@ -288,6 +288,29 @@ These named targets do not populate the legacy ``getPkColumns()`` list. AlterExpression checkDrop = new AlterExpression() .withOperation(AlterOperation.DROP_CHECK).withConstraintName("positive_id"); +Shared CASCADE and RESTRICT behavior +------------------------------------ + +``AlterDomain``, ``AlterType`` (including ``AttributeChange``), ``DropPolicy``, +``Truncate`` and ``Revoke`` use ``net.sf.jsqlparser.statement.CascadeBehavior`` +for their explicit ``CASCADE`` and ``RESTRICT`` clauses. A null value preserves +an omitted clause; it does not insert an explicit ``RESTRICT``. + +.. code-block:: java + + import net.sf.jsqlparser.statement.CascadeBehavior; + + truncate.setDropBehavior(CascadeBehavior.RESTRICT); + revoke.setBehavior(truncate.getDropBehavior()); + revoke.setBehavior(null); // Omit the clause and leave the server default unchanged. + +Migration: the nested enums ``AlterDomain.Behavior``, ``AlterType.Behavior``, +``DropPolicy.Behavior``, ``Truncate.DropBehavior`` and ``Revoke.Behavior`` have +been removed. Replace their imports and enum references with ``CascadeBehavior``. +The existing getter and setter names remain, but their return and parameter types +have changed, so clients must recompile. ``Truncate.setCascade(false)`` still +clears the clause. Foreign-key referential actions retain their separate enum. + Inspect PostgreSQL schema statements ------------------------------------ diff --git a/src/test/java/net/sf/jsqlparser/statement/CascadeBehaviorTest.java b/src/test/java/net/sf/jsqlparser/statement/CascadeBehaviorTest.java new file mode 100644 index 0000000000..1f41e0d492 --- /dev/null +++ b/src/test/java/net/sf/jsqlparser/statement/CascadeBehaviorTest.java @@ -0,0 +1,143 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2026 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ +package net.sf.jsqlparser.statement; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.stream.Stream; +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.parser.AbstractJSqlParser.Dialect; +import net.sf.jsqlparser.statement.alter.AlterDomain; +import net.sf.jsqlparser.statement.alter.AlterType; +import net.sf.jsqlparser.statement.drop.DropPolicy; +import net.sf.jsqlparser.statement.grant.Revoke; +import net.sf.jsqlparser.statement.truncate.Truncate; +import net.sf.jsqlparser.util.deparser.StatementDeParser; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +class CascadeBehaviorTest { + static Stream statements() { + return Stream.of( + "ALTER DOMAIN amount DROP CONSTRAINT positive", + "ALTER TYPE item RENAME ATTRIBUTE old_name TO new_name", + "ALTER TYPE item ADD ATTRIBUTE code text", + "ALTER TYPE item DROP ATTRIBUTE price", + "ALTER TYPE item ALTER ATTRIBUTE price SET DATA TYPE bigint", + "DROP POLICY visible ON items", + "TRUNCATE TABLE items", + "REVOKE SELECT ON items FROM reader"); + } + + @ParameterizedTest + @MethodSource("statements") + void parsesSharedEnumAndPreservesOmittedClauses(String sql) throws JSQLParserException { + for (boolean postgres : new boolean[] {false, true}) { + for (CascadeBehavior behavior : new CascadeBehavior[] { + null, CascadeBehavior.CASCADE, CascadeBehavior.RESTRICT}) { + String expectedSql = sql + (behavior == null ? "" : " " + behavior); + Statement statement = parse(expectedSql, postgres); + assertSame(behavior, getBehavior(statement)); + assertRoundTrip(statement, expectedSql, behavior, postgres); + } + } + } + + @ParameterizedTest + @MethodSource("statements") + void sharedEnumSettersChangeAndRemoveClauses(String sql) throws JSQLParserException { + for (boolean postgres : new boolean[] {false, true}) { + Statement statement = parse(sql + " CASCADE", postgres); + for (CascadeBehavior behavior : new CascadeBehavior[] { + CascadeBehavior.RESTRICT, null, CascadeBehavior.CASCADE}) { + setBehavior(statement, behavior); + assertSame(behavior, getBehavior(statement)); + assertRoundTrip(statement, sql + (behavior == null ? "" : " " + behavior), + behavior, postgres); + } + } + } + + @Test + void truncateBooleanSetterStillClearsRatherThanSelectsRestrict() throws JSQLParserException { + Truncate statement = (Truncate) parse("TRUNCATE TABLE items RESTRICT", true); + assertFalse(statement.getCascade()); + statement.setCascade(true); + assertTrue(statement.getCascade()); + assertSame(CascadeBehavior.CASCADE, statement.getDropBehavior()); + assertRoundTrip(statement, "TRUNCATE TABLE items CASCADE", CascadeBehavior.CASCADE, true); + + statement.setCascade(false); + assertFalse(statement.getCascade()); + assertNull(statement.getDropBehavior()); + assertRoundTrip(statement, "TRUNCATE TABLE items", null, true); + } + + private static Statement parse(String sql, boolean postgres) throws JSQLParserException { + return postgres + ? CCJSqlParserUtil.parse(sql, parser -> parser.withDialect(Dialect.POSTGRESQL)) + : CCJSqlParserUtil.parse(sql); + } + + private static void assertRoundTrip(Statement statement, String expectedSql, + CascadeBehavior behavior, boolean postgres) throws JSQLParserException { + assertEquals(expectedSql, statement.toString()); + StringBuilder deparsed = new StringBuilder(); + statement.accept(new StatementDeParser(deparsed)); + assertEquals(expectedSql, deparsed.toString()); + Statement reparsed = parse(deparsed.toString(), postgres); + assertSame(behavior, getBehavior(reparsed)); + assertEquals(expectedSql, reparsed.toString()); + } + + private static CascadeBehavior getBehavior(Statement statement) { + if (statement instanceof AlterDomain) { + return ((AlterDomain) statement).getBehavior(); + } else if (statement instanceof AlterType) { + AlterType type = (AlterType) statement; + return type.getAttributeChanges().isEmpty() ? type.getBehavior() + : type.getAttributeChanges().get(0).getBehavior(); + } else if (statement instanceof DropPolicy) { + return ((DropPolicy) statement).getBehavior(); + } else if (statement instanceof Truncate) { + return ((Truncate) statement).getDropBehavior(); + } else if (statement instanceof Revoke) { + return ((Revoke) statement).getBehavior(); + } + throw new IllegalArgumentException("Unsupported statement: " + statement); + } + + private static void setBehavior(Statement statement, CascadeBehavior behavior) { + if (statement instanceof AlterDomain) { + ((AlterDomain) statement).setBehavior(behavior); + } else if (statement instanceof AlterType) { + AlterType type = (AlterType) statement; + if (type.getAttributeChanges().isEmpty()) { + type.setBehavior(behavior); + } else { + type.getAttributeChanges().get(0).setBehavior(behavior); + } + } else if (statement instanceof DropPolicy) { + ((DropPolicy) statement).setBehavior(behavior); + } else if (statement instanceof Truncate) { + ((Truncate) statement).setDropBehavior(behavior); + } else if (statement instanceof Revoke) { + ((Revoke) statement).setBehavior(behavior); + } else { + throw new IllegalArgumentException("Unsupported statement: " + statement); + } + } +} diff --git a/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlAccessDdlTest.java b/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlAccessDdlTest.java index 6b8b1e8fb0..c919603b1c 100644 --- a/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlAccessDdlTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlAccessDdlTest.java @@ -32,6 +32,7 @@ import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.schema.Table; import net.sf.jsqlparser.statement.RoutineReference; +import net.sf.jsqlparser.statement.CascadeBehavior; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.StatementVisitorAdapter; import net.sf.jsqlparser.statement.StmtFeature; @@ -173,7 +174,7 @@ void testRevokeAndDefaults() throws Exception { assertThat(revoke.getOptionFor()).isEqualTo(GrantOption.Kind.ADMIN); assertThat(revoke.getClause().getRoles()).containsExactly("reader", "writer"); assertThat(revoke.getClause().getGrantedBy()).isEqualTo("owner"); - assertThat(revoke.getBehavior()).isEqualTo(Revoke.Behavior.CASCADE); + assertThat(revoke.getBehavior()).isEqualTo(CascadeBehavior.CASCADE); AlterDefaultPrivileges defaults = (AlterDefaultPrivileges) CCJSqlParserUtil.parse( "ALTER DEFAULT PRIVILEGES FOR USER owner IN SCHEMA app GRANT SELECT ON TABLES TO reader"); assertThat(defaults.getRoleKeyword()).isEqualTo(AlterDefaultPrivileges.RoleKeyword.USER); diff --git a/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlPolicyDdlTest.java b/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlPolicyDdlTest.java index e7059cb4d2..294dc55994 100644 --- a/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlPolicyDdlTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlPolicyDdlTest.java @@ -15,6 +15,7 @@ import net.sf.jsqlparser.parser.AbstractJSqlParser.Dialect; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.schema.Table; +import net.sf.jsqlparser.statement.CascadeBehavior; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.alter.AlterPolicy; import net.sf.jsqlparser.statement.create.policy.CreatePolicy; @@ -83,7 +84,7 @@ void dropPolicyNamesAndBehaviorAreMutable() throws JSQLParserException { DropPolicy drop = (DropPolicy) parse("DROP POLICY IF EXISTS pol ON t CASCADE"); assertTrue(drop.isIfExists()); drop.setPolicyName("new_pol").setTable(new Table("new_t")) - .setBehavior(DropPolicy.Behavior.RESTRICT); + .setBehavior(CascadeBehavior.RESTRICT); assertEquals("DROP POLICY IF EXISTS new_pol ON new_t RESTRICT", drop.toString()); assertRoundTrip(drop); } diff --git a/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlTypeDdlTest.java b/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlTypeDdlTest.java index 37e2c26676..4db9310631 100644 --- a/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlTypeDdlTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/create/PostgreSqlTypeDdlTest.java @@ -26,6 +26,7 @@ import net.sf.jsqlparser.expression.StringValue; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.statement.CascadeBehavior; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.StatementVisitorAdapter; import net.sf.jsqlparser.statement.StmtFeature; @@ -124,7 +125,7 @@ void testTypeAlterations() throws Exception { assertThat(attributes.getAttributeChanges()).hasSize(2); assertThat(attributes.getAttributeChanges().get(1).isIfExists()).isTrue(); assertThat(attributes.getAttributeChanges().get(1).getBehavior()) - .isEqualTo(AlterType.Behavior.CASCADE); + .isEqualTo(CascadeBehavior.CASCADE); } @Test diff --git a/src/test/java/net/sf/jsqlparser/statement/truncate/PostgreSqlTruncateTest.java b/src/test/java/net/sf/jsqlparser/statement/truncate/PostgreSqlTruncateTest.java index a0ef7a0dbf..054dab64aa 100644 --- a/src/test/java/net/sf/jsqlparser/statement/truncate/PostgreSqlTruncateTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/truncate/PostgreSqlTruncateTest.java @@ -15,6 +15,7 @@ import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.schema.Table; +import net.sf.jsqlparser.statement.CascadeBehavior; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.lock.LockStatement; import net.sf.jsqlparser.util.TablesNamesFinder; @@ -39,8 +40,8 @@ void targetsAndOptionalClausesRoundTrip(String targets) throws JSQLParserExcepti : identity.contains("CONTINUE") ? Truncate.IdentityOption.CONTINUE : null, statement.getIdentityOption()); - assertEquals(behavior.contains("CASCADE") ? Truncate.DropBehavior.CASCADE - : behavior.contains("RESTRICT") ? Truncate.DropBehavior.RESTRICT : null, + assertEquals(behavior.contains("CASCADE") ? CascadeBehavior.CASCADE + : behavior.contains("RESTRICT") ? CascadeBehavior.RESTRICT : null, statement.getDropBehavior()); roundTrip(statement); assertEquals(2, CCJSqlParserUtil.parseStatements(sql + "; SELECT 1").size()); @@ -61,7 +62,7 @@ void visitsEveryTableAndKeepsLegacyMutationsLive() throws JSQLParserException { statement.getTargets().get(2).setOnly(false); statement.getTables().add(new Table("z")); statement.setCascade(false); - statement.setDropBehavior(Truncate.DropBehavior.RESTRICT); + statement.setDropBehavior(CascadeBehavior.RESTRICT); assertFalse(statement.getCascade()); assertEquals("TRUNCATE ONLY a, y *, x, z RESTART IDENTITY RESTRICT", statement.toString()); assertEquals(Set.of("a", "y", "x", "z"), new TablesNamesFinder().getTables(statement));