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

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 05c5ab5490 [fix](planner) only table name should convert to lowercase 
when create table (#17373)
05c5ab5490 is described below

commit 05c5ab5490188f0a84687312d6899fafdc260d65
Author: 谢健 <jianx...@gmail.com>
AuthorDate: Tue Mar 7 14:41:35 2023 +0800

    [fix](planner) only table name should convert to lowercase when create 
table (#17373)
    
    we met error: Unknown column '{}DORIS_DELETE_SIGN{}' in 
'default_cluster:db.table.
    that because when we use alias as the tableName to construct a Table, all 
parts of the name will be lowercase if lowerCaseTableNames = 1.
    To avoid it, we should extract tableName from alias and only lower tableName
---
 .../main/java/org/apache/doris/analysis/TableName.java   | 16 ++++++++++++++++
 .../java/org/apache/doris/analysis/TupleDescriptor.java  |  2 +-
 .../java/org/apache/doris/analysis/SelectStmtTest.java   | 10 +++++-----
 .../java/org/apache/doris/planner/OlapScanNodeTest.java  |  8 ++++++++
 4 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableName.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableName.java
index 9fb383feb9..496b792124 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableName.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableName.java
@@ -31,6 +31,7 @@ import org.apache.doris.common.io.Writable;
 import org.apache.doris.datasource.InternalCatalog;
 import org.apache.doris.persist.gson.GsonUtils;
 
+import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.gson.annotations.SerializedName;
 
@@ -53,6 +54,21 @@ public class TableName implements Writable {
 
     }
 
+    public TableName(String alias) {
+        String[] parts = alias.split("\\.");
+        Preconditions.checkArgument(parts.length > 0, "table name can't be 
empty");
+        tbl = parts[parts.length - 1];
+        if (Env.isStoredTableNamesLowerCase() && !Strings.isNullOrEmpty(tbl)) {
+            tbl = tbl.toLowerCase();
+        }
+        if (parts.length >= 2) {
+            db = parts[parts.length - 2];
+        }
+        if (parts.length >= 3) {
+            ctl = parts[parts.length - 3];
+        }
+    }
+
     public TableName(String ctl, String db, String tbl) {
         if (Env.isStoredTableNamesLowerCase() && !Strings.isNullOrEmpty(tbl)) {
             tbl = tbl.toLowerCase();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/TupleDescriptor.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/TupleDescriptor.java
index b12e1684e6..11375e5a4b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TupleDescriptor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TupleDescriptor.java
@@ -199,7 +199,7 @@ public class TupleDescriptor {
     }
 
     public TableName getAliasAsName() {
-        return (aliases != null) ? new TableName(null, null, aliases[0]) : 
null;
+        return (aliases != null) ? new TableName(aliases[0]) : null;
     }
 
     public TTupleDescriptor toThrift() {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java
index c4f975462f..b8e7bae590 100755
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java
@@ -511,20 +511,20 @@ public class SelectStmtTest {
         String sql1 = "SELECT * FROM db1.table1  LEFT ANTI JOIN db1.table2 ON 
db1.table1.siteid = db1.table2.siteid;";
         String explain = dorisAssert.query(sql1).explainQuery();
         Assert.assertTrue(explain
-                .contains("PREDICATES: 
`default_cluster:db1.table1`.`__DORIS_DELETE_SIGN__` = 0"));
+                .contains("PREDICATES: 
`default_cluster:db1`.`table1`.`__DORIS_DELETE_SIGN__` = 0"));
         Assert.assertTrue(explain
-                .contains("PREDICATES: 
`default_cluster:db1.table2`.`__DORIS_DELETE_SIGN__` = 0"));
+                .contains("PREDICATES: 
`default_cluster:db1`.`table2`.`__DORIS_DELETE_SIGN__` = 0"));
         Assert.assertFalse(explain.contains("other predicates:"));
         String sql2 = "SELECT * FROM db1.table1 JOIN db1.table2 ON 
db1.table1.siteid = db1.table2.siteid;";
         explain = dorisAssert.query(sql2).explainQuery();
         Assert.assertTrue(explain
-                .contains("PREDICATES: 
`default_cluster:db1.table1`.`__DORIS_DELETE_SIGN__` = 0"));
+                .contains("PREDICATES: 
`default_cluster:db1`.`table1`.`__DORIS_DELETE_SIGN__` = 0"));
         Assert.assertTrue(explain
-                .contains("PREDICATES: 
`default_cluster:db1.table2`.`__DORIS_DELETE_SIGN__` = 0"));
+                .contains("PREDICATES: 
`default_cluster:db1`.`table2`.`__DORIS_DELETE_SIGN__` = 0"));
         Assert.assertFalse(explain.contains("other predicates:"));
         String sql3 = "SELECT * FROM db1.table1";
         Assert.assertTrue(dorisAssert.query(sql3).explainQuery()
-                .contains("PREDICATES: 
`default_cluster:db1.table1`.`__DORIS_DELETE_SIGN__` = 0"));
+                .contains("PREDICATES: 
`default_cluster:db1`.`table1`.`__DORIS_DELETE_SIGN__` = 0"));
         String sql4 = " SELECT * FROM db1.table1 table2";
         Assert.assertTrue(dorisAssert.query(sql4).explainQuery()
                 .contains("PREDICATES: `table2`.`__DORIS_DELETE_SIGN__` = 0"));
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/planner/OlapScanNodeTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/planner/OlapScanNodeTest.java
index 186c8e0fe0..22e6cd74f2 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/OlapScanNodeTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/OlapScanNodeTest.java
@@ -27,6 +27,7 @@ import org.apache.doris.catalog.PartitionKey;
 import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.datasource.InternalCatalog;
+import org.apache.doris.qe.GlobalVariable;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -162,4 +163,11 @@ public class OlapScanNodeTest {
             Assert.assertEquals(mod, 2);
         } // CHECKSTYLE IGNORE THIS LINE
     }
+
+    @Test
+    public void testTableNameWithAlias() {
+        GlobalVariable.lowerCaseTableNames = 1;
+        SlotRef slot = new SlotRef(new TableName("DB.TBL"), 
Column.DELETE_SIGN);
+        Assert.assertTrue(slot.getTableName().toString().equals("DB.tbl"));
+    }
 }


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

Reply via email to