[#3189] Add DSL.sequenceByName(String...)

This commit is contained in:
Lukas Eder 2014-04-16 12:43:42 +02:00
parent eeb522f16f
commit c915b67eda
3 changed files with 109 additions and 1 deletions

View File

@ -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<A, AP, B, S, B2S, BS, L, X, DATE, BOOL, D, T, U, UU, I, IPK, T7
@Test
public void testSequences() throws Exception {
testSequences0(SAuthorID());
}
@Test
public void testSequenceByName() throws Exception {
Sequence<? extends Number> sequence = SAuthorID();
if (sequence != null) {
testSequences0(DSL.sequenceByName(sequence.getSchema().getName(), sequence.getName()));
}
}
private void testSequences0(Sequence<? extends Number> sequence) {
if (cSequences() == null) {
log.info("SKIPPING", "sequences test");
return;
@ -138,7 +152,6 @@ extends BaseTest<A, AP, B, S, B2S, BS, L, X, DATE, BOOL, D, T, U, UU, I, IPK, T7
jOOQAbstractTest.reset = false;
Sequence<? extends Number> sequence = SAuthorID();
Field<? extends Number> nextval = sequence.nextval();
Field<? extends Number> currval = null;

View File

@ -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();

View File

@ -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.
* <p>
* 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.
* <p>
* Example: <code><pre>
* // This sequence...
* sequenceByName("MY_SCHEMA", "MY_SEQUENCE");
*
* // ... will render this SQL on SQL Server with RenderNameStyle.QUOTED set
* [MY_SCHEMA].[MY_SEQUENCE]
* </pre></code>
*
* @param qualifiedName The various parts making up your sequence's
* reference name.
* @return A sequence referenced by <code>sequenceName</code>
*/
@Support
public static Sequence<BigInteger> sequenceByName(String... qualifiedName) {
return sequenceByName(BigInteger.class, qualifiedName);
}
/**
* Create a qualified sequence, given its sequence name.
* <p>
* 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.
* <p>
* Example: <code><pre>
* // This sequence...
* sequenceByName("MY_SCHEMA", "MY_SEQUENCE");
*
* // ... will render this SQL on SQL Server with RenderNameStyle.QUOTED set
* [MY_SCHEMA].[MY_SEQUENCE]
* </pre></code>
*
* @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 <code>sequenceName</code>
*/
@Support
public static <T extends Number> Sequence<T> sequenceByName(Class<T> type, String... qualifiedName) {
return sequenceByName(getDataType(type), qualifiedName);
}
/**
* Create a qualified sequence, given its sequence name.
* <p>
* 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.
* <p>
* Example: <code><pre>
* // This sequence...
* sequenceByName("MY_SCHEMA", "MY_SEQUENCE");
*
* // ... will render this SQL on SQL Server with RenderNameStyle.QUOTED set
* [MY_SCHEMA].[MY_SEQUENCE]
* </pre></code>
*
* @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 <code>sequenceName</code>
*/
@Support
public static <T extends Number> Sequence<T> sequenceByName(DataType<T> 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<T>(name, schema, type);
}
/**
* Create a qualified table, given its table name.
* <p>