diff --git a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java index 7e792c58d4..61f7cc1628 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java @@ -84,14 +84,13 @@ import org.jooq.Condition; import org.jooq.Configuration; import org.jooq.Context; import org.jooq.DeleteQuery; +import org.jooq.Field; import org.jooq.Operator; import org.jooq.OrderField; import org.jooq.Param; import org.jooq.Record; import org.jooq.SQLDialect; import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.UniqueKey; /** * @author Lukas Eder @@ -172,6 +171,7 @@ final class DeleteQueryImpl extends AbstractDMLQuery implem limit = numberOfRows; } + @SuppressWarnings({ "unchecked", "rawtypes" }) @Override final void accept0(Context ctx) { boolean declare = ctx.declareTables(); @@ -195,18 +195,20 @@ final class DeleteQueryImpl extends AbstractDMLQuery implem .declareTables(declare) .end(DELETE_DELETE); - if (limit != null && NO_SUPPORT_LIMIT.contains(ctx.family()) && !table().getKeys().isEmpty()) { - UniqueKey key = table().getPrimaryKey() != null ? table().getPrimaryKey() : table().getKeys().get(0); - - @SuppressWarnings("unchecked") - TableField[] keyFields = (TableField[]) key.getFieldsArray(); + if (limit != null && NO_SUPPORT_LIMIT.contains(ctx.family())) { + Field[] keyFields = + table().getKeys().isEmpty() + ? new Field[] { table().rowid() } + : (table().getPrimaryKey() != null + ? table().getPrimaryKey() + : table().getKeys().get(0)).getFieldsArray(); ctx.start(DELETE_WHERE) .formatSeparator() .visit(K_WHERE).sql(' '); if (keyFields.length == 1) - ctx.visit(keyFields[0].in(select(keyFields[0]).from(table()).where(getWhere()).orderBy(orderBy).limit(limit))); + ctx.visit(keyFields[0].in(select((Field) keyFields[0]).from(table()).where(getWhere()).orderBy(orderBy).limit(limit))); else ctx.visit(row(keyFields).in(select(keyFields).from(table()).where(getWhere()).orderBy(orderBy).limit(limit))); diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java index a275f816c4..ecb09d0247 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java @@ -142,9 +142,7 @@ import org.jooq.RowN; import org.jooq.SQLDialect; import org.jooq.Select; import org.jooq.Table; -import org.jooq.TableField; import org.jooq.TableLike; -import org.jooq.UniqueKey; import org.jooq.UpdateQuery; /** @@ -507,6 +505,7 @@ final class UpdateQueryImpl extends AbstractStoreQuery impl return condition.hasWhere(); } + @SuppressWarnings({ "unchecked", "rawtypes" }) @Override final void accept0(Context ctx) { boolean declareTables = ctx.declareTables(); @@ -645,18 +644,20 @@ final class UpdateQueryImpl extends AbstractStoreQuery impl break; } - if (limit != null && NO_SUPPORT_LIMIT.contains(ctx.family()) && !table().getKeys().isEmpty()) { - UniqueKey key = table().getPrimaryKey() != null ? table().getPrimaryKey() : table().getKeys().get(0); - - @SuppressWarnings("unchecked") - TableField[] keyFields = (TableField[]) key.getFieldsArray(); + if (limit != null && NO_SUPPORT_LIMIT.contains(ctx.family())) { + Field[] keyFields = + table().getKeys().isEmpty() + ? new Field[] { table().rowid() } + : (table().getPrimaryKey() != null + ? table().getPrimaryKey() + : table().getKeys().get(0)).getFieldsArray(); ctx.start(UPDATE_WHERE) .formatSeparator() .visit(K_WHERE).sql(' '); if (keyFields.length == 1) - ctx.visit(keyFields[0].in(select(keyFields[0]).from(table()).where(getWhere()).orderBy(orderBy).limit(limit))); + ctx.visit(keyFields[0].in(select((Field) keyFields[0]).from(table()).where(getWhere()).orderBy(orderBy).limit(limit))); else ctx.visit(row(keyFields).in(select(keyFields).from(table()).where(getWhere()).orderBy(orderBy).limit(limit)));