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

James Taylor commented on PHOENIX-1987:
---------------------------------------

I see - good find. Looks like if you override perservesOrder(), then you also 
must override getKeyFormationTraversalIndex. We should either change the 
default implementation for getKeyFormationTraversalIndex() in ScalarFunction to 
this:
{code}
    public int getKeyFormationTraversalIndex() {
        return preservesOrder() == OrderPreserving.NO ? NO_TRAVERSAL : 0;
    }
{code}
Having the default be 0 in this case makes sense, as it's pretty much always 
been the case that the first argument is the one that needs to be considered.

Or at a minimum, add a note to the java doc for 
FunctionExpression.preservesOrder() and for 
ScalarFunction.getKeyFormationTraversalIndex().

Also, any corner case that make these math functions not order preserving (i.e. 
using negative values for first or second argument, etc.)?

> SIGN built-in function should be order preserving
> -------------------------------------------------
>
>                 Key: PHOENIX-1987
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1987
>             Project: Phoenix
>          Issue Type: Sub-task
>            Reporter: James Taylor
>            Assignee: Shuxiong Ye
>             Fix For: 5.0.0, 4.5.0, 4.4.1
>
>         Attachments: 
> 0001-PHOENIX-1987-SIGN-built-in-function-should-be-order_v2.patch, 
> 0001-PHOENIX-1987-fixing-getKeyFormationTraversalIndex-in-SIGN-function.patch
>
>
> The SIGN built-in function preserves the order of its input. This needs to be 
> explicitly implemented in SignFunction by implementing the following method:
> {code}
>     public OrderPreserving preservesOrder() {
>         return OrderPreserving.YES;
>     }
> {code}
> This will allow certain optimizations reducing the amount of memory and/or 
> buffering that is required if SIGN is used in a GROUP BY or ORDER BY clause.



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

Reply via email to