From 3a46a29d69366115065d3013ee41fdf84df6cf75 Mon Sep 17 00:00:00 2001 From: manticore-projects Date: Sun, 27 Jun 2021 05:38:19 +0700 Subject: [PATCH] Implement Oracle Alter Session Statements (#1234) * Implement Oracle Alter Session Statements according to https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_2012.htm * Implement PMD Rule "SwitchStmtsShouldHaveDefault" * Reorganize Test Case imports --- pmd-rules.xml | 1 + .../statement/StatementVisitor.java | 3 + .../statement/StatementVisitorAdapter.java | 6 + .../statement/alter/AlterSession.java | 167 ++++++++++++++++++ .../alter/AlterSessionOperation.java | 53 ++++++ .../statement/create/view/CreateView.java | 2 + .../sf/jsqlparser/util/TablesNamesFinder.java | 5 + .../util/deparser/AlterSessionDeParser.java | 25 +++ .../util/deparser/CreateViewDeParser.java | 2 + .../util/deparser/StatementDeParser.java | 6 + .../validator/AlterSessionValidator.java | 22 +++ .../validator/StatementValidator.java | 6 + .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 96 +++++++++- .../statement/alter/AlterSessionTest.java | 67 +++++++ 14 files changed, 460 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/sf/jsqlparser/statement/alter/AlterSession.java create mode 100644 src/main/java/net/sf/jsqlparser/statement/alter/AlterSessionOperation.java create mode 100644 src/main/java/net/sf/jsqlparser/util/deparser/AlterSessionDeParser.java create mode 100644 src/main/java/net/sf/jsqlparser/util/validation/validator/AlterSessionValidator.java create mode 100644 src/test/java/net/sf/jsqlparser/statement/alter/AlterSessionTest.java diff --git a/pmd-rules.xml b/pmd-rules.xml index 283988c82..912f4f0b2 100644 --- a/pmd-rules.xml +++ b/pmd-rules.xml @@ -75,6 +75,7 @@ under the License. + diff --git a/src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java b/src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java index cf964d181..2bd836d93 100644 --- a/src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java +++ b/src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java @@ -10,6 +10,7 @@ package net.sf.jsqlparser.statement; import net.sf.jsqlparser.statement.alter.Alter; +import net.sf.jsqlparser.statement.alter.AlterSession; import net.sf.jsqlparser.statement.alter.sequence.AlterSequence; import net.sf.jsqlparser.statement.comment.Comment; import net.sf.jsqlparser.statement.create.index.CreateIndex; @@ -102,4 +103,6 @@ public interface StatementVisitor { void visit(CreateFunctionalStatement createFunctionalStatement); void visit(CreateSynonym createSynonym); + + void visit(AlterSession alterSession); } diff --git a/src/main/java/net/sf/jsqlparser/statement/StatementVisitorAdapter.java b/src/main/java/net/sf/jsqlparser/statement/StatementVisitorAdapter.java index f5c480402..f49517726 100644 --- a/src/main/java/net/sf/jsqlparser/statement/StatementVisitorAdapter.java +++ b/src/main/java/net/sf/jsqlparser/statement/StatementVisitorAdapter.java @@ -10,6 +10,7 @@ package net.sf.jsqlparser.statement; import net.sf.jsqlparser.statement.alter.Alter; +import net.sf.jsqlparser.statement.alter.AlterSession; import net.sf.jsqlparser.statement.alter.sequence.AlterSequence; import net.sf.jsqlparser.statement.comment.Comment; import net.sf.jsqlparser.statement.create.index.CreateIndex; @@ -190,4 +191,9 @@ public void visit(CreateFunctionalStatement createFunctionalStatement) { @Override public void visit(CreateSynonym createSynonym) { } + + @Override + public void visit(AlterSession alterSession) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } } diff --git a/src/main/java/net/sf/jsqlparser/statement/alter/AlterSession.java b/src/main/java/net/sf/jsqlparser/statement/alter/AlterSession.java new file mode 100644 index 000000000..b37959689 --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/statement/alter/AlterSession.java @@ -0,0 +1,167 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2021 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ +/* + * Copyright (C) 2021 JSQLParser. + * + * This library is free software; you can redistribute it and/or modify it under the terms of the + * GNU Lesser General Public License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this library; + * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +package net.sf.jsqlparser.statement.alter; + +import java.util.List; +import net.sf.jsqlparser.statement.Statement; +import net.sf.jsqlparser.statement.StatementVisitor; + +/** + * + * @author are + * @@link https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_2012.htm + */ +public class AlterSession implements Statement { + private AlterSessionOperation operation; + private List parameters; + + public AlterSession(AlterSessionOperation operation, List parameters) { + this.operation = operation; + this.parameters = parameters; + } + + public AlterSessionOperation getOperation() { + return operation; + } + + public void setOperation(AlterSessionOperation operation) { + this.operation = operation; + } + + public List getParameters() { + return parameters; + } + + public void setParameters(List parameters) { + this.parameters = parameters; + } + + private static void appendParamaters(StringBuilder builder, List parameters) { + for (String s: parameters) { + builder.append(" ").append(s); + } + } + + @Override + @SuppressWarnings({"PMD.ExcessiveMethodLength", "PMD.CyclomaticComplexity"}) + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("ALTER SESSION "); + switch (operation) { + case ADVISE_COMMIT: + builder.append("ADVISE COMMIT"); + break; + case ADVISE_ROLLBACK: + builder.append("ADVISE ROLLBACK"); + break; + case ADVISE_NOTHING: + builder.append("ADVISE NOTHING"); + break; + case CLOSE_DATABASE_LINK: + builder.append("CLOSE DATABASE LINK "); + appendParamaters(builder, parameters); + break; + case ENABLE_COMMIT_IN_PROCEDURE: + builder.append("ENABLE COMMIT IN PROCEDURE"); + break; + case DISABLE_COMMIT_IN_PROCEDURE: + builder.append("DISABLE COMMIT IN PROCEDURE"); + break; + case ENABLE_GUARD: + builder.append("ENABLE GUARD"); + break; + case DISABLE_GUARD: + builder.append("DISABLE GUARD"); + break; + + case ENABLE_PARALLEL_DML: + builder.append("ENABLE PARALLEL DML"); + appendParamaters(builder, parameters); + break; + + case DISABLE_PARALLEL_DML: + builder.append("DISABLE PARALLEL DML"); + appendParamaters(builder, parameters); + break; + + case FORCE_PARALLEL_DML: + builder.append("FORCE PARALLEL DML"); + appendParamaters(builder, parameters); + break; + + case ENABLE_PARALLEL_DDL: + builder.append("ENABLE PARALLEL DDL"); + appendParamaters(builder, parameters); + break; + + case DISABLE_PARALLEL_DDL: + builder.append("DISABLE PARALLEL DDL"); + break; + + case FORCE_PARALLEL_DDL: + builder.append("FORCE PARALLEL DDL"); + appendParamaters(builder, parameters); + break; + + case ENABLE_PARALLEL_QUERY: + builder.append("ENABLE PARALLEL QUERY"); + appendParamaters(builder, parameters); + break; + + case DISABLE_PARALLEL_QUERY: + builder.append("DISABLE PARALLEL QUERY"); + break; + + case FORCE_PARALLEL_QUERY: + builder.append("FORCE PARALLEL QUERY"); + appendParamaters(builder, parameters); + break; + + case ENABLE_RESUMABLE: + builder.append("ENABLE RESUMABLE"); + appendParamaters(builder, parameters); + break; + + case DISABLE_RESUMABLE: + builder.append("DISABLE RESUMABLE"); + break; + + case SET: + builder.append("SET"); + appendParamaters(builder, parameters); + break; + default: + // not going to happen + + } + return builder.toString(); + } + + @Override + public void accept(StatementVisitor statementVisitor) { + statementVisitor.visit(this); + } +} diff --git a/src/main/java/net/sf/jsqlparser/statement/alter/AlterSessionOperation.java b/src/main/java/net/sf/jsqlparser/statement/alter/AlterSessionOperation.java new file mode 100644 index 000000000..2efdb1d51 --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/statement/alter/AlterSessionOperation.java @@ -0,0 +1,53 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2021 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ +/* + * Copyright (C) 2021 JSQLParser. + * + * This library is free software; you can redistribute it and/or modify it under the terms of the + * GNU Lesser General Public License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this library; + * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +package net.sf.jsqlparser.statement.alter; + +/** + * + * @author are + */ +public enum AlterSessionOperation { + ADVISE_COMMIT + , ADVISE_ROLLBACK + , ADVISE_NOTHING + , CLOSE_DATABASE_LINK + , ENABLE_COMMIT_IN_PROCEDURE + , DISABLE_COMMIT_IN_PROCEDURE + , ENABLE_GUARD + , DISABLE_GUARD + , ENABLE_PARALLEL_DML + , DISABLE_PARALLEL_DML + , FORCE_PARALLEL_DML + , ENABLE_PARALLEL_DDL + , DISABLE_PARALLEL_DDL + , FORCE_PARALLEL_DDL + , ENABLE_PARALLEL_QUERY + , DISABLE_PARALLEL_QUERY + , FORCE_PARALLEL_QUERY + , ENABLE_RESUMABLE + , DISABLE_RESUMABLE + , SET + } diff --git a/src/main/java/net/sf/jsqlparser/statement/create/view/CreateView.java b/src/main/java/net/sf/jsqlparser/statement/create/view/CreateView.java index 95dd85129..913f14dc1 100644 --- a/src/main/java/net/sf/jsqlparser/statement/create/view/CreateView.java +++ b/src/main/java/net/sf/jsqlparser/statement/create/view/CreateView.java @@ -116,6 +116,8 @@ public String toString() { case NO_FORCE: sql.append("NO FORCE "); break; + default: + // nothing } if (temp != TemporaryOption.NONE) { diff --git a/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java b/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java index 05415e72d..4a0727b29 100644 --- a/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java +++ b/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java @@ -65,6 +65,7 @@ import net.sf.jsqlparser.schema.Table; import net.sf.jsqlparser.statement.*; import net.sf.jsqlparser.statement.alter.Alter; +import net.sf.jsqlparser.statement.alter.AlterSession; import net.sf.jsqlparser.statement.alter.sequence.AlterSequence; import net.sf.jsqlparser.statement.comment.Comment; import net.sf.jsqlparser.statement.create.index.CreateIndex; @@ -987,4 +988,8 @@ private static void throwUnsupported(T type){ public void visit(TimezoneExpression aThis) { aThis.getLeftExpression().accept(this); } + + @Override + public void visit(AlterSession alterSession) { + } } diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/AlterSessionDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/AlterSessionDeParser.java new file mode 100644 index 000000000..69bab62a5 --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/util/deparser/AlterSessionDeParser.java @@ -0,0 +1,25 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2019 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ +package net.sf.jsqlparser.util.deparser; + +import net.sf.jsqlparser.statement.alter.AlterSession; + +public class AlterSessionDeParser extends AbstractDeParser { + + public AlterSessionDeParser(StringBuilder buffer) { + super(buffer); + } + + @Override + public void deParse(AlterSession alterSession) { + buffer.append(alterSession.toString()); + } + +} diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/CreateViewDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/CreateViewDeParser.java index 195ebf7dd..fd9dd958c 100644 --- a/src/main/java/net/sf/jsqlparser/util/deparser/CreateViewDeParser.java +++ b/src/main/java/net/sf/jsqlparser/util/deparser/CreateViewDeParser.java @@ -50,6 +50,8 @@ public void deParse(CreateView createView) { break; case NONE: break; + default: + // nothing } if (createView.getTemporary() != TemporaryOption.NONE) { buffer.append(createView.getTemporary().name()).append(" "); diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java index 8994926e5..083beb913 100644 --- a/src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java +++ b/src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java @@ -26,6 +26,7 @@ import net.sf.jsqlparser.statement.Statements; import net.sf.jsqlparser.statement.UseStatement; import net.sf.jsqlparser.statement.alter.Alter; +import net.sf.jsqlparser.statement.alter.AlterSession; import net.sf.jsqlparser.statement.alter.sequence.AlterSequence; import net.sf.jsqlparser.statement.comment.Comment; import net.sf.jsqlparser.statement.create.index.CreateIndex; @@ -320,4 +321,9 @@ public void visit(CreateSynonym createSynonym) { void deParse(Statement statement) { statement.accept(this); } + + @Override + public void visit(AlterSession alterSession) { + new AlterSessionDeParser(buffer).deParse(alterSession); + } } diff --git a/src/main/java/net/sf/jsqlparser/util/validation/validator/AlterSessionValidator.java b/src/main/java/net/sf/jsqlparser/util/validation/validator/AlterSessionValidator.java new file mode 100644 index 000000000..35b7f7477 --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/util/validation/validator/AlterSessionValidator.java @@ -0,0 +1,22 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2020 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ +package net.sf.jsqlparser.util.validation.validator; + +import net.sf.jsqlparser.statement.alter.AlterSession; + +/** + * @author gitmotte + */ +public class AlterSessionValidator extends AbstractValidator { + @Override + public void validate(AlterSession statement) { + //@todo: implement this method + } +} diff --git a/src/main/java/net/sf/jsqlparser/util/validation/validator/StatementValidator.java b/src/main/java/net/sf/jsqlparser/util/validation/validator/StatementValidator.java index 8fc0bd915..fbfdfb534 100644 --- a/src/main/java/net/sf/jsqlparser/util/validation/validator/StatementValidator.java +++ b/src/main/java/net/sf/jsqlparser/util/validation/validator/StatementValidator.java @@ -24,6 +24,7 @@ import net.sf.jsqlparser.statement.Statements; import net.sf.jsqlparser.statement.UseStatement; import net.sf.jsqlparser.statement.alter.Alter; +import net.sf.jsqlparser.statement.alter.AlterSession; import net.sf.jsqlparser.statement.alter.sequence.AlterSequence; import net.sf.jsqlparser.statement.comment.Comment; import net.sf.jsqlparser.statement.create.function.CreateFunction; @@ -254,4 +255,9 @@ public void visit(CreateSynonym createSynonym) { getValidator(CreateSynonymValidator.class).validate(createSynonym); } + @Override + public void visit(AlterSession alterSession) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + } diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 343134158..65e19a035 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -122,6 +122,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | +| | | | @@ -154,6 +155,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| | | | @@ -167,6 +169,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| | | | @@ -179,6 +182,8 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| +| | | | @@ -213,6 +218,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| | | | @@ -243,6 +249,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| | | | @@ -253,6 +260,12 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | + +/* @todo: + this collides with SELECT 'yelp'::name ... +| +*/ + | | | @@ -265,6 +278,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| | | | @@ -280,6 +294,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| | | | @@ -291,6 +306,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| | | | @@ -299,9 +315,11 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| | | | +| | | | @@ -327,6 +345,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| | | | @@ -480,6 +499,9 @@ Statement SingleStatement() : LOOKAHEAD(2) stm = AlterTable() | + LOOKAHEAD(2) + stm = AlterSession() + | LOOKAHEAD(CreateFunctionStatement()) stm = CreateFunctionStatement() | @@ -1351,7 +1373,7 @@ String RelObjectNameWithoutValue() : | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= - | tk= | tk= | tk= | tk= | tk= + | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= | tk= @@ -1359,6 +1381,9 @@ String RelObjectNameWithoutValue() : /*| tk= | tk= | tk= | tk= */ | tk= | tk= | tk= | tk= | tk= + + /* Keywords for ALTER SESSION */ + /* | tk= */ | tk= | tk= ) { return tk.image; } @@ -4639,6 +4664,8 @@ List CreateParameter(): | tk= { param.add(tk.image); } | + tk= { param.add(tk.image); } + | ( exp=ArrayConstructor(true)) { param.add(exp.toString()); } | tk="::" colDataType = ColDataType() { param.add(tk.image); param.add(colDataType.toString()); } @@ -5087,6 +5114,73 @@ Alter AlterTable(): } } +AlterSession AlterSession(): +{ + AlterSessionOperation operation = null; + List parameters = new ArrayList(); + Token token; +} +{ + ( + ( + ( { operation = AlterSessionOperation.ADVISE_COMMIT; } + | { operation = AlterSessionOperation.ADVISE_ROLLBACK; } + | { operation = AlterSessionOperation.ADVISE_NOTHING; } + ) + ) + | + ( + { operation = AlterSessionOperation.CLOSE_DATABASE_LINK; } + ) + | + ( + ( { operation = AlterSessionOperation.ENABLE_COMMIT_IN_PROCEDURE; } + | { operation = AlterSessionOperation.ENABLE_GUARD; } + | ( { operation = AlterSessionOperation.ENABLE_PARALLEL_DML; } + | { operation = AlterSessionOperation.ENABLE_PARALLEL_DDL; } + | { operation = AlterSessionOperation.ENABLE_PARALLEL_QUERY; } + ) + | { operation = AlterSessionOperation.ENABLE_RESUMABLE; } + ) + ) + | + ( + ( { operation = AlterSessionOperation.DISABLE_COMMIT_IN_PROCEDURE; } + | { operation = AlterSessionOperation.DISABLE_GUARD; } + | ( { operation = AlterSessionOperation.DISABLE_PARALLEL_DML; } + | { operation = AlterSessionOperation.DISABLE_PARALLEL_DDL; } + | { operation = AlterSessionOperation.DISABLE_PARALLEL_QUERY; } + ) + | { operation = AlterSessionOperation.DISABLE_RESUMABLE; } + ) + ) + | + ( + ( { operation = AlterSessionOperation.FORCE_PARALLEL_DML; } + | { operation = AlterSessionOperation.FORCE_PARALLEL_DDL; } + | { operation = AlterSessionOperation.FORCE_PARALLEL_QUERY; } + ) + ) + | + ( + { operation = AlterSessionOperation.SET; } + ) + ) + + ( ( token = + | token = + | token = "=" + | token = + | token = + ) { parameters.add( token.image ); } + )* + + + { + return new AlterSession(operation, parameters); + } +} + Wait Wait(): { Wait wait = new Wait(); diff --git a/src/test/java/net/sf/jsqlparser/statement/alter/AlterSessionTest.java b/src/test/java/net/sf/jsqlparser/statement/alter/AlterSessionTest.java new file mode 100644 index 000000000..7b61b4a07 --- /dev/null +++ b/src/test/java/net/sf/jsqlparser/statement/alter/AlterSessionTest.java @@ -0,0 +1,67 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2019 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ +package net.sf.jsqlparser.statement.alter; + +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.test.TestUtils; +import org.junit.Test; + +public class AlterSessionTest { + @Test + public void testAlterSessionAdvise() throws JSQLParserException { + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ADVISE COMMIT", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ADVISE ROLLBACK", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ADVISE NOTHING", true); + } + + @Test + public void testAlterSessionCloseDatabaseLink() throws JSQLParserException { + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION CLOSE DATABASE LINK mylink", true); + } + + @Test + public void testAlterSessionEnable() throws JSQLParserException { + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ENABLE COMMIT IN PROCEDURE", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ENABLE GUARD", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ENABLE PARALLEL DML", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ENABLE PARALLEL DML PARALLEL 10", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ENABLE PARALLEL DDL", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ENABLE PARALLEL DDL PARALLEL 10", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ENABLE PARALLEL QUERY", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION ENABLE PARALLEL QUERY PARALLEL 10", true); + } + + @Test + public void testAlterSessionDisable() throws JSQLParserException { + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION DISABLE COMMIT IN PROCEDURE", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION DISABLE GUARD", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION DISABLE PARALLEL DML", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION DISABLE PARALLEL DDL", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION DISABLE PARALLEL QUERY", true); + } + + @Test + public void testAlterSessionForceParallel() throws JSQLParserException { + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION FORCE PARALLEL DML", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION FORCE PARALLEL DML PARALLEL 10", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION FORCE PARALLEL DDL", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION FORCE PARALLEL DDL PARALLEL 10", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION FORCE PARALLEL QUERY", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION FORCE PARALLEL QUERY PARALLEL 10", true); + } + + + + @Test + public void testAlterSessionSet() throws JSQLParserException { + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION SET ddl_lock_timeout=7200", true); + TestUtils.assertSqlCanBeParsedAndDeparsed("ALTER SESSION SET ddl_lock_timeout = 7200", true); + } +}