You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by xu...@apache.org on 2015/09/16 21:18:47 UTC

[29/50] [abbrv] hive git commit: HIVE-11817: Window function max NullPointerException (Jimmy, reviewed by Szehon)

HIVE-11817: Window function max NullPointerException (Jimmy, reviewed by Szehon)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/5548a9c3
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/5548a9c3
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/5548a9c3

Branch: refs/heads/spark
Commit: 5548a9c376c2c59cbad9788689e58daa1a11f21e
Parents: 07ca812
Author: Jimmy Xiang <jx...@cloudera.com>
Authored: Mon Sep 14 12:47:18 2015 -0700
Committer: Jimmy Xiang <jx...@cloudera.com>
Committed: Tue Sep 15 09:14:38 2015 -0700

----------------------------------------------------------------------
 .../hadoop/hive/ql/udf/generic/GenericUDAFMax.java  | 16 +++++++++-------
 ql/src/test/queries/clientpositive/windowing_udaf.q |  4 ++++
 .../results/clientpositive/windowing_udaf.q.out     | 12 ++++++++++++
 3 files changed, 25 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/5548a9c3/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFMax.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFMax.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFMax.java
index 33600f2..55a6a62 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFMax.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFMax.java
@@ -287,14 +287,16 @@ public class GenericUDAFMax extends AbstractGenericUDAFResolver {
       // For the case: X following and Y following, process first Y-X results and then insert X nulls.
       // For the case X preceding and Y following, process Y results.
       for (int i = Math.max(0, wFrameDef.getStart().getRelativeOffset()); i < wFrameDef.getEnd().getRelativeOffset(); i++) {
-        s.results.add(r[0]);
+        s.results.add(r == null ? null : r[0]);
         s.numRows++;
-        int fIdx = (Integer) r[1];
-        if (!wFrameDef.isStartUnbounded()
-            && s.numRows + i >= fIdx + wFrameDef.getWindowSize()
-            && !s.maxChain.isEmpty()) {
-          s.maxChain.removeFirst();
-          r = !s.maxChain.isEmpty() ? s.maxChain.getFirst() : r;
+        if (r != null) {
+          int fIdx = (Integer) r[1];
+          if (!wFrameDef.isStartUnbounded()
+              && s.numRows + i >= fIdx + wFrameDef.getWindowSize()
+              && !s.maxChain.isEmpty()) {
+            s.maxChain.removeFirst();
+            r = !s.maxChain.isEmpty() ? s.maxChain.getFirst() : r;
+          }
         }
       }
       for (int i = 0; i < wFrameDef.getStart().getRelativeOffset(); i++) {

http://git-wip-us.apache.org/repos/asf/hive/blob/5548a9c3/ql/src/test/queries/clientpositive/windowing_udaf.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/windowing_udaf.q b/ql/src/test/queries/clientpositive/windowing_udaf.q
index 0173ab7..45c5e5b 100644
--- a/ql/src/test/queries/clientpositive/windowing_udaf.q
+++ b/ql/src/test/queries/clientpositive/windowing_udaf.q
@@ -26,3 +26,7 @@ select s, avg(i) over (partition by t, b order by s) from over10k limit 100;
 select max(i) over w from over10k window w as (partition by f) limit 100;
 
 select s, avg(d) over (partition by t order by f) from over10k limit 100;
+
+select key, max(value) over
+  (order by key rows between 10 preceding and 20 following)
+from src1 where length(key) > 10;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/5548a9c3/ql/src/test/results/clientpositive/windowing_udaf.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/windowing_udaf.q.out b/ql/src/test/results/clientpositive/windowing_udaf.q.out
index 9d50251..298c1dd 100644
--- a/ql/src/test/results/clientpositive/windowing_udaf.q.out
+++ b/ql/src/test/results/clientpositive/windowing_udaf.q.out
@@ -584,3 +584,15 @@ zach zipper	19.822727272727274
 ulysses king	18.273333333333333
 bob king	17.664615384615384
 luke carson	18.02785714285714
+PREHOOK: query: select key, max(value) over
+  (order by key rows between 10 preceding and 20 following)
+from src1 where length(key) > 10
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src1
+#### A masked pattern was here ####
+POSTHOOK: query: select key, max(value) over
+  (order by key rows between 10 preceding and 20 following)
+from src1 where length(key) > 10
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src1
+#### A masked pattern was here ####