You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "James Taylor (JIRA)" <ji...@apache.org> on 2014/07/09 19:15:05 UTC

[jira] [Commented] (PHOENIX-1075) Mathematical order of operations are improperly evaluated.

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

James Taylor commented on PHOENIX-1075:
---------------------------------------

Nice catch. There may be something in ANTLR that'll help us with this. Not sure how SQL defines precedence should work. In the meantime, users can always use parenthesis to workaround this. I don't think this should delay the work for the % operator.

> 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
>
> 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)