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

Implement Comparator<Value> in CompareMode

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