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;
}