You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ag...@apache.org on 2022/10/03 23:32:28 UTC

[arrow-datafusion] branch master updated: Improve docstrings in bianry_rule.rs (#3687)

This is an automated email from the ASF dual-hosted git repository.

agrove pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/master by this push:
     new df9c4189b Improve docstrings in bianry_rule.rs (#3687)
df9c4189b is described below

commit df9c4189bac84af949951d9a59960a4bf7d12521
Author: Andrew Lamb <an...@nerdnetworks.org>
AuthorDate: Mon Oct 3 19:32:22 2022 -0400

    Improve docstrings in bianry_rule.rs (#3687)
---
 datafusion/expr/src/binary_rule.rs | 39 ++++++++++++++++++++++++++++----------
 1 file changed, 29 insertions(+), 10 deletions(-)

diff --git a/datafusion/expr/src/binary_rule.rs b/datafusion/expr/src/binary_rule.rs
index 77e02cf3a..06240b615 100644
--- a/datafusion/expr/src/binary_rule.rs
+++ b/datafusion/expr/src/binary_rule.rs
@@ -74,9 +74,14 @@ pub fn binary_operator_data_type(
 /// Coercion rules for all binary operators. Returns the output type
 /// of applying `op` to an argument of `lhs_type` and `rhs_type`.
 ///
-/// TODO this function is trying to serve two purposes at once; it determines the result type
-/// of the binary operation and also determines how the inputs can be coerced but this
-/// results in inconsistencies in some cases (particular around date + interval)
+/// Returns None if no suitable type can be found.
+///
+/// TODO this function is trying to serve two purposes at once; it
+/// determines the result type of the binary operation and also
+/// determines how the inputs can be coerced but this results in
+/// inconsistencies in some cases (particular around date + interval)
+/// when the input argument types do not match the output argument
+/// types
 ///
 /// Tracking issue is https://github.com/apache/arrow-datafusion/issues/3419
 pub fn coerce_types(
@@ -146,6 +151,8 @@ pub fn coerce_types(
     }
 }
 
+/// Returns the output type of applying bitwise operations such as
+/// `&`, `|`, or `xor`to arguments of `lhs_type` and `rhs_type`.
 fn bitwise_coercion(left_type: &DataType, right_type: &DataType) -> Option<DataType> {
     use arrow::datatypes::DataType::*;
 
@@ -167,7 +174,9 @@ fn bitwise_coercion(left_type: &DataType, right_type: &DataType) -> Option<DataT
     }
 }
 
-/// Get the coerced data type for comparison operations such as `eq`, `not eq`, `lt`, `lteq`, `gt`, and `gteq`.
+/// Returns the output type of applying comparison operations such as
+/// `eq`, `not eq`, `lt`, `lteq`, `gt`, and `gteq` to arguments
+/// of `lhs_type` and `rhs_type`.
 pub fn comparison_coercion(lhs_type: &DataType, rhs_type: &DataType) -> Option<DataType> {
     if lhs_type == rhs_type {
         // same type => equality is possible
@@ -181,6 +190,9 @@ pub fn comparison_coercion(lhs_type: &DataType, rhs_type: &DataType) -> Option<D
         .or_else(|| string_numeric_coercion(lhs_type, rhs_type))
 }
 
+/// Returns the output type of applying numeric operations such as `=`
+/// to arguments `lhs_type` and `rhs_type` if one is numeric and one
+/// is `Utf8`/`LargeUtf8`.
 fn string_numeric_coercion(lhs_type: &DataType, rhs_type: &DataType) -> Option<DataType> {
     use arrow::datatypes::DataType::*;
     match (lhs_type, rhs_type) {
@@ -192,6 +204,8 @@ fn string_numeric_coercion(lhs_type: &DataType, rhs_type: &DataType) -> Option<D
     }
 }
 
+/// Returns the output type of applying numeric operations such as `=`
+/// to arguments `lhs_type` and `rhs_type` if both are numeric
 fn comparison_binary_numeric_coercion(
     lhs_type: &DataType,
     rhs_type: &DataType,
@@ -207,7 +221,7 @@ fn comparison_binary_numeric_coercion(
     }
 
     // these are ordered from most informative to least informative so
-    // that the coercion removes the least amount of information
+    // that the coercion does not lose information via truncation
     match (lhs_type, rhs_type) {
         // support decimal data type for comparison operation
         (d1 @ Decimal128(_, _), d2 @ Decimal128(_, _)) => get_wider_decimal_type(d1, d2),
@@ -227,6 +241,8 @@ fn comparison_binary_numeric_coercion(
     }
 }
 
+/// Returns the output type of applying numeric operations such as `=`
+/// to a decimal type `decimal_type` and `other_type`
 fn get_comparison_common_decimal_type(
     decimal_type: &DataType,
     other_type: &DataType,
@@ -252,9 +268,10 @@ fn get_comparison_common_decimal_type(
     }
 }
 
-// Returns a `DataType::Decimal128` that can store any value from either
-// `lhs_decimal_type` and `rhs_decimal_type`
-// The result decimal type is (max(s1, s2) + max(p1-s1, p2-s2), max(s1, s2)).
+/// Returns a `DataType::Decimal128` that can store any value from either
+/// `lhs_decimal_type` and `rhs_decimal_type`
+///
+/// The result decimal type is `(max(s1, s2) + max(p1-s1, p2-s2), max(s1, s2))`.
 fn get_wider_decimal_type(
     lhs_decimal_type: &DataType,
     rhs_type: &DataType,
@@ -270,8 +287,8 @@ fn get_wider_decimal_type(
     }
 }
 
-// Convert the numeric data type to the decimal data type.
-// Now, we just support the signed integer type and floating-point type.
+/// Convert the numeric data type to the decimal data type.
+/// Now, we just support the signed integer type and floating-point type.
 fn coerce_numeric_type_to_decimal(numeric_type: &DataType) -> Option<DataType> {
     match numeric_type {
         DataType::Int8 => Some(DataType::Decimal128(3, 0)),
@@ -285,6 +302,8 @@ fn coerce_numeric_type_to_decimal(numeric_type: &DataType) -> Option<DataType> {
     }
 }
 
+/// Returns the output type of applying mathematics operations such as
+/// `+` to arguments of `lhs_type` and `rhs_type`.
 fn mathematics_numerical_coercion(
     mathematics_op: &Operator,
     lhs_type: &DataType,