This is an automated email from the ASF dual-hosted git repository. shaofengshi pushed a commit to branch 2.4.x in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/2.4.x by this push: new 3cb77ac KYLIN-3634 when filter column has null value may cause incorrect query result 3cb77ac is described below commit 3cb77ac7279b49fdd3dc59cceedd8a090515d7ff Author: wangbo <506340...@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 62053a3..15cf541 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 @@ -295,7 +295,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; @@ -306,7 +306,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 { @@ -328,7 +328,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 { @@ -358,6 +358,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