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

Reply via email to