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