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: 谢健 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]