This is an automated email from the ASF dual-hosted git repository. shaofengshi pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 4e97378 KYLIN-3634 when filter column has null value may cause incorrect query result 4e97378 is described below commit 4e9737803d59ac18b1c27aa1cb902f69fd47c135 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 f03329b..298225f 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 @@ -297,7 +297,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; @@ -308,7 +308,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 { @@ -330,7 +330,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 { @@ -360,6 +360,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 b8de556..d80df78 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 @@ -415,7 +415,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 @@ -480,7 +482,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