Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sql odd case of rounding compared to duckdb and postgresql #13781

Open
Tracked by #13811
Omega359 opened this issue Dec 14, 2024 · 1 comment
Open
Tracked by #13811

sql odd case of rounding compared to duckdb and postgresql #13781

Omega359 opened this issue Dec 14, 2024 · 1 comment
Labels
bug Something isn't working

Comments

@Omega359
Copy link
Contributor

Describe the bug

External error: query result mismatch:
[SQL] SELECT + 99 * NULLIF ( 86, - CASE WHEN NOT COUNT ( * ) BETWEEN 84 AND 54 THEN NULLIF ( - 59, COUNT ( * ) ) + CAST ( NULL AS REAL ) END ) / 48 + 27 * COALESCE ( + 76 * 67, 96 * 80 + 38, 13 * COUNT ( * ) )
[Diff] (-expected|+actual)
-   137661
+   137661.38
at test_files/sqlite/random/expr/slt_good_47.slt:10707

datafusion

> SELECT + 99 * NULLIF ( 86, - CASE WHEN NOT COUNT ( * ) BETWEEN 84 AND 54 THEN NULLIF ( - 59, COUNT ( * ) ) + CAST ( NULL AS REAL ) END ) / 48 + 27 * COALESCE ( + 76 * 67, 96 * 80 + 38, 13 * COUNT ( * ) );
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Int64(99) * nullif(Int64(86),(- CASE WHEN NOT count(*) BETWEEN Int64(84) AND Int64(54) THEN nullif(Int64(-59),count(*)) + NULL END)) / Int64(48) + Int64(27) * coalesce(Int64(76) * Int64(67),Int64(96) * Int64(80) + Int64(38),Int64(13) * count(*)) |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 137661.38                                                                                                                                                                                                                                             |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

duckdb and postgres:

D SELECT + 99 * NULLIF ( 86, - CASE WHEN NOT COUNT ( * ) BETWEEN 84 AND 54 THEN NULLIF ( - 59, COUNT ( * ) ) + CAST ( NULL AS REAL ) END ) / 48 + 27 * COALESCE ( + 76 * 67, 96 * 80 + 38, 13 * COUNT ( * ) );
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ (((+(99) * "nullif"(86, -(CASE  WHEN ((NOT (count_star() BETWEEN 84 AND 54))) THEN (("nullif"(-59, count_star()) +.  │
│                                                        double                                                        │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                                           137661.375 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

I cannot determine why df is rounding the result to 2 decimal places.

To Reproduce

sql above.

Expected behavior

results match other databases

Additional context

No response

@Omega359 Omega359 added the bug Something isn't working label Dec 14, 2024
@Omega359
Copy link
Contributor Author

Another version of what I think may be the same thing:

External error: query result mismatch:
[SQL] SELECT DISTINCT - ( 43 ) * 42 + - + NULLIF ( + 90, - 49 - + CAST ( - - 99 AS REAL ) ) / - + 7, 35 + + 55 AS col1
[Diff] (-expected|+actual)
-   -1794
-   90
+   -1793.1428 90
at test_files/sqlite/random/expr/slt_good_42.slt:12794

Datafusion:

> SELECT DISTINCT - ( 43 ) * 42 + - + NULLIF ( + 90, - 49 - + CAST ( - - 99 AS REAL ) ) / - + 7, 35 + + 55 AS col1;
+----------------------------------------------------------------------------------------------+------+
| (- Int64(43)) * Int64(42) + (- nullif(Int64(90),Int64(-49) - (- Int64(-99)))) / (- Int64(7)) | col1 |
+----------------------------------------------------------------------------------------------+------+
| -1793.1428                                                                                   | 90   |
+----------------------------------------------------------------------------------------------+------+

duckdb and postgres:

D SELECT DISTINCT - ( 43 ) * 42 + - + NULLIF ( + 90, - 49 - + CAST ( - - 99 AS REAL ) ) / - + 7, 35 + + 55 AS col1;
┌────────────────────────────────────────────────────────────────────────────────┬───────┐
│ ((-43 * 42) + (-(+("nullif"(+(90), (-49 - +(CAST(99 AS FLOAT)))))) / -(+(7)))) │ col1  │
│                                     double                                     │ int32 │
├────────────────────────────────────────────────────────────────────────────────┼───────┤
│                                                             -1793.14285714285790 │
└────────────────────────────────────────────────────────────────────────────────┴───────┘
``

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant