You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by nj...@apache.org on 2017/10/11 18:01:18 UTC
kylin git commit: APACHE-KYLIN-2600: fix Incorrectly setting the
range start
Repository: kylin
Updated Branches:
refs/heads/master 4cc32eca0 -> 6e4c5af68
APACHE-KYLIN-2600: fix Incorrectly setting the range start
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/6e4c5af6
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/6e4c5af6
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/6e4c5af6
Branch: refs/heads/master
Commit: 6e4c5af68edf6d369e6c6739ec31e954111c6812
Parents: 4cc32ec
Author: Zhong <nj...@apache.org>
Authored: Thu Oct 12 00:50:21 2017 +0800
Committer: Zhong <nj...@apache.org>
Committed: Thu Oct 12 00:50:21 2017 +0800
----------------------------------------------------------------------
.../kylin/cube/gridtable/RecordComparators.java | 18 +++++++++++++++---
.../kylin/storage/gtrecord/DictGridTableTest.java | 8 ++++++++
2 files changed, 23 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/6e4c5af6/core-cube/src/main/java/org/apache/kylin/cube/gridtable/RecordComparators.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/gridtable/RecordComparators.java b/core-cube/src/main/java/org/apache/kylin/cube/gridtable/RecordComparators.java
index 43ea30b..44b19ab 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/gridtable/RecordComparators.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/gridtable/RecordComparators.java
@@ -25,15 +25,27 @@ public class RecordComparators {
public static RecordComparator getRangeStartComparator(final IGTComparator comp) {
return new RecordComparator(new ComparatorEx<ByteArray>() {
+ boolean isMinNull(byte[] array) {
+ if (array == null) {
+ return true;
+ }
+ for (int i = 0; i < array.length; i++) {
+ if (array[i] != 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+
@Override
public int compare(ByteArray a, ByteArray b) {
- if (a.array() == null) {
- if (b.array() == null) {
+ if (isMinNull(a.array())) {
+ if (isMinNull(b.array())) {
return 0;
} else {
return -1;
}
- } else if (b.array() == null) {
+ } else if (isMinNull(b.array())) {
return 1;
} else {
return comp.compare(a, b);
http://git-wip-us.apache.org/repos/asf/kylin/blob/6e4c5af6/core-storage/src/test/java/org/apache/kylin/storage/gtrecord/DictGridTableTest.java
----------------------------------------------------------------------
diff --git a/core-storage/src/test/java/org/apache/kylin/storage/gtrecord/DictGridTableTest.java b/core-storage/src/test/java/org/apache/kylin/storage/gtrecord/DictGridTableTest.java
index e4767e0..e80a67c 100644
--- a/core-storage/src/test/java/org/apache/kylin/storage/gtrecord/DictGridTableTest.java
+++ b/core-storage/src/test/java/org/apache/kylin/storage/gtrecord/DictGridTableTest.java
@@ -81,6 +81,7 @@ public class DictGridTableTest extends LocalFileMetadataTestCase {
private CompareTupleFilter timeComp4;
private CompareTupleFilter timeComp5;
private CompareTupleFilter timeComp6;
+ private CompareTupleFilter timeComp7;
private CompareTupleFilter ageComp1;
private CompareTupleFilter ageComp2;
private CompareTupleFilter ageComp3;
@@ -107,6 +108,7 @@ public class DictGridTableTest extends LocalFileMetadataTestCase {
timeComp4 = compare(info.colRef(0), FilterOperatorEnum.EQ, enc(info, 0, "2015-01-15"));
timeComp5 = compare(info.colRef(0), FilterOperatorEnum.GT, enc(info, 0, "2015-01-15"));
timeComp6 = compare(info.colRef(0), FilterOperatorEnum.EQ, enc(info, 0, "2015-01-14"));
+ timeComp7 = compare(info.colRef(0), FilterOperatorEnum.EQ, enc(info, 0, "1970-01-01"));
ageComp1 = compare(info.colRef(1), FilterOperatorEnum.EQ, enc(info, 1, "10"));
ageComp2 = compare(info.colRef(1), FilterOperatorEnum.EQ, enc(info, 1, "20"));
ageComp3 = compare(info.colRef(1), FilterOperatorEnum.EQ, enc(info, 1, "30"));
@@ -165,6 +167,12 @@ public class DictGridTableTest extends LocalFileMetadataTestCase {
r.get(0).fuzzyKeys.toString());
}
{
+ LogicalTupleFilter filter = or(and(timeComp3, ageComp3), and(timeComp7, ageComp1));
+ CubeScanRangePlanner planner = new CubeScanRangePlanner(info, null, null, filter);
+ List<GTScanRange> r = planner.planScanRanges();
+ assertEquals("[[0, 10]-[1421280000000, 30]]", r.toString());
+ }
+ {
LogicalTupleFilter filter = or(timeComp2, timeComp1, timeComp6);
CubeScanRangePlanner planner = new CubeScanRangePlanner(info, Pair.newPair(segmentStart, segmentEnd),
info.colRef(0), filter);