diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/WindowingSpec.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/WindowingSpec.java index ef5186a..1cf65cf 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/WindowingSpec.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/WindowingSpec.java @@ -203,9 +203,9 @@ private void applyConstantPartition(WindowSpec wdwSpec) { BETWEEN AND CURRENT ROW * - A Window Specification with an Order Specification and no Window * Frame is interpreted as: - ROW BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW * - A Window Specification with no Order and no Window Frame is interpreted as: - ROW BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING */ private void effectiveWindowFrame(WindowFunctionSpec wFn, WindowSpec wdwSpec) throws SemanticException { @@ -216,7 +216,6 @@ private void effectiveWindowFrame(WindowFunctionSpec wFn, WindowSpec wdwSpec) OrderSpec orderSpec = wdwSpec.getOrder(); if ( wFrame == null ) { if (!supportsWindowing ) { - if ( wFn.getName().toLowerCase().equals(FunctionRegistry.LAST_VALUE_FUNC_NAME) && orderSpec != null ) { /* @@ -227,26 +226,26 @@ private void effectiveWindowFrame(WindowFunctionSpec wFn, WindowSpec wdwSpec) new CurrentRowSpec(), new RangeBoundarySpec(Direction.FOLLOWING, 0) ); + } else { + wFrame = new WindowFrameSpec( + new RangeBoundarySpec(Direction.PRECEDING, BoundarySpec.UNBOUNDED_AMOUNT), + new RangeBoundarySpec(Direction.FOLLOWING, BoundarySpec.UNBOUNDED_AMOUNT) + ); } - else { + } else { + if ( orderSpec == null ) { wFrame = new WindowFrameSpec( new RangeBoundarySpec(Direction.PRECEDING, BoundarySpec.UNBOUNDED_AMOUNT), new RangeBoundarySpec(Direction.FOLLOWING, BoundarySpec.UNBOUNDED_AMOUNT) ); + } else { + wFrame = new WindowFrameSpec( + new RangeBoundarySpec(Direction.PRECEDING, BoundarySpec.UNBOUNDED_AMOUNT), + new CurrentRowSpec() + ); } } - else if ( orderSpec == null ) { - wFrame = new WindowFrameSpec( - new RangeBoundarySpec(Direction.PRECEDING, BoundarySpec.UNBOUNDED_AMOUNT), - new RangeBoundarySpec(Direction.FOLLOWING, BoundarySpec.UNBOUNDED_AMOUNT) - ); - } - else { - wFrame = new WindowFrameSpec( - new ValueBoundarySpec(Direction.PRECEDING, BoundarySpec.UNBOUNDED_AMOUNT), - new CurrentRowSpec() - ); - } + wdwSpec.setWindowFrame(wFrame); } else if ( wFrame.getEnd() == null ) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java index 5cc84a0..93740fa 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java @@ -54,7 +54,6 @@ import org.apache.hadoop.hive.ql.plan.ptf.WindowTableFunctionDef; import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator; import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator.AggregationBuffer; -import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFStreamingEvaluator.SumAvgEnhancer; import org.apache.hadoop.hive.ql.udf.generic.ISupportStreamingModeForWindowing; import org.apache.hadoop.hive.serde2.AbstractSerDe; import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector; @@ -297,7 +296,6 @@ private void initializeWindowingFunctionInfoHelpers() throws SemanticException { WindowTableFunctionDef tabDef = (WindowTableFunctionDef) getTableDef(); for (int i = 0; i < tabDef.getWindowFunctions().size(); i++) { WindowFunctionDef wFn = tabDef.getWindowFunctions().get(i); - GenericUDAFEvaluator fnEval = wFn.getWFnEval(); WindowFunctionInfo wFnInfo = FunctionRegistry.getWindowFunctionInfo(wFn.getName()); boolean supportsWindow = wFnInfo.isSupportsWindow(); windowingFunctionHelpers.put(wFn.getName(), new WindowingFunctionInfoHelper(supportsWindow));