From c915b67eda1afd933d8e30901dca18b96d7e549a Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 16 Apr 2014 12:43:42 +0200 Subject: [PATCH] [#3189] Add DSL.sequenceByName(String...) --- .../jooq/test/_/testcases/GeneralTests.java | 15 +++- .../src/org/jooq/test/jOOQAbstractTest.java | 5 ++ jOOQ/src/main/java/org/jooq/impl/DSL.java | 90 +++++++++++++++++++ 3 files changed, 109 insertions(+), 1 deletion(-) diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/GeneralTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/GeneralTests.java index 8fe02925c2..b6b110f5b1 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/GeneralTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/GeneralTests.java @@ -83,6 +83,7 @@ import org.jooq.UpdatableRecord; import org.jooq.UpdateQuery; import org.jooq.conf.Settings; import org.jooq.exception.DetachedException; +import org.jooq.impl.DSL; import org.jooq.impl.DefaultConnectionProvider; import org.jooq.impl.DefaultExecuteListener; import org.jooq.test.BaseTest; @@ -131,6 +132,19 @@ extends BaseTest sequence = SAuthorID(); + + if (sequence != null) { + testSequences0(DSL.sequenceByName(sequence.getSchema().getName(), sequence.getName())); + } + } + + private void testSequences0(Sequence sequence) { if (cSequences() == null) { log.info("SKIPPING", "sequences test"); return; @@ -138,7 +152,6 @@ extends BaseTest sequence = SAuthorID(); Field nextval = sequence.nextval(); Field currval = null; diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index d7ab23bb9a..9565108698 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -1282,6 +1282,11 @@ public abstract class jOOQAbstractTest< new GeneralTests(this).testSequences(); } + @Test + public void testSequenceByName() throws Exception { + new GeneralTests(this).testSequenceByName(); + } + @Test public void testSelectSimpleQuery() throws Exception { new SelectTests(this).testSelectSimpleQuery(); diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 983176f9c7..0a07c30c4a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -63,6 +63,7 @@ import static org.jooq.impl.Term.ROW_NUMBER; import static org.jooq.impl.Utils.combine; import java.math.BigDecimal; +import java.math.BigInteger; import java.sql.Connection; import java.sql.Date; import java.sql.ResultSetMetaData; @@ -4992,6 +4993,95 @@ public class DSL { return new SchemaImpl(name); } + /** + * Create a qualified sequence, given its sequence name. + *

+ * This constructs a sequence reference given the sequence's qualified name. + * jOOQ will render the sequence name according to your + * {@link Settings#getRenderNameStyle()} settings. Choose + * {@link RenderNameStyle#QUOTED} to prevent syntax errors and/or SQL + * injection. + *

+ * Example:

+     * // This sequence...
+     * sequenceByName("MY_SCHEMA", "MY_SEQUENCE");
+     *
+     * // ... will render this SQL on SQL Server with RenderNameStyle.QUOTED set
+     * [MY_SCHEMA].[MY_SEQUENCE]
+     * 
+ * + * @param qualifiedName The various parts making up your sequence's + * reference name. + * @return A sequence referenced by sequenceName + */ + @Support + public static Sequence sequenceByName(String... qualifiedName) { + return sequenceByName(BigInteger.class, qualifiedName); + } + + /** + * Create a qualified sequence, given its sequence name. + *

+ * This constructs a sequence reference given the sequence's qualified name. + * jOOQ will render the sequence name according to your + * {@link Settings#getRenderNameStyle()} settings. Choose + * {@link RenderNameStyle#QUOTED} to prevent syntax errors and/or SQL + * injection. + *

+ * Example:

+     * // This sequence...
+     * sequenceByName("MY_SCHEMA", "MY_SEQUENCE");
+     *
+     * // ... will render this SQL on SQL Server with RenderNameStyle.QUOTED set
+     * [MY_SCHEMA].[MY_SEQUENCE]
+     * 
+ * + * @param qualifiedName The various parts making up your sequence's + * reference name. + * @param type The type of the returned field + * @return A sequence referenced by sequenceName + */ + @Support + public static Sequence sequenceByName(Class type, String... qualifiedName) { + return sequenceByName(getDataType(type), qualifiedName); + } + + /** + * Create a qualified sequence, given its sequence name. + *

+ * This constructs a sequence reference given the sequence's qualified name. + * jOOQ will render the sequence name according to your + * {@link Settings#getRenderNameStyle()} settings. Choose + * {@link RenderNameStyle#QUOTED} to prevent syntax errors and/or SQL + * injection. + *

+ * Example:

+     * // This sequence...
+     * sequenceByName("MY_SCHEMA", "MY_SEQUENCE");
+     *
+     * // ... will render this SQL on SQL Server with RenderNameStyle.QUOTED set
+     * [MY_SCHEMA].[MY_SEQUENCE]
+     * 
+ * + * @param qualifiedName The various parts making up your sequence's + * reference name. + * @param type The type of the returned field + * @return A sequence referenced by sequenceName + */ + @Support + public static Sequence sequenceByName(DataType type, String... qualifiedName) { + if (qualifiedName == null) + throw new NullPointerException(); + + if (qualifiedName.length < 1 || qualifiedName.length > 2) + throw new IllegalArgumentException("Must provide a qualified name of length 1 or 2 : " + name(qualifiedName)); + + String name = qualifiedName[qualifiedName.length - 1]; + Schema schema = qualifiedName.length == 2 ? schemaByName(qualifiedName[0]) : null; + + return new SequenceImpl(name, schema, type); + } + /** * Create a qualified table, given its table name. *