You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2014/10/22 22:19:18 UTC
svn commit: r1633708 - in
/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator:
ASTBuilder.java ASTConverter.java RexNodeConverter.java
Author: hashutosh
Date: Wed Oct 22 20:19:17 2014
New Revision: 1633708
URL: http://svn.apache.org/r1633708
Log:
HIVE-8530 : CBO: Preserve types of literals (John Pullokkaran via Ashutosh Chauhan)
Modified:
hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTBuilder.java
hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTConverter.java
hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java
Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTBuilder.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTBuilder.java?rev=1633708&r1=1633707&r2=1633708&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTBuilder.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTBuilder.java Wed Oct 22 20:19:17 2014
@@ -136,6 +136,10 @@ class ASTBuilder {
}
static ASTNode literal(RexLiteral literal) {
+ return literal(literal, false);
+ }
+
+ static ASTNode literal(RexLiteral literal, boolean useTypeQualInLiteral) {
Object val = null;
int type = 0;
SqlTypeName sqlType = literal.getType().getSqlTypeName();
@@ -147,24 +151,44 @@ class ASTBuilder {
type = HiveParser.BigintLiteral;
break;
case TINYINT:
- val = literal.getValue3();
+ if (useTypeQualInLiteral) {
+ val = literal.getValue3() + "Y";
+ } else {
+ val = literal.getValue3();
+ }
type = HiveParser.TinyintLiteral;
break;
case SMALLINT:
- val = literal.getValue3();
+ if (useTypeQualInLiteral) {
+ val = literal.getValue3() + "S";
+ } else {
+ val = literal.getValue3();
+ }
type = HiveParser.SmallintLiteral;
break;
case INTEGER:
case BIGINT:
- val = literal.getValue3();
+ if (useTypeQualInLiteral) {
+ val = literal.getValue3() + "L";
+ } else {
+ val = literal.getValue3();
+ }
type = HiveParser.BigintLiteral;
break;
case DOUBLE:
- val = literal.getValue3() + "D";
+ if (useTypeQualInLiteral) {
+ val = literal.getValue3() + "D";
+ } else {
+ val = literal.getValue3();
+ }
type = HiveParser.Number;
break;
case DECIMAL:
- val = literal.getValue3() + "BD";
+ if (useTypeQualInLiteral) {
+ val = literal.getValue3() + "BD";
+ } else {
+ val = literal.getValue3();
+ }
type = HiveParser.DecimalLiteral;
break;
case FLOAT:
Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTConverter.java?rev=1633708&r1=1633707&r2=1633708&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTConverter.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTConverter.java Wed Oct 22 20:19:17 2014
@@ -149,8 +149,9 @@ public class ASTConverter {
int i = 0;
for (RexNode r : select.getChildExps()) {
- ASTNode selectExpr = ASTBuilder.selectExpr(r.accept(new RexVisitor(schema)), select
- .getRowType().getFieldNames().get(i++));
+ ASTNode selectExpr = ASTBuilder.selectExpr(r.accept(
+ new RexVisitor(schema, r instanceof RexLiteral)),
+ select.getRowType().getFieldNames().get(i++));
b.add(selectExpr);
}
}
@@ -329,10 +330,16 @@ public class ASTConverter {
static class RexVisitor extends RexVisitorImpl<ASTNode> {
private final Schema schema;
+ private boolean useTypeQualInLiteral;
protected RexVisitor(Schema schema) {
+ this(schema, false);
+ }
+
+ protected RexVisitor(Schema schema, boolean useTypeQualInLiteral) {
super(true);
this.schema = schema;
+ this.useTypeQualInLiteral = useTypeQualInLiteral;
}
@Override
@@ -357,7 +364,7 @@ public class ASTConverter {
@Override
public ASTNode visitLiteral(RexLiteral literal) {
- return ASTBuilder.literal(literal);
+ return ASTBuilder.literal(literal, useTypeQualInLiteral);
}
private ASTNode getPSpecAST(RexWindow window) {
Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java?rev=1633708&r1=1633707&r2=1633708&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java Wed Oct 22 20:19:17 2014
@@ -314,7 +314,7 @@ public class RexNodeConverter {
optiqLiteral = rexBuilder.makeBinaryLiteral(bs);
break;
case SHORT:
- optiqLiteral = rexBuilder.makeExactLiteral(new BigDecimal((Short) value));
+ optiqLiteral = rexBuilder.makeExactLiteral(new BigDecimal((Short) value), optiqDataType);
break;
case INT:
optiqLiteral = rexBuilder.makeExactLiteral(new BigDecimal((Integer) value));