[jOOQ/jOOQ#11944] Add Firebird 4.0 native support for DELETE .. ORDER BY and UPDATE .. ORDER BY
This commit is contained in:
parent
42fae20ac3
commit
2fd7beeafa
@ -54,6 +54,7 @@ import static org.jooq.SQLDialect.DERBY;
|
||||
import static org.jooq.SQLDialect.DUCKDB;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.FIREBIRD;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.H2;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.HSQLDB;
|
||||
@ -86,6 +87,7 @@ import static org.jooq.impl.Keywords.K_DELETE;
|
||||
import static org.jooq.impl.Keywords.K_FROM;
|
||||
import static org.jooq.impl.Keywords.K_LIMIT;
|
||||
import static org.jooq.impl.Keywords.K_ORDER_BY;
|
||||
import static org.jooq.impl.Keywords.K_ROWS;
|
||||
import static org.jooq.impl.Keywords.K_USING;
|
||||
import static org.jooq.impl.Keywords.K_WHERE;
|
||||
import static org.jooq.impl.Tools.containsDeclaredTable;
|
||||
@ -137,7 +139,7 @@ implements
|
||||
private static final Set<SQLDialect> SPECIAL_DELETE_AS_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL);
|
||||
|
||||
// LIMIT is not supported at all
|
||||
private static final Set<SQLDialect> NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CUBRID, DERBY, DUCKDB, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
|
||||
// LIMIT is supported but not ORDER BY
|
||||
private static final Set<SQLDialect> NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE);
|
||||
@ -371,10 +373,7 @@ implements
|
||||
.visit(K_ORDER_BY).sql(' ')
|
||||
.visit(orderBy);
|
||||
|
||||
if (limit != null)
|
||||
ctx.formatSeparator()
|
||||
.visit(K_LIMIT).sql(' ')
|
||||
.visit(limit);
|
||||
acceptLimit(ctx, limit);
|
||||
}
|
||||
|
||||
ctx.start(DELETE_RETURNING);
|
||||
@ -382,6 +381,18 @@ implements
|
||||
ctx.end(DELETE_RETURNING);
|
||||
}
|
||||
|
||||
static final void acceptLimit(Context<?> ctx, Field<? extends Number> limit) {
|
||||
if (limit != null)
|
||||
if (ctx.family() == FIREBIRD)
|
||||
ctx.formatSeparator()
|
||||
.visit(K_ROWS).sql(' ')
|
||||
.visit(limit);
|
||||
else
|
||||
ctx.formatSeparator()
|
||||
.visit(K_LIMIT).sql(' ')
|
||||
.visit(limit);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Clause[] clauses(Context<?> ctx) {
|
||||
return CLAUSES;
|
||||
|
||||
@ -57,6 +57,7 @@ import static org.jooq.SQLDialect.DERBY;
|
||||
import static org.jooq.SQLDialect.DUCKDB;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.FIREBIRD;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.H2;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.HSQLDB;
|
||||
@ -91,6 +92,7 @@ import static org.jooq.impl.DSL.trueCondition;
|
||||
import static org.jooq.impl.Keywords.K_FROM;
|
||||
import static org.jooq.impl.Keywords.K_LIMIT;
|
||||
import static org.jooq.impl.Keywords.K_ORDER_BY;
|
||||
import static org.jooq.impl.Keywords.K_ROWS;
|
||||
import static org.jooq.impl.Keywords.K_SET;
|
||||
import static org.jooq.impl.Keywords.K_UPDATE;
|
||||
import static org.jooq.impl.Keywords.K_WHERE;
|
||||
@ -204,7 +206,7 @@ implements
|
||||
private static final Set<SQLDialect> EMULATE_RETURNING_WITH_UPSERT = SQLDialect.supportedBy(MARIADB);
|
||||
|
||||
// LIMIT is not supported at all
|
||||
private static final Set<SQLDialect> NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CUBRID, DERBY, DUCKDB, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
|
||||
// LIMIT is supported but not ORDER BY
|
||||
private static final Set<SQLDialect> NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE);
|
||||
@ -749,10 +751,7 @@ implements
|
||||
.visit(K_ORDER_BY).sql(' ')
|
||||
.visit(orderBy);
|
||||
|
||||
if (limit != null)
|
||||
ctx.formatSeparator()
|
||||
.visit(K_LIMIT).sql(' ')
|
||||
.visit(limit);
|
||||
DeleteQueryImpl.acceptLimit(ctx, limit);
|
||||
}
|
||||
|
||||
ctx.start(UPDATE_RETURNING);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user