diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java index e7ca57d7ad..260f0803aa 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java @@ -143,15 +143,14 @@ final class CreateTableImpl extends AbstractRowCountQuery implements private static final Set NO_SUPPORT_IF_NOT_EXISTS = SQLDialect.supported(DERBY, FIREBIRD); private static final Set NO_SUPPORT_WITH_DATA = SQLDialect.supported(H2, MARIADB, MYSQL, SQLITE); private static final Set NO_SUPPORT_CTAS_COLUMN_NAMES = SQLDialect.supported(H2); - private static final Set EMULATE_INDEXES_IN_BLOCK = SQLDialect.supported(POSTGRES); + private static final Set EMULATE_INDEXES_IN_BLOCK = SQLDialect.supported(FIREBIRD, POSTGRES); private static final Set EMULATE_SOME_ENUM_TYPES_AS_CHECK = SQLDialect.supported(CUBRID, DERBY, FIREBIRD, HSQLDB, POSTGRES, SQLITE); private static final Set EMULATE_STORED_ENUM_TYPES_AS_CHECK = SQLDialect.supported(CUBRID, DERBY, FIREBIRD, HSQLDB, SQLITE); private static final Set REQUIRES_WITH_DATA = SQLDialect.supported(HSQLDB); private static final Set WRAP_SELECT_IN_PARENS = SQLDialect.supported(HSQLDB); private static final Set SUPPORT_TEMPORARY = SQLDialect.supported(MARIADB, MYSQL, POSTGRES); - private static final Set EMULATE_COMMENT_IN_BLOCK = SQLDialect.supported(POSTGRES); - - + private static final Set EMULATE_COMMENT_IN_BLOCK = SQLDialect.supported(FIREBIRD, POSTGRES); + private static final Set REQUIRE_EXECUTE_IMMEDIATE = SQLDialect.supported(FIREBIRD); @@ -370,58 +369,46 @@ final class CreateTableImpl extends AbstractRowCountQuery implements if (c || i) { begin(ctx); - - - - + if (REQUIRE_EXECUTE_IMMEDIATE.contains(ctx.family())) + beginExecuteImmediate(ctx); accept1(ctx); - - - - - - ctx.sql(';'); + if (REQUIRE_EXECUTE_IMMEDIATE.contains(ctx.family())) + endExecuteImmediate(ctx); + else + ctx.sql(';'); if (c) { ctx.formatSeparator(); - - - - + if (REQUIRE_EXECUTE_IMMEDIATE.contains(ctx.family())) + beginExecuteImmediate(ctx); ctx.visit(commentOnTable(table).is(comment)); - - - - - - ctx.sql(';'); + if (REQUIRE_EXECUTE_IMMEDIATE.contains(ctx.family())) + endExecuteImmediate(ctx); + else + ctx.sql(';'); } if (i) { for (Index index : indexes) { ctx.formatSeparator(); - - - - + if (REQUIRE_EXECUTE_IMMEDIATE.contains(ctx.family())) + beginExecuteImmediate(ctx); if ("".equals(index.getName())) ctx.visit(createIndex().on(index.getTable(), index.getFields())); else ctx.visit(createIndex(index.getUnqualifiedName()).on(index.getTable(), index.getFields())); - - - - - - ctx.sql(';'); + if (REQUIRE_EXECUTE_IMMEDIATE.contains(ctx.family())) + endExecuteImmediate(ctx); + else + ctx.sql(';'); } }