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

Reply via email to