Skip to content

Commit dc445a1

Browse files
authored
fix: LogicalPlan::get_parameter_types fails to return all placeholders (#14312)
1 parent 8d542ec commit dc445a1

File tree

1 file changed

+24
-1
lines changed
  • datafusion/expr/src/logical_plan

1 file changed

+24
-1
lines changed

datafusion/expr/src/logical_plan/plan.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1497,7 +1497,9 @@ impl LogicalPlan {
14971497
(_, Some(dt)) => {
14981498
param_types.insert(id.clone(), Some(dt.clone()));
14991499
}
1500-
_ => {}
1500+
_ => {
1501+
param_types.insert(id.clone(), None);
1502+
}
15011503
}
15021504
}
15031505
Ok(TreeNodeRecursion::Continue)
@@ -4347,4 +4349,25 @@ digraph {
43474349
plan.rewrite_with_subqueries(&mut rewriter).unwrap();
43484350
assert!(!rewriter.filter_found);
43494351
}
4352+
4353+
#[test]
4354+
fn test_with_unresolved_placeholders() {
4355+
let field_name = "id";
4356+
let placeholder_value = "$1";
4357+
let schema = Schema::new(vec![Field::new(field_name, DataType::Int32, false)]);
4358+
4359+
let plan = table_scan(TableReference::none(), &schema, None)
4360+
.unwrap()
4361+
.filter(col(field_name).eq(placeholder(placeholder_value)))
4362+
.unwrap()
4363+
.build()
4364+
.unwrap();
4365+
4366+
// Check that the placeholder parameters have not received a DataType.
4367+
let params = plan.get_parameter_types().unwrap();
4368+
assert_eq!(params.len(), 1);
4369+
4370+
let parameter_type = params.clone().get(placeholder_value).unwrap().clone();
4371+
assert_eq!(parameter_type, None);
4372+
}
43504373
}

0 commit comments

Comments
 (0)