apache / apache/datafusion

Misleading query results due to likely internal parsing differences

Open
#12,655 4 comments 0 reactions 1 assignee Claimed by @doupache View on GitHub
bug
Dominant language
Rust
Stars
9.3k
Forks
2.4k
Avg merge
3d 7h
Merged PRs (30d)
344

Description

### Describe the bug

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_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.