apache / datafusion

Apache DataFusion SQL Query Engine
https://datafusion.apache.org/
Apache License 2.0
5.49k stars 1.02k forks source link

`type_coercion` internal error "cannot find compatible type" #3797

Open andygrove opened 1 year ago

andygrove commented 1 year ago

Describe the bug A clear and concise description of what the bug is.

Internal error: Optimizer rule 'type_coercion' failed due to unexpected error: 
Error during planning: 
Can not find compatible types to compare Boolean 
with [Struct([Field { name: "foo", data_type: Boolean, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: None }]), Utf8]. 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', datafusion/core/src/physical_plan/planner.rs:1987:9

To Reproduce in planner.rs stop skipping failing rules then run cargo test.

    fn make_session_state() -> SessionState {
        let runtime = Arc::new(RuntimeEnv::default());
        let config = SessionConfig::new();
        let config = config.set_bool(crate::config::OPT_OPTIMIZER_SKIP_FAILED_RULES, false);
        SessionState::with_config_rt(config, runtime)
    }

Expected behavior A clear and concise description of what you expected to happen.

Additional context Add any other context about the problem here.

comphead commented 1 year ago

@andygrove what is expected behavior? I can see 1 test in_list_types() failed but this is because the test itself is wrong.

.project(vec![col("c12").lt_eq(lit(0.025)).in_list(list, false)]) lt_eq returns boolean and the projection == boolean in (string, boolean) and expectedly failed.

We can remove this piece of test, as it doesn't make much sense