From 60d62c467d161e78fb709b8a6a9db14675317675 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 27 Jun 2014 13:59:33 +0200 Subject: [PATCH] [#3355] Added support for DROP SEQUENCE statements --- jOOQ/src/main/java/org/jooq/Clause.java | 10 ++ jOOQ/src/main/java/org/jooq/DSLContext.java | 16 ++++ .../java/org/jooq/DropSequenceFinalStep.java | 50 ++++++++++ jOOQ/src/main/java/org/jooq/impl/DSL.java | 21 +++++ .../java/org/jooq/impl/DefaultDSLContext.java | 11 +++ .../java/org/jooq/impl/DropSequenceImpl.java | 91 +++++++++++++++++++ .../java/org/jooq/test/VisitContextTest.java | 13 +++ 7 files changed, 212 insertions(+) create mode 100644 jOOQ/src/main/java/org/jooq/DropSequenceFinalStep.java create mode 100644 jOOQ/src/main/java/org/jooq/impl/DropSequenceImpl.java diff --git a/jOOQ/src/main/java/org/jooq/Clause.java b/jOOQ/src/main/java/org/jooq/Clause.java index d18b55423a..2299654767 100644 --- a/jOOQ/src/main/java/org/jooq/Clause.java +++ b/jOOQ/src/main/java/org/jooq/Clause.java @@ -885,6 +885,16 @@ public enum Clause { */ DROP_INDEX, + /** + * A complete DROP SEQUENCE statement. + */ + DROP_SEQUENCE, + + /** + * A SEQUENCE clause within a {@link #DROP_SEQUENCE} statement. + */ + DROP_SEQUENCE_SEQUENCE, + // ------------------------------------------------------------------------- // Other clauses // ------------------------------------------------------------------------- diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java index 242ec37527..10aea3009a 100644 --- a/jOOQ/src/main/java/org/jooq/DSLContext.java +++ b/jOOQ/src/main/java/org/jooq/DSLContext.java @@ -4710,6 +4710,22 @@ public interface DSLContext { @Support DropIndexFinalStep dropIndex(String index); + /** + * Create a new DSL DROP SEQUENCE statement. + * + * @see DSLContext#dropSequence(Sequence) + */ + @Support({ FIREBIRD, H2, HSQLDB, POSTGRES }) + DropSequenceFinalStep dropSequence(Sequence sequence); + + /** + * Create a new DSL DROP SEQUENCE statement. + * + * @see DSLContext#dropSequence(Sequence) + */ + @Support({ FIREBIRD, H2, HSQLDB, POSTGRES }) + DropSequenceFinalStep dropSequence(String sequence); + /** * Create a new DSL truncate statement. *

diff --git a/jOOQ/src/main/java/org/jooq/DropSequenceFinalStep.java b/jOOQ/src/main/java/org/jooq/DropSequenceFinalStep.java new file mode 100644 index 0000000000..9b5464b9d5 --- /dev/null +++ b/jOOQ/src/main/java/org/jooq/DropSequenceFinalStep.java @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2009-2014, Data Geekery GmbH (http://www.datageekery.com) + * All rights reserved. + * + * This work is dual-licensed + * - under the Apache Software License 2.0 (the "ASL") + * - under the jOOQ License and Maintenance Agreement (the "jOOQ License") + * ============================================================================= + * You may choose which license applies to you: + * + * - If you're using this work with Open Source databases, you may choose + * either ASL or jOOQ License. + * - If you're using this work with at least one commercial database, you must + * choose jOOQ License + * + * For more information, please visit http://www.jooq.org/licenses + * + * Apache Software License 2.0: + * ----------------------------------------------------------------------------- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * jOOQ License and Maintenance Agreement: + * ----------------------------------------------------------------------------- + * Data Geekery grants the Customer the non-exclusive, timely limited and + * non-transferable license to install and use the Software under the terms of + * the jOOQ License and Maintenance Agreement. + * + * This library is distributed with a LIMITED WARRANTY. See the jOOQ License + * and Maintenance Agreement for more details: http://www.jooq.org/licensing + */ +package org.jooq; + +/** + * A {@link Query} that can drop sequences. + * + * @author Lukas Eder + */ +public interface DropSequenceFinalStep extends Query { + +} diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 1a7724c52d..b240ff51c8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -97,6 +97,7 @@ import org.jooq.Delete; import org.jooq.DeleteWhereStep; import org.jooq.DerivedColumnList; import org.jooq.DropIndexFinalStep; +import org.jooq.DropSequenceFinalStep; import org.jooq.DropTableStep; import org.jooq.Field; import org.jooq.GroupConcatOrderByStep; @@ -4283,6 +4284,26 @@ public class DSL { return using(new DefaultConfiguration()).dropIndex(index); } + /** + * Create a new DSL DROP SEQUENCE statement. + * + * @see DSLContext#dropSequence(Sequence) + */ + @Support({ FIREBIRD, H2, HSQLDB, POSTGRES }) + public static DropSequenceFinalStep dropSequence(Sequence sequence) { + return using(new DefaultConfiguration()).dropSequence(sequence); + } + + /** + * Create a new DSL DROP SEQUENCE statement. + * + * @see DSLContext#dropSequence(Sequence) + */ + @Support({ FIREBIRD, H2, HSQLDB, POSTGRES }) + public static DropSequenceFinalStep dropSequence(String sequence) { + return using(new DefaultConfiguration()).dropSequence(sequence); + } + /** * Create a new DSL truncate statement. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index 49923dd5a1..1641523ffc 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -88,6 +88,7 @@ import org.jooq.DataType; import org.jooq.DeleteQuery; import org.jooq.DeleteWhereStep; import org.jooq.DropIndexFinalStep; +import org.jooq.DropSequenceFinalStep; import org.jooq.DropTableStep; import org.jooq.ExecuteContext; import org.jooq.ExecuteListener; @@ -1612,6 +1613,16 @@ public class DefaultDSLContext implements DSLContext, Serializable { return new DropIndexImpl(configuration, index); } + @Override + public DropSequenceFinalStep dropSequence(Sequence sequence) { + return new DropSequenceImpl(configuration, sequence); + } + + @Override + public DropSequenceFinalStep dropSequence(String sequence) { + return dropSequence(sequence(sequence)); + } + @Override public TruncateIdentityStep truncate(Table table) { return new TruncateImpl(configuration, table); diff --git a/jOOQ/src/main/java/org/jooq/impl/DropSequenceImpl.java b/jOOQ/src/main/java/org/jooq/impl/DropSequenceImpl.java new file mode 100644 index 0000000000..9c8deed290 --- /dev/null +++ b/jOOQ/src/main/java/org/jooq/impl/DropSequenceImpl.java @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2009-2014, Data Geekery GmbH (http://www.datageekery.com) + * All rights reserved. + * + * This work is dual-licensed + * - under the Apache Software License 2.0 (the "ASL") + * - under the jOOQ License and Maintenance Agreement (the "jOOQ License") + * ============================================================================= + * You may choose which license applies to you: + * + * - If you're using this work with Open Source databases, you may choose + * either ASL or jOOQ License. + * - If you're using this work with at least one commercial database, you must + * choose jOOQ License + * + * For more information, please visit http://www.jooq.org/licenses + * + * Apache Software License 2.0: + * ----------------------------------------------------------------------------- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * jOOQ License and Maintenance Agreement: + * ----------------------------------------------------------------------------- + * Data Geekery grants the Customer the non-exclusive, timely limited and + * non-transferable license to install and use the Software under the terms of + * the jOOQ License and Maintenance Agreement. + * + * This library is distributed with a LIMITED WARRANTY. See the jOOQ License + * and Maintenance Agreement for more details: http://www.jooq.org/licensing + */ +package org.jooq.impl; + +import static org.jooq.Clause.DROP_SEQUENCE; +import static org.jooq.Clause.DROP_SEQUENCE_SEQUENCE; + +import org.jooq.Clause; +import org.jooq.Configuration; +import org.jooq.Context; +import org.jooq.DropSequenceFinalStep; +import org.jooq.Sequence; + +/** + * @author Lukas Eder + */ +class DropSequenceImpl extends AbstractQuery implements + + // Cascading interface implementations for DROP SEQUENCE behaviour + DropSequenceFinalStep { + + /** + * Generated UID + */ + private static final long serialVersionUID = 8904572826501186329L; + private static final Clause[] CLAUSES = { DROP_SEQUENCE }; + + private final Sequence sequence; + + DropSequenceImpl(Configuration configuration, Sequence sequence) { + super(configuration); + + this.sequence = sequence; + } + + // ------------------------------------------------------------------------ + // XXX: QueryPart API + // ------------------------------------------------------------------------ + + @Override + public final void accept(Context ctx) { + ctx.keyword("drop sequence") + .sql(" ") + .start(DROP_SEQUENCE_SEQUENCE) + .visit(sequence) + .end(DROP_SEQUENCE_SEQUENCE); + } + + @Override + public final Clause[] clauses(Context ctx) { + return CLAUSES; + } +} diff --git a/jOOQ/src/test/java/org/jooq/test/VisitContextTest.java b/jOOQ/src/test/java/org/jooq/test/VisitContextTest.java index 28649cee79..e8fedc0d71 100644 --- a/jOOQ/src/test/java/org/jooq/test/VisitContextTest.java +++ b/jOOQ/src/test/java/org/jooq/test/VisitContextTest.java @@ -70,6 +70,8 @@ import static org.jooq.Clause.DELETE; import static org.jooq.Clause.DELETE_DELETE; import static org.jooq.Clause.DELETE_WHERE; import static org.jooq.Clause.DROP_INDEX; +import static org.jooq.Clause.DROP_SEQUENCE; +import static org.jooq.Clause.DROP_SEQUENCE_SEQUENCE; import static org.jooq.Clause.DROP_TABLE; import static org.jooq.Clause.DROP_TABLE_TABLE; import static org.jooq.Clause.FIELD; @@ -776,6 +778,17 @@ public class VisitContextTest extends AbstractTest { ctx.alterSequence("seq").restart()); } + @Test + public void test_DROP_SEQUENCE() { + assertEvents(asList( + asList(DROP_SEQUENCE), + asList(DROP_SEQUENCE, DROP_SEQUENCE_SEQUENCE), + asList(DROP_SEQUENCE, DROP_SEQUENCE_SEQUENCE, SEQUENCE), + asList(DROP_SEQUENCE, DROP_SEQUENCE_SEQUENCE, SEQUENCE, SEQUENCE_REFERENCE) + ), + ctx.dropSequence("i")); + } + @Test public void test_ALTER_TABLE_ADD() { assertEvents(asList(