RyanLin5967 opened a new issue, #25135:
URL: https://github.com/apache/datafusion/issues/25135
### Describe the bug
Currently, `date_part`'s preimage rewrite builds a NULL bound for an
out-of-range January 1, so the comparison is NULL on every row.
### To Reproduce
```sql
CREATE VIEW t AS SELECT * FROM (VALUES
('2020-06-01T12:00:00'::timestamp),
('1995-06-01T12:00:00'::timestamp)) s(ts);
SELECT count(*) FROM t WHERE EXTRACT(YEAR FROM ts) < 9999;
-- 0, should be 2
SELECT count(*) FROM t WHERE EXTRACT(YEAR FROM ts) >= 1000 OR EXTRACT(YEAR
FROM ts) = 2020;
-- 1, should be 2, so a wrong non-zero count is reachable too
SELECT CASE WHEN EXTRACT(YEAR FROM ts) < 9999 THEN 'ok' ELSE 'BAD' END FROM
t;
-- BAD BAD, so it is not confined to WHERE
SELECT EXTRACT(YEAR FROM ts), EXTRACT(YEAR FROM ts) < 9999 FROM t;
-- 2020 and 1995, both NULL
SELECT count(*) FROM t WHERE EXTRACT(YEAR FROM ts) <= 2262;
-- 0, since <= and > take January 1 of the next year as the bound
SELECT count(*) FROM t WHERE EXTRACT(YEAR FROM ts) >= 1678;
-- 2, so a bound inside 1678..2261 is unaffected
SELECT count(*) FROM (SELECT arrow_cast(ts,'Timestamp(Microsecond, None)')
AS ts FROM t)
WHERE EXTRACT(YEAR FROM ts) < 9999;
-- 2, so only the nanosecond unit's narrower range reaches it
```
### Expected behavior
Each count returns 2 and the `CASE` returns `ok ok`. The years the
projection prints are the ones the comparison should test.
### Additional context
`date_to_scalar` returns `Some(TimestampNanosecond(None, tz))`, so the NULL
passes the guard.
`America/Lima` reaches it at 1990 and 1994, where Peru began DST at midnight
on January 1.
datafusion-cli 55.0.0
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]