http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/conditional/GreaterThanEqualToExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/GreaterThanEqualToExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/conditional/GreaterThanEqualToExpression.java deleted file mode 100644 index cf73e4b..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/GreaterThanEqualToExpression.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.conditional; - -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - -public class GreaterThanEqualToExpression extends BinaryConditionalExpression { - private static final long serialVersionUID = 4185317066280688984L; - - public GreaterThanEqualToExpression(Expression left, Expression right) { - super(left, right); - } - - public ExpressionResult evaluate(RowIntf value) - throws FilterUnsupportedException, FilterIllegalMemberException { - ExpressionResult elRes = left.evaluate(value); - ExpressionResult erRes = right.evaluate(value); - ExpressionResult exprResVal1 = elRes; - if (elRes.isNull() || erRes.isNull()) { - elRes.set(DataType.BOOLEAN, false); - return elRes; - } - if (elRes.getDataType() != erRes.getDataType()) { - if (elRes.getDataType().getPrecedenceOrder() < erRes.getDataType().getPrecedenceOrder()) { - exprResVal1 = erRes; - } - - } - boolean result = false; - switch (exprResVal1.getDataType()) { - case STRING: - result = elRes.getString().compareTo(erRes.getString()) >= 0; - break; - case SHORT: - result = elRes.getShort() >= (erRes.getShort()); - break; - case INT: - result = elRes.getInt() >= (erRes.getInt()); - break; - case DOUBLE: - result = elRes.getDouble() >= (erRes.getDouble()); - break; - case DATE: - case TIMESTAMP: - result = elRes.getTime() >= (erRes.getTime()); - break; - case LONG: - result = elRes.getLong() >= (erRes.getLong()); - break; - case DECIMAL: - result = elRes.getDecimal().compareTo(erRes.getDecimal()) >= 0; - break; - default: - throw new FilterUnsupportedException( - "DataType: " + exprResVal1.getDataType() + " not supported for the filter expression"); - } - exprResVal1.set(DataType.BOOLEAN, result); - return exprResVal1; - } - - @Override public ExpressionType getFilterExpressionType() { - return ExpressionType.GREATERTHAN_EQUALTO; - } - - @Override public String getString() { - return "GreaterThanEqualTo(" + left.getString() + ',' + right.getString() + ')'; - } -}
http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/conditional/GreaterThanExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/GreaterThanExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/conditional/GreaterThanExpression.java deleted file mode 100644 index 583b334..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/GreaterThanExpression.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.conditional; - -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - - -public class GreaterThanExpression extends BinaryConditionalExpression { - private static final long serialVersionUID = -5319109756575539219L; - - public GreaterThanExpression(Expression left, Expression right) { - super(left, right); - } - - @Override public ExpressionResult evaluate(RowIntf value) - throws FilterUnsupportedException, FilterIllegalMemberException { - ExpressionResult exprLeftRes = left.evaluate(value); - ExpressionResult exprRightRes = right.evaluate(value); - ExpressionResult val1 = exprLeftRes; - if (exprLeftRes.isNull() || exprRightRes.isNull()) { - exprLeftRes.set(DataType.BOOLEAN, false); - return exprLeftRes; - } - if (exprLeftRes.getDataType() != exprRightRes.getDataType()) { - if (exprLeftRes.getDataType().getPrecedenceOrder() < exprRightRes.getDataType() - .getPrecedenceOrder()) { - val1 = exprRightRes; - } - - } - boolean result = false; - switch (val1.getDataType()) { - case STRING: - result = exprLeftRes.getString().compareTo(exprRightRes.getString()) > 0; - break; - case DOUBLE: - result = exprLeftRes.getDouble() > (exprRightRes.getDouble()); - break; - case SHORT: - result = exprLeftRes.getShort() > (exprRightRes.getShort()); - break; - case INT: - result = exprLeftRes.getInt() > (exprRightRes.getInt()); - break; - case DATE: - case TIMESTAMP: - result = exprLeftRes.getTime() > (exprRightRes.getTime()); - break; - case LONG: - result = exprLeftRes.getLong() > (exprRightRes.getLong()); - break; - case DECIMAL: - result = exprLeftRes.getDecimal().compareTo(exprRightRes.getDecimal()) > 0; - break; - default: - throw new FilterUnsupportedException( - "DataType: " + val1.getDataType() + " not supported for the filter expression"); - } - val1.set(DataType.BOOLEAN, result); - return val1; - } - - @Override public ExpressionType getFilterExpressionType() { - return ExpressionType.GREATERTHAN; - } - - @Override public String getString() { - return "GreaterThan(" + left.getString() + ',' + right.getString() + ')'; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/conditional/InExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/InExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/conditional/InExpression.java deleted file mode 100644 index d3cf0ce..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/InExpression.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.conditional; - -import java.util.HashSet; -import java.util.Set; - -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - -public class InExpression extends BinaryConditionalExpression { - private static final long serialVersionUID = -3149927446694175489L; - - protected transient Set<ExpressionResult> setOfExprResult; - - public InExpression(Expression left, Expression right) { - super(left, right); - } - - @Override public ExpressionResult evaluate(RowIntf value) - throws FilterUnsupportedException, FilterIllegalMemberException { - ExpressionResult leftRsult = left.evaluate(value); - - if (setOfExprResult == null) { - ExpressionResult rightRsult = right.evaluate(value); - ExpressionResult val = null; - setOfExprResult = new HashSet<ExpressionResult>(10); - for (ExpressionResult expressionResVal : rightRsult.getList()) { - if (expressionResVal.getDataType().getPrecedenceOrder() < leftRsult.getDataType() - .getPrecedenceOrder()) { - val = leftRsult; - } else { - val = expressionResVal; - } - switch (val.getDataType()) { - case STRING: - val = new ExpressionResult(val.getDataType(), expressionResVal.getString()); - break; - case SHORT: - val = new ExpressionResult(val.getDataType(), expressionResVal.getShort()); - break; - case INT: - val = new ExpressionResult(val.getDataType(), expressionResVal.getInt()); - break; - case DOUBLE: - val = new ExpressionResult(val.getDataType(), expressionResVal.getDouble()); - break; - case LONG: - val = new ExpressionResult(val.getDataType(), expressionResVal.getLong()); - break; - case DATE: - case TIMESTAMP: - val = new ExpressionResult(val.getDataType(), expressionResVal.getTime()); - break; - case DECIMAL: - val = new ExpressionResult(val.getDataType(), expressionResVal.getDecimal()); - break; - default: - throw new FilterUnsupportedException( - "DataType: " + val.getDataType() + " not supported for the filter expression"); - } - setOfExprResult.add(val); - } - } - leftRsult.set(DataType.BOOLEAN, setOfExprResult.contains(leftRsult)); - return leftRsult; - } - - @Override public ExpressionType getFilterExpressionType() { - return ExpressionType.IN; - } - - @Override public String getString() { - return "IN(" + left.getString() + ',' + right.getString() + ')'; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/conditional/LessThanEqualToExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/LessThanEqualToExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/conditional/LessThanEqualToExpression.java deleted file mode 100644 index 7d4cbed..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/LessThanEqualToExpression.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.conditional; - -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - -public class LessThanEqualToExpression extends BinaryConditionalExpression { - private static final long serialVersionUID = 1L; - - public LessThanEqualToExpression(Expression left, Expression right) { - super(left, right); - } - - public ExpressionResult evaluate(RowIntf value) - throws FilterUnsupportedException, FilterIllegalMemberException { - ExpressionResult elRes = left.evaluate(value); - ExpressionResult erRes = right.evaluate(value); - ExpressionResult exprResValue1 = elRes; - if (elRes.isNull() || erRes.isNull()) { - elRes.set(DataType.BOOLEAN, false); - return elRes; - } - if (elRes.getDataType() != erRes.getDataType()) { - if (elRes.getDataType().getPrecedenceOrder() < erRes.getDataType().getPrecedenceOrder()) { - exprResValue1 = erRes; - } - - } - boolean result = false; - switch (exprResValue1.getDataType()) { - case STRING: - result = elRes.getString().compareTo(erRes.getString()) <= 0; - break; - case SHORT: - result = elRes.getShort() <= (erRes.getShort()); - break; - case INT: - result = elRes.getInt() <= (erRes.getInt()); - break; - case DOUBLE: - result = elRes.getDouble() <= (erRes.getDouble()); - break; - case DATE: - case TIMESTAMP: - result = elRes.getTime() <= (erRes.getTime()); - break; - case LONG: - result = elRes.getLong() <= (erRes.getLong()); - break; - case DECIMAL: - result = elRes.getDecimal().compareTo(erRes.getDecimal()) <= 0; - break; - default: - throw new FilterUnsupportedException("DataType: " + exprResValue1.getDataType() - + " not supported for the filter expression"); - } - exprResValue1.set(DataType.BOOLEAN, result); - return exprResValue1; - } - - @Override public ExpressionType getFilterExpressionType() { - // TODO Auto-generated method stub - return ExpressionType.LESSTHAN_EQUALTO; - } - - @Override public String getString() { - return "LessThanEqualTo(" + left.getString() + ',' + right.getString() + ')'; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/conditional/LessThanExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/LessThanExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/conditional/LessThanExpression.java deleted file mode 100644 index cb004de..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/LessThanExpression.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.conditional; - -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - -public class LessThanExpression extends BinaryConditionalExpression { - - private static final long serialVersionUID = 6343040416663699924L; - - public LessThanExpression(Expression left, Expression right) { - super(left, right); - } - - public ExpressionResult evaluate(RowIntf value) - throws FilterUnsupportedException, FilterIllegalMemberException { - ExpressionResult erRes = right.evaluate(value); - ExpressionResult elRes = left.evaluate(value); - - ExpressionResult val1 = elRes; - - boolean result = false; - - if (elRes.isNull() || erRes.isNull()) { - elRes.set(DataType.BOOLEAN, false); - return elRes; - } - if (elRes.getDataType() != erRes.getDataType()) { - if (elRes.getDataType().getPrecedenceOrder() < erRes.getDataType().getPrecedenceOrder()) { - val1 = erRes; - } - - } - switch (val1.getDataType()) { - case STRING: - result = elRes.getString().compareTo(erRes.getString()) < 0; - break; - case SHORT: - result = elRes.getShort() < (erRes.getShort()); - break; - case INT: - result = elRes.getInt() < (erRes.getInt()); - break; - case DOUBLE: - result = elRes.getDouble() < (erRes.getDouble()); - break; - case DATE: - case TIMESTAMP: - result = elRes.getTime() < (erRes.getTime()); - break; - case LONG: - result = elRes.getLong() < (erRes.getLong()); - break; - case DECIMAL: - result = elRes.getDecimal().compareTo(erRes.getDecimal()) < 0; - break; - default: - throw new FilterUnsupportedException( - "DataType: " + val1.getDataType() + " not supported for the filter expression"); - } - val1.set(DataType.BOOLEAN, result); - return val1; - } - - @Override public ExpressionType getFilterExpressionType() { - return ExpressionType.LESSTHAN; - } - - @Override public String getString() { - return "LessThan(" + left.getString() + ',' + right.getString() + ')'; - } - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/conditional/ListExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/ListExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/conditional/ListExpression.java deleted file mode 100644 index e57d48a..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/ListExpression.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.conditional; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - -public class ListExpression extends Expression { - private static final long serialVersionUID = 1L; - - public ListExpression(List<Expression> children) { - this.children = children; - } - - @Override public ExpressionResult evaluate(RowIntf value) throws FilterUnsupportedException { - List<ExpressionResult> listOfExprRes = new ArrayList<ExpressionResult>(10); - - for (Expression expr : children) { - try { - listOfExprRes.add(expr.evaluate(value)); - } catch (FilterIllegalMemberException e) { - continue; - } - } - return new ExpressionResult(listOfExprRes); - } - - @Override public ExpressionType getFilterExpressionType() { - // TODO Auto-generated method stub - return ExpressionType.LIST; - } - - @Override public String getString() { - // TODO Auto-generated method stub - return null; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/conditional/NotEqualsExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/NotEqualsExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/conditional/NotEqualsExpression.java deleted file mode 100644 index ab559f8..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/NotEqualsExpression.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.conditional; - -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - -public class NotEqualsExpression extends BinaryConditionalExpression { - - private static final long serialVersionUID = 8684006025540863973L; - private boolean isNotNull = false; - public NotEqualsExpression(Expression left, Expression right, boolean isNotNull) { - super(left, right); - this.isNotNull = isNotNull; - } - - public NotEqualsExpression(Expression left, Expression right) { - super(left, right); - } - - @Override public ExpressionResult evaluate(RowIntf value) - throws FilterUnsupportedException, FilterIllegalMemberException { - ExpressionResult elRes = left.evaluate(value); - ExpressionResult erRes = right.evaluate(value); - - boolean result = false; - ExpressionResult val1 = elRes; - ExpressionResult val2 = erRes; - if (elRes.isNull() || erRes.isNull()) { - if (isNotNull) { - elRes.set(DataType.BOOLEAN, elRes.isNull() != erRes.isNull()); - } else { - elRes.set(DataType.BOOLEAN, false); - } - return elRes; - } - //default implementation if the data types are different for the resultsets - if (elRes.getDataType() != erRes.getDataType()) { - // result = elRes.getString().equals(erRes.getString()); - if (elRes.getDataType().getPrecedenceOrder() < erRes.getDataType().getPrecedenceOrder()) { - val1 = erRes; - val2 = elRes; - } - } - switch (val1.getDataType()) { - case STRING: - result = !val1.getString().equals(val2.getString()); - break; - case SHORT: - result = val1.getShort().shortValue() != val2.getShort().shortValue(); - break; - case INT: - result = val1.getInt().intValue() != val2.getInt().intValue(); - break; - case DOUBLE: - result = val1.getDouble().doubleValue() != val2.getDouble().doubleValue(); - break; - case DATE: - case TIMESTAMP: - result = val1.getTime().longValue() != val2.getTime().longValue(); - break; - case LONG: - result = elRes.getLong().longValue() != (erRes.getLong()).longValue(); - break; - case DECIMAL: - result = elRes.getDecimal().compareTo(erRes.getDecimal()) != 0; - break; - default: - throw new FilterUnsupportedException( - "DataType: " + val1.getDataType() + " not supported for the filter expression"); - } - val1.set(DataType.BOOLEAN, result); - return val1; - } - - @Override public ExpressionType getFilterExpressionType() { - return ExpressionType.NOT_EQUALS; - } - - @Override public String getString() { - return "NotEquals(" + left.getString() + ',' + right.getString() + ')'; - } -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/conditional/NotInExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/NotInExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/conditional/NotInExpression.java deleted file mode 100644 index 2fced3d..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/conditional/NotInExpression.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.conditional; - -import java.util.HashSet; -import java.util.Set; - -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - -public class NotInExpression extends BinaryConditionalExpression { - private static final long serialVersionUID = -6835841923752118034L; - protected transient Set<ExpressionResult> setOfExprResult; - - public NotInExpression(Expression left, Expression right) { - super(left, right); - } - - @Override public ExpressionResult evaluate(RowIntf value) - throws FilterUnsupportedException, FilterIllegalMemberException { - ExpressionResult leftRsult = left.evaluate(value); - if (setOfExprResult == null) { - ExpressionResult val = null; - ExpressionResult rightRsult = right.evaluate(value); - setOfExprResult = new HashSet<ExpressionResult>(10); - for (ExpressionResult exprResVal : rightRsult.getList()) { - if (exprResVal.getDataType().getPrecedenceOrder() < leftRsult.getDataType() - .getPrecedenceOrder()) { - val = leftRsult; - } else { - val = exprResVal; - } - switch (val.getDataType()) { - case STRING: - val = new ExpressionResult(val.getDataType(), exprResVal.getString()); - break; - case SHORT: - val = new ExpressionResult(val.getDataType(), exprResVal.getShort()); - break; - case INT: - val = new ExpressionResult(val.getDataType(), exprResVal.getInt()); - break; - case DOUBLE: - val = new ExpressionResult(val.getDataType(), exprResVal.getDouble()); - break; - case DATE: - case TIMESTAMP: - val = new ExpressionResult(val.getDataType(), exprResVal.getTime()); - break; - case LONG: - val = new ExpressionResult(val.getDataType(), exprResVal.getLong()); - break; - case DECIMAL: - val = new ExpressionResult(val.getDataType(), exprResVal.getDecimal()); - break; - default: - throw new FilterUnsupportedException( - "DataType: " + val.getDataType() + " not supported for the filter expression"); - } - setOfExprResult.add(val); - } - } - leftRsult.set(DataType.BOOLEAN, !setOfExprResult.contains(leftRsult)); - - return leftRsult; - } - - @Override public ExpressionType getFilterExpressionType() { - return ExpressionType.NOT_IN; - } - - @Override public String getString() { - return "NOT IN(" + left.getString() + ',' + right.getString() + ')'; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/exception/FilterIllegalMemberException.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/exception/FilterIllegalMemberException.java b/core/src/main/java/org/apache/carbondata/scan/expression/exception/FilterIllegalMemberException.java deleted file mode 100644 index 96b3930..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/exception/FilterIllegalMemberException.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.exception; - -import java.util.Locale; - -/** - * FilterIllegalMemberException class representing exception which can cause while evaluating - * filter members needs to be gracefully handled without propagating to outer layer so that - * the execution should not get interrupted. - */ -public class FilterIllegalMemberException extends Exception { - - /** - * default serial version ID. - */ - private static final long serialVersionUID = 1L; - - /** - * The Error message. - */ - private String msg = ""; - - /** - * Constructor - * - * @param msg The error message for this exception. - */ - public FilterIllegalMemberException(String msg) { - super(msg); - this.msg = msg; - } - - /** - * Constructor - * - * @param msg The error message for this exception. - */ - public FilterIllegalMemberException(String msg, Throwable t) { - super(msg, t); - this.msg = msg; - } - - /** - * Constructor - * - */ - public FilterIllegalMemberException(Throwable t) { - super(t); - } - - /** - * This method is used to get the localized message. - * - * @param locale - A Locale object represents a specific geographical, - * political, or cultural region. - * @return - Localized error message. - */ - public String getLocalizedMessage(Locale locale) { - return ""; - } - - /** - * getLocalizedMessage - */ - @Override public String getLocalizedMessage() { - return super.getLocalizedMessage(); - } - - /** - * getMessage - */ - public String getMessage() { - return this.msg; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/exception/FilterUnsupportedException.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/exception/FilterUnsupportedException.java b/core/src/main/java/org/apache/carbondata/scan/expression/exception/FilterUnsupportedException.java deleted file mode 100644 index d54ce69..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/exception/FilterUnsupportedException.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.exception; - -import java.util.Locale; - -public class FilterUnsupportedException extends Exception { - - /** - * default serial version ID. - */ - private static final long serialVersionUID = 1L; - - /** - * The Error message. - */ - private String msg = ""; - - /** - * Constructor - * - * @param msg The error message for this exception. - */ - public FilterUnsupportedException(String msg) { - super(msg); - this.msg = msg; - } - - /** - * Constructor - * - * @param msg The error message for this exception. - */ - public FilterUnsupportedException(String msg, Throwable t) { - super(msg, t); - this.msg = msg; - } - - /** - * Constructor - * - */ - public FilterUnsupportedException(Throwable t) { - super(t); - } - - /** - * This method is used to get the localized message. - * - * @param locale - A Locale object represents a specific geographical, - * political, or cultural region. - * @return - Localized error message. - */ - public String getLocalizedMessage(Locale locale) { - return ""; - } - - /** - * getLocalizedMessage - */ - @Override public String getLocalizedMessage() { - return super.getLocalizedMessage(); - } - - /** - * getMessage - */ - public String getMessage() { - return this.msg; - } -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/logical/AndExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/logical/AndExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/logical/AndExpression.java deleted file mode 100644 index 037115a..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/logical/AndExpression.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.logical; - -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - -public class AndExpression extends BinaryLogicalExpression { - - private static final long serialVersionUID = 1L; - - public AndExpression(Expression left, Expression right) { - super(left, right); - } - - @Override public ExpressionResult evaluate(RowIntf value) - throws FilterUnsupportedException, FilterIllegalMemberException { - ExpressionResult resultLeft = left.evaluate(value); - ExpressionResult resultRight = right.evaluate(value); - switch (resultLeft.getDataType()) { - case BOOLEAN: - resultLeft.set(DataType.BOOLEAN, (resultLeft.getBoolean() && resultRight.getBoolean())); - break; - default: - throw new FilterUnsupportedException( - "Incompatible datatype for applying AND Expression Filter"); - } - return resultLeft; - } - - @Override public ExpressionType getFilterExpressionType() { - // TODO Auto-generated method stub - return ExpressionType.AND; - } - - @Override public String getString() { - // TODO Auto-generated method stub - return "And(" + left.getString() + ',' + right.getString() + ')'; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/logical/BinaryLogicalExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/logical/BinaryLogicalExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/logical/BinaryLogicalExpression.java deleted file mode 100644 index d4ad063..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/logical/BinaryLogicalExpression.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.logical; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.apache.carbondata.core.constants.CarbonCommonConstants; -import org.apache.carbondata.scan.expression.BinaryExpression; -import org.apache.carbondata.scan.expression.ColumnExpression; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.LiteralExpression; - -public abstract class BinaryLogicalExpression extends BinaryExpression { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public BinaryLogicalExpression(Expression left, Expression right) { - super(left, right); - // TODO Auto-generated constructor stub - } - - public List<ExpressionResult> getLiterals() { - List<ExpressionResult> listOfExp = - new ArrayList<ExpressionResult>(CarbonCommonConstants.DEFAULT_COLLECTION_SIZE); - getExpressionResultList(this, listOfExp); - Collections.sort(listOfExp); - return listOfExp; - } - - // Will get the column informations involved in the expressions by - // traversing the tree - public List<ColumnExpression> getColumnList() { - // TODO - List<ColumnExpression> listOfExp = - new ArrayList<ColumnExpression>(CarbonCommonConstants.DEFAULT_COLLECTION_SIZE); - getColumnList(this, listOfExp); - return listOfExp; - } - - private void getColumnList(Expression expression, List<ColumnExpression> lst) { - if (expression instanceof ColumnExpression) { - ColumnExpression colExp = (ColumnExpression) expression; - boolean found = false; - - for (ColumnExpression currentColExp : lst) { - if (currentColExp.getColumnName().equals(colExp.getColumnName())) { - found = true; - colExp.setColIndex(currentColExp.getColIndex()); - break; - } - } - if (!found) { - colExp.setColIndex(lst.size()); - lst.add(colExp); - } - } - for (Expression child : expression.getChildren()) { - getColumnList(child, lst); - } - } - - public boolean isSingleDimension() { - List<ColumnExpression> listOfExp = - new ArrayList<ColumnExpression>(CarbonCommonConstants.DEFAULT_COLLECTION_SIZE); - getColumnList(this, listOfExp); - if (listOfExp.size() == 1 && listOfExp.get(0).isDimension()) { - return true; - } - return false; - - } - - private void getExpressionResultList(Expression binaryConditionalExpression, - List<ExpressionResult> listOfExp) { - if (binaryConditionalExpression instanceof LiteralExpression) { - ExpressionResult colExp = - ((LiteralExpression) binaryConditionalExpression).getExpressionResult(); - listOfExp.add(colExp); - } - for (Expression child : binaryConditionalExpression.getChildren()) { - getExpressionResultList(child, listOfExp); - } - - } - -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/logical/FalseExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/logical/FalseExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/logical/FalseExpression.java deleted file mode 100644 index 4052cb8..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/logical/FalseExpression.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.logical; - -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.LiteralExpression; -import org.apache.carbondata.scan.expression.conditional.BinaryConditionalExpression; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - - - -/** - * This class will form an expression whose evaluation will be always false. - */ -public class FalseExpression extends BinaryConditionalExpression { - - - private static final long serialVersionUID = -8390184061336799370L; - - public FalseExpression(Expression child1) { - super(child1, new LiteralExpression(null,null)); - } - - /** - * This method will always return false, mainly used in the filter expressions - * which are illogical. - * eg: columnName NOT IN('Java',NULL) - * @param value - * @return - * @throws FilterUnsupportedException - * @throws FilterIllegalMemberException - */ - @Override public ExpressionResult evaluate(RowIntf value) - throws FilterUnsupportedException, FilterIllegalMemberException { - return new ExpressionResult(DataType.BOOLEAN,false); - } - - /** - * This method will return the expression types - * @return - */ - @Override public ExpressionType getFilterExpressionType() { - return ExpressionType.FALSE; - } - @Override public String getString() { - return null; - } -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/expression/logical/OrExpression.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/expression/logical/OrExpression.java b/core/src/main/java/org/apache/carbondata/scan/expression/logical/OrExpression.java deleted file mode 100644 index 8c81f1d..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/expression/logical/OrExpression.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.expression.logical; - -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.ExpressionResult; -import org.apache.carbondata.scan.expression.exception.FilterIllegalMemberException; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.intf.RowIntf; - -public class OrExpression extends BinaryLogicalExpression { - - private static final long serialVersionUID = 4220598043176438380L; - - public OrExpression(Expression left, Expression right) { - super(left, right); - } - - @Override public ExpressionResult evaluate(RowIntf value) - throws FilterIllegalMemberException, FilterUnsupportedException { - ExpressionResult resultLeft = left.evaluate(value); - ExpressionResult resultRight = right.evaluate(value); - switch (resultLeft.getDataType()) { - case BOOLEAN: - resultLeft.set(DataType.BOOLEAN, (resultLeft.getBoolean() || resultRight.getBoolean())); - break; - default: - throw new FilterUnsupportedException( - "Incompatible datatype for applying OR Expression Filter"); - } - - return resultLeft; - } - - @Override public ExpressionType getFilterExpressionType() { - return ExpressionType.OR; - } - - @Override public String getString() { - return "Or(" + left.getString() + ',' + right.getString() + ')'; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/filter/DimColumnFilterInfo.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/filter/DimColumnFilterInfo.java b/core/src/main/java/org/apache/carbondata/scan/filter/DimColumnFilterInfo.java deleted file mode 100644 index f97fffc..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/filter/DimColumnFilterInfo.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.carbondata.scan.filter; - -import java.io.Serializable; -import java.util.List; - -public class DimColumnFilterInfo implements Serializable { - - private static final long serialVersionUID = 8181578747306832771L; - - private boolean isIncludeFilter; - - private List<Integer> filterList; - - /** - * Implicit column filter values to be used for block and blocklet pruning - */ - private List<String> implicitColumnFilterList; - private List<Integer> excludeFilterList; - /** - * maintain the no dictionary filter values list. - */ - private List<byte[]> noDictionaryFilterValuesList; - - public List<byte[]> getNoDictionaryFilterValuesList() { - return noDictionaryFilterValuesList; - } - - public boolean isIncludeFilter() { - return isIncludeFilter; - } - - public void setIncludeFilter(boolean isIncludeFilter) { - this.isIncludeFilter = isIncludeFilter; - } - - public List<Integer> getFilterList() { - return filterList; - } - - public void setFilterList(List<Integer> filterList) { - this.filterList = filterList; - } - - public void setFilterListForNoDictionaryCols(List<byte[]> noDictionaryFilterValuesList) { - this.noDictionaryFilterValuesList = noDictionaryFilterValuesList; - } - - public List<Integer> getExcludeFilterList() { - return excludeFilterList; - } - public void setExcludeFilterList(List<Integer> excludeFilterList) { - this.excludeFilterList = excludeFilterList; - } - public List<String> getImplicitColumnFilterList() { - return implicitColumnFilterList; - } - - public void setImplicitColumnFilterList(List<String> implicitColumnFilterList) { - this.implicitColumnFilterList = implicitColumnFilterList; - } -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/filter/FilterExpressionProcessor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/filter/FilterExpressionProcessor.java b/core/src/main/java/org/apache/carbondata/scan/filter/FilterExpressionProcessor.java deleted file mode 100644 index 3ec1bc5..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/filter/FilterExpressionProcessor.java +++ /dev/null @@ -1,338 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.carbondata.scan.filter; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.List; - -import org.apache.carbondata.common.logging.LogService; -import org.apache.carbondata.common.logging.LogServiceFactory; -import org.apache.carbondata.core.AbsoluteTableIdentifier; -import org.apache.carbondata.core.datastore.DataRefNode; -import org.apache.carbondata.core.datastore.DataRefNodeFinder; -import org.apache.carbondata.core.datastore.IndexKey; -import org.apache.carbondata.core.datastore.block.AbstractIndex; -import org.apache.carbondata.core.datastore.impl.btree.BTreeDataRefNodeFinder; -import org.apache.carbondata.core.metadata.DataType; -import org.apache.carbondata.core.metadata.Encoding; -import org.apache.carbondata.core.keygenerator.KeyGenException; -import org.apache.carbondata.scan.expression.BinaryExpression; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.conditional.BinaryConditionalExpression; -import org.apache.carbondata.scan.expression.conditional.ConditionalExpression; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.executer.FilterExecuter; -import org.apache.carbondata.scan.filter.intf.ExpressionType; -import org.apache.carbondata.scan.filter.resolver.ConditionalFilterResolverImpl; -import org.apache.carbondata.scan.filter.resolver.FilterResolverIntf; -import org.apache.carbondata.scan.filter.resolver.LogicalFilterResolverImpl; -import org.apache.carbondata.scan.filter.resolver.RowLevelFilterResolverImpl; -import org.apache.carbondata.scan.filter.resolver.RowLevelRangeFilterResolverImpl; - -public class FilterExpressionProcessor implements FilterProcessor { - - private static final LogService LOGGER = - LogServiceFactory.getLogService(FilterExpressionProcessor.class.getName()); - - /** - * Implementation will provide the resolved form of filters based on the - * filter expression tree which is been passed in Expression instance. - * - * @param expressionTree , filter expression tree - * @param tableIdentifier ,contains carbon store informations - * @return a filter resolver tree - */ - public FilterResolverIntf getFilterResolver(Expression expressionTree, - AbsoluteTableIdentifier tableIdentifier) throws FilterUnsupportedException, IOException { - if (null != expressionTree && null != tableIdentifier) { - return getFilterResolvertree(expressionTree, tableIdentifier); - } - return null; - } - - /** - * This API will scan the Segment level all btrees and selects the required - * block reference nodes inorder to push the same to executer for applying filters - * on the respective data reference node. - * Following Algorithm is followed in below API - * Step:1 Get the start end key based on the filter tree resolver information - * Step:2 Prepare the IndexKeys inorder to scan the tree and get the start and end reference - * node(block) - * Step:3 Once data reference node ranges retrieved traverse the node within this range - * and select the node based on the block min and max value and the filter value. - * Step:4 The selected blocks will be send to executers for applying the filters with the help - * of Filter executers. - * - */ - public List<DataRefNode> getFilterredBlocks(DataRefNode btreeNode, - FilterResolverIntf filterResolver, AbstractIndex tableSegment, - AbsoluteTableIdentifier tableIdentifier) { - // Need to get the current dimension tables - List<DataRefNode> listOfDataBlocksToScan = new ArrayList<DataRefNode>(); - // getting the start and end index key based on filter for hitting the - // selected block reference nodes based on filter resolver tree. - LOGGER.debug("preparing the start and end key for finding" - + "start and end block as per filter resolver"); - List<IndexKey> listOfStartEndKeys = new ArrayList<IndexKey>(2); - FilterUtil.traverseResolverTreeAndGetStartAndEndKey(tableSegment.getSegmentProperties(), - filterResolver, listOfStartEndKeys); - // reading the first value from list which has start key - IndexKey searchStartKey = listOfStartEndKeys.get(0); - // reading the last value from list which has end key - IndexKey searchEndKey = listOfStartEndKeys.get(1); - if (null == searchStartKey && null == searchEndKey) { - try { - // TODO need to handle for no dictionary dimensions - searchStartKey = - FilterUtil.prepareDefaultStartIndexKey(tableSegment.getSegmentProperties()); - // TODO need to handle for no dictionary dimensions - searchEndKey = FilterUtil.prepareDefaultEndIndexKey(tableSegment.getSegmentProperties()); - } catch (KeyGenException e) { - return listOfDataBlocksToScan; - } - } - - LOGGER.debug( - "Successfully retrieved the start and end key" + "Dictionary Start Key: " + searchStartKey - .getDictionaryKeys() + "No Dictionary Start Key " + searchStartKey.getNoDictionaryKeys() - + "Dictionary End Key: " + searchEndKey.getDictionaryKeys() + "No Dictionary End Key " - + searchEndKey.getNoDictionaryKeys()); - long startTimeInMillis = System.currentTimeMillis(); - DataRefNodeFinder blockFinder = new BTreeDataRefNodeFinder( - tableSegment.getSegmentProperties().getEachDimColumnValueSize()); - DataRefNode startBlock = blockFinder.findFirstDataBlock(btreeNode, searchStartKey); - DataRefNode endBlock = blockFinder.findLastDataBlock(btreeNode, searchEndKey); - FilterExecuter filterExecuter = - FilterUtil.getFilterExecuterTree(filterResolver, tableSegment.getSegmentProperties(),null); - while (startBlock != endBlock) { - addBlockBasedOnMinMaxValue(filterExecuter, listOfDataBlocksToScan, startBlock); - startBlock = startBlock.getNextDataRefNode(); - } - addBlockBasedOnMinMaxValue(filterExecuter, listOfDataBlocksToScan, endBlock); - LOGGER.info("Total Time in retrieving the data reference node" + "after scanning the btree " + ( - System.currentTimeMillis() - startTimeInMillis) - + " Total number of data reference node for executing filter(s) " + listOfDataBlocksToScan - .size()); - - return listOfDataBlocksToScan; - } - - /** - * Selects the blocks based on col max and min value. - * - * @param listOfDataBlocksToScan - * @param dataRefNode - */ - private void addBlockBasedOnMinMaxValue(FilterExecuter filterExecuter, - List<DataRefNode> listOfDataBlocksToScan, DataRefNode dataRefNode) { - - BitSet bitSet = filterExecuter - .isScanRequired(dataRefNode.getColumnsMaxValue(), dataRefNode.getColumnsMinValue()); - if (!bitSet.isEmpty()) { - listOfDataBlocksToScan.add(dataRefNode); - - } - } - - /** - * API will return a filter resolver instance which will be used by - * executers to evaluate or execute the filters. - * - * @param expressionTree , resolver tree which will hold the resolver tree based on - * filter expression. - * @return FilterResolverIntf type. - */ - private FilterResolverIntf getFilterResolvertree(Expression expressionTree, - AbsoluteTableIdentifier tableIdentifier) throws FilterUnsupportedException, IOException { - FilterResolverIntf filterEvaluatorTree = - createFilterResolverTree(expressionTree, tableIdentifier); - traverseAndResolveTree(filterEvaluatorTree, tableIdentifier); - return filterEvaluatorTree; - } - - /** - * constructing the filter resolver tree based on filter expression. - * this method will visit each node of the filter resolver and prepares - * the surrogates of the filter members which are involved filter - * expression. - * - * @param filterResolverTree - * @param tableIdentifier - */ - private void traverseAndResolveTree(FilterResolverIntf filterResolverTree, - AbsoluteTableIdentifier tableIdentifier) throws FilterUnsupportedException, IOException { - if (null == filterResolverTree) { - return; - } - traverseAndResolveTree(filterResolverTree.getLeft(), tableIdentifier); - filterResolverTree.resolve(tableIdentifier); - traverseAndResolveTree(filterResolverTree.getRight(), tableIdentifier); - } - - /** - * Pattern used : Visitor Pattern - * Method will create filter resolver tree based on the filter expression tree, - * in this algorithm based on the expression instance the resolvers will created - * - * @param expressionTree - * @param tableIdentifier - * @return - */ - private FilterResolverIntf createFilterResolverTree(Expression expressionTree, - AbsoluteTableIdentifier tableIdentifier) { - ExpressionType filterExpressionType = expressionTree.getFilterExpressionType(); - BinaryExpression currentExpression = null; - switch (filterExpressionType) { - case OR: - currentExpression = (BinaryExpression) expressionTree; - return new LogicalFilterResolverImpl( - createFilterResolverTree(currentExpression.getLeft(), tableIdentifier), - createFilterResolverTree(currentExpression.getRight(), tableIdentifier), - currentExpression); - case AND: - currentExpression = (BinaryExpression) expressionTree; - return new LogicalFilterResolverImpl( - createFilterResolverTree(currentExpression.getLeft(), tableIdentifier), - createFilterResolverTree(currentExpression.getRight(), tableIdentifier), - currentExpression); - case EQUALS: - case IN: - return getFilterResolverBasedOnExpressionType(ExpressionType.EQUALS, - ((BinaryConditionalExpression) expressionTree).isNull, expressionTree, - tableIdentifier, expressionTree); - case GREATERTHAN: - case GREATERTHAN_EQUALTO: - case LESSTHAN: - case LESSTHAN_EQUALTO: - return getFilterResolverBasedOnExpressionType(ExpressionType.EQUALS, true, expressionTree, - tableIdentifier, expressionTree); - - case NOT_EQUALS: - case NOT_IN: - return getFilterResolverBasedOnExpressionType(ExpressionType.NOT_EQUALS, false, - expressionTree, tableIdentifier, expressionTree); - case FALSE: - return getFilterResolverBasedOnExpressionType(ExpressionType.FALSE, false, - expressionTree, tableIdentifier, expressionTree); - default: - return getFilterResolverBasedOnExpressionType(ExpressionType.UNKNOWN, false, expressionTree, - tableIdentifier, expressionTree); - } - } - - /** - * Factory method which will return the resolver instance based on filter expression - * expressions. - */ - private FilterResolverIntf getFilterResolverBasedOnExpressionType( - ExpressionType filterExpressionType, boolean isExpressionResolve, Expression expression, - AbsoluteTableIdentifier tableIdentifier, Expression expressionTree) { - BinaryConditionalExpression currentCondExpression = null; - ConditionalExpression condExpression = null; - switch (filterExpressionType) { - case FALSE: - return new RowLevelFilterResolverImpl(expression, false, false, tableIdentifier); - case EQUALS: - currentCondExpression = (BinaryConditionalExpression) expression; - if (currentCondExpression.isSingleDimension() - && currentCondExpression.getColumnList().get(0).getCarbonColumn().getDataType() - != DataType.ARRAY - && currentCondExpression.getColumnList().get(0).getCarbonColumn().getDataType() - != DataType.STRUCT) { - // getting new dim index. - if (!currentCondExpression.getColumnList().get(0).getCarbonColumn() - .hasEncoding(Encoding.DICTIONARY) || currentCondExpression.getColumnList().get(0) - .getCarbonColumn().hasEncoding(Encoding.DIRECT_DICTIONARY)) { - if (FilterUtil.checkIfExpressionContainsColumn(currentCondExpression.getLeft()) - && FilterUtil.checkIfExpressionContainsColumn(currentCondExpression.getRight()) || ( - FilterUtil.checkIfRightExpressionRequireEvaluation(currentCondExpression.getRight()) - || FilterUtil - .checkIfLeftExpressionRequireEvaluation(currentCondExpression.getLeft()))) { - return new RowLevelFilterResolverImpl(expression, isExpressionResolve, true, - tableIdentifier); - } - if (currentCondExpression.getFilterExpressionType() == ExpressionType.GREATERTHAN - || currentCondExpression.getFilterExpressionType() == ExpressionType.LESSTHAN - || currentCondExpression.getFilterExpressionType() - == ExpressionType.GREATERTHAN_EQUALTO - || currentCondExpression.getFilterExpressionType() - == ExpressionType.LESSTHAN_EQUALTO) { - return new RowLevelRangeFilterResolverImpl(expression, isExpressionResolve, true, - tableIdentifier); - } - } - return new ConditionalFilterResolverImpl(expression, isExpressionResolve, true); - - } - break; - case NOT_EQUALS: - currentCondExpression = (BinaryConditionalExpression) expression; - if (currentCondExpression.isSingleDimension() - && currentCondExpression.getColumnList().get(0).getCarbonColumn().getDataType() - != DataType.ARRAY - && currentCondExpression.getColumnList().get(0).getCarbonColumn().getDataType() - != DataType.STRUCT) { - if (!currentCondExpression.getColumnList().get(0).getCarbonColumn() - .hasEncoding(Encoding.DICTIONARY) || currentCondExpression.getColumnList().get(0) - .getCarbonColumn().hasEncoding(Encoding.DIRECT_DICTIONARY)) { - if (FilterUtil.checkIfExpressionContainsColumn(currentCondExpression.getLeft()) - && FilterUtil.checkIfExpressionContainsColumn(currentCondExpression.getRight()) || ( - FilterUtil.checkIfRightExpressionRequireEvaluation(currentCondExpression.getRight()) - || FilterUtil - .checkIfLeftExpressionRequireEvaluation(currentCondExpression.getLeft()))) { - return new RowLevelFilterResolverImpl(expression, isExpressionResolve, false, - tableIdentifier); - } - if (expressionTree.getFilterExpressionType() == ExpressionType.GREATERTHAN - || expressionTree.getFilterExpressionType() == ExpressionType.LESSTHAN - || expressionTree.getFilterExpressionType() == ExpressionType.GREATERTHAN_EQUALTO - || expressionTree.getFilterExpressionType() == ExpressionType.LESSTHAN_EQUALTO) { - - return new RowLevelRangeFilterResolverImpl(expression, isExpressionResolve, false, - tableIdentifier); - } - - return new ConditionalFilterResolverImpl(expression, isExpressionResolve, false); - } - return new ConditionalFilterResolverImpl(expression, isExpressionResolve, false); - } - break; - default: - if(expression instanceof ConditionalExpression) { - condExpression = (ConditionalExpression) expression; - if (condExpression.isSingleDimension() - && condExpression.getColumnList().get(0).getCarbonColumn().getDataType() - != DataType.ARRAY - && condExpression.getColumnList().get(0).getCarbonColumn().getDataType() - != DataType.STRUCT) { - condExpression = (ConditionalExpression) expression; - if (condExpression.getColumnList().get(0).getCarbonColumn() - .hasEncoding(Encoding.DICTIONARY) && !condExpression.getColumnList().get(0) - .getCarbonColumn().hasEncoding(Encoding.DIRECT_DICTIONARY)) { - return new ConditionalFilterResolverImpl(expression, true, true); - } - } - } - } - return new RowLevelFilterResolverImpl(expression, false, false, tableIdentifier); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/main/java/org/apache/carbondata/scan/filter/FilterProcessor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/scan/filter/FilterProcessor.java b/core/src/main/java/org/apache/carbondata/scan/filter/FilterProcessor.java deleted file mode 100644 index 44161b2..0000000 --- a/core/src/main/java/org/apache/carbondata/scan/filter/FilterProcessor.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.apache.carbondata.scan.filter; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.io.IOException; -import java.util.List; - -import org.apache.carbondata.core.AbsoluteTableIdentifier; -import org.apache.carbondata.core.datastore.DataRefNode; -import org.apache.carbondata.core.datastore.block.AbstractIndex; -import org.apache.carbondata.scan.expression.Expression; -import org.apache.carbondata.scan.expression.exception.FilterUnsupportedException; -import org.apache.carbondata.scan.filter.resolver.FilterResolverIntf; - -public interface FilterProcessor { - - /** - * API will provide the resolved form of filters based on the filter - * expression tree which is been passed. - * - * @param expressionTree , filter expression tree - * @param tableIdentifier ,contains carbon store informations. - * @return - * @throws FilterUnsupportedException - */ - FilterResolverIntf getFilterResolver(Expression expressionTree, - AbsoluteTableIdentifier tableIdentifier) throws FilterUnsupportedException, IOException; - - /** - * This API is exposed inorder to get the required block reference node - * based on the filter.The block list will be send to the executer tasks inorder - * to apply filters. - * - * @param filterResolver DataBlock list with resolved filters - * @return list of DataRefNode. - */ - List<DataRefNode> getFilterredBlocks(DataRefNode dataRefNode, FilterResolverIntf filterResolver, - AbstractIndex segmentIndexBuilder, AbsoluteTableIdentifier tableIdentifier); - -}