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()