This is an automated email from the ASF dual-hosted git repository.

xiaoyu 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 996aa83  Check schema for rdl query (#8636)
996aa83 is described below

commit 996aa83190389f6137f0aadbff219dffd4b79fe8
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Dec 16 00:25:38 2020 +0800

    Check schema for rdl query (#8636)
    
    * Check schema for rdl query
    
    * Rename DataSourcesQueryBackendHandler and RuleQueryBackendHandler
---
 .../backend/text/rdl/RDLBackendHandlerFactory.java    |  8 ++++----
 ...ndler.java => DataSourcesQueryBackendHandler.java} | 19 ++++++++++++++++---
 ...ckendHandler.java => RuleQueryBackendHandler.java} | 19 ++++++++++++++++---
 3 files changed, 36 insertions(+), 10 deletions(-)

diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/RDLBackendHandlerFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/RDLBackendHandlerFactory.java
index 35514e0..7042996 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/RDLBackendHandlerFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/RDLBackendHandlerFactory.java
@@ -24,8 +24,8 @@ import 
org.apache.shardingsphere.distsql.parser.statement.rdl.show.impl.ShowData
 import 
org.apache.shardingsphere.distsql.parser.statement.rdl.show.impl.ShowRuleStatement;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
-import 
org.apache.shardingsphere.proxy.backend.text.rdl.query.RDLDataSourcesQueryBackendHandler;
-import 
org.apache.shardingsphere.proxy.backend.text.rdl.query.RDLRuleQueryBackendHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.rdl.query.DataSourcesQueryBackendHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.rdl.query.RuleQueryBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.text.rdl.update.RDLUpdateBackendHandler;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateDatabaseStatement;
@@ -48,10 +48,10 @@ public final class RDLBackendHandlerFactory {
      */
     public static Optional<TextProtocolBackendHandler> newInstance(final 
SQLStatement sqlStatement, final BackendConnection backendConnection) {
         if (sqlStatement instanceof ShowRuleStatement) {
-            return Optional.of(new 
RDLRuleQueryBackendHandler((ShowRuleStatement) sqlStatement, 
backendConnection));
+            return Optional.of(new RuleQueryBackendHandler((ShowRuleStatement) 
sqlStatement, backendConnection));
         }
         if (sqlStatement instanceof ShowDataSourcesStatement) {
-            return Optional.of(new 
RDLDataSourcesQueryBackendHandler((ShowDataSourcesStatement) sqlStatement, 
backendConnection));
+            return Optional.of(new 
DataSourcesQueryBackendHandler((ShowDataSourcesStatement) sqlStatement, 
backendConnection));
         }
         if (sqlStatement instanceof RDLStatement || sqlStatement instanceof 
CreateDatabaseStatement || sqlStatement instanceof DropDatabaseStatement) {
             return Optional.of(new RDLUpdateBackendHandler(sqlStatement, 
backendConnection));
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/RDLDataSourcesQueryBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/DataSourcesQueryBackendHandler.java
similarity index 80%
rename from 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/RDLDataSourcesQueryBackendHandler.java
rename to 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/DataSourcesQueryBackendHandler.java
index 299fb2a..f236d2d 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/RDLDataSourcesQueryBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/DataSourcesQueryBackendHandler.java
@@ -25,6 +25,8 @@ import 
org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
 import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import 
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException;
+import 
org.apache.shardingsphere.proxy.backend.exception.UnknownDatabaseException;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import 
org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
 import 
org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
@@ -38,10 +40,10 @@ import java.util.Iterator;
 import java.util.Map;
 
 /**
- * Backend handler for RDL data sources query.
+ * Backend handler for data sources query.
  */
 @RequiredArgsConstructor
-public final class RDLDataSourcesQueryBackendHandler implements 
TextProtocolBackendHandler {
+public final class DataSourcesQueryBackendHandler implements 
TextProtocolBackendHandler {
     
     private final ShowDataSourcesStatement sqlStatement;
     
@@ -57,7 +59,7 @@ public final class RDLDataSourcesQueryBackendHandler 
implements TextProtocolBack
     }
     
     private ResponseHeader execute(final ShowDataSourcesStatementContext 
context) {
-        String schemaName = null == context.getSqlStatement().getSchemaName() 
? backendConnection.getSchemaName() : 
context.getSqlStatement().getSchemaName().getIdentifier().getValue();
+        String schemaName = getSchemaName(context);
         QueryHeader nameQueryHeader = new QueryHeader(schemaName, "", "name", 
"name", Types.CHAR, "CHAR", 255, 0, false, false, false, false);
         QueryHeader contentQueryHeader = new QueryHeader(schemaName, "", "data 
source", "data source", Types.CHAR, "CHAR", 255, 0, false, false, false, false);
         dataSourceParameterMap = 
DataSourceParameterConverter.getDataSourceParameterMap(
@@ -66,6 +68,17 @@ public final class RDLDataSourcesQueryBackendHandler 
implements TextProtocolBack
         return new QueryResponseHeader(Arrays.asList(nameQueryHeader, 
contentQueryHeader));
     }
     
+    private String getSchemaName(final ShowDataSourcesStatementContext 
context) {
+        String result = null == context.getSqlStatement().getSchemaName() ? 
backendConnection.getSchemaName() : 
context.getSqlStatement().getSchemaName().getIdentifier().getValue();
+        if (null == result) {
+            throw new NoDatabaseSelectedException();
+        }
+        if (!ProxyContext.getInstance().schemaExists(result)) {
+            throw new UnknownDatabaseException(result);
+        }
+        return result;
+    }
+    
     @Override
     public boolean next() {
         return dataSourceNames.hasNext();
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/RDLRuleQueryBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/RuleQueryBackendHandler.java
similarity index 84%
rename from 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/RDLRuleQueryBackendHandler.java
rename to 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/RuleQueryBackendHandler.java
index 17fef6a..ed9198a 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/RDLRuleQueryBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/rdl/query/RuleQueryBackendHandler.java
@@ -27,6 +27,8 @@ import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import 
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException;
+import 
org.apache.shardingsphere.proxy.backend.exception.UnknownDatabaseException;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import 
org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
 import 
org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
@@ -42,10 +44,10 @@ import java.util.Iterator;
 import java.util.Optional;
 
 /**
- * Backend handler for RDL rule query.
+ * Backend handler for rule query.
  */
 @RequiredArgsConstructor
-public final class RDLRuleQueryBackendHandler implements 
TextProtocolBackendHandler {
+public final class RuleQueryBackendHandler implements 
TextProtocolBackendHandler {
     
     private final ShowRuleStatement sqlStatement;
     
@@ -59,13 +61,24 @@ public final class RDLRuleQueryBackendHandler implements 
TextProtocolBackendHand
     }
     
     private ResponseHeader execute(final ShowRuleStatementContext context) {
-        String schemaName = null == context.getSqlStatement().getSchemaName() 
? backendConnection.getSchemaName() : 
context.getSqlStatement().getSchemaName().getIdentifier().getValue();
+        String schemaName = getSchemaName(context);
         String ruleType = context.getSqlStatement().getRuleType();
         QueryHeader queryHeader = new QueryHeader(schemaName, "", ruleType, 
ruleType, Types.CHAR, "CHAR", 255, 0, false, false, false, false);
         data = loadRuleConfiguration(schemaName, ruleType);
         return new QueryResponseHeader(Collections.singletonList(queryHeader));
     }
     
+    private String getSchemaName(final ShowRuleStatementContext context) {
+        String result = null == context.getSqlStatement().getSchemaName() ? 
backendConnection.getSchemaName() : 
context.getSqlStatement().getSchemaName().getIdentifier().getValue();
+        if (null == result) {
+            throw new NoDatabaseSelectedException();
+        }
+        if (!ProxyContext.getInstance().schemaExists(result)) {
+            throw new UnknownDatabaseException(result);
+        }
+        return result;
+    }
+    
     private Iterator<RuleConfiguration> loadRuleConfiguration(final String 
schemaName, final String ruleType) {
         Class<? extends RuleConfiguration> ruleConfigurationClass = 
getRuleConfigurationClass(ruleType);
         Optional<RuleConfiguration> ruleConfig = 
ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()

Reply via email to