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 4cc9407571c Fix npe when create database with postgres database
(#26565)
4cc9407571c is described below
commit 4cc9407571c082b5eb1988a016479d040e3a7508
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Mon Jun 26 11:26:33 2023 +0800
Fix npe when create database with postgres database (#26565)
* Fix npe when create database with postgres database
(cherry picked from commit 8a4f6537319c36a1b289febcc512af30c29c74cf)
* optimize code style
---
.../compiler/context/OptimizerContext.java | 19 +++++++++++++++++++
.../sqlfederation/rule/SQLFederationRule.java | 7 ++++++-
.../shardingsphere/test/e2e/engine/type/RDLE2EIT.java | 2 +-
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/context/OptimizerContext.java
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/context/OptimizerContext.java
index cee696f65e3..7a132215c0d 100644
---
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/context/OptimizerContext.java
+++
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/context/OptimizerContext.java
@@ -48,6 +48,25 @@ public final class OptimizerContext {
return parserContexts.get(databaseName.toLowerCase());
}
+ /**
+ * Put parser context.
+ *
+ * @param databaseName database name
+ * @param parserContext parser context
+ */
+ public void putParserContext(final String databaseName, final
OptimizerParserContext parserContext) {
+ parserContexts.put(databaseName.toLowerCase(), parserContext);
+ }
+
+ /**
+ * Remove parser context.
+ *
+ * @param databaseName database name
+ */
+ public void removeParserContext(final String databaseName) {
+ parserContexts.remove(databaseName.toLowerCase());
+ }
+
/**
* Get planner context.
*
diff --git
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/rule/SQLFederationRule.java
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/rule/SQLFederationRule.java
index e93fae6aceb..16fde3d719e 100644
---
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/rule/SQLFederationRule.java
+++
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/rule/SQLFederationRule.java
@@ -25,6 +25,8 @@ import
org.apache.shardingsphere.infra.rule.identifier.type.MetaDataHeldRule;
import
org.apache.shardingsphere.sqlfederation.api.config.SQLFederationRuleConfiguration;
import
org.apache.shardingsphere.sqlfederation.compiler.context.OptimizerContext;
import
org.apache.shardingsphere.sqlfederation.compiler.context.OptimizerContextFactory;
+import
org.apache.shardingsphere.sqlfederation.compiler.context.parser.OptimizerParserContext;
+import
org.apache.shardingsphere.sqlfederation.compiler.context.parser.OptimizerParserContextFactory;
import
org.apache.shardingsphere.sqlfederation.compiler.context.planner.OptimizerPlannerContext;
import
org.apache.shardingsphere.sqlfederation.compiler.context.planner.OptimizerPlannerContextFactory;
@@ -47,12 +49,15 @@ public final class SQLFederationRule implements GlobalRule,
MetaDataHeldRule {
@Override
public void alterDatabase(final ShardingSphereDatabase database) {
- OptimizerPlannerContext plannerContext =
OptimizerPlannerContextFactory.create(database,
optimizerContext.getParserContext(database.getName()),
optimizerContext.getSqlParserRule());
+ OptimizerParserContext parserContext =
OptimizerParserContextFactory.create(database.getProtocolType());
+ optimizerContext.putParserContext(database.getName(), parserContext);
+ OptimizerPlannerContext plannerContext =
OptimizerPlannerContextFactory.create(database, parserContext,
optimizerContext.getSqlParserRule());
optimizerContext.putPlannerContext(database.getName(), plannerContext);
}
@Override
public void dropDatabase(final String databaseName) {
+ optimizerContext.removeParserContext(databaseName);
optimizerContext.removePlannerContext(databaseName);
}
diff --git
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/RDLE2EIT.java
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/RDLE2EIT.java
index 542c945de40..a338d0c7b68 100644
---
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/RDLE2EIT.java
+++
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/RDLE2EIT.java
@@ -52,7 +52,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
@E2ETestCaseSettings(SQLCommandType.RDL)
class RDLE2EIT {
-
+
private static final Map<String, Boolean> INITIALIZED = new
ConcurrentHashMap<>();
@ParameterizedTest(name = "{0}")