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/10 00:45:25 UTC
svn commit: r1630610 -
/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Author: hashutosh
Date: Thu Oct 9 22:45:25 2014
New Revision: 1630610
URL: http://svn.apache.org/r1630610
Log:
HIVE-8407 : [CBO] Handle filters with non-boolean return type (Ashutosh Chauhan via John Pullokkaran)
Modified:
hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1630610&r1=1630609&r2=1630610&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Thu Oct 9 22:45:25 2014
@@ -12225,7 +12225,7 @@ public class SemanticAnalyzer extends Ba
private RelOptSchema relOptSchema;
private SemanticException semanticException;
private Map<String, PrunedPartitionList> partitionCache;
- private AtomicInteger noColsMissingStats = new AtomicInteger(0);
+ private final AtomicInteger noColsMissingStats = new AtomicInteger(0);
List<FieldSchema> topLevelFieldSchema;
// TODO: Do we need to keep track of RR, ColNameToPosMap for every op or
@@ -12803,6 +12803,14 @@ public class SemanticAnalyzer extends Ba
private RelNode genFilterRelNode(ASTNode filterExpr, RelNode srcRel) throws SemanticException {
ExprNodeDesc filterCondn = genExprNodeDesc(filterExpr, relToHiveRR.get(srcRel));
+ if (filterCondn instanceof ExprNodeConstantDesc &&
+ !filterCondn.getTypeString().equals(serdeConstants.BOOLEAN_TYPE_NAME)) {
+ // queries like select * from t1 where 'foo';
+ // Optiq's rule PushFilterThroughProject chokes on it. Arguably, we can insert a cast to
+ // boolean in such cases, but since Postgres, Oracle and MS SQL server fail on compile time
+ // for such queries, its an arcane corner case, not worth of adding that complexity.
+ throw new OptiqSemanticException("Filter expression with non-boolean return type.");
+ }
ImmutableMap<String, Integer> hiveColNameOptiqPosMap = this.relToHiveColNameOptiqPosMap
.get(srcRel);
RexNode convertedFilterExpr = new RexNodeConverter(cluster, srcRel.getRowType(),