diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExpressionFunctions.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExpressionFunctions.java index 2d2708ac19e5e1..308ec472538f9f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExpressionFunctions.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExpressionFunctions.java @@ -24,7 +24,6 @@ import org.apache.doris.catalog.Type; import org.apache.doris.common.AnalysisException; import org.apache.doris.qe.ConnectContext; -import org.apache.doris.qe.VariableMgr; import org.apache.doris.rewrite.FEFunction; import org.apache.doris.rewrite.FEFunctionList; import org.apache.doris.rewrite.FEFunctions; @@ -110,13 +109,7 @@ public Expr evalExpr(Expr constExpr) { } } } else if (constExpr instanceof SysVariableDesc) { - try { - VariableMgr.fillValue(ConnectContext.get().getSessionVariable(), (SysVariableDesc) constExpr); - return ((SysVariableDesc) constExpr).getLiteralExpr(); - } catch (AnalysisException e) { - LOG.warn("failed to get session variable value: " + ((SysVariableDesc) constExpr).getName()); - return constExpr; - } + return ((SysVariableDesc) constExpr).getLiteralExpr(); } return constExpr; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SysVariableDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SysVariableDesc.java index dd49dccd0e34bc..0ade37866ae63a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SysVariableDesc.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SysVariableDesc.java @@ -115,7 +115,6 @@ public Expr getLiteralExpr() { @Override public Expr getResultValue() throws AnalysisException { - Expr expr = super.getResultValue(); if (!Strings.isNullOrEmpty(name) && VariableVarConverters.hasConverter(name)) { // Return the string type here so that it can correctly match the subsequent function signature. // And we also set `beConverted` to session variable name in StringLiteral, so that it can be cast back @@ -128,7 +127,7 @@ public Expr getResultValue() throws AnalysisException { throw new AnalysisException(e.getMessage()); } } - return expr; + return super.getResultValue(); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/VariableVarConverters.java b/fe/fe-core/src/main/java/org/apache/doris/qe/VariableVarConverters.java index 8cecda19820257..4d883509441ad2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/VariableVarConverters.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/VariableVarConverters.java @@ -28,8 +28,8 @@ * Each converter should put in map (variable name -> converters) and only converts the variable with specified name. * * The converted session variable is a special kind of variable. - * It's real type is int, so for example, when querying `select @@sql_mode`, the return column - * type is "int". + * It's real type is Long or Int, for example, the variable `sql_mode` is Long, when querying `select @@sql_mode`, + * the return column type is String. * But user usually set this variable by string, such as: * `set @@sql_mode = 'STRICT_TRANS_TABLES'` * or diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/SetVariableTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/SetVariableTest.java index f27c2279d6b3a1..700a36ccaf68df 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/SetVariableTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/SetVariableTest.java @@ -58,7 +58,7 @@ public void testSqlMode() throws Exception { stmtExecutor.execute(); Expr expr = stmtExecutor.getParsedStmt().getResultExprs().get(0); Assert.assertTrue(expr instanceof SlotRef); - Assert.assertTrue(expr.getType() == Type.BIGINT); + Assert.assertSame(expr.getType(), Type.VARCHAR); } @Test