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();

Reply via email to