xubo245 commented on a change in pull request #3317: [CARBONDATA-3461] Carbon SDK support filter equal values set.
URL: https://github.com/apache/carbondata/pull/3317#discussion_r300585945 ########## File path: store/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonReaderBuilder.java ########## @@ -170,6 +176,75 @@ public CarbonReaderBuilder filter(Expression filterExpression) { return this; } + public CarbonReaderBuilder filter(String columnName, String value) { + EqualToExpression equalToExpression = new EqualToExpression( + new ColumnExpression(columnName, DataTypes.STRING), + new LiteralExpression(value, DataTypes.STRING)); + this.filterExpression = equalToExpression; + return this; + } + + public CarbonReaderBuilder filter(String columnName, List<String> values) { + Expression expression = null; + if (0 == values.size()) { + expression = new EqualToExpression( + new ColumnExpression(columnName, DataTypes.STRING), + new LiteralExpression(null, DataTypes.STRING)); + } else { + expression = new EqualToExpression( + new ColumnExpression(columnName, DataTypes.STRING), + new LiteralExpression(values.get(0), DataTypes.STRING)); + } + for (int i = 1; i < values.size(); i++) { + Expression expression2 = new EqualToExpression( + new ColumnExpression(columnName, DataTypes.STRING), + new LiteralExpression(values.get(i), DataTypes.STRING)); + expression = new OrExpression(expression, expression2); + } + this.filterExpression = expression; + return this; + } + + private CarbonReaderBuilder filter(String columnName, DataType dataType, + List<Object> values) { + Expression expression = null; + if (0 == values.size()) { + expression = new EqualToExpression( + new ColumnExpression(columnName, dataType), + new LiteralExpression(null, dataType)); + } else { + expression = new EqualToExpression( + new ColumnExpression(columnName, dataType), + new LiteralExpression(values.get(0), dataType)); + } + for (int i = 1; i < values.size(); i++) { + Expression expression2 = new EqualToExpression( + new ColumnExpression(columnName, dataType), + new LiteralExpression(values.get(i), dataType)); + expression = new OrExpression(expression, expression2); + } + this.filterExpression = expression; + return this; + } + + public CarbonReaderBuilder filter(String columnName, String dataType, List<Object> values) { + if (DataTypes.STRING.getName().equalsIgnoreCase(dataType)) { + return filter(columnName, DataTypes.STRING, values); + } else if (DataTypes.INT.getName().equalsIgnoreCase(dataType)) { + return filter(columnName, DataTypes.INT, values); + } else if (DataTypes.DOUBLE.getName().equalsIgnoreCase(dataType)) { + return filter(columnName, DataTypes.DOUBLE, values); + } else if (DataTypes.FLOAT.getName().equalsIgnoreCase(dataType)) { + return filter(columnName, DataTypes.FLOAT, values); + } else if (DataTypes.SHORT.getName().equalsIgnoreCase(dataType)) { + return filter(columnName, DataTypes.SHORT, values); + } else if (DataTypes.BINARY.getName().equalsIgnoreCase(dataType)) { Review comment: yes, this PR also has some test case. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [hidden email] With regards, Apache Git Services |
Free forum by Nabble | Edit this page |