This is an automated email from the ASF dual-hosted git repository. starocean999 pushed a commit to branch opt_dict_perf in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/opt_dict_perf by this push: new 767b187892 [fix](nereids)enable fall back to old planner for single query (#19037) 767b187892 is described below commit 767b187892a80ff65da2baa060e43b4dba4cb755 Author: starocean999 <40539150+starocean...@users.noreply.github.com> AuthorDate: Tue Apr 25 12:43:45 2023 +0800 [fix](nereids)enable fall back to old planner for single query (#19037) * pick pr 17994 * enable fall back to old planner for single query --- .../nereids/processor/pre/EliminateLogicalSelectHint.java | 12 ++++++++++++ .../src/main/java/org/apache/doris/qe/SessionVariable.java | 12 ++++++++++++ .../src/main/java/org/apache/doris/qe/StmtExecutor.java | 6 ++++++ 3 files changed, 30 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/EliminateLogicalSelectHint.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/EliminateLogicalSelectHint.java index 418ff5f6d4..a600268437 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/EliminateLogicalSelectHint.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/EliminateLogicalSelectHint.java @@ -72,5 +72,17 @@ public class EliminateLogicalSelectHint extends PlanPreprocessor { } } } + + // if sv set enable_nereids_planner=true and hint set enable_nereids_planner=false, we should set + // enable_fallback_to_original_planner=true and revert it after executing. + // throw exception to fall back to original planner + if (!sessionVariable.isEnableNereidsPlanner()) { + try { + sessionVariable.enableFallbackToOriginalPlannerOnce(); + } catch (Throwable t) { + throw new AnalysisException("failed to set fallback to original planner to true", t); + } + throw new AnalysisException("The nereids is disabled in this sql, fallback to original planner"); + } } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java index 8a585fb5c9..8a4ef0fbc1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java @@ -17,7 +17,10 @@ package org.apache.doris.qe; +import org.apache.doris.analysis.SetVar; +import org.apache.doris.analysis.StringLiteral; import org.apache.doris.common.Config; +import org.apache.doris.common.DdlException; import org.apache.doris.common.io.Text; import org.apache.doris.common.io.Writable; import org.apache.doris.common.util.TimeUtils; @@ -1861,4 +1864,13 @@ public class SessionVariable implements Serializable, Writable { public void setDumpNereidsMemo(boolean dumpNereidsMemo) { this.dumpNereidsMemo = dumpNereidsMemo; } + + public void enableFallbackToOriginalPlannerOnce() throws DdlException { + if (enableFallbackToOriginalPlanner) { + return; + } + setIsSingleSetVar(true); + VariableMgr.setVar(this, + new SetVar(SessionVariable.ENABLE_FALLBACK_TO_ORIGINAL_PLANNER, new StringLiteral("true"))); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index 9bbbb03d7c..6aac61b45c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -489,6 +489,12 @@ public class StmtExecutor implements ProfileWriter { LOG.warn("fall back to legacy planner, because: {}", e.getMessage(), e); parsedStmt = null; context.getState().setNereids(false); + try { + VariableMgr.revertSessionValue(sessionVariable); + } catch (DdlException ex) { + LOG.warn("failed to revert Session value. {}", context.getQueryIdentifier(), ex); + context.getState().setError(ex.getMysqlErrorCode(), ex.getMessage()); + } analyze(context.getSessionVariable().toThrift()); } } catch (Exception e) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org