diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java index d7d18b7be0..62fd690269 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java @@ -55,10 +55,8 @@ import static org.jooq.Comparator.NOT_EQUALS; import static org.jooq.Comparator.NOT_IN; import static org.jooq.Comparator.NOT_LIKE; import static org.jooq.Comparator.NOT_LIKE_IGNORE_CASE; -import static org.jooq.impl.DSL.falseCondition; import static org.jooq.impl.DSL.inline; import static org.jooq.impl.DSL.nullSafe; -import static org.jooq.impl.DSL.trueCondition; import static org.jooq.impl.DSL.val; import static org.jooq.impl.ExpressionOperator.ADD; import static org.jooq.impl.ExpressionOperator.DIVIDE; @@ -792,12 +790,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public final Condition in(Field... values) { - if (values == null || values.length == 0) { - return falseCondition(); - } - else { - return new InCondition(this, nullSafe(values), IN); - } + return new InCondition(this, nullSafe(values), IN); } @Override @@ -828,12 +821,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { if (isAccidentalCollection(values)) return notIn((Collection) values[0]); - if (values == null || values.length == 0) { - return trueCondition(); - } - else { - return notIn(Utils.fields(values, this).toArray(new Field[0])); - } + return notIn(Utils.fields(values, this).toArray(new Field[0])); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 47a7b15a8f..085221d7e6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -11909,6 +11909,9 @@ public class DSL { * Null-safety of a field. */ protected static Field[] nullSafe(Field... fields) { + if (fields == null) + return new Field[0]; + Field[] result = new Field[fields.length]; for (int i = 0; i < fields.length; i++) { diff --git a/jOOQ/src/main/java/org/jooq/impl/InCondition.java b/jOOQ/src/main/java/org/jooq/impl/InCondition.java index 77ffcbd8dd..3464c237be 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/InCondition.java @@ -45,6 +45,8 @@ import static org.jooq.Clause.CONDITION; import static org.jooq.Clause.CONDITION_IN; import static org.jooq.Clause.CONDITION_NOT_IN; import static org.jooq.Comparator.IN; +import static org.jooq.impl.DSL.falseCondition; +import static org.jooq.impl.DSL.trueCondition; import java.util.Arrays; import java.util.List; @@ -83,7 +85,13 @@ class InCondition extends AbstractCondition { public final void accept(Context ctx) { List> list = Arrays.asList(values); - if (list.size() > IN_LIMIT) { + if (list.size() == 0) { + if (comparator == IN) + ctx.visit(falseCondition()); + else + ctx.visit(trueCondition()); + } + else if (list.size() > IN_LIMIT) { // [#798] Oracle and some other dialects can only hold 1000 values // in an IN (...) clause switch (ctx.configuration().dialect().family()) {