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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7927583  fix-15983 (#16056)
7927583 is described below

commit 79275837e8f722f22fed2ad8c00b8858bf9cd5ea
Author: Raigor <[email protected]>
AuthorDate: Mon Mar 14 15:28:57 2022 +0800

    fix-15983 (#16056)
---
 .../backend/text/database/CreateDatabaseBackendHandler.java |  2 +-
 .../text/database/CreateDatabaseBackendHandlerTest.java     | 13 +++++++++++--
 .../text/database/DropDatabaseBackendHandlerTest.java       |  4 ++--
 .../visitor/statement/impl/MySQLDDLStatementSQLVisitor.java |  5 ++---
 .../statement/impl/OpenGaussDDLStatementSQLVisitor.java     |  4 +---
 .../statement/impl/PostgreSQLDDLStatementSQLVisitor.java    |  4 +---
 .../sql/common/statement/ddl/CreateDatabaseStatement.java   |  2 ++
 7 files changed, 20 insertions(+), 14 deletions(-)

diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/database/CreateDatabaseBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/database/CreateDatabaseBackendHandler.java
index 2f7f0f6..2ddface 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/database/CreateDatabaseBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/database/CreateDatabaseBackendHandler.java
@@ -43,7 +43,7 @@ public final class CreateDatabaseBackendHandler implements 
TextProtocolBackendHa
     }
     
     private void check(final CreateDatabaseStatement sqlStatement) {
-        if 
(ProxyContext.getInstance().getAllSchemaNames().contains(sqlStatement.getDatabaseName()))
 {
+        if (!sqlStatement.isContainsNotExistClause() && 
ProxyContext.getInstance().getAllSchemaNames().contains(sqlStatement.getDatabaseName()))
 {
             throw new DBCreateExistsException(sqlStatement.getDatabaseName());
         }
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/database/CreateDatabaseBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/database/CreateDatabaseBackendHandlerTest.java
index aae8b8d..472adc6 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/database/CreateDatabaseBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/database/CreateDatabaseBackendHandlerTest.java
@@ -55,7 +55,7 @@ public final class CreateDatabaseBackendHandlerTest {
         handler = new CreateDatabaseBackendHandler(statement);
         
when(metaDataContexts.getAllSchemaNames()).thenReturn(Collections.singleton("test_db"));
     }
-
+    
     @SneakyThrows
     @Test
     public void assertExecuteCreateNewDatabase() {
@@ -63,7 +63,7 @@ public final class CreateDatabaseBackendHandlerTest {
         ResponseHeader responseHeader = handler.execute();
         Assert.assertTrue(responseHeader instanceof UpdateResponseHeader);
     }
-
+    
     @SneakyThrows
     @Test(expected = DBCreateExistsException.class)
     public void assertExecuteCreateExistDatabase() {
@@ -71,4 +71,13 @@ public final class CreateDatabaseBackendHandlerTest {
         ResponseHeader responseHeader = handler.execute();
         Assert.assertTrue(responseHeader instanceof UpdateResponseHeader);
     }
+    
+    @SneakyThrows
+    @Test
+    public void assertExecuteCreateExistDatabaseWithIfNotExists() {
+        when(statement.getDatabaseName()).thenReturn("test_db");
+        when(statement.isContainsNotExistClause()).thenReturn(true);
+        ResponseHeader responseHeader = handler.execute();
+        Assert.assertTrue(responseHeader instanceof UpdateResponseHeader);
+    }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/database/DropDatabaseBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/database/DropDatabaseBackendHandlerTest.java
index 2486c86..7d2da26 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/database/DropDatabaseBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/database/DropDatabaseBackendHandlerTest.java
@@ -90,7 +90,7 @@ public final class DropDatabaseBackendHandlerTest {
         assertNotNull(responseHeader);
         assertTrue(responseHeader instanceof UpdateResponseHeader);
     }
-
+    
     @Test
     public void assertExecuteDropCurrentDatabase() {
         when(connectionSession.getSchemaName()).thenReturn("test_db");
@@ -100,7 +100,7 @@ public final class DropDatabaseBackendHandlerTest {
         assertNotNull(responseHeader);
         assertTrue(responseHeader instanceof UpdateResponseHeader);
     }
-
+    
     @Test
     public void assertExecuteDropOtherDatabase() {
         when(connectionSession.getSchemaName()).thenReturn("test_db");
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
index c3e3d0f..68356b1 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
@@ -210,6 +210,7 @@ public final class MySQLDDLStatementSQLVisitor extends 
MySQLStatementSQLVisitor
     public ASTNode visitCreateDatabase(final CreateDatabaseContext ctx) {
         MySQLCreateDatabaseStatement result = new 
MySQLCreateDatabaseStatement();
         result.setDatabaseName(new 
IdentifierValue(ctx.schemaName().getText()).getValue());
+        result.setContainsNotExistClause(null != ctx.notExistClause());
         return result;
     }
     
@@ -222,9 +223,7 @@ public final class MySQLDDLStatementSQLVisitor extends 
MySQLStatementSQLVisitor
     public ASTNode visitDropDatabase(final DropDatabaseContext ctx) {
         MySQLDropDatabaseStatement result = new MySQLDropDatabaseStatement();
         result.setDatabaseName(new 
IdentifierValue(ctx.schemaName().getText()).getValue());
-        if (null != ctx.existClause()) {
-            result.setContainsExistClause(true);
-        }
+        result.setContainsExistClause(null != ctx.existClause());
         return result;
     }
     
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
index f405377..ba7046d 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
@@ -555,9 +555,7 @@ public final class OpenGaussDDLStatementSQLVisitor extends 
OpenGaussStatementSQL
     public ASTNode visitDropDatabase(final DropDatabaseContext ctx) {
         OpenGaussDropDatabaseStatement result = new 
OpenGaussDropDatabaseStatement();
         result.setDatabaseName(((IdentifierValue) 
visit(ctx.name())).getValue());
-        if (null != ctx.existClause()) {
-            result.setContainsExistClause(true);
-        }
+        result.setContainsExistClause(null != ctx.existClause());
         return result;
     }
     
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
index db0c180..b966794 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
@@ -571,9 +571,7 @@ public final class PostgreSQLDDLStatementSQLVisitor extends 
PostgreSQLStatementS
     public ASTNode visitDropDatabase(final DropDatabaseContext ctx) {
         PostgreSQLDropDatabaseStatement result = new 
PostgreSQLDropDatabaseStatement();
         result.setDatabaseName(((IdentifierValue) 
visit(ctx.name())).getValue());
-        if (null != ctx.existClause()) {
-            result.setContainsExistClause(true);
-        }
+        result.setContainsExistClause(null != ctx.existClause());
         return result;
     }
     
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateDatabaseStatement.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateDatabaseStatement.java
index 70fa15f..82bb47e 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateDatabaseStatement.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateDatabaseStatement.java
@@ -31,4 +31,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStat
 public abstract class CreateDatabaseStatement extends AbstractSQLStatement 
implements DDLStatement {
     
     private String databaseName;
+    
+    private boolean containsNotExistClause;
 }

Reply via email to