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/08/08 17:26:07 UTC
svn commit: r1616802 - in /hive/branches/cbo/ql/src:
java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
test/queries/clientpositive/cbo_correctness.q
test/results/clientpositive/cbo_correctness.q.out
Author: hashutosh
Date: Fri Aug 8 15:26:07 2014
New Revision: 1616802
URL: http://svn.apache.org/r1616802
Log:
HIVE-7636 : cbo fails when no projection is required from aggregate function (Ashutosh Chauhan)
Modified:
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q
hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out
Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1616802&r1=1616801&r2=1616802&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Fri Aug 8 15:26:07 2014
@@ -12312,6 +12312,11 @@ public class SemanticAnalyzer extends Ba
rexNodeToPosMap, gbChildProjLst.size()));
}
+ if (gbChildProjLst.isEmpty()) {
+ // This will happen for count(*), in such cases we arbitarily pick
+ // first element from srcRel
+ gbChildProjLst.add(this.m_cluster.getRexBuilder().makeInputRef(srcRel, 0));
+ }
RelNode gbInputRel = HiveProjectRel.create(srcRel, gbChildProjLst, null);
HiveRel aggregateRel = null;
@@ -12539,7 +12544,7 @@ public class SemanticAnalyzer extends Ba
obASTExpr = (ASTNode) obASTExprLst.get(i);
Map<ASTNode, ExprNodeDesc> astToExprNDescMap = TypeCheckProcFactory
.genExprNode(obASTExpr, new TypeCheckCtx(inputRR));
- ExprNodeDesc obExprNDesc = astToExprNDescMap.get((ASTNode) obASTExpr
+ ExprNodeDesc obExprNDesc = astToExprNDescMap.get(obASTExpr
.getChild(0));
if (obExprNDesc == null)
throw new SemanticException("Invalid order by expression: "
@@ -12575,6 +12580,7 @@ public class SemanticAnalyzer extends Ba
if (!newVCLst.isEmpty()) {
List<RexNode> originalInputRefs = Lists.transform(srcRel.getRowType()
.getFieldList(), new Function<RelDataTypeField, RexNode>() {
+ @Override
public RexNode apply(RelDataTypeField input) {
return new RexInputRef(input.getIndex(), input.getType());
}
@@ -12603,6 +12609,7 @@ public class SemanticAnalyzer extends Ba
List<RexNode> obParentRelProjs = Lists.transform(srcRel
.getRowType().getFieldList(),
new Function<RelDataTypeField, RexNode>() {
+ @Override
public RexNode apply(RelDataTypeField input) {
return new RexInputRef(input.getIndex(), input.getType());
}
@@ -13033,6 +13040,7 @@ public class SemanticAnalyzer extends Ba
*/
List<String> oFieldNames = Lists.transform(columnNames,
new Function<String, String>() {
+ @Override
public String apply(String hName) {
return "_o_" + hName;
}
Modified: hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q?rev=1616802&r1=1616801&r2=1616802&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q (original)
+++ hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q Fri Aug 8 15:26:07 2014
@@ -189,9 +189,12 @@ select max(c_int) from v1 group by (c_bo
select count(v1.c_int) from v1 join t2 on v1.c_int = t2.c_int;
select count(v1.c_int) from v1 join v2 on v1.c_int = v2.c_int;
-create view v3 as select v1.value from v1 join t1 on v1.c_boolean = t1.c_boolean;
-select * from v3 limit 3;
+select count(*) from v1 a join v1 b on a.value = b.value;
+create view v3 as select v1.value val from v1 join t1 on v1.c_boolean = t1.c_boolean;
+
+-- view chaining
+select count(val) from v3 where val != '1';
with q1 as ( select key from t1 where key = '1')
select *
from q1
@@ -210,4 +213,7 @@ with q1 as ( select c_int from q2 where
q2 as ( select c_int,c_boolean from v1 where value = '1')
select * from (select c_int from q1) a;
-
+drop view v1;
+drop view v2;
+drop view v3;
+drop view v4;
Modified: hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out?rev=1616802&r1=1616801&r2=1616802&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out (original)
+++ hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out Fri Aug 8 15:26:07 2014
@@ -16013,30 +16013,41 @@ POSTHOOK: Input: default@v1
POSTHOOK: Input: default@v2
#### A masked pattern was here ####
234
-PREHOOK: query: create view v3 as select v1.value from v1 join t1 on v1.c_boolean = t1.c_boolean
+PREHOOK: query: select count(*) from v1 a join v1 b on a.value = b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@v1
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from v1 a join v1 b on a.value = b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@v1
+#### A masked pattern was here ####
+160
+PREHOOK: query: create view v3 as select v1.value val from v1 join t1 on v1.c_boolean = t1.c_boolean
PREHOOK: type: CREATEVIEW
PREHOOK: Input: default@t1
PREHOOK: Input: default@v1
-POSTHOOK: query: create view v3 as select v1.value from v1 join t1 on v1.c_boolean = t1.c_boolean
+POSTHOOK: query: create view v3 as select v1.value val from v1 join t1 on v1.c_boolean = t1.c_boolean
POSTHOOK: type: CREATEVIEW
POSTHOOK: Input: default@t1
POSTHOOK: Input: default@v1
POSTHOOK: Output: default@v3
-PREHOOK: query: select * from v3 limit 3
+PREHOOK: query: -- view chaining
+select count(val) from v3 where val != '1'
PREHOOK: type: QUERY
PREHOOK: Input: default@t1
PREHOOK: Input: default@v1
PREHOOK: Input: default@v3
#### A masked pattern was here ####
-POSTHOOK: query: select * from v3 limit 3
+POSTHOOK: query: -- view chaining
+select count(val) from v3 where val != '1'
POSTHOOK: type: QUERY
POSTHOOK: Input: default@t1
POSTHOOK: Input: default@v1
POSTHOOK: Input: default@v3
#### A masked pattern was here ####
-1
-1
-1
+96
PREHOOK: query: with q1 as ( select key from t1 where key = '1')
select *
from q1
@@ -16104,3 +16115,35 @@ POSTHOOK: Input: default@v1
#### A masked pattern was here ####
1
1
+PREHOOK: query: drop view v1
+PREHOOK: type: DROPVIEW
+PREHOOK: Input: default@v1
+PREHOOK: Output: default@v1
+POSTHOOK: query: drop view v1
+POSTHOOK: type: DROPVIEW
+POSTHOOK: Input: default@v1
+POSTHOOK: Output: default@v1
+PREHOOK: query: drop view v2
+PREHOOK: type: DROPVIEW
+PREHOOK: Input: default@v2
+PREHOOK: Output: default@v2
+POSTHOOK: query: drop view v2
+POSTHOOK: type: DROPVIEW
+POSTHOOK: Input: default@v2
+POSTHOOK: Output: default@v2
+PREHOOK: query: drop view v3
+PREHOOK: type: DROPVIEW
+PREHOOK: Input: default@v3
+PREHOOK: Output: default@v3
+POSTHOOK: query: drop view v3
+POSTHOOK: type: DROPVIEW
+POSTHOOK: Input: default@v3
+POSTHOOK: Output: default@v3
+PREHOOK: query: drop view v4
+PREHOOK: type: DROPVIEW
+PREHOOK: Input: default@v4
+PREHOOK: Output: default@v4
+POSTHOOK: query: drop view v4
+POSTHOOK: type: DROPVIEW
+POSTHOOK: Input: default@v4
+POSTHOOK: Output: default@v4