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/07 17:24:40 UTC
svn commit: r1629914 - in /hive/trunk/ql/src:
java/org/apache/hadoop/hive/ql/plan/ExprNodeDescUtils.java
test/queries/clientpositive/sum_expr_with_order.q
test/results/clientpositive/sum_expr_with_order.q.out
Author: hashutosh
Date: Tue Oct 7 15:24:39 2014
New Revision: 1629914
URL: http://svn.apache.org/r1629914
Log:
HIVE-8272 : Query with particular decimal expression causes NPE during execution initialization (Jason Dere via Ashutosh Chauhan)
Added:
hive/trunk/ql/src/test/queries/clientpositive/sum_expr_with_order.q
hive/trunk/ql/src/test/results/clientpositive/sum_expr_with_order.q.out
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDescUtils.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDescUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDescUtils.java?rev=1629914&r1=1629913&r2=1629914&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDescUtils.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDescUtils.java Tue Oct 7 15:24:39 2014
@@ -212,7 +212,14 @@ public class ExprNodeDescUtils {
if (source instanceof ExprNodeGenericFuncDesc) {
// all children expression should be resolved
ExprNodeGenericFuncDesc function = (ExprNodeGenericFuncDesc) source.clone();
- function.setChildren(backtrack(function.getChildren(), current, terminal));
+ List<ExprNodeDesc> children = backtrack(function.getChildren(), current, terminal);
+ for (ExprNodeDesc child : children) {
+ if (child == null) {
+ // Could not resolve all of the function children, fail
+ return null;
+ }
+ }
+ function.setChildren(children);
return function;
}
if (source instanceof ExprNodeColumnDesc) {
@@ -222,7 +229,11 @@ public class ExprNodeDescUtils {
if (source instanceof ExprNodeFieldDesc) {
// field expression should be resolved
ExprNodeFieldDesc field = (ExprNodeFieldDesc) source.clone();
- field.setDesc(backtrack(field.getDesc(), current, terminal));
+ ExprNodeDesc fieldDesc = backtrack(field.getDesc(), current, terminal);
+ if (fieldDesc == null) {
+ return null;
+ }
+ field.setDesc(fieldDesc);
return field;
}
// constant or null expr, just return
Added: hive/trunk/ql/src/test/queries/clientpositive/sum_expr_with_order.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/sum_expr_with_order.q?rev=1629914&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/sum_expr_with_order.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/sum_expr_with_order.q Tue Oct 7 15:24:39 2014
@@ -0,0 +1,5 @@
+
+select
+cast(sum(key)*100 as decimal(15,3)) as c1
+from src
+order by c1;
Added: hive/trunk/ql/src/test/results/clientpositive/sum_expr_with_order.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/sum_expr_with_order.q.out?rev=1629914&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/sum_expr_with_order.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/sum_expr_with_order.q.out Tue Oct 7 15:24:39 2014
@@ -0,0 +1,15 @@
+PREHOOK: query: select
+cast(sum(key)*100 as decimal(15,3)) as c1
+from src
+order by c1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: select
+cast(sum(key)*100 as decimal(15,3)) as c1
+from src
+order by c1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+13009100