jayzhan211 commented on code in PR #13420:
URL: https://github.com/apache/datafusion/pull/13420#discussion_r1845264760


##########
datafusion/sqllogictest/test_files/scalar.slt:
##########
@@ -1864,10 +1864,10 @@ query TT
 EXPLAIN SELECT letter, letter = LEFT(letter2, 1) FROM simple_string;
 ----
 logical_plan
-01)Projection: simple_string.letter, simple_string.letter = 
left(simple_string.letter2, Int64(1))
+01)Projection: simple_string.letter, simple_string.letter = 
left(CAST(simple_string.letter2 AS Utf8View), Int64(1))

Review Comment:
   Check the `fn invoke` function for each function.
   
   For example `lpad`
   ```rust
   fn invoke(&self, args: &[ColumnarValue]) -> Result<ColumnarValue> {
           match args[0].data_type() {
               Utf8 | Utf8View => make_scalar_function(lpad::<i32>, 
vec![])(args),
               LargeUtf8 => make_scalar_function(lpad::<i64>, vec![])(args),
               other => exec_err!("Unsupported data type {other:?} for function 
lpad"),
           }
       }
   ```
   
   It support utf8/utf8view/largeutf8, but not dictionary. You can rewrite it 
like this
   
   ```rust
   fn invoke(&self, args: &[ColumnarValue]) -> Result<ColumnarValue> {
           invoke_inner(args, &args[0].data_type())
   }
   
   fn invoke_inner(args: &[ColumnarValue], data_type: &DataType) -> 
Result<ColumnarValue> {
       match data_type {
           DataType::Dictionary(_, v) => {
               invoke_inner(args, v.as_ref())
           }
           Utf8 | Utf8View => make_scalar_function(lpad::<i32>, vec![])(args),
           LargeUtf8 => make_scalar_function(lpad::<i64>, vec![])(args),
           other => exec_err!("Unsupported data type {other:?} for function 
lpad"),
       }
   }
   ```



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