[jOOQ/jOOQ#12851] Add support for CREATE SEQUENCE .. AS <data type>

Added support for:

- DDL
- Parser
This commit is contained in:
Lukas Eder 2024-03-05 13:29:16 +01:00
parent f9b7eb038f
commit a4f683ada7
8 changed files with 261 additions and 131 deletions

View File

@ -0,0 +1,86 @@
/*
* 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
*
* https://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.
*
* Other licenses:
* -----------------------------------------------------------------------------
* Commercial licenses for this work are available. These replace the above
* ASL 2.0 and offer limited warranties, support, maintenance, and commercial
* database integrations.
*
* For more information, please visit: https://www.jooq.org/legal/licensing
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package org.jooq;
import static org.jooq.SQLDialect.*;
import static org.jooq.impl.DSL.*;
import java.util.*;
import org.jooq.impl.DSL;
import org.jetbrains.annotations.*;
/**
* A step in the construction of the <code>CREATE SEQUENCE</code> statement.
* <p>
* <h3>Referencing <code>XYZ*Step</code> types directly from client code</h3>
* <p>
* It is usually not recommended to reference any <code>XYZ*Step</code> types
* directly from client code, or assign them to local variables. When writing
* dynamic SQL, creating a statement's components dynamically, and passing them
* to the DSL API statically is usually a better choice. See the manual's
* section about dynamic SQL for details: <a href=
* "https://www.jooq.org/doc/latest/manual/sql-building/dynamic-sql">https://www.jooq.org/doc/latest/manual/sql-building/dynamic-sql</a>.
* <p>
* Drawbacks of referencing the <code>XYZ*Step</code> types directly:
* <ul>
* <li>They're operating on mutable implementations (as of jOOQ 3.x)</li>
* <li>They're less composable and not easy to get right when dynamic SQL gets
* complex</li>
* <li>They're less readable</li>
* <li>They might have binary incompatible changes between minor releases</li>
* </ul>
*/
@SuppressWarnings({ "unused" })
public interface CreateSequenceAsStep<T extends Number> extends CreateSequenceFlagsStep<T> {
/**
* Add the <code>AS</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ DERBY, H2, HSQLDB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
<T extends Number> CreateSequenceFlagsStep<T> as(Class<T> dataType);
/**
* Add the <code>AS</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ DERBY, H2, HSQLDB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
<T extends Number> CreateSequenceFlagsStep<T> as(DataType<T> dataType);
}

View File

@ -68,7 +68,7 @@ import org.jetbrains.annotations.*;
* </ul>
*/
@SuppressWarnings({ "unused" })
public interface CreateSequenceFlagsStep extends CreateSequenceFinalStep {
public interface CreateSequenceFlagsStep<T extends Number> extends CreateSequenceFinalStep {
/**
* Add the <code>START WITH</code> clause to the <code>CREATE SEQUENCE</code> statement.
@ -77,14 +77,14 @@ public interface CreateSequenceFlagsStep extends CreateSequenceFinalStep {
*/
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep startWith(Number startWith);
CreateSequenceFlagsStep<T> startWith(T startWith);
/**
* Add the <code>START WITH</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep startWith(Field<? extends Number> startWith);
CreateSequenceFlagsStep<T> startWith(Field<T> startWith);
/**
* Add the <code>INCREMENT BY</code> clause to the <code>CREATE SEQUENCE</code> statement.
@ -93,14 +93,14 @@ public interface CreateSequenceFlagsStep extends CreateSequenceFinalStep {
*/
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep incrementBy(Number incrementBy);
CreateSequenceFlagsStep<T> incrementBy(T incrementBy);
/**
* Add the <code>INCREMENT BY</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep incrementBy(Field<? extends Number> incrementBy);
CreateSequenceFlagsStep<T> incrementBy(Field<T> incrementBy);
/**
* Add the <code>MINVALUE</code> clause to the <code>CREATE SEQUENCE</code> statement.
@ -109,21 +109,21 @@ public interface CreateSequenceFlagsStep extends CreateSequenceFinalStep {
*/
@Support({ CUBRID, DERBY, DUCKDB, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep minvalue(Number minvalue);
CreateSequenceFlagsStep<T> minvalue(T minvalue);
/**
* Add the <code>MINVALUE</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ CUBRID, DERBY, DUCKDB, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep minvalue(Field<? extends Number> minvalue);
CreateSequenceFlagsStep<T> minvalue(Field<T> minvalue);
/**
* Add the <code>NO MINVALUE</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep noMinvalue();
CreateSequenceFlagsStep<T> noMinvalue();
/**
* Add the <code>MAXVALUE</code> clause to the <code>CREATE SEQUENCE</code> statement.
@ -132,35 +132,35 @@ public interface CreateSequenceFlagsStep extends CreateSequenceFinalStep {
*/
@Support({ CUBRID, DERBY, DUCKDB, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep maxvalue(Number maxvalue);
CreateSequenceFlagsStep<T> maxvalue(T maxvalue);
/**
* Add the <code>MAXVALUE</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ CUBRID, DERBY, DUCKDB, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep maxvalue(Field<? extends Number> maxvalue);
CreateSequenceFlagsStep<T> maxvalue(Field<T> maxvalue);
/**
* Add the <code>NO MAXVALUE</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep noMaxvalue();
CreateSequenceFlagsStep<T> noMaxvalue();
/**
* Add the <code>CYCLE</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ CUBRID, DERBY, DUCKDB, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep cycle();
CreateSequenceFlagsStep<T> cycle();
/**
* Add the <code>NO CYCLE</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep noCycle();
CreateSequenceFlagsStep<T> noCycle();
/**
* Add the <code>CACHE</code> clause to the <code>CREATE SEQUENCE</code> statement.
@ -169,19 +169,19 @@ public interface CreateSequenceFlagsStep extends CreateSequenceFinalStep {
*/
@Support({ CUBRID, H2, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep cache(Number cache);
CreateSequenceFlagsStep<T> cache(T cache);
/**
* Add the <code>CACHE</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ CUBRID, H2, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep cache(Field<? extends Number> cache);
CreateSequenceFlagsStep<T> cache(Field<T> cache);
/**
* Add the <code>NO CACHE</code> clause to the <code>CREATE SEQUENCE</code> statement.
*/
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
@NotNull @CheckReturnValue
CreateSequenceFlagsStep noCache();
CreateSequenceFlagsStep<T> noCache();
}

View File

@ -10832,7 +10832,7 @@ public interface DSLContext extends Scope {
*/
@NotNull @CheckReturnValue
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
CreateSequenceFlagsStep createSequence(@Stringly.Name String sequence);
CreateSequenceAsStep<Number> createSequence(@Stringly.Name String sequence);
/**
* The <code>CREATE SEQUENCE</code> statement.
@ -10841,7 +10841,7 @@ public interface DSLContext extends Scope {
*/
@NotNull @CheckReturnValue
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
CreateSequenceFlagsStep createSequence(Name sequence);
CreateSequenceAsStep<Number> createSequence(Name sequence);
/**
* The <code>CREATE SEQUENCE</code> statement.
@ -10850,7 +10850,7 @@ public interface DSLContext extends Scope {
*/
@NotNull @CheckReturnValue
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
CreateSequenceFlagsStep createSequence(Sequence<?> sequence);
CreateSequenceAsStep<Number> createSequence(Sequence<?> sequence);
/**
* The <code>CREATE SEQUENCE IF NOT EXISTS</code> statement.
@ -10859,7 +10859,7 @@ public interface DSLContext extends Scope {
*/
@NotNull @CheckReturnValue
@Support({ DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
CreateSequenceFlagsStep createSequenceIfNotExists(@Stringly.Name String sequence);
CreateSequenceAsStep<Number> createSequenceIfNotExists(@Stringly.Name String sequence);
/**
* The <code>CREATE SEQUENCE IF NOT EXISTS</code> statement.
@ -10868,7 +10868,7 @@ public interface DSLContext extends Scope {
*/
@NotNull @CheckReturnValue
@Support({ DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
CreateSequenceFlagsStep createSequenceIfNotExists(Name sequence);
CreateSequenceAsStep<Number> createSequenceIfNotExists(Name sequence);
/**
* The <code>CREATE SEQUENCE IF NOT EXISTS</code> statement.
@ -10877,7 +10877,7 @@ public interface DSLContext extends Scope {
*/
@NotNull @CheckReturnValue
@Support({ DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
CreateSequenceFlagsStep createSequenceIfNotExists(Sequence<?> sequence);
CreateSequenceAsStep<Number> createSequenceIfNotExists(Sequence<?> sequence);
/**
* The <code>DROP DATABASE</code> statement.

View File

@ -64,27 +64,29 @@ import java.util.stream.*;
/**
* The <code>CREATE SEQUENCE</code> statement.
*/
@SuppressWarnings({ "hiding", "rawtypes", "unused" })
final class CreateSequenceImpl
@SuppressWarnings({ "hiding", "rawtypes", "unchecked", "unused" })
final class CreateSequenceImpl<T extends Number>
extends
AbstractDDLQuery
implements
QOM.CreateSequence,
CreateSequenceFlagsStep,
QOM.CreateSequence<T>,
CreateSequenceAsStep<T>,
CreateSequenceFlagsStep<T>,
CreateSequenceFinalStep
{
final Sequence<?> sequence;
final boolean ifNotExists;
Field<? extends Number> startWith;
Field<? extends Number> incrementBy;
Field<? extends Number> minvalue;
boolean noMinvalue;
Field<? extends Number> maxvalue;
boolean noMaxvalue;
CycleOption cycle;
Field<? extends Number> cache;
boolean noCache;
final Sequence<?> sequence;
final boolean ifNotExists;
DataType<T> dataType;
Field<T> startWith;
Field<T> incrementBy;
Field<T> minvalue;
boolean noMinvalue;
Field<T> maxvalue;
boolean noMaxvalue;
CycleOption cycle;
Field<T> cache;
boolean noCache;
CreateSequenceImpl(
Configuration configuration,
@ -98,6 +100,7 @@ implements
null,
null,
null,
null,
false,
null,
false,
@ -111,20 +114,22 @@ implements
Configuration configuration,
Sequence<?> sequence,
boolean ifNotExists,
Field<? extends Number> startWith,
Field<? extends Number> incrementBy,
Field<? extends Number> minvalue,
DataType<T> dataType,
Field<T> startWith,
Field<T> incrementBy,
Field<T> minvalue,
boolean noMinvalue,
Field<? extends Number> maxvalue,
Field<T> maxvalue,
boolean noMaxvalue,
CycleOption cycle,
Field<? extends Number> cache,
Field<T> cache,
boolean noCache
) {
super(configuration);
this.sequence = sequence;
this.ifNotExists = ifNotExists;
this.dataType = dataType;
this.startWith = startWith;
this.incrementBy = incrementBy;
this.minvalue = minvalue;
@ -141,86 +146,97 @@ implements
// -------------------------------------------------------------------------
@Override
public final CreateSequenceImpl startWith(Number startWith) {
return startWith(Tools.field(startWith, sequence.getDataType()));
public final <T extends Number> CreateSequenceImpl<T> as(Class<T> dataType) {
return as(DefaultDataType.getDataType(null, dataType));
}
@Override
public final CreateSequenceImpl startWith(Field<? extends Number> startWith) {
public final <T extends Number> CreateSequenceImpl<T> as(DataType<T> dataType) {
this.dataType = (DataType) dataType;
return (CreateSequenceImpl) this;
}
@Override
public final CreateSequenceImpl<T> startWith(T startWith) {
return startWith(Tools.field(startWith, (DataType<T>) sequence.getDataType()));
}
@Override
public final CreateSequenceImpl<T> startWith(Field<T> startWith) {
this.startWith = startWith;
return this;
}
@Override
public final CreateSequenceImpl incrementBy(Number incrementBy) {
return incrementBy(Tools.field(incrementBy, sequence.getDataType()));
public final CreateSequenceImpl<T> incrementBy(T incrementBy) {
return incrementBy(Tools.field(incrementBy, (DataType<T>) sequence.getDataType()));
}
@Override
public final CreateSequenceImpl incrementBy(Field<? extends Number> incrementBy) {
public final CreateSequenceImpl<T> incrementBy(Field<T> incrementBy) {
this.incrementBy = incrementBy;
return this;
}
@Override
public final CreateSequenceImpl minvalue(Number minvalue) {
return minvalue(Tools.field(minvalue, sequence.getDataType()));
public final CreateSequenceImpl<T> minvalue(T minvalue) {
return minvalue(Tools.field(minvalue, (DataType<T>) sequence.getDataType()));
}
@Override
public final CreateSequenceImpl minvalue(Field<? extends Number> minvalue) {
public final CreateSequenceImpl<T> minvalue(Field<T> minvalue) {
this.minvalue = minvalue;
return this;
}
@Override
public final CreateSequenceImpl noMinvalue() {
public final CreateSequenceImpl<T> noMinvalue() {
this.noMinvalue = true;
return this;
}
@Override
public final CreateSequenceImpl maxvalue(Number maxvalue) {
return maxvalue(Tools.field(maxvalue, sequence.getDataType()));
public final CreateSequenceImpl<T> maxvalue(T maxvalue) {
return maxvalue(Tools.field(maxvalue, (DataType<T>) sequence.getDataType()));
}
@Override
public final CreateSequenceImpl maxvalue(Field<? extends Number> maxvalue) {
public final CreateSequenceImpl<T> maxvalue(Field<T> maxvalue) {
this.maxvalue = maxvalue;
return this;
}
@Override
public final CreateSequenceImpl noMaxvalue() {
public final CreateSequenceImpl<T> noMaxvalue() {
this.noMaxvalue = true;
return this;
}
@Override
public final CreateSequenceImpl cycle() {
public final CreateSequenceImpl<T> cycle() {
this.cycle = CycleOption.CYCLE;
return this;
}
@Override
public final CreateSequenceImpl noCycle() {
public final CreateSequenceImpl<T> noCycle() {
this.cycle = CycleOption.NO_CYCLE;
return this;
}
@Override
public final CreateSequenceImpl cache(Number cache) {
return cache(Tools.field(cache, sequence.getDataType()));
public final CreateSequenceImpl<T> cache(T cache) {
return cache(Tools.field(cache, (DataType<T>) sequence.getDataType()));
}
@Override
public final CreateSequenceImpl cache(Field<? extends Number> cache) {
public final CreateSequenceImpl<T> cache(Field<T> cache) {
this.cache = cache;
return this;
}
@Override
public final CreateSequenceImpl noCache() {
public final CreateSequenceImpl<T> noCache() {
this.noCache = true;
return this;
}
@ -267,6 +283,11 @@ implements
ctx.visit(sequence);
String noSeparator = NO_SEPARATOR.contains(ctx.dialect()) ? "" : " ";
if (dataType != null) {
ctx.sql(' ').visit(K_AS).sql(' ');
toSQLDDLTypeDeclaration(ctx, dataType);
}
// Some databases default to sequences starting with MIN_VALUE
if (startWith == null && REQUIRES_START_WITH.contains(ctx.dialect()))
ctx.sql(' ').visit(K_START_WITH).sql(" 1");
@ -322,17 +343,22 @@ implements
}
@Override
public final Field<? extends Number> $startWith() {
public final DataType<T> $dataType() {
return dataType;
}
@Override
public final Field<T> $startWith() {
return startWith;
}
@Override
public final Field<? extends Number> $incrementBy() {
public final Field<T> $incrementBy() {
return incrementBy;
}
@Override
public final Field<? extends Number> $minvalue() {
public final Field<T> $minvalue() {
return minvalue;
}
@ -342,7 +368,7 @@ implements
}
@Override
public final Field<? extends Number> $maxvalue() {
public final Field<T> $maxvalue() {
return maxvalue;
}
@ -357,7 +383,7 @@ implements
}
@Override
public final Field<? extends Number> $cache() {
public final Field<T> $cache() {
return cache;
}
@ -367,64 +393,71 @@ implements
}
@Override
public final QOM.CreateSequence $sequence(Sequence<?> newValue) {
return $constructor().apply(newValue, $ifNotExists(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
public final QOM.CreateSequence<T> $sequence(Sequence<?> newValue) {
return $constructor().apply(newValue, $ifNotExists(), $dataType(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
}
@Override
public final QOM.CreateSequence $ifNotExists(boolean newValue) {
return $constructor().apply($sequence(), newValue, $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
public final QOM.CreateSequence<T> $ifNotExists(boolean newValue) {
return $constructor().apply($sequence(), newValue, $dataType(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
}
@Override
public final QOM.CreateSequence $startWith(Field<? extends Number> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), newValue, $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
public final QOM.CreateSequence<T> $dataType(DataType<T> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), newValue, $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
}
@Override
public final QOM.CreateSequence $incrementBy(Field<? extends Number> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $startWith(), newValue, $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
public final QOM.CreateSequence<T> $startWith(Field<T> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $dataType(), newValue, $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
}
@Override
public final QOM.CreateSequence $minvalue(Field<? extends Number> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $startWith(), $incrementBy(), newValue, $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
public final QOM.CreateSequence<T> $incrementBy(Field<T> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $dataType(), $startWith(), newValue, $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
}
@Override
public final QOM.CreateSequence $noMinvalue(boolean newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $startWith(), $incrementBy(), $minvalue(), newValue, $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
public final QOM.CreateSequence<T> $minvalue(Field<T> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $dataType(), $startWith(), $incrementBy(), newValue, $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
}
@Override
public final QOM.CreateSequence $maxvalue(Field<? extends Number> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), newValue, $noMaxvalue(), $cycle(), $cache(), $noCache());
public final QOM.CreateSequence<T> $noMinvalue(boolean newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $dataType(), $startWith(), $incrementBy(), $minvalue(), newValue, $maxvalue(), $noMaxvalue(), $cycle(), $cache(), $noCache());
}
@Override
public final QOM.CreateSequence $noMaxvalue(boolean newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), newValue, $cycle(), $cache(), $noCache());
public final QOM.CreateSequence<T> $maxvalue(Field<T> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $dataType(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), newValue, $noMaxvalue(), $cycle(), $cache(), $noCache());
}
@Override
public final QOM.CreateSequence $cycle(CycleOption newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), newValue, $cache(), $noCache());
public final QOM.CreateSequence<T> $noMaxvalue(boolean newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $dataType(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), newValue, $cycle(), $cache(), $noCache());
}
@Override
public final QOM.CreateSequence $cache(Field<? extends Number> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), newValue, $noCache());
public final QOM.CreateSequence<T> $cycle(CycleOption newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $dataType(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), newValue, $cache(), $noCache());
}
@Override
public final QOM.CreateSequence $noCache(boolean newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), newValue);
public final QOM.CreateSequence<T> $cache(Field<T> newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $dataType(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), newValue, $noCache());
}
public final Function11<? super Sequence<?>, ? super Boolean, ? super Field<? extends Number>, ? super Field<? extends Number>, ? super Field<? extends Number>, ? super Boolean, ? super Field<? extends Number>, ? super Boolean, ? super CycleOption, ? super Field<? extends Number>, ? super Boolean, ? extends QOM.CreateSequence> $constructor() {
return (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> new CreateSequenceImpl(configuration(), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
@Override
public final QOM.CreateSequence<T> $noCache(boolean newValue) {
return $constructor().apply($sequence(), $ifNotExists(), $dataType(), $startWith(), $incrementBy(), $minvalue(), $noMinvalue(), $maxvalue(), $noMaxvalue(), $cycle(), $cache(), newValue);
}
public final Function12<? super Sequence<?>, ? super Boolean, ? super DataType<T>, ? super Field<T>, ? super Field<T>, ? super Field<T>, ? super Boolean, ? super Field<T>, ? super Boolean, ? super CycleOption, ? super Field<T>, ? super Boolean, ? extends QOM.CreateSequence<T>> $constructor() {
return (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> new CreateSequenceImpl(configuration(), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
}

View File

@ -9698,7 +9698,7 @@ public class DSL {
*/
@NotNull @CheckReturnValue
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
public static org.jooq.CreateSequenceFlagsStep createSequence(@Stringly.Name String sequence) {
public static org.jooq.CreateSequenceAsStep<Number> createSequence(@Stringly.Name String sequence) {
return dsl().createSequence(sequence);
}
@ -9713,7 +9713,7 @@ public class DSL {
*/
@NotNull @CheckReturnValue
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
public static org.jooq.CreateSequenceFlagsStep createSequence(Name sequence) {
public static org.jooq.CreateSequenceAsStep<Number> createSequence(Name sequence) {
return dsl().createSequence(sequence);
}
@ -9728,7 +9728,7 @@ public class DSL {
*/
@NotNull @CheckReturnValue
@Support({ CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
public static org.jooq.CreateSequenceFlagsStep createSequence(Sequence<?> sequence) {
public static org.jooq.CreateSequenceAsStep<Number> createSequence(Sequence<?> sequence) {
return dsl().createSequence(sequence);
}
@ -9743,7 +9743,7 @@ public class DSL {
*/
@NotNull @CheckReturnValue
@Support({ DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
public static org.jooq.CreateSequenceFlagsStep createSequenceIfNotExists(@Stringly.Name String sequence) {
public static org.jooq.CreateSequenceAsStep<Number> createSequenceIfNotExists(@Stringly.Name String sequence) {
return dsl().createSequenceIfNotExists(sequence);
}
@ -9758,7 +9758,7 @@ public class DSL {
*/
@NotNull @CheckReturnValue
@Support({ DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
public static org.jooq.CreateSequenceFlagsStep createSequenceIfNotExists(Name sequence) {
public static org.jooq.CreateSequenceAsStep<Number> createSequenceIfNotExists(Name sequence) {
return dsl().createSequenceIfNotExists(sequence);
}
@ -9773,7 +9773,7 @@ public class DSL {
*/
@NotNull @CheckReturnValue
@Support({ DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
public static org.jooq.CreateSequenceFlagsStep createSequenceIfNotExists(Sequence<?> sequence) {
public static org.jooq.CreateSequenceAsStep<Number> createSequenceIfNotExists(Sequence<?> sequence) {
return dsl().createSequenceIfNotExists(sequence);
}

View File

@ -3729,32 +3729,32 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri
}
@Override
public org.jooq.CreateSequenceFlagsStep createSequence(@Stringly.Name String sequence) {
public org.jooq.CreateSequenceAsStep<Number> createSequence(@Stringly.Name String sequence) {
return new CreateSequenceImpl(configuration(), DSL.sequence(DSL.name(sequence)), false);
}
@Override
public org.jooq.CreateSequenceFlagsStep createSequence(Name sequence) {
public org.jooq.CreateSequenceAsStep<Number> createSequence(Name sequence) {
return new CreateSequenceImpl(configuration(), DSL.sequence(sequence), false);
}
@Override
public org.jooq.CreateSequenceFlagsStep createSequence(Sequence<?> sequence) {
public org.jooq.CreateSequenceAsStep<Number> createSequence(Sequence<?> sequence) {
return new CreateSequenceImpl(configuration(), sequence, false);
}
@Override
public org.jooq.CreateSequenceFlagsStep createSequenceIfNotExists(@Stringly.Name String sequence) {
public org.jooq.CreateSequenceAsStep<Number> createSequenceIfNotExists(@Stringly.Name String sequence) {
return new CreateSequenceImpl(configuration(), DSL.sequence(DSL.name(sequence)), true);
}
@Override
public org.jooq.CreateSequenceFlagsStep createSequenceIfNotExists(Name sequence) {
public org.jooq.CreateSequenceAsStep<Number> createSequenceIfNotExists(Name sequence) {
return new CreateSequenceImpl(configuration(), DSL.sequence(sequence), true);
}
@Override
public org.jooq.CreateSequenceFlagsStep createSequenceIfNotExists(Sequence<?> sequence) {
public org.jooq.CreateSequenceAsStep<Number> createSequenceIfNotExists(Sequence<?> sequence) {
return new CreateSequenceImpl(configuration(), sequence, true);
}

View File

@ -570,6 +570,7 @@ import org.jooq.CreateIndexWhereStep;
// ...
// ...
// ...
import org.jooq.CreateSequenceAsStep;
import org.jooq.CreateSequenceFlagsStep;
import org.jooq.CreateTableAsStep;
import org.jooq.CreateTableCommentStep;
@ -4359,6 +4360,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
? dsl.createSequenceIfNotExists(schemaName)
: dsl.createSequence(schemaName);
boolean as = false;
boolean startWith = false;
boolean incrementBy = false;
boolean minvalue = false;
@ -4367,9 +4369,12 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
boolean cache = false;
for (;;) {
Field<Long> field;
Field field;
DataType type = null;
if (!startWith && (startWith |= (field = parseSequenceStartWithIf()) != null))
if (!as && (as |= (parseKeywordIf("AS") && (type = parseDataType()) != null)))
s = ((CreateSequenceAsStep) s).as(type);
else if (!startWith && (startWith |= (field = parseSequenceStartWithIf()) != null))
s = s.startWith(field);
else if (!incrementBy && (incrementBy |= (field = parseSequenceIncrementByIf()) != null))
s = s.incrementBy(field);

View File

@ -3054,14 +3054,15 @@ public final class QOM {
/**
* The <code>CREATE SEQUENCE</code> statement.
*/
public static final CreateSequence CreateSequence() {
return new org.jooq.impl.CreateSequenceImpl(
public static final <T extends Number> CreateSequence<T> CreateSequence() {
return new org.jooq.impl.CreateSequenceImpl<>(
null,
null,
false,
null,
null,
null,
null,
false,
null,
false,
@ -3074,23 +3075,25 @@ public final class QOM {
/**
* The <code>CREATE SEQUENCE</code> statement.
*/
public static final CreateSequence CreateSequence(
public static final <T extends Number> CreateSequence<T> CreateSequence(
Sequence<?> sequence,
boolean ifNotExists,
Field<? extends Number> startWith,
Field<? extends Number> incrementBy,
Field<? extends Number> minvalue,
DataType<T> dataType,
Field<T> startWith,
Field<T> incrementBy,
Field<T> minvalue,
boolean noMinvalue,
Field<? extends Number> maxvalue,
Field<T> maxvalue,
boolean noMaxvalue,
CycleOption cycle,
Field<? extends Number> cache,
Field<T> cache,
boolean noCache
) {
return new org.jooq.impl.CreateSequenceImpl(
return new org.jooq.impl.CreateSequenceImpl<>(
null,
sequence,
ifNotExists,
dataType,
startWith,
incrementBy,
minvalue,
@ -3106,7 +3109,7 @@ public final class QOM {
/**
* The <code>CREATE SEQUENCE</code> statement.
*/
public /*sealed*/ interface CreateSequence
public /*sealed*/ interface CreateSequence<T extends Number>
extends
DDLQuery
//permits
@ -3114,37 +3117,40 @@ public final class QOM {
{
@NotNull Sequence<?> $sequence();
boolean $ifNotExists();
@Nullable Field<? extends Number> $startWith();
@Nullable Field<? extends Number> $incrementBy();
@Nullable Field<? extends Number> $minvalue();
@Nullable DataType<T> $dataType();
@Nullable Field<T> $startWith();
@Nullable Field<T> $incrementBy();
@Nullable Field<T> $minvalue();
boolean $noMinvalue();
@Nullable Field<? extends Number> $maxvalue();
@Nullable Field<T> $maxvalue();
boolean $noMaxvalue();
@Nullable CycleOption $cycle();
@Nullable Field<? extends Number> $cache();
@Nullable Field<T> $cache();
boolean $noCache();
@CheckReturnValue
@NotNull CreateSequence $sequence(Sequence<?> sequence);
@NotNull CreateSequence<T> $sequence(Sequence<?> sequence);
@CheckReturnValue
@NotNull CreateSequence $ifNotExists(boolean ifNotExists);
@NotNull CreateSequence<T> $ifNotExists(boolean ifNotExists);
@CheckReturnValue
@NotNull CreateSequence $startWith(Field<? extends Number> startWith);
@NotNull CreateSequence<T> $dataType(DataType<T> dataType);
@CheckReturnValue
@NotNull CreateSequence $incrementBy(Field<? extends Number> incrementBy);
@NotNull CreateSequence<T> $startWith(Field<T> startWith);
@CheckReturnValue
@NotNull CreateSequence $minvalue(Field<? extends Number> minvalue);
@NotNull CreateSequence<T> $incrementBy(Field<T> incrementBy);
@CheckReturnValue
@NotNull CreateSequence $noMinvalue(boolean noMinvalue);
@NotNull CreateSequence<T> $minvalue(Field<T> minvalue);
@CheckReturnValue
@NotNull CreateSequence $maxvalue(Field<? extends Number> maxvalue);
@NotNull CreateSequence<T> $noMinvalue(boolean noMinvalue);
@CheckReturnValue
@NotNull CreateSequence $noMaxvalue(boolean noMaxvalue);
@NotNull CreateSequence<T> $maxvalue(Field<T> maxvalue);
@CheckReturnValue
@NotNull CreateSequence $cycle(CycleOption cycle);
@NotNull CreateSequence<T> $noMaxvalue(boolean noMaxvalue);
@CheckReturnValue
@NotNull CreateSequence $cache(Field<? extends Number> cache);
@NotNull CreateSequence<T> $cycle(CycleOption cycle);
@CheckReturnValue
@NotNull CreateSequence $noCache(boolean noCache);
@NotNull CreateSequence<T> $cache(Field<T> cache);
@CheckReturnValue
@NotNull CreateSequence<T> $noCache(boolean noCache);
}
/**