This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 0bf6309541b2e891f0fa689672248cc080066c5f Author: daidai <[email protected]> AuthorDate: Tue Aug 15 10:35:22 2023 +0800 [fix](createTableStmt)fix bug that createTableStmt toSql (#22750) Issue Number: https://github.com/apache/doris/issues/22749 --- .../org/apache/doris/analysis/CreateTableStmt.java | 3 + .../java/org/apache/doris/analysis/KeysDesc.java | 2 +- .../apache/doris/analysis/CreateTableStmtTest.java | 66 +++++++++++++++++++++- 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java index 8aab65cd6f..6a6ff655fe 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java @@ -703,6 +703,9 @@ public class CreateTableStmt extends DdlStmt { sb.append("EXTERNAL "); } sb.append("TABLE "); + if (ifNotExists) { + sb.append("IF NOT EXISTS "); + } sb.append(tableName.toSql()).append(" (\n"); int idx = 0; for (ColumnDef columnDef : columnDefs) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/KeysDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/KeysDesc.java index 36e9154af1..6f2eb96a7d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/KeysDesc.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/KeysDesc.java @@ -104,7 +104,7 @@ public class KeysDesc implements Writable { public String toSql() { StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(type.name()).append("("); + stringBuilder.append(type.toSql()).append("("); int i = 0; for (String columnName : keysColumnNames) { if (i != 0) { diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java index d9e3b0019e..a44c16b071 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java @@ -216,7 +216,7 @@ public class CreateTableStmtTest { new HashDistributionDesc(10, Lists.newArrayList("col3")), properties, null, ""); expectedEx.expect(AnalysisException.class); expectedEx.expectMessage("table property 'enable_duplicate_without_keys_by_default' only can " - + "set 'true' when create olap table by default."); + + "set 'true' when create olap table by default."); stmt1.analyze(analyzer); CreateTableStmt stmt2 = new CreateTableStmt(false, false, tblName, cols, "olap", @@ -443,4 +443,68 @@ public class CreateTableStmtTest { "String Type should not be used in key column[string_col].", () -> col.analyze(true)); col.analyze(false); } + + @Test + public void testToSql() { + List<ColumnDef> columnDefs = new ArrayList<>(); + columnDefs.add(new ColumnDef("a", TypeDef.create(PrimitiveType.BIGINT), false)); + columnDefs.add(new ColumnDef("b", TypeDef.create(PrimitiveType.INT), false)); + String engineName = "olap"; + ArrayList<String> aggKeys = Lists.newArrayList("a"); + KeysDesc keysDesc = new KeysDesc(KeysType.AGG_KEYS, aggKeys); + Map<String, String> properties = new HashMap<String, String>() { + { + put("replication_num", String.valueOf(Math.max(1, + Config.min_replication_num_per_tablet))); + } + }; + TableName tableName = new TableName("internal", "demo", "testTosql1"); + CreateTableStmt createTableStmt = new CreateTableStmt(true, false, + tableName, columnDefs, engineName, keysDesc, null, null, + properties, null, "", null); + + String createTableSql = "CREATE TABLE IF NOT EXISTS `demo`.`testTosql1` (\n" + + " `a` bigint(20) NOT NULL COMMENT \"\",\n" + + " `b` int(11) NOT NULL COMMENT \"\"\n" + + ") ENGINE = olap\n" + + "AGGREGATE KEY(`a`)\n" + + "PROPERTIES (\"replication_num\" = \"1\")"; + + Assert.assertEquals(createTableStmt.toSql(), createTableSql); + + + columnDefs.add(new ColumnDef("c", TypeDef.create(PrimitiveType.STRING), true)); + columnDefs.add(new ColumnDef("d", TypeDef.create(PrimitiveType.DOUBLE), true)); + columnDefs.add(new ColumnDef("e", TypeDef.create(PrimitiveType.DECIMAL128), false)); + columnDefs.add(new ColumnDef("f", TypeDef.create(PrimitiveType.DATE), false)); + columnDefs.add(new ColumnDef("g", TypeDef.create(PrimitiveType.SMALLINT), false)); + columnDefs.add(new ColumnDef("h", TypeDef.create(PrimitiveType.BOOLEAN), false)); + + aggKeys = Lists.newArrayList("a", "d", "f"); + keysDesc = new KeysDesc(KeysType.DUP_KEYS, aggKeys); + properties = new HashMap<String, String>() { + { + put("replication_num", String.valueOf(Math.max(10, + Config.min_replication_num_per_tablet))); + } + }; + tableName = new TableName("internal", "demo", "testTosql2"); + createTableStmt = new CreateTableStmt(false, false, + tableName, columnDefs, engineName, keysDesc, null, null, + properties, null, "", null); + createTableSql = "CREATE TABLE `demo`.`testTosql2` (\n" + + " `a` bigint(20) NOT NULL COMMENT \"\",\n" + + " `b` int(11) NOT NULL COMMENT \"\",\n" + + " `c` text NULL COMMENT \"\",\n" + + " `d` double NULL COMMENT \"\",\n" + + " `e` decimalv3(38, 0) NOT NULL COMMENT \"\",\n" + + " `f` date NOT NULL COMMENT \"\",\n" + + " `g` smallint(6) NOT NULL COMMENT \"\",\n" + + " `h` boolean NOT NULL COMMENT \"\"\n" + + ") ENGINE = olap\n" + + "DUPLICATE KEY(`a`, `d`, `f`)\n" + + "PROPERTIES (\"replication_num\" = \"10\")"; + Assert.assertEquals(createTableStmt.toSql(), createTableSql); + + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
