diff --git a/jOOQ/src/main/java/org/jooq/Clause.java b/jOOQ/src/main/java/org/jooq/Clause.java index 31c701df40..703dea361e 100644 --- a/jOOQ/src/main/java/org/jooq/Clause.java +++ b/jOOQ/src/main/java/org/jooq/Clause.java @@ -869,6 +869,21 @@ public enum Clause { */ CREATE_TABLE_CONSTRAINTS, + /** + * A complete CREATE SCHEMA statement. + */ + CREATE_SCHEMA, + + /** + * A view name clause within a {@link #CREATE_SCHEMA} statement. + *

+ * This clause surrounds + *

+ */ + CREATE_SCHEMA_NAME, + /** * A complete CREATE VIEW statement. */ diff --git a/jOOQ/src/main/java/org/jooq/CreateSchemaFinalStep.java b/jOOQ/src/main/java/org/jooq/CreateSchemaFinalStep.java new file mode 100644 index 0000000000..a4fb2661c9 --- /dev/null +++ b/jOOQ/src/main/java/org/jooq/CreateSchemaFinalStep.java @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2009-2016, Data Geekery GmbH (http://www.datageekery.com) + * All rights reserved. + * + * 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 + * + * http://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: http://www.jooq.org/licenses + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ +package org.jooq; + +/** + * A {@link Query} that can create schemas. + * + * @author Lukas Eder + */ +public interface CreateSchemaFinalStep extends DDLQuery { + +} diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java index 70ee6b98d0..07ae0e52de 100644 --- a/jOOQ/src/main/java/org/jooq/DSLContext.java +++ b/jOOQ/src/main/java/org/jooq/DSLContext.java @@ -6929,6 +6929,30 @@ public interface DSLContext extends Scope , AutoCloseable { // XXX DDL Statements // ------------------------------------------------------------------------- + /** + * Create a new DSL CREATE SCHEMA statement. + * + * @see DSL#createSchema(String) + */ + @Support({ POSTGRES }) + CreateSchemaFinalStep createSchema(String schema); + + /** + * Create a new DSL CREATE SCHEMA statement. + * + * @see DSL#createSchema(Name) + */ + @Support({ POSTGRES }) + CreateSchemaFinalStep createSchema(Name schema); + + /** + * Create a new DSL CREATE SCHEMA statement. + * + * @see DSL#createSchema(Schema) + */ + @Support({ POSTGRES }) + CreateSchemaFinalStep createSchema(Schema schema); + /** * Create a new DSL CREATE TABLE statement. * diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateSchemaImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateSchemaImpl.java new file mode 100644 index 0000000000..9a4e7a0b35 --- /dev/null +++ b/jOOQ/src/main/java/org/jooq/impl/CreateSchemaImpl.java @@ -0,0 +1,96 @@ +/** + * Copyright (c) 2009-2016, Data Geekery GmbH (http://www.datageekery.com) + * All rights reserved. + * + * 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 + * + * http://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: http://www.jooq.org/licenses + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ +package org.jooq.impl; + +import static org.jooq.Clause.CREATE_SCHEMA; +import static org.jooq.Clause.CREATE_SCHEMA_NAME; + +import org.jooq.Clause; +import org.jooq.Configuration; +import org.jooq.Context; +import org.jooq.CreateSchemaFinalStep; +import org.jooq.Record; +import org.jooq.Schema; + +/** + * @author Lukas Eder + */ +final class CreateSchemaImpl extends AbstractQuery implements + + // Cascading interface implementations for CREATE SCHEMA behaviour + CreateSchemaFinalStep { + + + /** + * Generated UID + */ + private static final long serialVersionUID = 8904572826501186329L; + private static final Clause[] CLAUSES = { CREATE_SCHEMA }; + + private final Schema schema; + + CreateSchemaImpl(Configuration configuration, Schema schema) { + super(configuration); + + this.schema = schema; + } + + // ------------------------------------------------------------------------ + // XXX: DSL API + // ------------------------------------------------------------------------ + + // ------------------------------------------------------------------------ + // XXX: QueryPart API + // ------------------------------------------------------------------------ + + @Override + public final void accept(Context ctx) { + ctx.start(CREATE_SCHEMA_NAME) + .keyword("create schema") + .sql(' ').visit(schema) + .end(CREATE_SCHEMA_NAME); + } + + @Override + public final Clause[] clauses(Context ctx) { + return CLAUSES; + } +} diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 667bfc5b86..77676b1797 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -115,6 +115,7 @@ import org.jooq.Configuration; import org.jooq.ConnectionProvider; import org.jooq.ConstraintTypeStep; import org.jooq.CreateIndexStep; +import org.jooq.CreateSchemaFinalStep; import org.jooq.CreateSequenceFinalStep; import org.jooq.CreateTableAsStep; import org.jooq.CreateViewAsStep; @@ -4797,6 +4798,37 @@ public class DSL { // XXX DDL Statements // ------------------------------------------------------------------------- + /** + * Create a new DSL CREATE SCHEMA statement. + * + * @see DSLContext#createSchema(String) + */ + @Support({ POSTGRES }) + public static CreateSchemaFinalStep createSchema(String schema) { + return using(new DefaultConfiguration()).createSchema(schema); + } + + /** + * Create a new DSL CREATE SCHEMA statement. + * + * @see DSLContext#createSchema(Name) + */ + @Support({ POSTGRES }) + public static CreateSchemaFinalStep createSchema(Name table) { + return using(new DefaultConfiguration()).createSchema(table); + } + + /** + * Create a new DSL CREATE SCHEMA statement. + * + * @see DSLContext#createSchema(Schema) + */ + @Support({ POSTGRES }) + public static CreateSchemaFinalStep createSchema(Schema schema) { + return using(new DefaultConfiguration()).createSchema(schema); + } + + /** * Create a new DSL CREATE TABLE statement. * diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index a36ca891d8..f8c7e6a9dc 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -45,6 +45,7 @@ import static org.jooq.conf.ParamType.NAMED; import static org.jooq.conf.ParamType.NAMED_OR_INLINED; import static org.jooq.impl.DSL.field; import static org.jooq.impl.DSL.name; +import static org.jooq.impl.DSL.schema; import static org.jooq.impl.DSL.sequence; import static org.jooq.impl.DSL.sql; import static org.jooq.impl.DSL.table; @@ -94,6 +95,7 @@ import org.jooq.ConnectionCallable; import org.jooq.ConnectionProvider; import org.jooq.ConnectionRunnable; import org.jooq.CreateIndexStep; +import org.jooq.CreateSchemaFinalStep; import org.jooq.CreateSequenceFinalStep; import org.jooq.CreateTableAsStep; import org.jooq.CreateViewAsStep; @@ -2381,6 +2383,21 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri return new CreateViewImpl(configuration(), view, fields, true); } + @Override + public CreateSchemaFinalStep createSchema(String schema) { + return createSchema(name(schema)); + } + + @Override + public CreateSchemaFinalStep createSchema(Name schema) { + return createSchema(schema(schema)); + } + + @Override + public CreateSchemaFinalStep createSchema(Schema schema) { + return new CreateSchemaImpl(configuration(), schema); + } + @Override public CreateTableAsStep createTable(String table) { return createTable(name(table));