You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/06/26 03:26:40 UTC
[shardingsphere] branch master updated: Fix npe when create database with postgres database (#26565)
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 <du...@apache.org>
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}")