[ 
https://issues.apache.org/jira/browse/TAJO-1415?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14499587#comment-14499587
 ] 

ASF GitHub Bot commented on TAJO-1415:
--------------------------------------

Github user jihoonson commented on a diff in the pull request:

    https://github.com/apache/tajo/pull/454#discussion_r28583531
  
    --- Diff: tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java 
---
    @@ -726,47 +747,125 @@ public EvalNode visitWindowFunction(Context ctx, 
Stack<Expr> stack, WindowFuncti
             paramTypes[i] = givenArgs[i].getValueType();
           }
         } else {
    -      if (windowFunc.getSignature().equalsIgnoreCase("rank")) {
    +      if (funcName.equalsIgnoreCase("rank")) {
             givenArgs = sortKeys != null ? sortKeys : new EvalNode[0];
           }
         }
     
    +    // When no window frame is declared in the query, use default value
    +    //    default window frame is RANGE BETWEEN UNBOUNDED PRECEDING AND 
CURRENT ROW
         if (frame == null) {
    -      if (windowSpec.hasOrderBy()) {
    -        frame = new WindowFrame(new 
WindowStartBound(WindowFrameStartBoundType.UNBOUNDED_PRECEDING),
    -            new WindowEndBound(WindowFrameEndBoundType.CURRENT_ROW));
    -      } else if (windowFunc.getSignature().equalsIgnoreCase("row_number")) 
{
    -        frame = new WindowFrame(new 
WindowStartBound(WindowFrameStartBoundType.UNBOUNDED_PRECEDING),
    -            new 
WindowEndBound(WindowFrameEndBoundType.UNBOUNDED_FOLLOWING));
    +      frame = new LogicalWindowFrame(WindowFrameUnit.RANGE, new 
LogicalWindowBound(WindowFrameBoundType.UNBOUNDED_PRECEDING),
    +            new LogicalWindowBound(WindowFrameBoundType.CURRENT_ROW));
    +    }
    +
    +    // set Function Type to determine whether window frame is applied or 
not
    +    //    NONFRAMABLE: builtin window function that works on entire 
partition
    +    //    FRAMABLE: builtin window function that works on window frame
    +    //    AGGREGATION: aggregation functions that work on window frame
    --- End diff --
    
    How about moving these comments to the code where the enum is defined?


> Window frame support
> --------------------
>
>                 Key: TAJO-1415
>                 URL: https://issues.apache.org/jira/browse/TAJO-1415
>             Project: Tajo
>          Issue Type: Sub-task
>          Components: distributed query plan, parser, physical operator, 
> planner/optimizer
>            Reporter: Keuntae Park
>            Assignee: Keuntae Park
>             Fix For: window function
>
>
> We can define frame clause in window definition like
> {code}
> [ RANGE | ROWS ] frame_start
> [ RANGE | ROWS ] BETWEEN frame_start AND frame_end
> {code}
> , where frame_start and frame_end can be one of 
> {code}
> UNBOUNDED PRECEDING
> value PRECEDING
> CURRENT ROW
> value FOLLOWING
> UNBOUNDED FOLLOWING
> {code}
> According to the window functions description of 
> PostgreSQL(http://www.postgresql.org/docs/9.4/static/functions-window.html),
> there are two types of window functions based on window frame support.
> 1) row_number, rank, dense_rank, percent_rank, cume_dist, tile, lag and lead:
> these functions only work within window partition, which means window frame 
> has no effect on these functions.
> 2) first_value, last_value, nth_value, and aggregation function as as window 
> function: these functions should work with rows within window frame.
> Currently, Tajo parser recognize the window frame grammar but windowAggExec 
> does not use that information. 
> It works as if window frame is set as "RANGE BETWEEN UNBOUND PROCEEDING AND 
> UNBOUNDED FOLLOWING", which is different from the default window frame 
> setting of most DBMSs "RANGE BETWEEN UNBOUND PROCEEDING AND CURRENT ROW".
> Following should be done:
> 1) Applying correct default window frame for first_value, last_value, 
> nth_value, and aggregation functions .
> 2) Supporting various window frame expressions.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to