[CARBONDATA-2774][BloomDataMap] Exception should be thrown if expression do not 
satisfy bloomFilter's requirement

If query on string column with bloom index using number as filter value, we 
would get wrong result. Because DDL will wrap the filter with a datatype 
conversion, and DatamapChooser chooses datamap by searching column deep down to 
all children of filter expression. However, bloom filter required the 
expression is simply column =/in filterValue. So bloom will fail to build any 
querymodel and no hit blocklet, such that we will get an empty result.

To avoid getting wrong answer silently, we thrown exception instead of only 
giving a error log currently.

For users who wants to get correct result, can fix the SQL using corresponding 
data type or disable bloom datamap.

This closes #2545


Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo
Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/66285abe
Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/66285abe
Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/66285abe

Branch: refs/heads/branch-1.4
Commit: 66285abe294b4611ed55b462b121cadd1c9619d5
Parents: da2f038
Author: Manhua <kevin...@qq.com>
Authored: Tue Jul 24 14:51:18 2018 +0800
Committer: ravipesala <ravi.pes...@gmail.com>
Committed: Tue Jul 31 00:11:26 2018 +0530

----------------------------------------------------------------------
 .../carbondata/datamap/bloom/BloomCoarseGrainDataMap.java    | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/carbondata/blob/66285abe/datamap/bloom/src/main/java/org/apache/carbondata/datamap/bloom/BloomCoarseGrainDataMap.java
----------------------------------------------------------------------
diff --git 
a/datamap/bloom/src/main/java/org/apache/carbondata/datamap/bloom/BloomCoarseGrainDataMap.java
 
b/datamap/bloom/src/main/java/org/apache/carbondata/datamap/bloom/BloomCoarseGrainDataMap.java
index 26db300..be531d6 100644
--- 
a/datamap/bloom/src/main/java/org/apache/carbondata/datamap/bloom/BloomCoarseGrainDataMap.java
+++ 
b/datamap/bloom/src/main/java/org/apache/carbondata/datamap/bloom/BloomCoarseGrainDataMap.java
@@ -203,7 +203,9 @@ public class BloomCoarseGrainDataMap extends 
CoarseGrainDataMap {
         }
         return queryModels;
       } else {
-        LOGGER.warn("BloomFilter can only support the 'equal' filter like 'Col 
= PlainValue'");
+        String errorMsg = "BloomFilter can only support the 'equal' filter 
like 'Col = PlainValue'";
+        LOGGER.warn(errorMsg);
+        throw new RuntimeException(errorMsg);
       }
     } else if (expression instanceof InExpression) {
       Expression left = ((InExpression) expression).getLeft();
@@ -226,7 +228,9 @@ public class BloomCoarseGrainDataMap extends 
CoarseGrainDataMap {
         }
         return queryModels;
       } else {
-        LOGGER.warn("BloomFilter can only support the 'in' filter like 'Col in 
(PlainValues)'");
+        String errorMsg = "BloomFilter can only support the 'in' filter like 
'Col in PlainValue'";
+        LOGGER.warn(errorMsg);
+        throw new RuntimeException(errorMsg);
       }
     }
 

Reply via email to