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 00adad8e2d8d3481c525e3539d67967686fe0b19
Author: Mingyu Chen <[email protected]>
AuthorDate: Sat Apr 20 00:41:56 2024 +0800

    [fix](variable) modify @@auto_commit column type to BIGINT in Nereids. 
#33887
---
 .../main/java/org/apache/doris/qe/VariableMgr.java    | 12 ++++++++++++
 .../java/org/apache/doris/qe/VariableMgrTest.java     | 19 +++++++++++++++++++
 2 files changed, 31 insertions(+)

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 813301e3513..7ca1ad688c5 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
@@ -601,6 +601,18 @@ public class VariableMgr {
     }
 
     private static Literal getLiteral(Object obj, Field field) {
+        VarAttr attr = field.getAnnotation(VarAttr.class);
+        if (!Strings.isNullOrEmpty(attr.convertBoolToLongMethod())) {
+            try {
+                Preconditions.checkArgument(obj instanceof SessionVariable);
+                long val = (Long) 
SessionVariable.class.getDeclaredMethod(attr.convertBoolToLongMethod(), 
Boolean.class)
+                        .invoke(obj, field.getBoolean(obj));
+                return Literal.of(Long.valueOf(val));
+            } catch (Exception e) {
+                // should not happen
+                LOG.warn("failed to convert bool to long for var: {}", 
field.getName(), e);
+            }
+        }
         try {
             switch (field.getType().getSimpleName()) {
                 case "boolean":
diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/VariableMgrTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/qe/VariableMgrTest.java
index 43628cdd05d..b3e5f286108 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/VariableMgrTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/VariableMgrTest.java
@@ -27,10 +27,13 @@ import org.apache.doris.analysis.StringLiteral;
 import org.apache.doris.analysis.VariableExpr;
 import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.Type;
+import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.jmockit.Deencapsulation;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
+import org.apache.doris.nereids.types.BigIntType;
 import org.apache.doris.utframe.UtFrameUtils;
 
 import org.apache.commons.io.FileUtils;
@@ -273,4 +276,20 @@ public class VariableMgrTest {
         Assert.assertTrue(desc.getLiteralExpr() instanceof BoolLiteral);
         Assert.assertEquals(Type.BOOLEAN, desc.getType());
     }
+
+    // @@auto_commit's type should be BIGINT
+    @Test
+    public void testAutoCommitType() throws AnalysisException {
+        // Old planner
+        SessionVariable sv = new SessionVariable();
+        VariableExpr desc = new VariableExpr(SessionVariable.AUTO_COMMIT);
+        VariableMgr.fillValue(sv, desc);
+        Assert.assertEquals(Type.BIGINT, desc.getType());
+        // Nereids
+        sv = new SessionVariable();
+        String name = SessionVariable.AUTO_COMMIT;
+        SetType setType = SetType.SESSION;
+        Literal l = VariableMgr.getLiteral(sv, name, setType);
+        Assert.assertEquals(BigIntType.INSTANCE, l.getDataType());
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to