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 <[email protected]>
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));