wolffcm opened a new issue, #5996:
URL: https://github.com/apache/arrow-datafusion/issues/5996

   ### Describe the bug
   
   When calling the `power` function with a constant in the second argument, I 
get an error:
   ```
   Internal error: Optimizer rule 'simplify_expressions' failed due to 
unexpected error: Internal error: The expr has more than one schema, could not 
determine data type. This was likely caused by a bug in DataFusion's code and 
we would welcome that you file an bug report in our issue tracker.
   ```
   
   ### To Reproduce
   
   with `datafusion-cli`:
   ```sql
   select power(f, 100) from (values(10.0)) as t(f);
   ```
   I was also able to reproduce this with a unit test in 
`datafusion/optimizer/src/simplify_expressions/simlify_exprs.rs`:
   ```rust
       #[test]
       fn simplify_power() -> Result<()> {
           let schema = Schema::new(vec![
               Field::new("f", DataType::Float64, false),
           ]);
           let table_scan = table_scan(Some("test"), &schema, None)
               .expect("creating scan")
               .build()
               .expect("building plan");
   
           let plan = LogicalPlanBuilder::from(table_scan)
               .project(vec![call_fn("power", vec![col("f"), lit(1)])?])?
               .build()?;
           let rule = SimplifyExpressions::new();
           let _optimized_plan = rule
               .try_optimize(&plan, &OptimizerContext::new())
               .unwrap()
               .expect("failed to optimize plan");
           Ok(())
       }
   ```
   
   ### Expected behavior
   
    Calling `power` with a constant is a reasonable thing to want to do, so I 
would expect this to work.
   
   ### Additional context
   
   Unless the optimizer is configured with `skip_failed_rules` set to `false`, 
this could manifest in other, or the query might succeed just fine.
   
   Related issue: https://github.com/apache/arrow-datafusion/issues/4685
   
   I found this specifically when invoking `power` but this same issue probably 
occurs when simplifying other expressions.
   
   In IOx we want to run with `skip_failed_rules` set to `false` specifically 
so we can return reasonable error messages to the user: 
https://github.com/influxdata/influxdb_iox/issues/7330
   
   This test failure seems to happen in `simpl_pow` when trying to get the data 
type of the exponent argument:
   
https://github.com/apache/arrow-datafusion/blob/fcd8b899e2a62f798413c536f47078289ece9d05/datafusion/optimizer/src/simplify_expressions/utils.rs#L403
   And then the `SimplifyContext` can't get the type because there is "more 
than one schema":
   
https://github.com/apache/arrow-datafusion/blob/fcd8b899e2a62f798413c536f47078289ece9d05/datafusion/optimizer/src/simplify_expressions/context.rs#L135


-- 
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]

Reply via email to