You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2018/10/19 10:16:02 UTC
[kylin] branch 2.3.x updated: KYLIN-3634 when filter column has
null value may cause incorrect query result
This is an automated email from the ASF dual-hosted git repository.
shaofengshi pushed a commit to branch 2.3.x
in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/2.3.x by this push:
new 1821e3a KYLIN-3634 when filter column has null value may cause incorrect query result
1821e3a is described below
commit 1821e3a9df95db3467867ed777c5ea4347e9f27b
Author: wangbo <50...@qq.com>
AuthorDate: Wed Oct 17 14:04:39 2018 +0800
KYLIN-3634 when filter column has null value may cause incorrect query result
---
.../src/main/java/org/apache/kylin/gridtable/GTUtil.java | 12 +++++++++---
.../org/apache/kylin/storage/gtrecord/DictGridTableTest.java | 7 +++++--
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java b/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java
index 65704d5..6f3a9ae 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java
@@ -241,7 +241,7 @@ public class GTUtil {
case NEQ:
code = translate(col, firstValue, 0);
if (code == null) {
- result = ConstantTupleFilter.TRUE;
+ result = newCompareFilter(TupleFilter.FilterOperatorEnum.ISNOTNULL, externalCol);
} else {
newCompareFilter.addChild(new ConstantTupleFilter(code));
result = newCompareFilter;
@@ -252,7 +252,7 @@ public class GTUtil {
if (code == null) {
code = translate(col, firstValue, -1);
if (code == null)
- result = ConstantTupleFilter.FALSE;
+ result = newCompareFilter(TupleFilter.FilterOperatorEnum.ISNOTNULL, externalCol);
else
result = newCompareFilter(FilterOperatorEnum.LTE, externalCol, code);
} else {
@@ -274,7 +274,7 @@ public class GTUtil {
if (code == null) {
code = translate(col, firstValue, 1);
if (code == null)
- result = ConstantTupleFilter.FALSE;
+ result = newCompareFilter(TupleFilter.FilterOperatorEnum.ISNOTNULL, externalCol);
else
result = newCompareFilter(FilterOperatorEnum.GTE, externalCol, code);
} else {
@@ -304,6 +304,12 @@ public class GTUtil {
return r;
}
+ private TupleFilter newCompareFilter(TupleFilter.FilterOperatorEnum op, TblColRef col) {
+ CompareTupleFilter r = new CompareTupleFilter(op);
+ r.addChild(new ColumnTupleFilter(col));
+ return r;
+ }
+
transient ByteBuffer buf;
protected ByteArray translate(int col, Object value, int roundingFlag) {
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 073c12c..a9728cb 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
@@ -451,7 +451,9 @@ public class DictGridTableTest extends LocalFileMetadataTestCase {
{
LogicalTupleFilter filter = and(fComp1, compare(extColB, FilterOperatorEnum.LT, "9"));
TupleFilter newFilter = GTUtil.convertFilterColumnsAndConstants(filter, info, colMapping, null);
- assertEquals(ConstantTupleFilter.FALSE, newFilter);
+ assertEquals(
+ "AND [UNKNOWN_MODEL:NULL.GT_MOCKUP_TABLE.0 GT [\\x00\\x00\\x01J\\xE5\\xBD\\x5C\\x00], UNKNOWN_MODEL:NULL.GT_MOCKUP_TABLE.1 ISNOTNULL []]",
+ newFilter.toString());
}
// $1<"10" needs no rounding
@@ -516,7 +518,8 @@ public class DictGridTableTest extends LocalFileMetadataTestCase {
{
LogicalTupleFilter filter = and(fComp1, compare(extColB, FilterOperatorEnum.GT, "101"));
TupleFilter newFilter = GTUtil.convertFilterColumnsAndConstants(filter, info, colMapping, null);
- assertEquals(ConstantTupleFilter.FALSE, newFilter);
+ assertEquals("AND [UNKNOWN_MODEL:NULL.GT_MOCKUP_TABLE.0 GT [\\x00\\x00\\x01J\\xE5\\xBD\\x5C\\x00], UNKNOWN_MODEL:NULL.GT_MOCKUP_TABLE.1 ISNOTNULL []]",
+ newFilter.toString());
}
// $1>"100" needs no rounding