From 7e0de2b67b89ca439da04fbf8e533e0906171a12 Mon Sep 17 00:00:00 2001 From: Seaven Date: Mon, 18 Mar 2024 13:39:30 +0800 Subject: [PATCH] [BugFix] revert constant function eq other type bug (#42725) Signed-off-by: Seaven (cherry picked from commit 42e87eed23740ab8e27408a61304de8a9964c70e) --- .../sql/optimizer/rewrite/scalar/ImplicitCastRule.java | 3 ++- .../test/java/com/starrocks/sql/plan/ExpressionTest.java | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rewrite/scalar/ImplicitCastRule.java b/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rewrite/scalar/ImplicitCastRule.java index d46bb49f96b70..babedb4b245a0 100644 --- a/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rewrite/scalar/ImplicitCastRule.java +++ b/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rewrite/scalar/ImplicitCastRule.java @@ -134,7 +134,8 @@ public ScalarOperator visitBinaryPredicate(BinaryPredicateOperator predicate, } // we will try cast const operator to variable operator - if (rightChild.isVariable() != leftChild.isVariable()) { + if ((rightChild.isVariable() && leftChild.isConstantRef()) || + (leftChild.isVariable() && rightChild.isConstantRef())) { int constant = leftChild.isVariable() ? 1 : 0; int variable = 1 - constant; Optional optional = optimizeConstantAndVariable(predicate, constant, variable); diff --git a/fe/fe-core/src/test/java/com/starrocks/sql/plan/ExpressionTest.java b/fe/fe-core/src/test/java/com/starrocks/sql/plan/ExpressionTest.java index eb249b916e8e0..cecefb674f424 100644 --- a/fe/fe-core/src/test/java/com/starrocks/sql/plan/ExpressionTest.java +++ b/fe/fe-core/src/test/java/com/starrocks/sql/plan/ExpressionTest.java @@ -1424,4 +1424,11 @@ public void testCastStringDouble() throws Exception { connectContext.getSessionVariable().setCboEqBaseType("VARCHAR"); } } + + @Test + public void testCastConstantFn() throws Exception { + String sql = "select 2011-12-01 = id_date from test_all_type"; + String plan = getFragmentPlan(sql); + assertContains(plan, " CAST(9: id_date AS DOUBLE) = 1998.0"); + } }