Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.16.0
-
None
-
None
Description
1. For the case when a query contains filter with a cast which cannot be done with is null, the query does not fail:
select * from dfs.tmp.`a.json` as t where cast(t.a as integer) is null; +---+ | a | +---+ +---+ No rows selected (0.142 seconds)
where
cat /tmp/a.json {"a":"aaa"}
But for the case when this condition is specified in project, query, as it is expected, fails:
select cast(t.a as integer) is null from dfs.tmp.`a.json` t; Error: SYSTEM ERROR: NumberFormatException: aaa Fragment 0:0 Please, refer to logs for more information. [Error Id: ed3982ce-a12f-4d63-bc6e-cafddf28cc24 on user515050-pc:31010] (state=,code=0)
This is a regression, for Drill 1.15 the first and the second queries are failed:
select * from dfs.tmp.`a.json` as t where cast(t.a as integer) is null; Error: SYSTEM ERROR: NumberFormatException: aaa Fragment 0:0 Please, refer to logs for more information. [Error Id: 2f878f15-ddaa-48cd-9dfb-45c04db39048 on user515050-pc:31010] (state=,code=0)
2. For the case when drill.exec.functions.cast_empty_string_to_null is enabled, this issue will cause wrong results:
alter system set `drill.exec.functions.cast_empty_string_to_null`=true; select * from dfs.tmp.`a1.json` t where cast(t.a as integer) is null; +---+ | a | +---+ +---+ No rows selected (1.759 seconds)
where
cat /tmp/a1.json {"a":"1"} {"a":""}
Result for Drill 1.15.0:
select * from dfs.tmp.`a1.json` t where cast(t.a as integer) is null; +----+ | a | +----+ | | +----+ 1 row selected (1.724 seconds)
Attachments
Issue Links
- is caused by
-
CALCITE-2929 Simplification of IS NULL checks are incorrectly assuming that CAST-s are possible
- Closed
- is part of
-
DRILL-7200 Update Calcite to 1.19.0 / 1.20.0
- Resolved