This is an automated email from the ASF dual-hosted git repository.
xudong963 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new dc445a1509 fix: LogicalPlan::get_parameter_types fails to return all
placeholders (#14312)
dc445a1509 is described below
commit dc445a1509dff4ec78df3a93dd765652abaaa753
Author: Daniel Hegberg <[email protected]>
AuthorDate: Tue Jan 28 08:34:58 2025 -0800
fix: LogicalPlan::get_parameter_types fails to return all placeholders
(#14312)
---
datafusion/expr/src/logical_plan/plan.rs | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/datafusion/expr/src/logical_plan/plan.rs
b/datafusion/expr/src/logical_plan/plan.rs
index 24fb0609b0..7e9c0cb75e 100644
--- a/datafusion/expr/src/logical_plan/plan.rs
+++ b/datafusion/expr/src/logical_plan/plan.rs
@@ -1497,7 +1497,9 @@ impl LogicalPlan {
(_, Some(dt)) => {
param_types.insert(id.clone(),
Some(dt.clone()));
}
- _ => {}
+ _ => {
+ param_types.insert(id.clone(), None);
+ }
}
}
Ok(TreeNodeRecursion::Continue)
@@ -4347,4 +4349,25 @@ digraph {
plan.rewrite_with_subqueries(&mut rewriter).unwrap();
assert!(!rewriter.filter_found);
}
+
+ #[test]
+ fn test_with_unresolved_placeholders() {
+ let field_name = "id";
+ let placeholder_value = "$1";
+ let schema = Schema::new(vec![Field::new(field_name, DataType::Int32,
false)]);
+
+ let plan = table_scan(TableReference::none(), &schema, None)
+ .unwrap()
+ .filter(col(field_name).eq(placeholder(placeholder_value)))
+ .unwrap()
+ .build()
+ .unwrap();
+
+ // Check that the placeholder parameters have not received a DataType.
+ let params = plan.get_parameter_types().unwrap();
+ assert_eq!(params.len(), 1);
+
+ let parameter_type =
params.clone().get(placeholder_value).unwrap().clone();
+ assert_eq!(parameter_type, None);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]