From f12f32da11642c663f0f34f04a8d170f55849d26 Mon Sep 17 00:00:00 2001 From: xxiao2018 <78575849+xxiao2018@users.noreply.github.com> Date: Sun, 7 Feb 2021 22:41:55 +0800 Subject: [PATCH] [Bug] Support if not exists in create table like stmt (#5368) Currently we support syntax `create table xx if not exists like xxx`, but `if not exists` does not work well. --- .../doris/analysis/CreateTableLikeStmt.java | 2 +- .../apache/doris/analysis/CreateTableStmt.java | 2 ++ .../java/org/apache/doris/catalog/Catalog.java | 1 + .../apache/doris/catalog/CreateTableLikeTest.java | 15 +++++++++++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableLikeStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableLikeStmt.java index 11a3908c33..58f6e54b9e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableLikeStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableLikeStmt.java @@ -45,7 +45,7 @@ public class CreateTableLikeStmt extends DdlStmt { this.existedTableName = existedTableName; } - public boolean isSetIfNotExists() { + public boolean isIfNotExists() { return ifNotExists; } 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 46d009801b..7641ac96e5 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 @@ -169,6 +169,8 @@ public class CreateTableStmt extends DdlStmt { public void addColumnDef(ColumnDef columnDef) { columnDefs.add(columnDef); } + public void setIfNotExists(boolean ifNotExists) { this.ifNotExists = ifNotExists; } + public boolean isSetIfNotExists() { return ifNotExists; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java index fa13b4d3f4..c0183148b3 100755 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java @@ -3018,6 +3018,7 @@ public class Catalog { } CreateTableStmt parsedCreateTableStmt = (CreateTableStmt) SqlParserUtils.parseAndAnalyzeStmt(createTableStmt.get(0), ConnectContext.get()); parsedCreateTableStmt.setTableName(stmt.getTableName()); + parsedCreateTableStmt.setIfNotExists(stmt.isIfNotExists()); createTable(parsedCreateTableStmt); } catch (UserException e) { throw new DdlException("Failed to execute CREATE TABLE LIKE " + stmt.getExistedTableName() + ". Reason: " + e.getMessage()); diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableLikeTest.java b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableLikeTest.java index b09c6b40f9..a0eae7aada 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableLikeTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableLikeTest.java @@ -218,6 +218,21 @@ public class CreateTableLikeTest { String newTblName8 = "testMysqlTbl_like"; String existedTblName8 = "testMysqlTbl"; checkCreateMysqlTableLike(createNonOlapTableSql, createTableLikeSql8, newDbName8, existedDbName8, newTblName8, existedTblName8); + + // 9. test if not exist + String createTableLikeSql9 = "create table test.testMysqlTbl_like like test.testMysqlTbl"; + try { + createTableLike(createTableLikeSql9); + Assert.fail(); + } catch (Exception e) { + Assert.assertTrue(e.getMessage().contains("already exists")); + } + createTableLikeSql9 = "create table if not exists test.testMysqlTbl_like like test.testMysqlTbl"; + try { + createTableLike(createTableLikeSql9); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } } @Test