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