[#6752] Avoid various array allocations due to unnecessary varargs

This commit is contained in:
lukaseder 2017-10-30 15:33:23 +01:00
parent b3f315ec04
commit 5bef562ef4
3 changed files with 56 additions and 19 deletions

View File

@ -66,31 +66,41 @@ final class CombinedCondition extends AbstractCondition {
private final Operator operator;
private final List<Condition> conditions;
CombinedCondition(Operator operator, Collection<? extends Condition> conditions) {
private CombinedCondition(Operator operator, int size) {
if (operator == null)
throw new IllegalArgumentException("The argument 'operator' must not be null");
this.operator = operator;
this.conditions = new ArrayList<Condition>(conditions.size());
init(operator, conditions);
this.conditions = new ArrayList<Condition>(size);
}
private final void init(Operator op, Collection<? extends Condition> cond) {
for (Condition condition : cond) {
if (condition instanceof CombinedCondition) {
CombinedCondition combinedCondition = (CombinedCondition) condition;
CombinedCondition(Operator operator, Condition left, Condition right) {
this(operator, 2);
if (combinedCondition.operator == op)
this.conditions.addAll(combinedCondition.conditions);
else
this.conditions.add(condition);
}
else if (condition == null)
throw new IllegalArgumentException("The argument 'conditions' must not contain null");
add(operator, left);
add(operator, right);
}
CombinedCondition(Operator operator, Collection<? extends Condition> conditions) {
this(operator, conditions.size());
for (Condition condition : conditions)
add(operator, condition);
}
private final void add(Operator op, Condition condition) {
if (condition instanceof CombinedCondition) {
CombinedCondition combinedCondition = (CombinedCondition) condition;
if (combinedCondition.operator == op)
this.conditions.addAll(combinedCondition.conditions);
else
this.conditions.add(condition);
}
else if (condition == null)
throw new IllegalArgumentException("The argument 'conditions' must not contain null");
else
this.conditions.add(condition);
}
@Override

View File

@ -10349,6 +10349,15 @@ public class DSL {
return FalseCondition.INSTANCE;
}
/**
* Return a <code>Condition</code> that connects all argument
* <code>conditions</code> with {@link Operator#AND}.
*/
@Support
public static Condition and(Condition left, Condition right) {
return condition(AND, left, right);
}
/**
* Return a <code>Condition</code> that connects all argument
* <code>conditions</code> with {@link Operator#AND}.
@ -10367,6 +10376,15 @@ public class DSL {
return condition(AND, conditions);
}
/**
* Return a <code>Condition</code> that connects all argument
* <code>conditions</code> with {@link Operator#OR}.
*/
@Support
public static Condition or(Condition left, Condition right) {
return condition(OR, left, right);
}
/**
* Return a <code>Condition</code> that connects all argument
* <code>conditions</code> with {@link Operator#OR}.
@ -10385,6 +10403,15 @@ public class DSL {
return condition(OR, conditions);
}
/**
* Return a <code>Condition</code> that connects all argument
* <code>conditions</code> with <code>Operator</code>.
*/
@Support
public static Condition condition(Operator operator, Condition left, Condition right) {
return new CombinedCondition(operator, left, right);
}
/**
* Return a <code>Condition</code> that connects all argument
* <code>conditions</code> with <code>Operator</code>.

View File

@ -2060,19 +2060,19 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> imp
@Override
public final void addFrom(Collection<? extends TableLike<?>> f) {
for (TableLike<?> provider : f) {
for (TableLike<?> provider : f)
getFrom().add(provider.asTable());
}
}
@Override
public final void addFrom(TableLike<?> f) {
addFrom(Arrays.asList(f));
getFrom().add(f.asTable());
}
@Override
public final void addFrom(TableLike<?>... f) {
addFrom(Arrays.asList(f));
for (TableLike<?> provider : f)
getFrom().add(provider.asTable());
}
@Override