You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2020/12/17 11:32:19 UTC
[shardingsphere] branch master updated: Add
RQLBackendHandlerFactory (#8676)
This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 a860f6c Add RQLBackendHandlerFactory (#8676)
a860f6c is described below
commit a860f6c78d74ff1b04f775ea553d792081a8b0cc
Author: Liang Zhang <te...@163.com>
AuthorDate: Thu Dec 17 19:31:53 2020 +0800
Add RQLBackendHandlerFactory (#8676)
* Add RQLBackendHandlerFactory
* Add RQLBackendHandlerFactory
---
.../text/TextProtocolBackendHandlerFactory.java | 2 +-
.../text/distsql/DistSQLBackendHandlerFactory.java | 25 +++++++-------------
.../text/distsql/rdl/RDLBackendHandlerFactory.java | 13 +++++++----
.../RQLBackendHandlerFactory.java} | 27 ++++++++--------------
.../{ => impl}/DataSourcesQueryBackendHandler.java | 2 +-
.../rql/{ => impl}/RuleQueryBackendHandler.java | 2 +-
.../text/distsql/RDLBackendHandlerFactoryTest.java | 20 ++++++++--------
7 files changed, 38 insertions(+), 53 deletions(-)
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
index 79ca868e..15c40cc 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
@@ -80,7 +80,7 @@ public final class TextProtocolBackendHandlerFactory {
return databaseAdminBackendHandler.get();
}
}
- Optional<TextProtocolBackendHandler> distSQLBackendHandler = DistSQLBackendHandlerFactory.newInstance(sqlStatement, backendConnection);
+ Optional<TextProtocolBackendHandler> distSQLBackendHandler = DistSQLBackendHandlerFactory.newInstance(databaseType, sqlStatement, backendConnection);
if (distSQLBackendHandler.isPresent()) {
return distSQLBackendHandler.get();
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
index 13ecf4d..f6208b5 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
@@ -19,17 +19,12 @@ package org.apache.shardingsphere.proxy.backend.text.distsql;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.RDLStatement;
-import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowResourcesStatement;
-import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRuleStatement;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
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.distsql.rql.DataSourcesQueryBackendHandler;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RuleQueryBackendHandler;
import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.RDLBackendHandlerFactory;
+import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLBackendHandlerFactory;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateDatabaseStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
import java.sql.SQLException;
import java.util.Optional;
@@ -43,21 +38,17 @@ public final class DistSQLBackendHandlerFactory {
/**
* Create new instance of DistSQL backend handler.
*
+ * @param databaseType database type
* @param sqlStatement SQL statement
* @param backendConnection backend connection
* @return text protocol backend handler
* @throws SQLException SQL exception
*/
- public static Optional<TextProtocolBackendHandler> newInstance(final SQLStatement sqlStatement, final BackendConnection backendConnection) throws SQLException {
- if (sqlStatement instanceof ShowRuleStatement) {
- return Optional.of(new RuleQueryBackendHandler((ShowRuleStatement) sqlStatement, backendConnection));
+ public static Optional<TextProtocolBackendHandler> newInstance(final DatabaseType databaseType, final SQLStatement sqlStatement, final BackendConnection backendConnection) throws SQLException {
+ Optional<TextProtocolBackendHandler> rqlBackendHandler = RQLBackendHandlerFactory.newInstance(sqlStatement, backendConnection);
+ if (rqlBackendHandler.isPresent()) {
+ return rqlBackendHandler;
}
- if (sqlStatement instanceof ShowResourcesStatement) {
- return Optional.of(new DataSourcesQueryBackendHandler((ShowResourcesStatement) sqlStatement, backendConnection));
- }
- if (sqlStatement instanceof RDLStatement || sqlStatement instanceof CreateDatabaseStatement || sqlStatement instanceof DropDatabaseStatement) {
- return RDLBackendHandlerFactory.newInstance(sqlStatement, backendConnection);
- }
- return Optional.empty();
+ return RDLBackendHandlerFactory.newInstance(databaseType, sqlStatement, backendConnection);
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/RDLBackendHandlerFactory.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/RDLBackendHandlerFactory.java
index af9aad9..9f86f63 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/RDLBackendHandlerFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/RDLBackendHandlerFactory.java
@@ -48,14 +48,18 @@ public final class RDLBackendHandlerFactory {
/**
* Create new instance of RDL backend handler.
*
+ * @param databaseType database type
* @param sqlStatement SQL statement
* @param backendConnection backend connection
* @return RDL backend handler
* @throws SQLException SQL exception
*/
- public static Optional<TextProtocolBackendHandler> newInstance(final SQLStatement sqlStatement, final BackendConnection backendConnection) throws SQLException {
- checkRegistryCenterExisted(sqlStatement);
- return createRDLBackendHandler(sqlStatement, backendConnection);
+ public static Optional<TextProtocolBackendHandler> newInstance(final DatabaseType databaseType, final SQLStatement sqlStatement, final BackendConnection backendConnection) throws SQLException {
+ Optional<TextProtocolBackendHandler> result = createRDLBackendHandler(databaseType, sqlStatement, backendConnection);
+ if (result.isPresent()) {
+ checkRegistryCenterExisted(sqlStatement);
+ }
+ return result;
}
private static void checkRegistryCenterExisted(final SQLStatement sqlStatement) throws SQLException {
@@ -64,8 +68,7 @@ public final class RDLBackendHandlerFactory {
}
}
- private static Optional<TextProtocolBackendHandler> createRDLBackendHandler(final SQLStatement sqlStatement, final BackendConnection backendConnection) {
- DatabaseType databaseType = ProxyContext.getInstance().getMetaDataContexts().getMetaData(backendConnection.getSchemaName()).getResource().getDatabaseType();
+ private static Optional<TextProtocolBackendHandler> createRDLBackendHandler(final DatabaseType databaseType, final SQLStatement sqlStatement, final BackendConnection backendConnection) {
if (sqlStatement instanceof AddResourceStatement) {
return Optional.of(new AddResourceBackendHandler(databaseType, (AddResourceStatement) sqlStatement, backendConnection));
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
similarity index 67%
copy from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
copy to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
index 13ecf4d..994fb82 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
@@ -15,49 +15,40 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rql;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.RDLStatement;
import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowResourcesStatement;
import org.apache.shardingsphere.distsql.parser.statement.rql.show.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.distsql.rql.DataSourcesQueryBackendHandler;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RuleQueryBackendHandler;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.RDLBackendHandlerFactory;
+import org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.DataSourcesQueryBackendHandler;
+import org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.RuleQueryBackendHandler;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateDatabaseStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
-import java.sql.SQLException;
import java.util.Optional;
/**
- * DistSQL backend handler factory.
+ * RQL backend handler factory.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class DistSQLBackendHandlerFactory {
+public final class RQLBackendHandlerFactory {
/**
- * Create new instance of DistSQL backend handler.
- *
+ * Create new instance of RDL backend handler.
+ *
* @param sqlStatement SQL statement
* @param backendConnection backend connection
- * @return text protocol backend handler
- * @throws SQLException SQL exception
+ * @return RDL backend handler
*/
- public static Optional<TextProtocolBackendHandler> newInstance(final SQLStatement sqlStatement, final BackendConnection backendConnection) throws SQLException {
+ public static Optional<TextProtocolBackendHandler> newInstance(final SQLStatement sqlStatement, final BackendConnection backendConnection) {
if (sqlStatement instanceof ShowRuleStatement) {
return Optional.of(new RuleQueryBackendHandler((ShowRuleStatement) sqlStatement, backendConnection));
}
if (sqlStatement instanceof ShowResourcesStatement) {
return Optional.of(new DataSourcesQueryBackendHandler((ShowResourcesStatement) sqlStatement, backendConnection));
}
- if (sqlStatement instanceof RDLStatement || sqlStatement instanceof CreateDatabaseStatement || sqlStatement instanceof DropDatabaseStatement) {
- return RDLBackendHandlerFactory.newInstance(sqlStatement, backendConnection);
- }
return Optional.empty();
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/DataSourcesQueryBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryBackendHandler.java
similarity index 99%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/DataSourcesQueryBackendHandler.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryBackendHandler.java
index acbc269..8862ac7 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/DataSourcesQueryBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryBackendHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowResourcesStatement;
import org.apache.shardingsphere.infra.config.datasource.DataSourceConverter;
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleQueryBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/RuleQueryBackendHandler.java
similarity index 99%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleQueryBackendHandler.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/RuleQueryBackendHandler.java
index 9fa799a..f6ba658 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleQueryBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/RuleQueryBackendHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRuleStatement;
import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/RDLBackendHandlerFactoryTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/RDLBackendHandlerFactoryTest.java
index 95a6482..462b7cb 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/RDLBackendHandlerFactoryTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/RDLBackendHandlerFactoryTest.java
@@ -85,12 +85,12 @@ public final class RDLBackendHandlerFactoryTest {
when(connection.getSchemaName()).thenReturn("schema");
sqlStatement.setDatabaseName("new_db");
try {
- RDLBackendHandlerFactory.newInstance(sqlStatement, connection);
+ RDLBackendHandlerFactory.newInstance(new MySQLDatabaseType(), sqlStatement, connection);
} catch (final SQLException ex) {
assertThat(ex.getMessage(), is(String.format("No Registry center to execute `%s` SQL", sqlStatement.getClass().getSimpleName())));
}
setGovernanceMetaDataContexts(true);
- Optional<TextProtocolBackendHandler> rdlBackendHandler = RDLBackendHandlerFactory.newInstance(sqlStatement, connection);
+ Optional<TextProtocolBackendHandler> rdlBackendHandler = RDLBackendHandlerFactory.newInstance(new MySQLDatabaseType(), sqlStatement, connection);
assertTrue(rdlBackendHandler.isPresent());
ResponseHeader response = rdlBackendHandler.get().execute();
assertThat(response, instanceOf(UpdateResponseHeader.class));
@@ -111,12 +111,12 @@ public final class RDLBackendHandlerFactoryTest {
when(connection.getSchemaName()).thenReturn("schema");
sqlStatement.setDatabaseName("schema");
try {
- RDLBackendHandlerFactory.newInstance(sqlStatement, connection);
+ RDLBackendHandlerFactory.newInstance(new MySQLDatabaseType(), sqlStatement, connection);
} catch (final SQLException ex) {
assertThat(ex.getMessage(), is(String.format("No Registry center to execute `%s` SQL", sqlStatement.getClass().getSimpleName())));
}
setGovernanceMetaDataContexts(true);
- Optional<TextProtocolBackendHandler> rdlBackendHandler = RDLBackendHandlerFactory.newInstance(sqlStatement, connection);
+ Optional<TextProtocolBackendHandler> rdlBackendHandler = RDLBackendHandlerFactory.newInstance(new MySQLDatabaseType(), sqlStatement, connection);
assertTrue(rdlBackendHandler.isPresent());
ResponseHeader response = rdlBackendHandler.get().execute();
assertThat(response, instanceOf(UpdateResponseHeader.class));
@@ -137,13 +137,13 @@ public final class RDLBackendHandlerFactoryTest {
when(connection.getSchemaName()).thenReturn("schema");
sqlStatement.setDatabaseName("schema");
try {
- RDLBackendHandlerFactory.newInstance(sqlStatement, connection);
+ RDLBackendHandlerFactory.newInstance(new MySQLDatabaseType(), sqlStatement, connection);
} catch (final SQLException ex) {
assertThat(ex.getMessage(), is(String.format("No Registry center to execute `%s` SQL", sqlStatement.getClass().getSimpleName())));
}
setGovernanceMetaDataContexts(true);
try {
- RDLBackendHandlerFactory.newInstance(sqlStatement, connection);
+ RDLBackendHandlerFactory.newInstance(new MySQLDatabaseType(), sqlStatement, connection);
} catch (final DBCreateExistsException ex) {
assertNull(ex.getMessage());
}
@@ -160,12 +160,12 @@ public final class RDLBackendHandlerFactoryTest {
BackendConnection connection = mock(BackendConnection.class);
when(connection.getSchemaName()).thenReturn("schema");
try {
- RDLBackendHandlerFactory.newInstance(mock(AddResourceStatement.class), connection);
+ RDLBackendHandlerFactory.newInstance(new MySQLDatabaseType(), mock(AddResourceStatement.class), connection);
} catch (final SQLException ex) {
assertThat(ex.getMessage(), is("No Registry center to execute `AddResourceStatement` SQL"));
}
setGovernanceMetaDataContexts(true);
- Optional<TextProtocolBackendHandler> rdlBackendHandler = RDLBackendHandlerFactory.newInstance(mock(AddResourceStatement.class), connection);
+ Optional<TextProtocolBackendHandler> rdlBackendHandler = RDLBackendHandlerFactory.newInstance(new MySQLDatabaseType(), mock(AddResourceStatement.class), connection);
assertTrue(rdlBackendHandler.isPresent());
ResponseHeader response = rdlBackendHandler.get().execute();
assertThat(response, instanceOf(UpdateResponseHeader.class));
@@ -176,12 +176,12 @@ public final class RDLBackendHandlerFactoryTest {
BackendConnection connection = mock(BackendConnection.class);
when(connection.getSchemaName()).thenReturn("schema");
try {
- RDLBackendHandlerFactory.newInstance(mock(CreateShardingRuleStatement.class), connection);
+ RDLBackendHandlerFactory.newInstance(new MySQLDatabaseType(), mock(CreateShardingRuleStatement.class), connection);
} catch (final SQLException ex) {
assertThat(ex.getMessage(), is("No Registry center to execute `CreateShardingRuleStatement` SQL"));
}
setGovernanceMetaDataContexts(true);
- Optional<TextProtocolBackendHandler> rdlBackendHandler = RDLBackendHandlerFactory.newInstance(mock(CreateShardingRuleStatement.class), connection);
+ Optional<TextProtocolBackendHandler> rdlBackendHandler = RDLBackendHandlerFactory.newInstance(new MySQLDatabaseType(), mock(CreateShardingRuleStatement.class), connection);
assertTrue(rdlBackendHandler.isPresent());
ResponseHeader response = rdlBackendHandler.get().execute();
assertThat(response, instanceOf(UpdateResponseHeader.class));