Github user xuchuanyin commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2445#discussion_r201891618
  
    --- Diff: 
datamap/bloom/src/main/java/org/apache/carbondata/datamap/bloom/BloomCoarseGrainDataMap.java
 ---
    @@ -186,19 +188,39 @@ public void initIndexColumnConverters(CarbonTable 
carbonTable, List<CarbonColumn
             column = ((ColumnExpression) left).getColumnName();
             if (this.name2Col.containsKey(column)) {
               BloomQueryModel bloomQueryModel =
    -              buildQueryModelFromExpression((ColumnExpression) left, 
(LiteralExpression) right);
    +              buildQueryModelForEqual((ColumnExpression) left, 
(LiteralExpression) right);
               queryModels.add(bloomQueryModel);
             }
             return queryModels;
           } else if (left instanceof LiteralExpression && right instanceof 
ColumnExpression) {
             column = ((ColumnExpression) right).getColumnName();
             if (this.name2Col.containsKey(column)) {
               BloomQueryModel bloomQueryModel =
    -              buildQueryModelFromExpression((ColumnExpression) right, 
(LiteralExpression) left);
    +              buildQueryModelForEqual((ColumnExpression) right, 
(LiteralExpression) left);
               queryModels.add(bloomQueryModel);
             }
             return queryModels;
           }
    +    } else if (expression instanceof InExpression) {
    +      Expression left = ((InExpression) expression).getLeft();
    +      Expression right = ((InExpression) expression).getRight();
    +      String column;
    +      if (left instanceof ColumnExpression && right instanceof 
ListExpression) {
    +        column = ((ColumnExpression) left).getColumnName();
    +        if (this.name2Col.containsKey(column)) {
    +          List<BloomQueryModel> models =
    +              buildQueryModelForIn((ColumnExpression) left, 
(ListExpression) right);
    +          queryModels.addAll(models);
    +        }
    +        return queryModels;
    +      } else if (left instanceof ListExpression && right instanceof 
ColumnExpression) {
    +        column = ((ColumnExpression) right).getColumnName();
    +        if (this.name2Col.containsKey(column)) {
    +          List<BloomQueryModel> models =
    +              buildQueryModelForIn((ColumnExpression) right, 
(ListExpression) left);
    +          queryModels.addAll(models);
    +        }
    +      }
    --- End diff --
    
    Each index datamap has a set of supported operators, for bloomfilter 
datamap it supports `equal` and `in`, so there are only two branches here.
    
    will add comment here


---

Reply via email to