alamb commented on code in PR #3662:
URL: https://github.com/apache/arrow-datafusion/pull/3662#discussion_r984479957


##########
datafusion/core/tests/sql/explain_analyze.rs:
##########
@@ -779,23 +777,6 @@ async fn csv_explain() {
 
     // Note can't use `assert_batches_eq` as the plan needs to be
     // normalized for filenames and number of cores
-    let expected = vec![
-        vec![
-            "logical_plan",
-            "Projection: #aggregate_test_100.c1\
-             \n  Filter: CAST(#aggregate_test_100.c2 AS Int32) > Int32(10)\
-             \n    TableScan: aggregate_test_100 projection=[c1, c2], 
partial_filters=[CAST(#aggregate_test_100.c2 AS Int32) > Int32(10)]"

Review Comment:
   The key difference for anyone else following along is that
   
   ```
   partial_filters=[CAST(#aggregate_test_100.c2 AS Int32) > Int32(10)]
   ```
   
   Has become
   
   ```
   partial_filters=[partial_filters=[#aggregate_test_100.c2 > Int8(10)]
   ```



##########
datafusion/core/src/execution/context.rs:
##########
@@ -1466,9 +1466,9 @@ impl SessionState {
         }
 
         let mut rules: Vec<Arc<dyn OptimizerRule + Sync + Send>> = vec![
-            Arc::new(PreCastLitInComparisonExpressions::new()),
             Arc::new(TypeCoercion::new()),
             Arc::new(SimplifyExpressions::new()),
+            Arc::new(UnwrapCastInComparison::new()),

Review Comment:
   this name is much easier to understand for me -- thank you



##########
datafusion/optimizer/src/unwrap_cast_in_comparison.rs:
##########
@@ -540,10 +602,10 @@ mod tests {
         );
         assert_eq!(optimize_test(expr_lt, &schema), expected);
 
-        // INT32(12) IN (.....)
-        let expr_lt = lit(ScalarValue::Int32(Some(12))).in_list(
+        // cast(INT32(12), INT64) IN (.....)
+        let expr_lt = cast(lit(ScalarValue::Int32(Some(12))), 
DataType::Int64).in_list(
             vec![
-                lit(ScalarValue::Int32(Some(12))),
+                lit(ScalarValue::Int64(Some(12))),

Review Comment:
   Is this change (so that all the `IN` list types are the same) because type 
coercion will have already been done when this code is now called?



##########
datafusion/optimizer/src/unwrap_cast_in_comparison.rs:
##########
@@ -15,8 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
-//! Pre-cast literal binary comparison rule can be only used to the binary 
comparison expr.
-//! It can reduce adding the `Expr::Cast` to the expr instead of adding the 
`Expr::Cast` to literal expr.
+//! Unwrap-cast binary comparison rule can be used to the binary/inlist 
comparison expr now, and other type
+//! of expr can be added if needed.
+//! This rule can reduce adding the `Expr::Cast` the expr instead of adding 
the `Expr::Cast` to literal expr.

Review Comment:
   ```suggestion
   //! Unwrap-cast binary comparison rule can be used to  remove `cast` 
functions
   //! from column references.
   //!
   //! The reason for doing so is that it is often much more efficient to 
   //! evaluate a predicate like `c1 < literal` via specialized kernels or 
pruning 
   //! rather than `cast(c1 as TYPE) < literal` 
   ```



-- 
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...@arrow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to