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 9f73dd0df1c fix proxy java.lang.NullPointerException (#26419)
9f73dd0df1c is described below

commit 9f73dd0df1c00926fc1825c57395b5ab84300c92
Author: zuohl <[email protected]>
AuthorDate: Mon Jun 19 20:58:57 2023 +0800

    fix proxy java.lang.NullPointerException (#26419)
    
    * Update ProxyBackendHandlerFactory.java
    
    Solve the error of java.lang.NullPointerException: Cannot invoke 
"String.toLowerCase()" because "databaseName" is null
    when executing sql like : SHOW VARIABLES LIKE 'lower_case_%'
    
    * Update SQLFederationEngine.java
    
    Solve the error of Solve the error of null pointer when executing sql like 
: SHOW VARIABLES LIKE 'lower_case_%'
    
    * Update SQLFederationEngine.java
    
    * Update ProxyBackendHandlerFactory.java
---
 .../shardingsphere/sqlfederation/engine/SQLFederationEngine.java       | 3 +++
 .../proxy/backend/handler/ProxyBackendHandlerFactory.java              | 3 +++
 2 files changed, 6 insertions(+)

diff --git 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java
 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java
index 2dba67d8e85..c614cc699ad 100644
--- 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java
+++ 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java
@@ -191,6 +191,9 @@ public final class SQLFederationEngine implements 
AutoCloseable {
     private void registerTableScanExecutor(final Schema sqlFederationSchema, 
final DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
                                            final JDBCExecutorCallback<? 
extends ExecuteResult> callback, final SQLFederationExecutorContext 
federationContext,
                                            final OptimizerContext 
optimizerContext) {
+        if (null == sqlFederationSchema) {
+            return;
+        }
         TableScanExecutorContext executorContext = new 
TableScanExecutorContext(databaseName, schemaName, metaData.getProps(), 
federationContext);
         EnumerablePushDownTableScanExecutor pushDownTableScanExecutor =
                 new EnumerablePushDownTableScanExecutor(prepareEngine, 
jdbcExecutor, callback, optimizerContext, metaData.getGlobalRuleMetaData(), 
executorContext, statistics);
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
index ce7847618a3..756343bf2e1 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
@@ -156,6 +156,9 @@ public final class ProxyBackendHandlerFactory {
         String databaseName = 
sqlStatementContext.getTablesContext().getDatabaseName().isPresent()
                 ? 
sqlStatementContext.getTablesContext().getDatabaseName().get()
                 : connectionSession.getDatabaseName();
+        if (null == databaseName) {
+            return DatabaseBackendHandlerFactory.newInstance(queryContext, 
connectionSession, preferPreparedStatement);
+        }
         AuthorityRule authorityRule = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
         ShardingSphereDatabase database = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(databaseName);
         new AuthorityChecker(authorityRule, 
connectionSession.getGrantee()).checkPrivileges(databaseName, 
sqlStatementContext.getSqlStatement());

Reply via email to