diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java index 6079eff016..593659c738 100644 --- a/jOOQ/src/main/java/org/jooq/DSLContext.java +++ b/jOOQ/src/main/java/org/jooq/DSLContext.java @@ -7113,6 +7113,22 @@ public interface DSLContext extends Scope , AutoCloseable { @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) CreateIndexStep createIndex(Name index); + /** + * Create a new DSL CREATE UNIQUE INDEX statement. + * + * @see DSL#createIndex(String) + */ + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + CreateIndexStep createUniqueIndex(String index); + + /** + * Create a new DSL CREATE UNIQUE INDEX statement. + * + * @see DSL#createIndex(Name) + */ + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + CreateIndexStep createUniqueIndex(Name index); + /** * Create a new DSL CREATE SEQUENCE statement. * diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateIndexImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateIndexImpl.java index 34bbb285c6..41203d9fbf 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CreateIndexImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CreateIndexImpl.java @@ -71,13 +71,19 @@ class CreateIndexImpl extends AbstractQuery implements private static final Clause[] CLAUSES = { CREATE_INDEX }; private final Name index; + private final boolean unique; private Table table; private Field[] fields; CreateIndexImpl(Configuration configuration, Name index) { + this(configuration, index, false); + } + + CreateIndexImpl(Configuration configuration, Name index, boolean unique) { super(configuration); this.index = index; + this.unique = unique; } // ------------------------------------------------------------------------ @@ -108,7 +114,14 @@ class CreateIndexImpl extends AbstractQuery implements @Override public final void accept(Context ctx) { - ctx.keyword("create index") + ctx.keyword("create"); + + if (unique) + ctx.sql(' ') + .keyword("unique"); + + ctx.sql(' ') + .keyword("index") .sql(' ') .visit(index) .sql(' ') diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index dc9edeb543..6b4a412e46 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -5605,6 +5605,26 @@ public class DSL { return using(new DefaultConfiguration()).createIndex(index); } + /** + * Create a new DSL CREATE UNIQUE INDEX statement. + * + * @see DSLContext#createUniqueIndex(String) + */ + @Support + public static CreateIndexStep createUniqueIndex(String index) { + return using(new DefaultConfiguration()).createUniqueIndex(index); + } + + /** + * Create a new DSL CREATE UNIQUE INDEX statement. + * + * @see DSLContext#createUniqueIndex(Name) + */ + @Support + public static CreateIndexStep createUniqueIndex(Name index) { + return using(new DefaultConfiguration()).createUniqueIndex(index); + } + /** * Create a new DSL CREATE SEQUENCE statement. * diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index 689d2aa5ad..4232a8d39f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -2245,6 +2245,16 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri return new CreateIndexImpl(configuration(), index); } + @Override + public CreateIndexStep createUniqueIndex(String index) { + return createUniqueIndex(name(index)); + } + + @Override + public CreateIndexStep createUniqueIndex(Name index) { + return new CreateIndexImpl(configuration(), index, true); + } + @Override public CreateSequenceFinalStep createSequence(String sequence) { return createSequence(name(sequence));