alamb commented on code in PR #16970:
URL: https://github.com/apache/datafusion/pull/16970#discussion_r2263257551


##########
datafusion/physical-expr/src/scalar_function.rs:
##########
@@ -164,6 +175,42 @@ impl fmt::Display for ScalarFunctionExpr {
     }
 }
 
+impl DynEq for ScalarFunctionExpr {
+    fn dyn_eq(&self, other: &dyn Any) -> bool {
+        other.downcast_ref::<Self>().is_some_and(|o| {
+            self.fun.eq(&o.fun)
+                && self.name.eq(&o.name)
+                && self.args.eq(&o.args)
+                && self.return_field.eq(&o.return_field)
+                && self
+                    .config_options
+                    .entries()
+                    .iter()
+                    .sorted_by(|&l, &r| l.key.cmp(&r.key))

Review Comment:
   I found this code while reviewing 
https://github.com/apache/datafusion/pull/17078
   
   It seems to me that adding this sort of all config options to each scalar 
function when looking for equality is going to be quite expensive at planning 
time.
   
   Can we potentially do a pointer comparison first before deciding we need to 
do a deep compare by value?



-- 
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: github-unsubscr...@datafusion.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org
For additional commands, e-mail: github-h...@datafusion.apache.org

Reply via email to