You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Feng Zhu (Jira)" <ji...@apache.org> on 2019/11/07 06:46:00 UTC

[jira] [Comment Edited] (CALCITE-3435) floor(mod(33.5,7)) wrongly returns 5.5

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

Feng Zhu edited comment on CALCITE-3435 at 11/7/19 6:45 AM:
------------------------------------------------------------

After investigate some materials, it seems that many products follow the rule in MS-SQL[1][2][3][4].
{code:java}
e1[s1, p1] % e2[s2, p2]

s = max(s1, s2)
p = min(p1-s1, p2-s2) + max(s1, s2){code}
Therefore, I open a PR to implement the logic. Could you take a look when you have time?

[1] MS-SQL: [https://msdn.microsoft.com/en-us/library/ms190476.aspx]
 [2] Apache Hive: [https://cwiki.apache.org/confluence/download/attachments/27362075/Hive_Decimal_Precision_Scale_Support.pdf]
 [3] Apache Spark: [https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/DecimalPrecision.scala]
 [4] Impala: [https://impala.apache.org/docs/build/html/topics/impala_decimal.html]


was (Author: donnyzone):
After investigate some materials, it seems that many products follow the rule in MS-SQL^[1][2][3][4]^.
{code:java}
e1[s1, p1] % e2[s2, p2]

s = max(s1, s2)
p = min(p1-s1, p2-s2) + max(s1, s2){code}
Therefore, I open a PR to implement the logic. Could you take a look when you have time?

[1] MS-SQL: https://msdn.microsoft.com/en-us/library/ms190476.aspx
[2] Apache Hive: https://cwiki.apache.org/confluence/download/attachments/27362075/Hive_Decimal_Precision_Scale_Support.pdf
[3] Apache Spark: https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/DecimalPrecision.scala
[4] Impala: https://impala.apache.org/docs/build/html/topics/impala_decimal.html

> floor(mod(33.5,7)) wrongly returns 5.5
> --------------------------------------
>
>                 Key: CALCITE-3435
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3435
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.16.0, 1.21.0
>            Reporter: jiezouSH
>            Assignee: Feng Zhu
>            Priority: Minor
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> mod's return type is
> chain(DECIMAL_MOD_NULLABLE, ARG1_NULLABLE),
> but mod(33.5,7)'s result is 5.5, not in line with ARG1_NULLABLE.
> This causes floor(mod(33.5,7)) wrongly returns 5.5



--
This message was sent by Atlassian Jira
(v8.3.4#803005)