[#3463] Field.in(...) methods shouldn't return trueCondition() or falseCondition()
This commit is contained in:
parent
dbf42c7dac
commit
d06084e0be
@ -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<T> extends AbstractQueryPart implements Field<T> {
|
||||
|
||||
@Override
|
||||
public final Condition in(Field<?>... values) {
|
||||
if (values == null || values.length == 0) {
|
||||
return falseCondition();
|
||||
}
|
||||
else {
|
||||
return new InCondition<T>(this, nullSafe(values), IN);
|
||||
}
|
||||
return new InCondition<T>(this, nullSafe(values), IN);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -828,12 +821,7 @@ abstract class AbstractField<T> extends AbstractQueryPart implements Field<T> {
|
||||
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
|
||||
|
||||
@ -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++) {
|
||||
|
||||
@ -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<T> extends AbstractCondition {
|
||||
public final void accept(Context<?> ctx) {
|
||||
List<Field<?>> 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()) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user