提交 644d142c authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Implement Comparator<Value> in CompareMode

上级 871d372b
......@@ -267,13 +267,7 @@ public class Aggregate extends Expression {
}
});
} else {
final Database database = select.getSession().getDatabase();
Arrays.sort(array, new Comparator<Value> () {
@Override
public int compare(Value v1, Value v2) {
return database.compare(v1, v2);
}
});
Arrays.sort(array, select.getSession().getDatabase().getCompareMode());
}
}
......
......@@ -8,7 +8,6 @@ package org.h2.expression;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import org.h2.engine.Database;
import org.h2.engine.Session;
......@@ -173,12 +172,7 @@ class AggregateDataMedian extends AggregateDataCollecting {
return ValueNull.INSTANCE;
}
final CompareMode mode = database.getCompareMode();
Arrays.sort(a, new Comparator<Value>() {
@Override
public int compare(Value o1, Value o2) {
return o1.compareTo(o2, mode);
}
});
Arrays.sort(a, mode);
int len = a.length;
int idx = len / 2;
Value v1 = a[idx];
......
......@@ -6,7 +6,6 @@
package org.h2.expression;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.TreeSet;
import org.h2.engine.Session;
import org.h2.index.IndexCondition;
......@@ -43,12 +42,7 @@ public class ConditionInConstantSet extends Condition {
ArrayList<Expression> valueList) {
this.left = left;
this.valueList = valueList;
this.valueSet = new TreeSet<>(new Comparator<Value>() {
@Override
public int compare(Value o1, Value o2) {
return session.getDatabase().compare(o1, o2);
}
});
this.valueSet = new TreeSet<>(session.getDatabase().getCompareMode());
int type = left.getType();
for (Expression expression : valueList) {
valueSet.add(expression.getValue(session).convertTo(type));
......
......@@ -7,7 +7,6 @@ package org.h2.index;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import org.h2.command.dml.Query;
......@@ -21,7 +20,6 @@ import org.h2.result.ResultInterface;
import org.h2.table.Column;
import org.h2.table.TableType;
import org.h2.util.StatementBuilder;
import org.h2.value.CompareMode;
import org.h2.value.Value;
/**
......@@ -156,13 +154,7 @@ public class IndexCondition {
valueSet.add(v);
}
Value[] array = valueSet.toArray(new Value[valueSet.size()]);
final CompareMode mode = session.getDatabase().getCompareMode();
Arrays.sort(array, new Comparator<Value>() {
@Override
public int compare(Value o1, Value o2) {
return o1.compareTo(o2, mode);
}
});
Arrays.sort(array, session.getDatabase().getCompareMode());
return array;
}
......
......@@ -7,6 +7,7 @@ package org.h2.value;
import java.nio.charset.Charset;
import java.text.Collator;
import java.util.Comparator;
import java.util.Locale;
import java.util.Objects;
......@@ -17,7 +18,7 @@ import org.h2.util.StringUtils;
* Instances of this class can compare strings. Case sensitive and case
* insensitive comparison is supported, and comparison using a collator.
*/
public class CompareMode {
public class CompareMode implements Comparator<Value> {
/**
* This constant means there is no collator set, and the default string
......@@ -286,4 +287,9 @@ public class CompareMode {
return getName().hashCode() ^ strength ^ (binaryUnsigned ? -1 : 0);
}
@Override
public int compare(Value o1, Value o2) {
return o1.compareTo(o2, this);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论