This is an automated email from the ASF dual-hosted git repository.
starocean999 pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new fa7c1f77803 [fix](nereids)move ReplaceVariableByLiteral rule to
analyze phase (#34023)
fa7c1f77803 is described below
commit fa7c1f778032adb1fb3fff6d439872862a0fe1c7
Author: starocean999 <[email protected]>
AuthorDate: Thu Apr 25 18:51:14 2024 +0800
[fix](nereids)move ReplaceVariableByLiteral rule to analyze phase (#34023)
---
.../doris/nereids/jobs/executor/Analyzer.java | 12 ++++++++
.../nereids/rules/analysis/VariableToLiteral.java | 35 +++++++++++++---------
.../rules/expression/ExpressionNormalization.java | 2 --
.../suites/nereids_p0/test_user_var.groovy | 28 +++++++++++++++++
4 files changed, 61 insertions(+), 16 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java
index 78fdd17a7a6..2432661a568 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java
@@ -41,6 +41,7 @@ import
org.apache.doris.nereids.rules.analysis.ProjectWithDistinctToAggregate;
import org.apache.doris.nereids.rules.analysis.ReplaceExpressionByChildOutput;
import
org.apache.doris.nereids.rules.analysis.ResolveOrdinalInOrderByAndGroupBy;
import org.apache.doris.nereids.rules.analysis.SubqueryToApply;
+import org.apache.doris.nereids.rules.analysis.VariableToLiteral;
import org.apache.doris.nereids.rules.rewrite.JoinCommute;
import org.apache.doris.nereids.rules.rewrite.MergeProjects;
@@ -150,6 +151,17 @@ public class Analyzer extends AbstractBatchJobExecutor {
new NormalizeRepeat()
),
bottomUp(new AdjustAggregateNullableForEmptySet()),
+ // consider sql with user defined var @t_zone
+ // set @t_zone='GMT';
+ // SELECT
+ // DATE_FORMAT(convert_tz(dt, time_zone, @t_zone),'%Y-%m-%d')
day
+ // FROM
+ // t
+ // GROUP BY
+ // 1;
+ // @t_zone must be replaced as 'GMT' before
EliminateGroupByConstant and NormalizeAggregate rule.
+ // So need run VariableToLiteral rule before the two rules.
+ topDown(new VariableToLiteral()),
// run CheckAnalysis before EliminateGroupByConstant in order to
report error message correctly like bellow
// select SUM(lo_tax) FROM lineorder group by 1;
// errCode = 2, detailMessage = GROUP BY expression must not
contain aggregate functions: sum(lo_tax)
diff --git a/regression-test/suites/nereids_p0/test_user_var.groovy
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/VariableToLiteral.java
similarity index 51%
copy from regression-test/suites/nereids_p0/test_user_var.groovy
copy to
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/VariableToLiteral.java
index f54e139632d..912310ea32b 100644
--- a/regression-test/suites/nereids_p0/test_user_var.groovy
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/VariableToLiteral.java
@@ -15,18 +15,25 @@
// specific language governing permissions and limitations
// under the License.
-suite("test_user_var") {
- sql "SET enable_nereids_planner=true"
- sql "SET enable_fallback_to_original_planner=false"
- sql "SET @a1=1, @a2=0, @a3=-1"
- sql "SET @b1=1.1, @b2=0.0, @b3=-1.1"
- sql "SET @c1='H', @c2=''"
- sql "SET @d1=true, @d2=false"
- sql "SET @f1=null"
+package org.apache.doris.nereids.rules.analysis;
- qt_select1 'select @a1, @a2, @a3;'
- qt_select2 'select @b1, @b2, @b3;'
- qt_select3 'select @c1, @c2;'
- qt_select4 'select @d1, @d2;'
- qt_select5 'select @f1, @f2;'
-}
\ No newline at end of file
+import org.apache.doris.nereids.rules.expression.ExpressionRewrite;
+import org.apache.doris.nereids.rules.expression.ExpressionRewriteRule;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleExecutor;
+import
org.apache.doris.nereids.rules.expression.rules.ReplaceVariableByLiteral;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * replace Variable To Literal
+ */
+public class VariableToLiteral extends ExpressionRewrite {
+ public static final List<ExpressionRewriteRule> NORMALIZE_REWRITE_RULES =
+ ImmutableList.of(ReplaceVariableByLiteral.INSTANCE);
+
+ public VariableToLiteral() {
+ super(new ExpressionRuleExecutor(NORMALIZE_REWRITE_RULES));
+ }
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionNormalization.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionNormalization.java
index 6cff3553b43..b6fff54b297 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionNormalization.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionNormalization.java
@@ -23,7 +23,6 @@ import
org.apache.doris.nereids.rules.expression.rules.FoldConstantRule;
import org.apache.doris.nereids.rules.expression.rules.InPredicateDedup;
import
org.apache.doris.nereids.rules.expression.rules.InPredicateToEqualToRule;
import
org.apache.doris.nereids.rules.expression.rules.NormalizeBinaryPredicatesRule;
-import
org.apache.doris.nereids.rules.expression.rules.ReplaceVariableByLiteral;
import
org.apache.doris.nereids.rules.expression.rules.SimplifyArithmeticComparisonRule;
import org.apache.doris.nereids.rules.expression.rules.SimplifyArithmeticRule;
import org.apache.doris.nereids.rules.expression.rules.SimplifyCastRule;
@@ -42,7 +41,6 @@ public class ExpressionNormalization extends
ExpressionRewrite {
// from_unixtime(timestamp, 'yyyyMMdd') to 'yyyyMMdd'
public static final List<ExpressionRewriteRule> NORMALIZE_REWRITE_RULES =
ImmutableList.of(
SupportJavaDateFormatter.INSTANCE,
- ReplaceVariableByLiteral.INSTANCE,
NormalizeBinaryPredicatesRule.INSTANCE,
InPredicateDedup.INSTANCE,
InPredicateToEqualToRule.INSTANCE,
diff --git a/regression-test/suites/nereids_p0/test_user_var.groovy
b/regression-test/suites/nereids_p0/test_user_var.groovy
index f54e139632d..81b611b5c15 100644
--- a/regression-test/suites/nereids_p0/test_user_var.groovy
+++ b/regression-test/suites/nereids_p0/test_user_var.groovy
@@ -18,6 +18,7 @@
suite("test_user_var") {
sql "SET enable_nereids_planner=true"
sql "SET enable_fallback_to_original_planner=false"
+ sql "SET enable_fold_constant_by_be=true;"
sql "SET @a1=1, @a2=0, @a3=-1"
sql "SET @b1=1.1, @b2=0.0, @b3=-1.1"
sql "SET @c1='H', @c2=''"
@@ -29,4 +30,31 @@ suite("test_user_var") {
qt_select3 'select @c1, @c2;'
qt_select4 'select @d1, @d2;'
qt_select5 'select @f1, @f2;'
+
+ sql """drop table if exists dwd_login_ttt;"""
+ sql """CREATE TABLE `dwd_login_ttt` (
+ `game_code` varchar(100) NOT NULL DEFAULT "-" ,
+ `plat_code` varchar(100) NOT NULL DEFAULT "-" ,
+ `userid` varchar(255) NULL DEFAULT "-" ,
+ `dt` datetime NOT NULL,
+ `time_zone` varchar(100) NULL
+ ) ENGINE=OLAP
+ UNIQUE KEY(`game_code`, `plat_code`)
+ DISTRIBUTED BY HASH(`game_code`) BUCKETS 16
+ PROPERTIES("replication_num" = "1");"""
+ sql """drop view if exists dwd_login_ttt_view;"""
+ sql """create view dwd_login_ttt_view as
+ SELECT
game_code,plat_code,time_zone,DATE_FORMAT(convert_tz(dt,time_zone,@t_zone),'%Y-%m-%d')
day,count(distinct userid)
+ from dwd_login_ttt
+ where dt>=convert_tz(@t_day,'Asia/Shanghai',@t_zone)
+ and dt<convert_tz(date_add(@t_day,1),'Asia/Shanghai',@t_zone)
+ GROUP by 1,2,3,4;"""
+ sql """set @t_day='2024-02-01';"""
+ sql """set @t_zone='GMT';"""
+
+ explain {
+ sql("shape plan select * from dwd_login_ttt_view where
day='2024-04-01';")
+ contains "dt < '2024-02-01 16:00:00'"
+ contains "dt >= '2024-01-31 16:00:00'"
+ }
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]