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);