[fix](nereids)move ReplaceVariableByLiteral rule to analyze phase (#33997)
This commit is contained in:
@ -44,6 +44,7 @@ import org.apache.doris.nereids.rules.analysis.ProjectToGlobalAggregate;
|
||||
import org.apache.doris.nereids.rules.analysis.ProjectWithDistinctToAggregate;
|
||||
import org.apache.doris.nereids.rules.analysis.ReplaceExpressionByChildOutput;
|
||||
import org.apache.doris.nereids.rules.analysis.SubqueryToApply;
|
||||
import org.apache.doris.nereids.rules.analysis.VariableToLiteral;
|
||||
import org.apache.doris.nereids.rules.rewrite.MergeProjects;
|
||||
import org.apache.doris.nereids.rules.rewrite.SemiJoinCommute;
|
||||
import org.apache.doris.nereids.rules.rewrite.SimplifyAggGroupBy;
|
||||
@ -157,6 +158,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)
|
||||
|
||||
@ -0,0 +1,39 @@
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
package org.apache.doris.nereids.rules.analysis;
|
||||
|
||||
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(bottomUp(ReplaceVariableByLiteral.INSTANCE));
|
||||
|
||||
public VariableToLiteral() {
|
||||
super(new ExpressionRuleExecutor(NORMALIZE_REWRITE_RULES));
|
||||
}
|
||||
}
|
||||
@ -24,7 +24,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;
|
||||
@ -43,7 +42,6 @@ public class ExpressionNormalization extends ExpressionRewrite {
|
||||
// from_unixtime(timestamp, 'yyyyMMdd') to 'yyyyMMdd'
|
||||
public static final List<ExpressionRewriteRule> NORMALIZE_REWRITE_RULES = ImmutableList.of(
|
||||
bottomUp(
|
||||
ReplaceVariableByLiteral.INSTANCE,
|
||||
SupportJavaDateFormatter.INSTANCE,
|
||||
NormalizeBinaryPredicatesRule.INSTANCE,
|
||||
InPredicateDedup.INSTANCE,
|
||||
|
||||
Reference in New Issue
Block a user