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 518e2dc3187 Fix NPE of system schema builder rule (#29136)
518e2dc3187 is described below
commit 518e2dc318778318c11cf776b52932b59d7b437a
Author: ZhangCheng <[email protected]>
AuthorDate: Thu Nov 23 17:38:29 2023 +0800
Fix NPE of system schema builder rule (#29136)
---
.../schema/builder/SystemSchemaBuilder.java | 7 ++-
.../schema/builder/SystemSchemaBuilderRule.java | 8 +--
.../builder/SystemSchemaBuilderRuleTest.java | 65 +++++++++++++---------
3 files changed, 47 insertions(+), 33 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
index 5edfc20132f..5f1718f872e 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
@@ -37,6 +37,7 @@ import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
+import java.util.Optional;
import java.util.Properties;
/**
@@ -76,7 +77,11 @@ public final class SystemSchemaBuilder {
}
private static Collection<InputStream> getSchemaStreams(final String
schemaName, final DatabaseType databaseType) {
- SystemSchemaBuilderRule builderRule =
SystemSchemaBuilderRule.valueOf(databaseType.getType(), schemaName);
+ Optional<SystemSchemaBuilderRule> builderRuleOptional =
SystemSchemaBuilderRule.findBuilderRule(databaseType.getType(), schemaName);
+ if (!builderRuleOptional.isPresent()) {
+ return Collections.emptyList();
+ }
+ SystemSchemaBuilderRule builderRule = builderRuleOptional.get();
Collection<InputStream> result = new LinkedList<>();
for (String each : builderRule.getTables()) {
result.add(Thread.currentThread().getContextClassLoader().getResourceAsStream("schema/"
+ databaseType.getType().toLowerCase() + "/" + schemaName + "/" + each +
".yaml"));
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderRule.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderRule.java
index 67a9d03f96e..11055c7435b 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderRule.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderRule.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.infra.metadata.database.schema.builder;
-import com.google.common.base.Preconditions;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@@ -27,6 +26,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
+import java.util.Optional;
/**
* System schema builder rule.
@@ -227,11 +227,9 @@ public enum SystemSchemaBuilderRule {
* @param schema schema
* @return builder rule
*/
- public static SystemSchemaBuilderRule valueOf(final String databaseType,
final String schema) {
+ public static Optional<SystemSchemaBuilderRule> findBuilderRule(final
String databaseType, final String schema) {
String schemaPath = databaseType + "." + schema;
- SystemSchemaBuilderRule result =
SCHEMA_PATH_SYSTEM_SCHEMA_BUILDER_RULE_MAP.get(schemaPath);
- Preconditions.checkNotNull(result, "Can not find builder rule: `%s`",
schemaPath);
- return result;
+ return
Optional.ofNullable(SCHEMA_PATH_SYSTEM_SCHEMA_BUILDER_RULE_MAP.get(schemaPath));
}
/**
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderRuleTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderRuleTest.java
index c6e90f8746e..a97f61ed4a1 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderRuleTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderRuleTest.java
@@ -19,45 +19,56 @@ package
org.apache.shardingsphere.infra.metadata.database.schema.builder;
import org.junit.jupiter.api.Test;
+import java.util.Optional;
+
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
class SystemSchemaBuilderRuleTest {
@Test
void assertValueOfSchemaPathSuccess() {
- SystemSchemaBuilderRule actualInformationSchema =
SystemSchemaBuilderRule.valueOf("MySQL", "information_schema");
- assertThat(actualInformationSchema,
is(SystemSchemaBuilderRule.MYSQL_INFORMATION_SCHEMA));
- assertThat(actualInformationSchema.getTables().size(), is(61));
- SystemSchemaBuilderRule actualMySQLSchema =
SystemSchemaBuilderRule.valueOf("MySQL", "mysql");
- assertThat(actualMySQLSchema, is(SystemSchemaBuilderRule.MYSQL_MYSQL));
- assertThat(actualMySQLSchema.getTables().size(), is(31));
- SystemSchemaBuilderRule actualPerformanceSchema =
SystemSchemaBuilderRule.valueOf("MySQL", "performance_schema");
- assertThat(actualPerformanceSchema,
is(SystemSchemaBuilderRule.MYSQL_PERFORMANCE_SCHEMA));
- assertThat(actualPerformanceSchema.getTables().size(), is(87));
- SystemSchemaBuilderRule actualSysSchema =
SystemSchemaBuilderRule.valueOf("MySQL", "sys");
- assertThat(actualSysSchema, is(SystemSchemaBuilderRule.MYSQL_SYS));
- assertThat(actualSysSchema.getTables().size(), is(53));
- SystemSchemaBuilderRule actualPgInformationSchema =
SystemSchemaBuilderRule.valueOf("PostgreSQL", "information_schema");
- assertThat(actualPgInformationSchema,
is(SystemSchemaBuilderRule.POSTGRESQL_INFORMATION_SCHEMA));
- assertThat(actualPgInformationSchema.getTables().size(), is(69));
- SystemSchemaBuilderRule actualPgCatalog =
SystemSchemaBuilderRule.valueOf("PostgreSQL", "pg_catalog");
- assertThat(actualPgCatalog,
is(SystemSchemaBuilderRule.POSTGRESQL_PG_CATALOG));
- assertThat(actualPgCatalog.getTables().size(), is(134));
- SystemSchemaBuilderRule actualOgInformationSchema =
SystemSchemaBuilderRule.valueOf("openGauss", "information_schema");
- assertThat(actualOgInformationSchema,
is(SystemSchemaBuilderRule.OPEN_GAUSS_INFORMATION_SCHEMA));
- assertThat(actualOgInformationSchema.getTables().size(), is(66));
- SystemSchemaBuilderRule actualOgPgCatalog =
SystemSchemaBuilderRule.valueOf("openGauss", "pg_catalog");
- assertThat(actualOgPgCatalog,
is(SystemSchemaBuilderRule.OPEN_GAUSS_PG_CATALOG));
- assertThat(actualOgPgCatalog.getTables().size(), is(240));
+ Optional<SystemSchemaBuilderRule> actualInformationSchema =
SystemSchemaBuilderRule.findBuilderRule("MySQL", "information_schema");
+ assertTrue(actualInformationSchema.isPresent());
+ assertThat(actualInformationSchema.get(),
is(SystemSchemaBuilderRule.MYSQL_INFORMATION_SCHEMA));
+ assertThat(actualInformationSchema.get().getTables().size(), is(61));
+ Optional<SystemSchemaBuilderRule> actualMySQLSchema =
SystemSchemaBuilderRule.findBuilderRule("MySQL", "mysql");
+ assertTrue(actualMySQLSchema.isPresent());
+ assertThat(actualMySQLSchema.get(),
is(SystemSchemaBuilderRule.MYSQL_MYSQL));
+ assertThat(actualMySQLSchema.get().getTables().size(), is(31));
+ Optional<SystemSchemaBuilderRule> actualPerformanceSchema =
SystemSchemaBuilderRule.findBuilderRule("MySQL", "performance_schema");
+ assertTrue(actualPerformanceSchema.isPresent());
+ assertThat(actualPerformanceSchema.get(),
is(SystemSchemaBuilderRule.MYSQL_PERFORMANCE_SCHEMA));
+ assertThat(actualPerformanceSchema.get().getTables().size(), is(87));
+ Optional<SystemSchemaBuilderRule> actualSysSchema =
SystemSchemaBuilderRule.findBuilderRule("MySQL", "sys");
+ assertTrue(actualSysSchema.isPresent());
+ assertThat(actualSysSchema.get(),
is(SystemSchemaBuilderRule.MYSQL_SYS));
+ assertThat(actualSysSchema.get().getTables().size(), is(53));
+ Optional<SystemSchemaBuilderRule> actualPgInformationSchema =
SystemSchemaBuilderRule.findBuilderRule("PostgreSQL", "information_schema");
+ assertTrue(actualPgInformationSchema.isPresent());
+ assertThat(actualPgInformationSchema.get(),
is(SystemSchemaBuilderRule.POSTGRESQL_INFORMATION_SCHEMA));
+ assertThat(actualPgInformationSchema.get().getTables().size(), is(69));
+ Optional<SystemSchemaBuilderRule> actualPgCatalog =
SystemSchemaBuilderRule.findBuilderRule("PostgreSQL", "pg_catalog");
+ assertTrue(actualPgCatalog.isPresent());
+ assertThat(actualPgCatalog.get(),
is(SystemSchemaBuilderRule.POSTGRESQL_PG_CATALOG));
+ assertThat(actualPgCatalog.get().getTables().size(), is(134));
+ Optional<SystemSchemaBuilderRule> actualOgInformationSchema =
SystemSchemaBuilderRule.findBuilderRule("openGauss", "information_schema");
+ assertTrue(actualOgInformationSchema.isPresent());
+ assertThat(actualOgInformationSchema.get(),
is(SystemSchemaBuilderRule.OPEN_GAUSS_INFORMATION_SCHEMA));
+ assertThat(actualOgInformationSchema.get().getTables().size(), is(66));
+ Optional<SystemSchemaBuilderRule> actualOgPgCatalog =
SystemSchemaBuilderRule.findBuilderRule("openGauss", "pg_catalog");
+ assertTrue(actualOgPgCatalog.isPresent());
+ assertThat(actualOgPgCatalog.get(),
is(SystemSchemaBuilderRule.OPEN_GAUSS_PG_CATALOG));
+ assertThat(actualOgPgCatalog.get().getTables().size(), is(240));
+
}
@Test
- void assertValueOfSchemaPathFailure() {
- assertThrows(NullPointerException.class, () ->
SystemSchemaBuilderRule.valueOf("MySQL", "test"));
+ void assertNullableValueOfSchemaPath() {
+ Optional<SystemSchemaBuilderRule> unknownSchema =
SystemSchemaBuilderRule.findBuilderRule("UnKnown", "public");
+ assertFalse(unknownSchema.isPresent());
}
@Test