This is an automated email from the ASF dual-hosted git repository.
panjuan 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 1f3671a fix NPE when execute use statement with not exist schema
(#10389)
1f3671a is described below
commit 1f3671ae829af9fbc9a82b14fe463655b82dcfdf
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed May 19 17:18:26 2021 +0800
fix NPE when execute use statement with not exist schema (#10389)
---
.../backend/text/admin/mysql/executor/UseDatabaseExecutor.java | 5 +++--
.../text/admin/mysql/executor/UseDatabaseExecutorTest.java | 9 +++++++++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutor.java
index 0e41eec..8114d0b 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutor.java
@@ -29,6 +29,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtil;
import java.util.Collection;
import java.util.LinkedList;
+import java.util.Optional;
/**
* Use database executor.
@@ -48,8 +49,8 @@ public final class UseDatabaseExecutor implements
DatabaseAdminExecutor {
}
private Collection<ShardingSphereRule> getRules(final String schemaName) {
- Collection<ShardingSphereRule> result;
- result = new
LinkedList<>(ProxyContext.getInstance().getMetaDataContexts().getMetaData(schemaName).getRuleMetaData().getRules());
+ Collection<ShardingSphereRule> result = new LinkedList<>();
+
Optional.ofNullable(ProxyContext.getInstance().getMetaDataContexts().getMetaData(schemaName)).ifPresent(each
-> result.addAll(each.getRuleMetaData().getRules()));
result.addAll(ProxyContext.getInstance().getMetaDataContexts().getGlobalRuleMetaData().getRules());
return result;
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutorTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutorTest.java
index 22ec981..aa2abd0 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutorTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutorTest.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import
org.apache.shardingsphere.proxy.backend.exception.UnknownDatabaseException;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLUseStatement;
import org.junit.Before;
import org.junit.Test;
@@ -78,4 +79,12 @@ public final class UseDatabaseExecutorTest {
useSchemaBackendHandler.execute(backendConnection);
verify(backendConnection).setCurrentSchema(anyString());
}
+
+ @Test(expected = UnknownDatabaseException.class)
+ public void assertExecuteUseStatementBackendHandlerWhenSchemaNotExist() {
+ MySQLUseStatement useStatement = mock(MySQLUseStatement.class);
+
when(useStatement.getSchema()).thenReturn(String.format(SCHEMA_PATTERN, 10));
+ UseDatabaseExecutor useSchemaBackendHandler = new
UseDatabaseExecutor(useStatement);
+ useSchemaBackendHandler.execute(backendConnection);
+ }
}