diff --git a/jOOQ/src/main/java/org/jooq/AlterTableAddStep.java b/jOOQ/src/main/java/org/jooq/AlterTableAddStep.java index 8dbedd555a..4c04aa6498 100644 --- a/jOOQ/src/main/java/org/jooq/AlterTableAddStep.java +++ b/jOOQ/src/main/java/org/jooq/AlterTableAddStep.java @@ -38,6 +38,7 @@ package org.jooq; // ... +import static org.jooq.SQLDialect.FIREBIRD; import static org.jooq.SQLDialect.H2; import static org.jooq.SQLDialect.HSQLDB; // ... @@ -72,7 +73,7 @@ public interface AlterTableAddStep extends AlterTableFinalStep { /** * Add a FIRST clause to ALTER TABLE .. ADD ... */ - @Support({ H2, MYSQL }) + @Support({ FIREBIRD, H2, MYSQL }) AlterTableFinalStep first(); /** diff --git a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java index 51042ea7e9..c9574aac7f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java @@ -120,6 +120,7 @@ import static org.jooq.impl.Keywords.K_LIKE; import static org.jooq.impl.Keywords.K_MODIFY; import static org.jooq.impl.Keywords.K_NOT_NULL; import static org.jooq.impl.Keywords.K_NULL; +import static org.jooq.impl.Keywords.K_POSITION; import static org.jooq.impl.Keywords.K_PRIMARY_KEY; import static org.jooq.impl.Keywords.K_RAISE; import static org.jooq.impl.Keywords.K_RENAME; @@ -896,6 +897,23 @@ final class AlterTableImpl extends AbstractRowCountQuery implements } } + if (family == FIREBIRD) { + if (addFirst) { + begin(ctx); + beginExecuteImmediate(ctx); + accept1(ctx); + endExecuteImmediate(ctx); + + ctx.formatSeparator(); + + beginExecuteImmediate(ctx); + ctx.visit(K_ALTER_TABLE).sql(' ').visit(table).sql(' ').visit(K_ALTER).sql(' ').visit(addColumn).sql(' ').visit(K_POSITION).sql(" 1"); + endExecuteImmediate(ctx); + end(ctx); + return; + } + } + @@ -1528,7 +1546,7 @@ final class AlterTableImpl extends AbstractRowCountQuery implements private final void acceptFirstBeforeAfter(Context ctx) { boolean previous = ctx.qualify(); - if (addFirst) + if (addFirst && ctx.family() != FIREBIRD) ctx.sql(' ').visit(K_FIRST); else if (addBefore != null) ctx.sql(' ').visit(K_BEFORE).sql(' ').qualify(false).visit(addBefore).qualify(previous); diff --git a/jOOQ/src/main/java/org/jooq/impl/Keywords.java b/jOOQ/src/main/java/org/jooq/impl/Keywords.java index d036ee3820..197d4289b0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Keywords.java +++ b/jOOQ/src/main/java/org/jooq/impl/Keywords.java @@ -266,6 +266,7 @@ final class Keywords { static final Keyword K_PASSING = keyword("passing"); static final Keyword K_PERCENT = keyword("percent"); static final Keyword K_PIVOT = keyword("pivot"); + static final Keyword K_POSITION = keyword("position"); static final Keyword K_PRECEDING = keyword("preceding"); static final Keyword K_PREVIOUS_VALUE_FOR = keyword("previous value for"); static final Keyword K_PRIMARY_KEY = keyword("primary key");