[jOOQ/jOOQ#9410] Added support for ALTER TABLE .. ALTER .. ADD FIRST

This commit is contained in:
Lukas Eder 2019-10-21 12:38:04 +02:00
parent 0391818ad0
commit f57f3f160d
3 changed files with 22 additions and 2 deletions

View File

@ -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 <code>FIRST</code> clause to <code>ALTER TABLE .. ADD ..</code>.
*/
@Support({ H2, MYSQL })
@Support({ FIREBIRD, H2, MYSQL })
AlterTableFinalStep first();
/**

View File

@ -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);

View File

@ -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");