RyanLin5967 opened a new issue, #25137:
URL: https://github.com/apache/datafusion/issues/25137

   ### Describe the bug
   
   
   Currently, `power`/`log` rewrites check the base's nullability but not its 
value, so degenerate bases fold wrong.
   
   
   ### To Reproduce
   
   ```sql
   CREATE VIEW nn AS SELECT * FROM (VALUES (1.0), (0.0), (-2.0), (2.0)) s(a);
   CREATE VIEW nb AS SELECT a FROM (VALUES (1.0),(0.0),(-2.0),(2.0),(NULL)) 
s(a) WHERE a IS NOT NULL;
   CREATE VIEW t  AS SELECT * FROM (VALUES (2.0), (3.0)) s(b);
   
   SELECT a, log(a, 1.0), log(a, a) FROM nn;
   -- 0.0 and 1.0 on all four rows, a = 1.0, 0.0 and -2.0 included
   
   SELECT a, log(a, 1.0), log(a, a) FROM nb;
   -- NaN NaN / -0.0 NaN / NaN NaN / 0.0 1.0, so only the schema's nullability 
differs
   
   SELECT b, power(1.0, log(1.0, b)), log(1.0, power(1.0, b)) FROM t;
   -- both b; should be 1.0 and NaN
   
   SELECT count(*) FROM t WHERE power(1.0, log(1.0, b)) = 2.0;
   -- 1, should be 0
   
   SELECT power(1.0, log(1.0, 2.0)), log(1.0, 2.0);
   -- 1.0 and inf, so the all-literal form is evaluated rather than rewritten
   ```
   
   
   ### Expected behavior
   
   What the nullable-base rows already print: `NaN` where the identity does not 
hold, and `1.0` for `power(1.0, log(1.0, b))`.
   
   
   ### Additional context
   
   The four are `power(a, log(a,b))`, `log(a,1)`, `log(a,a)` and `log(a, 
power(a,b))`, each gated only on `!base_nullable`.
   
   All four hold only for `a > 0, a != 1`.
   
   datafusion 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]

Reply via email to