This is an automated email from the ASF dual-hosted git repository. rameshkumar pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push: new a694ee7b6da HIVE-26208: Exception in Vectorization with Decimal64 to Decimal casting (#3344) a694ee7b6da is described below commit a694ee7b6da82a9d11312d32524bebd70d292a94 Author: scarlin-cloudera <55709772+scarlin-cloud...@users.noreply.github.com> AuthorDate: Mon Jun 20 11:15:04 2022 -0700 HIVE-26208: Exception in Vectorization with Decimal64 to Decimal casting (#3344) The exception was happening because the code that casts the Decimal64 to Decimal was not being added in filtered expressions. Once this code was added, it caused a regression in check_constraint.q. The reason for this was because we do not want to convert Decimal64 to Decimal if the expression explicitly handles decimal64 types. A method was added to these classes that will prevent the conversion in these cases. --- .../Decimal64ColumnArithmeticDecimal64Column.txt | 7 +++- .../Decimal64ColumnArithmeticDecimal64Scalar.txt | 5 +++ ...al64ColumnArithmeticDecimal64ScalarUnscaled.txt | 4 ++ .../ExpressionTemplates/Decimal64ColumnBetween.txt | 5 +++ .../Decimal64ColumnCompareDecimal64Column.txt | 7 +++- .../Decimal64ColumnCompareDecimal64Scalar.txt | 7 +++- .../Decimal64ColumnDivideDecimal64Column.txt | 5 +++ .../Decimal64ColumnDivideDecimal64Scalar.txt | 5 +++ .../ExpressionTemplates/Decimal64ColumnScaleUp.txt | 4 ++ .../Decimal64ScalarArithmeticDecimal64Column.txt | 7 +++- ...al64ScalarArithmeticDecimal64ColumnUnscaled.txt | 5 +++ .../Decimal64ScalarCompareDecimal64Column.txt | 7 +++- ...FilterDecimal64ColumnCompareDecimal64Column.txt | 7 +++- ...FilterDecimal64ColumnCompareDecimal64Scalar.txt | 7 +++- ...FilterDecimal64ScalarCompareDecimal64Column.txt | 7 +++- .../vector/expressions/CastLongToDecimal64.java | 5 +++ .../expressions/ConvertDecimal64ToDecimal.java | 5 +++ .../vector/expressions/Decimal64ColumnInList.java | 5 +++ .../expressions/FilterDecimal64ColumnBetween.java | 5 +++ .../expressions/FilterDecimal64ColumnInList.java | 5 +++ .../FilterDecimal64ColumnNotBetween.java | 5 +++ .../IfExprDecimal64ColumnDecimal64Column.java | 7 +++- .../IfExprDecimal64ColumnDecimal64Scalar.java | 5 +++ .../IfExprDecimal64ScalarDecimal64Column.java | 5 +++ .../IfExprDecimal64ScalarDecimal64Scalar.java | 5 +++ .../exec/vector/expressions/VectorExpression.java | 12 +++++- .../hive/ql/optimizer/physical/Vectorizer.java | 7 +++- .../test/queries/clientpositive/vector_decimal_7.q | 18 +++++++++ .../clientpositive/llap/vector_decimal_7.q.out | 45 ++++++++++++++++++++++ 29 files changed, 211 insertions(+), 12 deletions(-) diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Column.txt index 8f6e6be5903..bd11b5ddd1b 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Column.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Column.txt @@ -177,4 +177,9 @@ public class <ClassName> extends VectorExpression { VectorExpressionDescriptor.InputExpressionType.COLUMN, VectorExpressionDescriptor.InputExpressionType.COLUMN).build(); } -} \ No newline at end of file + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } +} diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Scalar.txt index 5a54fd48820..0bf4e155e39 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Scalar.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64Scalar.txt @@ -209,4 +209,9 @@ public class <ClassName> extends VectorExpression { VectorExpressionDescriptor.InputExpressionType.COLUMN, VectorExpressionDescriptor.InputExpressionType.SCALAR).build(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64ScalarUnscaled.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64ScalarUnscaled.txt index 6573611600b..662baa4edc3 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64ScalarUnscaled.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnArithmeticDecimal64ScalarUnscaled.txt @@ -61,4 +61,8 @@ public class <ClassName> extends <ParentClassName> { .setUnscaled(true).build(); } + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnBetween.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnBetween.txt index 279d23231bc..a437c7b40ce 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnBetween.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnBetween.txt @@ -47,4 +47,9 @@ public class <ClassName> extends <BaseClassName> { ", decimal64Left " + leftValue + ", decimalLeft " + writable1.toString() + ", decimal64Right " + rightValue + ", decimalRight " + writable2.toString(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Column.txt index 127c90529ce..ff1597cce80 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Column.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Column.txt @@ -51,4 +51,9 @@ public class <ClassName> extends <BaseClassName> { VectorExpressionDescriptor.InputExpressionType.COLUMN, VectorExpressionDescriptor.InputExpressionType.COLUMN).build(); } -} \ No newline at end of file + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } +} diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Scalar.txt index 06e3321ab65..1a4d59a7399 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Scalar.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnCompareDecimal64Scalar.txt @@ -63,4 +63,9 @@ public class <ClassName> extends <BaseClassName> { VectorExpressionDescriptor.InputExpressionType.COLUMN, VectorExpressionDescriptor.InputExpressionType.SCALAR).build(); } -} \ No newline at end of file + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } +} diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt index 8cea38a3e7b..962a429debb 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Column.txt @@ -265,4 +265,9 @@ public class <ClassName> extends VectorExpression { VectorExpressionDescriptor.InputExpressionType.COLUMN, VectorExpressionDescriptor.InputExpressionType.COLUMN).build(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt index 8b4eaa63d84..c06222c56ac 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnDivideDecimal64Scalar.txt @@ -263,4 +263,9 @@ public class <ClassName> extends VectorExpression { VectorExpressionDescriptor.InputExpressionType.COLUMN, VectorExpressionDescriptor.InputExpressionType.SCALAR).build(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnScaleUp.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnScaleUp.txt index 6573611600b..662baa4edc3 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnScaleUp.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ColumnScaleUp.txt @@ -61,4 +61,8 @@ public class <ClassName> extends <ParentClassName> { .setUnscaled(true).build(); } + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64Column.txt index 5eaf694577f..2eba7896cfd 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64Column.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64Column.txt @@ -208,4 +208,9 @@ public class <ClassName> extends VectorExpression { VectorExpressionDescriptor.InputExpressionType.SCALAR, VectorExpressionDescriptor.InputExpressionType.COLUMN).build(); } -} \ No newline at end of file + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } +} diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64ColumnUnscaled.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64ColumnUnscaled.txt index 7c54409d58b..bdcfce2fa51 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64ColumnUnscaled.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarArithmeticDecimal64ColumnUnscaled.txt @@ -62,4 +62,9 @@ public class <ClassName> extends <ParentClassName> { VectorExpressionDescriptor.InputExpressionType.COLUMN) .setUnscaled(true).build(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarCompareDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarCompareDecimal64Column.txt index 6526e0c45df..2a6582a9673 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarCompareDecimal64Column.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/Decimal64ScalarCompareDecimal64Column.txt @@ -63,4 +63,9 @@ public class <ClassName> extends <BaseClassName> { VectorExpressionDescriptor.InputExpressionType.SCALAR, VectorExpressionDescriptor.InputExpressionType.COLUMN).build(); } -} \ No newline at end of file + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } +} diff --git a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Column.txt index 6af237d600b..95cae531e7d 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Column.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Column.txt @@ -51,4 +51,9 @@ public class <ClassName> extends <BaseClassName> { VectorExpressionDescriptor.InputExpressionType.COLUMN, VectorExpressionDescriptor.InputExpressionType.COLUMN).build(); } -} \ No newline at end of file + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } +} diff --git a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Scalar.txt b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Scalar.txt index 65737e819f9..4532d70e0db 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Scalar.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ColumnCompareDecimal64Scalar.txt @@ -51,4 +51,9 @@ public class <ClassName> extends <BaseClassName> { VectorExpressionDescriptor.InputExpressionType.COLUMN, VectorExpressionDescriptor.InputExpressionType.SCALAR).build(); } -} \ No newline at end of file + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } +} diff --git a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ScalarCompareDecimal64Column.txt b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ScalarCompareDecimal64Column.txt index 5c7d001814a..32d57e938b6 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ScalarCompareDecimal64Column.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/FilterDecimal64ScalarCompareDecimal64Column.txt @@ -51,4 +51,9 @@ public class <ClassName> extends <BaseClassName> { VectorExpressionDescriptor.InputExpressionType.SCALAR, VectorExpressionDescriptor.InputExpressionType.COLUMN).build(); } -} \ No newline at end of file + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } +} diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastLongToDecimal64.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastLongToDecimal64.java index a474eea80a5..b819f671bfd 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastLongToDecimal64.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastLongToDecimal64.java @@ -180,4 +180,9 @@ public class CastLongToDecimal64 extends VectorExpression { VectorExpressionDescriptor.InputExpressionType.COLUMN); return b.build(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/ConvertDecimal64ToDecimal.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/ConvertDecimal64ToDecimal.java index 04a2cba62ab..c3ce423bc93 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/ConvertDecimal64ToDecimal.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/ConvertDecimal64ToDecimal.java @@ -41,4 +41,9 @@ public class ConvertDecimal64ToDecimal extends FuncLongToDecimal { protected void func(DecimalColumnVector outV, LongColumnVector inV, int i) { outV.vector[i].deserialize64(inV.vector[i], ((Decimal64ColumnVector) inV).scale); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/Decimal64ColumnInList.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/Decimal64ColumnInList.java index 53deaa9ce14..b3ddfab6a52 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/Decimal64ColumnInList.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/Decimal64ColumnInList.java @@ -62,4 +62,9 @@ public class Decimal64ColumnInList extends LongColumnInList { // return null since this will be handled as a special case in VectorizationContext return null; } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnBetween.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnBetween.java index 7a6023739bc..da3e26a2108 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnBetween.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnBetween.java @@ -65,4 +65,9 @@ public class FilterDecimal64ColumnBetween extends FilterLongColumnBetween { VectorExpressionDescriptor.InputExpressionType.SCALAR, VectorExpressionDescriptor.InputExpressionType.SCALAR).build(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnInList.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnInList.java index a75cdbfaa9e..b788ac85fdb 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnInList.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnInList.java @@ -65,4 +65,9 @@ public class FilterDecimal64ColumnInList extends FilterLongColumnInList { sb.append("]"); return sb.toString(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnNotBetween.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnNotBetween.java index d8abf4422c9..d15a8eabbca 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnNotBetween.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/FilterDecimal64ColumnNotBetween.java @@ -65,4 +65,9 @@ public class FilterDecimal64ColumnNotBetween extends FilterLongColumnNotBetween VectorExpressionDescriptor.InputExpressionType.SCALAR, VectorExpressionDescriptor.InputExpressionType.SCALAR).build(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Column.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Column.java index 0cf2ffe999f..0873d1a04e9 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Column.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Column.java @@ -52,4 +52,9 @@ public class IfExprDecimal64ColumnDecimal64Column extends IfExprLongColumnLongCo VectorExpressionDescriptor.InputExpressionType.COLUMN, VectorExpressionDescriptor.InputExpressionType.COLUMN).build(); } -} \ No newline at end of file + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } +} diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Scalar.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Scalar.java index 3933fbe0434..60f90c9d952 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Scalar.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ColumnDecimal64Scalar.java @@ -67,4 +67,9 @@ public class IfExprDecimal64ColumnDecimal64Scalar extends IfExprLongColumnLongSc VectorExpressionDescriptor.InputExpressionType.COLUMN, VectorExpressionDescriptor.InputExpressionType.SCALAR).build(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Column.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Column.java index b7ee9c5d781..7e99321f640 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Column.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Column.java @@ -68,4 +68,9 @@ public class IfExprDecimal64ScalarDecimal64Column extends IfExprLongScalarLongCo VectorExpressionDescriptor.InputExpressionType.SCALAR, VectorExpressionDescriptor.InputExpressionType.COLUMN).build(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Scalar.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Scalar.java index 2ca02eaea34..8afbfa53c45 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Scalar.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IfExprDecimal64ScalarDecimal64Scalar.java @@ -72,4 +72,9 @@ public class IfExprDecimal64ScalarDecimal64Scalar extends IfExprLongScalarLongSc VectorExpressionDescriptor.InputExpressionType.SCALAR, VectorExpressionDescriptor.InputExpressionType.SCALAR).build(); } + + @Override + public boolean shouldConvertDecimal64ToDecimal() { + return false; + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorExpression.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorExpression.java index 1461f35ff76..1aa7397b738 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorExpression.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorExpression.java @@ -436,4 +436,14 @@ public abstract class VectorExpression implements Serializable { } return sb.toString(); } -} \ No newline at end of file + + /** + * By default vector expressions do not handle decimal64 types and should be + * converted into Decimal types if its output cannot handle Decimal64. Decimal64 + * that only deal with Decimal64 types cannot handle conversions so they should + * override this method and return false. + */ + public boolean shouldConvertDecimal64ToDecimal() { + return getOutputDataTypePhysicalVariation() == DataTypePhysicalVariation.NONE; + } +} diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java index ac9dddecbc6..875fe4c53b7 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java @@ -4364,6 +4364,10 @@ public class Vectorizer implements PhysicalPlanResolver { ExprNodeDesc predicateExpr = filterDesc.getPredicate(); VectorExpression vectorPredicateExpr = vContext.getVectorExpression(predicateExpr, VectorExpressionDescriptor.Mode.FILTER); + if (vectorPredicateExpr != null) { + vectorPredicateExpr = fixDecimalDataTypePhysicalVariations(vectorPredicateExpr, + vectorPredicateExpr.getChildExpressions(), vContext); + } vectorFilterDesc.setPredicateExpression(vectorPredicateExpr); return OperatorFactory.getVectorOperator( filterOp.getCompilationOpContext(), filterDesc, @@ -4761,8 +4765,7 @@ public class Vectorizer implements PhysicalPlanResolver { children[i] = newChild; } } - if (parent.getOutputDataTypePhysicalVariation() == DataTypePhysicalVariation.NONE && - !(parent instanceof ConvertDecimal64ToDecimal)) { + if (parent.shouldConvertDecimal64ToDecimal()) { boolean inputArgsChanged = false; DataTypePhysicalVariation[] dataTypePhysicalVariations = parent.getInputDataTypePhysicalVariations(); for (int i = 0; i < children.length; i++) { diff --git a/ql/src/test/queries/clientpositive/vector_decimal_7.q b/ql/src/test/queries/clientpositive/vector_decimal_7.q new file mode 100644 index 00000000000..267cdf9054d --- /dev/null +++ b/ql/src/test/queries/clientpositive/vector_decimal_7.q @@ -0,0 +1,18 @@ +set hive.mapred.mode=nonstrict; +set hive.explain.user=false; +SET hive.vectorized.execution.enabled=true; +set hive.fetch.task.conversion=none; + +DROP TABLE IF EXISTS int_txt; + +CREATE TABLE int_txt (`i` int); + +LOAD DATA LOCAL INPATH '../../data/files/decimal_10_0.txt' OVERWRITE INTO TABLE int_txt; + +select count(*) +from + int_txt + where + (( 1.0 * i) / ( 1.0 * i)) > 1.2; + +DROP TABLE IF EXISTS int_txt; diff --git a/ql/src/test/results/clientpositive/llap/vector_decimal_7.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal_7.q.out new file mode 100644 index 00000000000..b87c51195b0 --- /dev/null +++ b/ql/src/test/results/clientpositive/llap/vector_decimal_7.q.out @@ -0,0 +1,45 @@ +PREHOOK: query: DROP TABLE IF EXISTS int_txt +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE IF EXISTS int_txt +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE int_txt (`i` int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@int_txt +POSTHOOK: query: CREATE TABLE int_txt (`i` int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@int_txt +PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal_10_0.txt' OVERWRITE INTO TABLE int_txt +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@int_txt +POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal_10_0.txt' OVERWRITE INTO TABLE int_txt +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@int_txt +PREHOOK: query: select count(*) +from + int_txt + where + (( 1.0 * i) / ( 1.0 * i)) > 1.2 +PREHOOK: type: QUERY +PREHOOK: Input: default@int_txt +#### A masked pattern was here #### +POSTHOOK: query: select count(*) +from + int_txt + where + (( 1.0 * i) / ( 1.0 * i)) > 1.2 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@int_txt +#### A masked pattern was here #### +0 +PREHOOK: query: DROP TABLE IF EXISTS int_txt +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@int_txt +PREHOOK: Output: default@int_txt +POSTHOOK: query: DROP TABLE IF EXISTS int_txt +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@int_txt +POSTHOOK: Output: default@int_txt