theirix opened a new pull request, #22655:
URL: https://github.com/apache/datafusion/pull/22655

   ## Which issue does this PR close?
   
   - Closes #19057.
   
   ## Rationale for this change
   
   A binary gcd and lcm UDF in the datafusion-functions crate supports only 
Int64, but not Decimals. Adding missing support for decimals.
   
   ## What changes are included in this PR?
   
   1. Updated gcd and lcm functions to add decimal support. The integer path is 
more performant and stays intact. For decimals, the Euclidean algorithm is used 
for GCD
   2. Added coercion rules: casting to decimals if any argument is decimal; 
otherwise, stay with ints as before
   3. Common functionality extracted to `common.rs` to avoid inter-UDF 
dependency
   4. In order to use `calculate_binary_math` for Decimals, updated it to 
accept a target type instead of raw `Decimal128Type::DATA_TYPE` - it causes 
scaling issues for these UDFs, see #19621
   
   
   A bit more on (4). The driving force is this failing example:
   ```sql
   query R
   select gcd(2::decimal(38, 0), 3::decimal(38, 0));
   ----
   1
   ```
   Previously in #19874, I suggested a more complicated solution to extend 
`calculate_binary_math`. However, it only affected gcd/lcm and could be 
considered overkill.  This PR extends these functions with an extra parameter 
`cast_target` for `calculate_binary_decimal_math` to perform a proper cast to 
the actual type used, rather than to the default `Decimal128Type::DATA_TYPE` - 
it is much lighter.
   
   ## Are these changes tested?
   
   - Added unit test for UDFs with decimals for array and scalar paths
   - Added unit tests for the gcd/lcm math itself
   - Added new SLT tests for decimals
   
   ## Are there any user-facing changes?
   
   No breaking api changes.
   
   It's worth noting that it extended decimal support for gcd/lcm


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to