-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Description
Is your feature request related to a problem or challenge?
During the fix for 12655, I found that the root cause was that we parse real number literals as f64. When performing coercion between f32 and f64, it can lead to significant precision problems.
As a solution, I proposed changing the default behavior to parse real number literals as Decimal. This not only helps avoid the precision issues between f32 and f64, but also aligns the default behavior with Postgres and DuckDB.
Postgres
SELECT 1.3 as real , pg_typeof(1.3) as type;
| real | type |
|---|---|
| 1.3 | numeric |
DuckDB
SELECT 1.3 as real , typeof(1.3) as type;
| real | type |
|---|---|
| 1.3 | DECIMAL(2,1) |
DataFusion
SELECT 1.3 as real , arrow_typeof(1.3) as type;
| real | type |
|---|---|
| 1.3 | Float64 |
Fortunately, we have excellent support for Decimal, so the only change we need to make is setting the default value of sql_parser.parse_float_as_decimal to true. However, I believe this change could be breaking, as it alters the current behavior.
Therefore, it would be important to get broader community consensus before proceeding.
cc @alamb @jayzhan211 @jonahgao
Describe the solution you'd like
change sql_parser.parse_float_as_decimal to true
Describe alternatives you've considered
No response
Additional context
No response