[ 
https://issues.apache.org/jira/browse/PHOENIX-1075?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kyle Buzsaki updated PHOENIX-1075:
----------------------------------

    Attachment: PHOENIX-1075.patch

Patch fixing the operator precedence issue attached.

As you suggested, it seems the best fix is to have them as the same rule and 
then determine the type of the expression based on which operator was used.

I've also added an additional integration test checking for this in 
org.apache.phoenix.end2end.ArithmeticQueryIT

> Mathematical order of operations are improperly evaluated.
> ----------------------------------------------------------
>
>                 Key: PHOENIX-1075
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1075
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Kyle Buzsaki
>         Attachments: PHOENIX-1075.patch
>
>
> The root of the issue is that, as things are now, multiplication and division 
> don't actually have the same precedence in the grammar. Division is always 
> grouped more tightly than multiplication and is evaluated first. Most of the 
> time, this doesn't matter, but combined with the truncating integer division 
> used by LongDivideExpression it produces some unexpected and probably wrong 
> behavior. Below is an example:
> Expression: 6 * 4 / 3
> Evaluating left to right, this should reduce as follows:
> 6 * 4 / 3 
> 24 / 3
> 8
> As phoenix is now, division has a higher precedence than multiplication. 
> Therefore, the resulting expression tree looks like this:
> !http://i.imgur.com/2Zzsfpy.png!
> Because integer division in truncating, when the division evaluates the 
> expression tree looks like this:
> !http://i.imgur.com/3cLGD0e.png!
> Which then evaluates to 6.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to