[#5601] IN list padding setting should also apply to row IN predicates
This commit is contained in:
parent
ab42758592
commit
816ca6b5a8
@ -161,9 +161,9 @@ final class InCondition<T> extends AbstractCondition {
|
||||
}
|
||||
}
|
||||
|
||||
private static List<Field<?>> padded(Context<?> ctx, List<Field<?>> list) {
|
||||
static <T> List<T> padded(Context<?> ctx, List<T> list) {
|
||||
return ctx.paramType() == INDEXED && TRUE.equals(ctx.settings().isInListPadding())
|
||||
? new PaddedList<Field<?>>(list, REQUIRES_IN_LIMIT.contains(ctx.family())
|
||||
? new PaddedList<T>(list, REQUIRES_IN_LIMIT.contains(ctx.family())
|
||||
? IN_LIMIT
|
||||
: Integer.MAX_VALUE,
|
||||
defaultIfNull(ctx.settings().getInListPadBase(), 2))
|
||||
@ -179,10 +179,9 @@ final class InCondition<T> extends AbstractCondition {
|
||||
.visit(comparator.toKeyword())
|
||||
.sql(" (");
|
||||
|
||||
if (subValues.size() > 1) {
|
||||
if (subValues.size() > 1)
|
||||
ctx.formatIndentStart()
|
||||
.formatNewLine();
|
||||
}
|
||||
|
||||
String separator = "";
|
||||
for (Field<?> value : subValues) {
|
||||
@ -193,15 +192,14 @@ final class InCondition<T> extends AbstractCondition {
|
||||
separator = ", ";
|
||||
}
|
||||
|
||||
if (subValues.size() > 1) {
|
||||
if (subValues.size() > 1)
|
||||
ctx.formatIndentEnd()
|
||||
.formatNewLine();
|
||||
}
|
||||
|
||||
ctx.sql(')');
|
||||
}
|
||||
|
||||
private static class PaddedList<T> extends AbstractList<T> {
|
||||
static class PaddedList<T> extends AbstractList<T> {
|
||||
private final List<T> delegate;
|
||||
private final int realSize;
|
||||
private final int padSize;
|
||||
|
||||
@ -57,6 +57,7 @@ import static org.jooq.SQLDialect.SQLITE;
|
||||
// ...
|
||||
import static org.jooq.impl.DSL.falseCondition;
|
||||
import static org.jooq.impl.DSL.trueCondition;
|
||||
import static org.jooq.impl.InCondition.padded;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
@ -145,7 +146,7 @@ final class RowInCondition extends AbstractCondition {
|
||||
.sql(' ')
|
||||
.visit(comparator.toKeyword())
|
||||
.sql(" (")
|
||||
.visit(right)
|
||||
.visit(new QueryPartList<Row>(padded(ctx, right)))
|
||||
.sql(')');
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user