This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 280415ac7c8 Fix NullPointerException when execute use database without
resource (#18692)
280415ac7c8 is described below
commit 280415ac7c89e5bc4f9829ef1b96a31e917910c6
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed Jun 29 16:48:20 2022 +0800
Fix NullPointerException when execute use database without resource (#18692)
---
.../response/header/query/impl/MySQLQueryHeaderBuilder.java | 7 ++++---
.../header/query/impl/MySQLQueryHeaderBuilderTest.java | 13 +++++++++++++
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
index fd59a072613..ad3976dd95e 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
@@ -20,7 +20,7 @@ package
org.apache.shardingsphere.proxy.backend.response.header.query.impl;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereColumn;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import
org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilder;
@@ -42,8 +42,9 @@ public final class MySQLQueryHeaderBuilder implements
QueryHeaderBuilder {
boolean primaryKey;
if (null != actualTableName && null != database) {
tableName = getLogicTableName(database, actualTableName);
- ShardingSphereTable table =
database.getSchemas().get(schemaName).get(tableName);
- primaryKey = null != table &&
Optional.ofNullable(table.getColumns().get(columnName.toLowerCase())).map(ShardingSphereColumn::isPrimaryKey).orElse(false);
+ ShardingSphereSchema schema =
database.getSchemas().get(schemaName);
+ primaryKey = null != schema
+ && Optional.ofNullable(schema.get(tableName)).map(optional
->
optional.getColumns().get(columnName.toLowerCase())).map(ShardingSphereColumn::isPrimaryKey).orElse(false);
} else {
tableName = actualTableName;
primaryKey = false;
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java
index 14892169db5..a766fdd494a 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java
@@ -75,6 +75,19 @@ public final class MySQLQueryHeaderBuilderTest {
assertThat(actual.getTable(), is("t_order"));
}
+ @Test
+ public void assertBuildWithNullSchema() throws SQLException {
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
+ when(database.getSchemas()).thenReturn(Collections.emptyMap());
+ DataNodeContainedRule containedRule =
mock(DataNodeContainedRule.class);
+
when(containedRule.findLogicTableByActualTable("t_order")).thenReturn(Optional.of("t_order"));
+
when(database.getRuleMetaData().findRules(DataNodeContainedRule.class)).thenReturn(Collections.singletonList(containedRule));
+ QueryResultMetaData queryResultMetaData = createQueryResultMetaData();
+ QueryHeader actual = new
MySQLQueryHeaderBuilder().build(queryResultMetaData, database,
queryResultMetaData.getColumnName(1), queryResultMetaData.getColumnLabel(1), 1);
+ assertFalse(actual.isPrimaryKey());
+ assertThat(actual.getTable(), is("t_order"));
+ }
+
@Test
public void assertBuildWithoutDataNodeContainedRule() throws SQLException {
QueryResultMetaData queryResultMetaData = createQueryResultMetaData();