[#4969] Add support for CREATE SEQUENCE IF NOT EXISTS
This commit is contained in:
parent
045ab81ef0
commit
c6eb9a736c
@ -7201,6 +7201,30 @@ public interface DSLContext extends Scope , AutoCloseable {
|
||||
@Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, POSTGRES })
|
||||
CreateSequenceFinalStep createSequence(Sequence<?> sequence);
|
||||
|
||||
/**
|
||||
* Create a new DSL <code>CREATE SEQUENCE</code> statement.
|
||||
*
|
||||
* @see DSL#createSequenceIfNotExists(String)
|
||||
*/
|
||||
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
|
||||
CreateSequenceFinalStep createSequenceIfNotExists(String sequence);
|
||||
|
||||
/**
|
||||
* Create a new DSL <code>CREATE SEQUENCE</code> statement.
|
||||
*
|
||||
* @see DSL#createSequenceIfNotExists(Name)
|
||||
*/
|
||||
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
|
||||
CreateSequenceFinalStep createSequenceIfNotExists(Name sequence);
|
||||
|
||||
/**
|
||||
* Create a new DSL <code>CREATE SEQUENCE</code> statement.
|
||||
*
|
||||
* @see DSL#createSequenceIfNotExists(String)
|
||||
*/
|
||||
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
|
||||
CreateSequenceFinalStep createSequenceIfNotExists(Sequence<?> sequence);
|
||||
|
||||
/**
|
||||
* Create a new DSL <code>ALTER SEQUENCE</code> statement.
|
||||
*
|
||||
|
||||
@ -43,8 +43,14 @@ package org.jooq.impl;
|
||||
import static java.util.Arrays.asList;
|
||||
import static org.jooq.Clause.CREATE_SEQUENCE;
|
||||
import static org.jooq.Clause.CREATE_SEQUENCE_SEQUENCE;
|
||||
// ...
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.CUBRID;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.DERBY;
|
||||
import static org.jooq.SQLDialect.FIREBIRD;
|
||||
// ...
|
||||
// ...
|
||||
// ...
|
||||
|
||||
import org.jooq.Clause;
|
||||
@ -68,25 +74,47 @@ class CreateSequenceImpl extends AbstractQuery implements
|
||||
private static final Clause[] CLAUSES = { CREATE_SEQUENCE };
|
||||
|
||||
private final Sequence<?> sequence;
|
||||
private final boolean ifNotExists;
|
||||
|
||||
CreateSequenceImpl(Configuration configuration, Sequence<?> sequence) {
|
||||
CreateSequenceImpl(Configuration configuration, Sequence<?> sequence, boolean ifNotExists) {
|
||||
super(configuration);
|
||||
|
||||
this.sequence = sequence;
|
||||
this.ifNotExists = ifNotExists;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// XXX: QueryPart API
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
private final boolean supportsIfNotExists(Context<?> ctx) {
|
||||
return !asList(DERBY, FIREBIRD).contains(ctx.family());
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void accept(Context<?> ctx) {
|
||||
if (ifNotExists && !supportsIfNotExists(ctx)) {
|
||||
Utils.executeImmediateBegin(ctx, DDLStatementType.CREATE_SEQUENCE);
|
||||
accept0(ctx);
|
||||
Utils.executeImmediateEnd(ctx, DDLStatementType.CREATE_SEQUENCE);
|
||||
}
|
||||
else {
|
||||
accept0(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
private final void accept0(Context<?> ctx) {
|
||||
ctx.start(CREATE_SEQUENCE_SEQUENCE)
|
||||
.keyword("create")
|
||||
.sql(' ')
|
||||
.keyword(ctx.family() == CUBRID ? "serial" : "sequence")
|
||||
.sql(' ')
|
||||
.visit(sequence);
|
||||
.sql(' ');
|
||||
|
||||
if (ifNotExists && supportsIfNotExists(ctx))
|
||||
ctx.keyword("if not exists")
|
||||
.sql(' ');
|
||||
|
||||
ctx.visit(sequence);
|
||||
|
||||
// Some databases default to sequences starting with MIN_VALUE
|
||||
if (asList(DERBY).contains(ctx.family()))
|
||||
|
||||
@ -5715,6 +5715,36 @@ public class DSL {
|
||||
return using(new DefaultConfiguration()).createSequence(sequence);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new DSL <code>CREATE SEQUENCE IF NOT EXISTS</code> statement.
|
||||
*
|
||||
* @see DSLContext#createSequenceIfNotExists(String)
|
||||
*/
|
||||
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
|
||||
public static CreateSequenceFinalStep createSequenceIfNotExists(String sequence) {
|
||||
return using(new DefaultConfiguration()).createSequenceIfNotExists(sequence);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new DSL <code>CREATE SEQUENCE IF NOT EXISTS</code> statement.
|
||||
*
|
||||
* @see DSLContext#createSequenceIfNotExists(Name)
|
||||
*/
|
||||
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
|
||||
public static CreateSequenceFinalStep createSequenceIfNotExists(Name sequence) {
|
||||
return using(new DefaultConfiguration()).createSequenceIfNotExists(sequence);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new DSL <code>CREATE SEQUENCE IF NOT EXISTS</code> statement.
|
||||
*
|
||||
* @see DSLContext#createSequenceIfNotExists(Sequence)
|
||||
*/
|
||||
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
|
||||
public static CreateSequenceFinalStep createSequenceIfNotExists(Sequence<?> sequence) {
|
||||
return using(new DefaultConfiguration()).createSequenceIfNotExists(sequence);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new DSL <code>ALTER SEQUENCE</code> statement.
|
||||
*
|
||||
|
||||
@ -2297,7 +2297,22 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri
|
||||
|
||||
@Override
|
||||
public CreateSequenceFinalStep createSequence(Sequence<?> sequence) {
|
||||
return new CreateSequenceImpl(configuration(), sequence);
|
||||
return new CreateSequenceImpl(configuration(), sequence, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CreateSequenceFinalStep createSequenceIfNotExists(String sequence) {
|
||||
return createSequenceIfNotExists(name(sequence));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CreateSequenceFinalStep createSequenceIfNotExists(Name sequence) {
|
||||
return createSequenceIfNotExists(sequence(sequence));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CreateSequenceFinalStep createSequenceIfNotExists(Sequence<?> sequence) {
|
||||
return new CreateSequenceImpl(configuration(), sequence, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -118,9 +118,13 @@ class DefaultRenderContext extends AbstractContext<RenderContext> implements Ren
|
||||
qualifyCatalog(context.qualifyCatalog());
|
||||
qualifySchema(context.qualifySchema());
|
||||
castMode(context.castMode());
|
||||
declareFields(context.declareFields());
|
||||
declareTables(context.declareTables());
|
||||
data().putAll(context.data());
|
||||
|
||||
declareCTE = context.declareCTE();
|
||||
declareWindows = context.declareWindows();
|
||||
declareFields = context.declareFields();
|
||||
declareTables = context.declareTables();
|
||||
declareAliases = context.declareAliases();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
Loading…
Reference in New Issue
Block a user