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

James Taylor edited comment on PHOENIX-1987 at 6/12/15 1:22 AM:
----------------------------------------------------------------

Don't override getKeyFormationTraversalIndex. That's only used for cases in 
which a function preserves the original identify of the argument. An example is 
CoerceExpression which changes the type, but preserves the identify. Another is 
the INVERT function which is the same as the original with just the bits 
inverted. That won't be the case for these math functions.

I believe the following query should use a reverse scan:
{code}
SELECT * FROM T ORDER BY TRUNC(k1, 'DAY') DESC, CEIL(k2, 'HOUR')
{code}
All the CEIL, TRUNC, FLOOR, ROUND functions output their argument in ASC order, 
even if they come in DESC. So having an ORDER BY clause like the above, it 
should be order preserving. Is that what you're finding?

FYI, you can check if the order is forward versus reverse by comparing the 
plan.getOrderBy() with OrderBy.FWD_ROW_KEY_ORDER_BY or 
OrderBy.REV_ROW_KEY_ORDER_BY as you can see in some of the tests in 
QueryCompilerTest.


was (Author: jamestaylor):
Don't override getKeyFormationTraversalIndex. That's only used for cases in 
which a function preserves the original identify of the argument. An example is 
CoerceExpression which changes the type, but preserves the identify. Another is 
the INVERT(x) which is the same as the original with just the bits inverted. 
That won't be the case for these math functions.

I believe the following query should use a reverse scan:
{code}
SELECT * FROM T ORDER BY TRUNC(k1, 'DAY') DESC, CEIL(k2, 'HOUR')
{code}
All the CEIL, TRUNC, FLOOR, ROUND functions output their argument in ASC order, 
even if they come in DESC. So having an ORDER BY clause like the above, it 
should be order preserving. Is that what you're finding?

FYI, you can check if the order is forward versus reverse by comparing the 
plan.getOrderBy() with OrderBy.FWD_ROW_KEY_ORDER_BY or 
OrderBy.REV_ROW_KEY_ORDER_BY as you can see in some of the tests in 
QueryCompilerTest.

> 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