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}")