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


##########
datafusion/expr/src/expr.rs:
##########
@@ -1654,28 +1654,42 @@ fn fmt_function(
     write!(f, "{}({}{})", fun, distinct_str, args.join(", "))
 }
 
-fn create_function_name(fun: &str, distinct: bool, args: &[Expr]) -> 
Result<String> {
-    let names: Vec<String> = 
args.iter().map(create_name).collect::<Result<_>>()?;
-    let distinct_str = match distinct {
-        true => "DISTINCT ",
-        false => "",
-    };
-    Ok(format!("{}({}{})", fun, distinct_str, names.join(",")))
+fn write_function_name<'a>(
+    w: &'a mut (dyn Write + 'a),

Review Comment:
   Rather than using dynamic dispatch I think you can make this just a normal 
generic function and make the code simpler and likely more performant
   
   Something like
   ```rust
   fn write_function_name<W: Write>(
       w: &mut W,
   ```
   
   I actually tried it locally and it seems to work well. Here is a PR 
https://github.com/erratic-pattern/arrow-datafusion/pull/1 to this branch for 
your consideration



##########
datafusion/expr/src/expr.rs:
##########
@@ -1717,111 +1732,118 @@ pub(crate) fn create_name(e: &Expr) -> Result<String> 
{
                 if let Some(char) = escape_char {
                     format!("CHAR '{char}'")
                 } else {
-                    "".to_string()
+                    "".to_owned()

Review Comment:
   same comment as above -- let's get rid of all the extra allocations



##########
datafusion/expr/src/expr.rs:
##########
@@ -1693,10 +1708,9 @@ pub(crate) fn create_name(e: &Expr) -> Result<String> {
                 if let Some(char) = escape_char {
                     format!("CHAR '{char}'")
                 } else {
-                    "".to_string()
+                    "".to_owned()

Review Comment:
   I think you could avoid this allocation (and the `format!` above it). 



-- 
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