This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit a7a85dd33005870e5d61078b959a7575cc5dbd89
Author: camby <camby...@tencent.com>
AuthorDate: Mon Mar 11 15:45:27 2024 +0800

    [chore](config) support select experimental session variable (#31837)
    
    support select experimental variables:
    
    Before change:
    
    
    Before change:
    select @@experimental_enable_nereids_planner;
    ERROR 1193 (HY000): errCode = 2, detailMessage = Unknown system variable 
'experimental_enable_nereids_planner'
    
    show variables like 'experimental_enable_nereids_planner';
    +-------------------------------------+-------+---------------+---------+
    | Variable_name                       | Value | Default_Value | Changed |
    +-------------------------------------+-------+---------------+---------+
    | experimental_enable_nereids_planner | false | true          | 1       |
    +-------------------------------------+-------+---------------+---------+
    
    After change:
    > select @@experimental_enable_nereids_planner;
    +---------------------------------------+
    | @@experimental_enable_nereids_planner |
    +---------------------------------------+
    |                                     1 |
    +---------------------------------------+
---
 .../main/java/org/apache/doris/qe/VariableMgr.java | 26 +++++++++++++---------
 .../suites/nereids_syntax_p0/system_var.groovy     |  5 +++++
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
index 93c842f0bfa..e83fd474daf 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
@@ -284,7 +284,10 @@ public class VariableMgr {
     //      setVar: variable information that needs to be set
     public static void setVar(SessionVariable sessionVariable, SetVar setVar)
             throws DdlException {
-        VarContext varCtx = setVarPreCheck(setVar);
+        VarContext varCtx = getVarContext(setVar.getVariable());
+        if (varCtx == null) {
+            
ErrorReport.reportDdlException(ErrorCode.ERR_UNKNOWN_SYSTEM_VARIABLE, 
setVar.getVariable());
+        }
         checkUpdate(setVar, varCtx.getFlag());
         setVarInternal(sessionVariable, setVar, varCtx);
     }
@@ -299,7 +302,10 @@ public class VariableMgr {
     // So in this case, we should just ignore this exception and return.
     public static void setVarForNonMasterFE(SessionVariable sessionVariable, 
SetVar setVar)
             throws DdlException {
-        VarContext varCtx = setVarPreCheck(setVar);
+        VarContext varCtx = getVarContext(setVar.getVariable());
+        if (varCtx == null) {
+            
ErrorReport.reportDdlException(ErrorCode.ERR_UNKNOWN_SYSTEM_VARIABLE, 
setVar.getVariable());
+        }
         try {
             checkUpdate(setVar, varCtx.getFlag());
         } catch (DdlException e) {
@@ -311,9 +317,9 @@ public class VariableMgr {
         setVarInternal(sessionVariable, setVar, varCtx);
     }
 
-    @NotNull
-    private static VarContext setVarPreCheck(SetVar setVar) throws 
DdlException {
-        String varName = setVar.getVariable();
+    @Nullable
+    private static VarContext getVarContext(String name) {
+        String varName = name;
         boolean hasExpPrefix = false;
         if (varName.startsWith(VariableAnnotation.EXPERIMENTAL.getPrefix())) {
             varName = 
varName.substring(VariableAnnotation.EXPERIMENTAL.getPrefix().length());
@@ -325,13 +331,13 @@ public class VariableMgr {
         }
         VarContext ctx = ctxByVarName.get(varName);
         if (ctx == null) {
-            
ErrorReport.reportDdlException(ErrorCode.ERR_UNKNOWN_SYSTEM_VARIABLE, 
setVar.getVariable());
+            return null;
         }
         // for non-matched prefix, report an error
         VariableAnnotation varType = 
ctx.getField().getAnnotation(VarAttr.class).varType();
-        if (hasExpPrefix && 
(!setVar.getVariable().startsWith(varType.getPrefix())
+        if (hasExpPrefix && (!name.startsWith(varType.getPrefix())
                 || varType == VariableAnnotation.NONE)) {
-            
ErrorReport.reportDdlException(ErrorCode.ERR_UNKNOWN_SYSTEM_VARIABLE, 
setVar.getVariable());
+            return null;
         }
         return ctx;
     }
@@ -533,7 +539,7 @@ public class VariableMgr {
 
     // Get variable value through variable name, used to satisfy statement 
like `SELECT @@comment_version`
     public static void fillValue(SessionVariable var, VariableExpr desc) 
throws AnalysisException {
-        VarContext ctx = ctxByVarName.get(desc.getName());
+        VarContext ctx = getVarContext(desc.getName());
         if (ctx == null) {
             
ErrorReport.reportAnalysisException(ErrorCode.ERR_UNKNOWN_SYSTEM_VARIABLE, 
desc.getName());
         }
@@ -621,7 +627,7 @@ public class VariableMgr {
 
     // For Nereids optimizer
     public static @Nullable Literal getLiteral(SessionVariable var, String 
name, SetType setType) {
-        VarContext ctx = ctxByVarName.get(name);
+        VarContext ctx = getVarContext(name);
         if (ctx == null) {
             return null;
         }
diff --git a/regression-test/suites/nereids_syntax_p0/system_var.groovy 
b/regression-test/suites/nereids_syntax_p0/system_var.groovy
index a2ab3bfa9ed..242df6ec94e 100644
--- a/regression-test/suites/nereids_syntax_p0/system_var.groovy
+++ b/regression-test/suites/nereids_syntax_p0/system_var.groovy
@@ -46,4 +46,9 @@ suite("nereids_sys_var") {
         sql "select @@session.enable_nereids_planner"
         result ([[true]])
     }
+
+    test {
+        sql "select @@session.experimental_enable_nereids_planner"
+        result ([[true]])
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to