You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I ran across a query where select * from foo where col < 1.3 returns values rendered as 1.3. My guess is that this is either a subtle parsing difference or possibly the result of a differently ordered type cast. If you change the column type from float to double the issue no longer occurs.
Also, just to preempt anyone jumping to floating point values are approximations, I'm fully aware. I know that this issue is likely caused either by the miniscule difference between f32::from_str and f64::from_str or f32 as f64 vs f64 as f32 or some combination thereof. However, given that this is all one parser, it feels like a bug that we've parsed two different values for the same string.
To Reproduce
DataFusion CLI v42.0.0
> create table test(col float);
0 row(s) fetched.
Elapsed 0.008 seconds.
> insert into test values (1.1), (1.2), (1.3), (1.4), (1.5);
+-------+
| count |
+-------+
| 5 |
+-------+
1 row(s) fetched.
Elapsed 0.007 seconds.
> select * from test where col > 1.3;
+-----+
| col |
+-----+
| 1.4 |
| 1.5 |
+-----+
2 row(s) fetched.
Elapsed 0.004 seconds.
> select * from test where col < 1.3
;
+-----+
| col |
+-----+
| 1.1 |
| 1.2 |
| 1.3 |
+-----+
3 row(s) fetched.
Elapsed 0.002 seconds.
Expected behavior
I would expect that 1.3 == 1.3.
Additional context
No response
The text was updated successfully, but these errors were encountered:
I guess datafusion use f64 by default(you need CAST(1.3 AS float)).
#[tokio::test]asyncfndev_test()->Result<()>{let ctx = SessionContext::new();
ctx.sql("create table test(col float);").await?.show().await?;
ctx.sql("insert into test values (1.1), (1.2), (1.3), (1.4), (1.5);").await?.show().await?;
ctx.sql("select * from test where col > CAST(1.3 AS float);").await?.show().await?;
ctx.sql("select * from test where col < CAST(1.3 AS float)").await?.show().await?;Ok(())}
Describe the bug
I ran across a query where
select * from foo where col < 1.3
returns values rendered as1.3
. My guess is that this is either a subtle parsing difference or possibly the result of a differently ordered type cast. If you change the column type fromfloat
todouble
the issue no longer occurs.Also, just to preempt anyone jumping to floating point values are approximations, I'm fully aware. I know that this issue is likely caused either by the miniscule difference between
f32::from_str
andf64::from_str
orf32 as f64
vsf64 as f32
or some combination thereof. However, given that this is all one parser, it feels like a bug that we've parsed two different values for the same string.To Reproduce
Expected behavior
I would expect that
1.3 == 1.3
.Additional context
No response
The text was updated successfully, but these errors were encountered: