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 05:45:52 UTC
[shardingsphere] branch master updated: Simplify RDL backend
handler (#8661)
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 622ce1e6 Simplify RDL backend handler (#8661)
622ce1e6 is described below
commit 622ce1e64449fd1c09239116475611c256fdf953
Author: Liang Zhang <te...@163.com>
AuthorDate: Thu Dec 17 13:45:25 2020 +0800
Simplify RDL backend handler (#8661)
* Refactor RDLBackendDetailHandler
* Remove RDLBackendDetailHandler
* Refactor RDLBackendHandler
* Rename RDLBackendHandlerFactory
* Static RDLBackendHandlerFactory
* Rename package from detail to impl
---
.../text/TextProtocolBackendHandlerFactory.java | 4 +-
.../text/distsql/DistSQLBackendHandlerFactory.java | 8 +--
...dHandler.java => RDLBackendHandlerFactory.java} | 57 ++++++++++++----------
.../distsql/rdl/SchemaRequiredBackendHandler.java | 17 ++++---
.../rdl/detail/RDLBackendDetailHandler.java | 41 ----------------
.../AddResourceBackendHandler.java | 15 ++++--
.../CreateDatabaseBackendHandler.java | 13 +++--
.../CreateShardingRuleBackendHandler.java | 10 ++--
.../DropDatabaseBackendHandler.java | 13 +++--
.../DropShardingRuleBackendHandler.java | 10 ++--
.../TextProtocolBackendHandlerFactoryTest.java | 31 ++++++------
...Test.java => RDLBackendHandlerFactoryTest.java} | 29 +++++------
.../mysql/command/MySQLCommandExecuteEngine.java | 2 +-
.../mysql/command/MySQLCommandExecutorFactory.java | 5 +-
.../text/query/MySQLComQueryPacketExecutor.java | 2 +-
.../command/MySQLCommandExecutorFactoryTest.java | 21 ++++----
.../query/MySQLComQueryPacketExecutorTest.java | 4 +-
.../command/PostgreSQLCommandExecuteEngine.java | 2 +-
.../command/PostgreSQLCommandExecutorFactory.java | 6 ++-
.../query/text/PostgreSQLComQueryExecutor.java | 2 +-
.../PostgreSQLCommandExecutorFactoryTest.java | 8 +--
.../frontend/command/CommandExecuteEngine.java | 3 +-
22 files changed, 152 insertions(+), 151 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 076e936..79ca868e 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
@@ -36,6 +36,7 @@ import org.apache.shardingsphere.proxy.backend.text.transaction.TransactionBacke
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.TCLStatement;
+import java.sql.SQLException;
import java.util.Optional;
import java.util.Properties;
@@ -56,8 +57,9 @@ public final class TextProtocolBackendHandlerFactory {
* @param sql SQL to be executed
* @param backendConnection backend connection
* @return text protocol backend handler
+ * @throws SQLException SQL exception
*/
- public static TextProtocolBackendHandler newInstance(final DatabaseType databaseType, final String sql, final BackendConnection backendConnection) {
+ public static TextProtocolBackendHandler newInstance(final DatabaseType databaseType, final String sql, final BackendConnection backendConnection) throws SQLException {
if (Strings.isNullOrEmpty(sql)) {
return new SkipBackendHandler();
}
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 a365a59..13baf7d 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
@@ -26,11 +26,12 @@ import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.Bac
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.RDLBackendHandler;
+import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.RDLBackendHandlerFactory;
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;
/**
@@ -45,8 +46,9 @@ public final class DistSQLBackendHandlerFactory {
* @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) {
+ 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));
}
@@ -54,7 +56,7 @@ public final class DistSQLBackendHandlerFactory {
return Optional.of(new DataSourcesQueryBackendHandler((ShowResourcesStatement) sqlStatement, backendConnection));
}
if (sqlStatement instanceof RDLStatement || sqlStatement instanceof CreateDatabaseStatement || sqlStatement instanceof DropDatabaseStatement) {
- return Optional.of(new RDLBackendHandler(sqlStatement, backendConnection));
+ return Optional.of(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/rdl/RDLBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/RDLBackendHandlerFactory.java
similarity index 62%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/RDLBackendHandler.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/RDLBackendHandlerFactory.java
index d73772f..14de2d6 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/RDLBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/RDLBackendHandlerFactory.java
@@ -17,7 +17,8 @@
package org.apache.shardingsphere.proxy.backend.text.distsql.rdl;
-import lombok.RequiredArgsConstructor;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
import org.apache.shardingsphere.distsql.parser.statement.rdl.create.impl.AddResourceStatement;
import org.apache.shardingsphere.distsql.parser.statement.rdl.create.impl.CreateShardingRuleStatement;
import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.impl.DropShardingRuleStatement;
@@ -25,13 +26,12 @@ import org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataCon
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail.AddResourceBackendHandler;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail.CreateDatabaseBackendHandler;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail.CreateShardingRuleBackendHandler;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail.DropDatabaseBackendHandler;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail.DropShardingRuleBackendHandler;
+import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl.AddResourceBackendHandler;
+import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl.CreateDatabaseBackendHandler;
+import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl.CreateShardingRuleBackendHandler;
+import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl.DropDatabaseBackendHandler;
+import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl.DropShardingRuleBackendHandler;
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;
@@ -39,43 +39,46 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabas
import java.sql.SQLException;
/**
- * RDL backend handler.
+ * RDL backend handler factory.
*/
-@RequiredArgsConstructor
-public final class RDLBackendHandler implements TextProtocolBackendHandler {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class RDLBackendHandlerFactory {
- private final SQLStatement sqlStatement;
-
- private final BackendConnection backendConnection;
+ /**
+ * Create new instance of RDL backend handler.
+ *
+ * @param sqlStatement SQL statement
+ * @param backendConnection backend connection
+ * @return RDL backend handler
+ * @throws SQLException SQL exception
+ */
+ public static TextProtocolBackendHandler newInstance(final SQLStatement sqlStatement, final BackendConnection backendConnection) throws SQLException {
+ checkRegistryCenterExisted(sqlStatement);
+ return createRDLBackendHandler(sqlStatement, backendConnection);
+ }
- @Override
- public ResponseHeader execute() throws SQLException {
- if (!isRegistryCenterExisted()) {
+ private static void checkRegistryCenterExisted(final SQLStatement sqlStatement) throws SQLException {
+ if (ProxyContext.getInstance().getMetaDataContexts() instanceof StandardMetaDataContexts) {
throw new SQLException(String.format("No Registry center to execute `%s` SQL", sqlStatement.getClass().getSimpleName()));
}
- return getResponseHeader(sqlStatement);
- }
-
- private boolean isRegistryCenterExisted() {
- return !(ProxyContext.getInstance().getMetaDataContexts() instanceof StandardMetaDataContexts);
}
- private ResponseHeader getResponseHeader(final SQLStatement sqlStatement) {
+ private static TextProtocolBackendHandler createRDLBackendHandler(final SQLStatement sqlStatement, final BackendConnection backendConnection) {
DatabaseType databaseType = ProxyContext.getInstance().getMetaDataContexts().getMetaData(backendConnection.getSchemaName()).getResource().getDatabaseType();
if (sqlStatement instanceof AddResourceStatement) {
- return new AddResourceBackendHandler().execute(databaseType, backendConnection, (AddResourceStatement) sqlStatement);
+ return new AddResourceBackendHandler(databaseType, (AddResourceStatement) sqlStatement, backendConnection);
}
if (sqlStatement instanceof CreateDatabaseStatement) {
- return new CreateDatabaseBackendHandler().execute(databaseType, backendConnection, (CreateDatabaseStatement) sqlStatement);
+ return new CreateDatabaseBackendHandler((CreateDatabaseStatement) sqlStatement);
}
if (sqlStatement instanceof CreateShardingRuleStatement) {
- return new CreateShardingRuleBackendHandler().execute(databaseType, backendConnection, (CreateShardingRuleStatement) sqlStatement);
+ return new CreateShardingRuleBackendHandler((CreateShardingRuleStatement) sqlStatement, backendConnection);
}
if (sqlStatement instanceof DropDatabaseStatement) {
- return new DropDatabaseBackendHandler().execute(databaseType, backendConnection, (DropDatabaseStatement) sqlStatement);
+ return new DropDatabaseBackendHandler((DropDatabaseStatement) sqlStatement);
}
if (sqlStatement instanceof DropShardingRuleStatement) {
- new DropShardingRuleBackendHandler().execute(databaseType, backendConnection, (DropShardingRuleStatement) sqlStatement);
+ return new DropShardingRuleBackendHandler((DropShardingRuleStatement) sqlStatement, backendConnection);
}
throw new UnsupportedOperationException(sqlStatement.getClass().getName());
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/SchemaRequiredBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/SchemaRequiredBackendHandler.java
index 312993e..4ea8152 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/SchemaRequiredBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/SchemaRequiredBackendHandler.java
@@ -17,13 +17,13 @@
package org.apache.shardingsphere.proxy.backend.text.distsql.rdl;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import lombok.RequiredArgsConstructor;
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.text.distsql.rdl.detail.RDLBackendDetailHandler;
+import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.available.FromSchemaAvailable;
@@ -35,16 +35,21 @@ import java.util.Optional;
*
* @param <T> type of SQL statement context
*/
-public abstract class SchemaRequiredBackendHandler<T extends SQLStatement> implements RDLBackendDetailHandler<T> {
+@RequiredArgsConstructor
+public abstract class SchemaRequiredBackendHandler<T extends SQLStatement> implements TextProtocolBackendHandler {
+
+ private final T sqlStatement;
+
+ private final BackendConnection backendConnection;
@Override
- public final ResponseHeader execute(final DatabaseType databaseType, final BackendConnection backendConnection, final T sqlStatement) {
+ public final ResponseHeader execute() {
String schemaName = getSchemaName(backendConnection, sqlStatement);
checkSchema(schemaName);
- return execute(databaseType, schemaName, sqlStatement);
+ return execute(schemaName, sqlStatement);
}
- protected abstract ResponseHeader execute(DatabaseType databaseType, String schemaName, T sqlStatement);
+ protected abstract ResponseHeader execute(String schemaName, T sqlStatement);
private String getSchemaName(final BackendConnection backendConnection, final T sqlStatement) {
Optional<SchemaSegment> schemaFromSQL = sqlStatement instanceof FromSchemaAvailable ? ((FromSchemaAvailable) sqlStatement).getSchema() : Optional.empty();
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/RDLBackendDetailHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/RDLBackendDetailHandler.java
deleted file mode 100644
index 4d3f821..0000000
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/RDLBackendDetailHandler.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail;
-
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
-import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-
-/**
- * RDL backend detail handler.
- *
- * @param <T> type of SQL statement
- */
-public interface RDLBackendDetailHandler<T extends SQLStatement> {
-
- /**
- * Execute detail.
- *
- * @param databaseType database type
- * @param backendConnection backend connection
- * @param sqlStatement SQL statement
- * @return response header
- */
- ResponseHeader execute(DatabaseType databaseType, BackendConnection backendConnection, T sqlStatement);
-}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/AddResourceBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/AddResourceBackendHandler.java
similarity index 85%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/AddResourceBackendHandler.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/AddResourceBackendHandler.java
index 995c910..7e546e4 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/AddResourceBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/AddResourceBackendHandler.java
@@ -15,8 +15,9 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl;
+import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.distsql.parser.statement.rdl.create.impl.AddResourceStatement;
import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourcePersistEvent;
import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
@@ -25,6 +26,7 @@ import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
+import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import org.apache.shardingsphere.proxy.config.util.DataSourceParameterConverter;
import org.apache.shardingsphere.proxy.converter.AddResourcesStatementConverter;
@@ -33,10 +35,17 @@ import java.util.Map;
/**
* Add resource backend handler.
*/
-public final class AddResourceBackendHandler implements RDLBackendDetailHandler<AddResourceStatement> {
+@RequiredArgsConstructor
+public final class AddResourceBackendHandler implements TextProtocolBackendHandler {
+
+ private final DatabaseType databaseType;
+
+ private final AddResourceStatement sqlStatement;
+
+ private final BackendConnection backendConnection;
@Override
- public ResponseHeader execute(final DatabaseType databaseType, final BackendConnection backendConnection, final AddResourceStatement sqlStatement) {
+ public ResponseHeader execute() {
Map<String, DataSourceConfiguration> dataSources = DataSourceParameterConverter.getDataSourceConfigurationMap(
DataSourceParameterConverter.getDataSourceParameterMapFromYamlConfiguration(AddResourcesStatementConverter.convert(databaseType, sqlStatement)));
post(backendConnection, dataSources);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/CreateDatabaseBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/CreateDatabaseBackendHandler.java
similarity index 83%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/CreateDatabaseBackendHandler.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/CreateDatabaseBackendHandler.java
index 60228b2..d16bd73 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/CreateDatabaseBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/CreateDatabaseBackendHandler.java
@@ -15,25 +15,28 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl;
+import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.governance.core.event.model.schema.SchemaNamePersistEvent;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
-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.DBCreateExistsException;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
+import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateDatabaseStatement;
/**
* Create database backend handler.
*/
-public final class CreateDatabaseBackendHandler implements RDLBackendDetailHandler<CreateDatabaseStatement> {
+@RequiredArgsConstructor
+public final class CreateDatabaseBackendHandler implements TextProtocolBackendHandler {
+
+ private final CreateDatabaseStatement sqlStatement;
@Override
- public ResponseHeader execute(final DatabaseType databaseType, final BackendConnection backendConnection, final CreateDatabaseStatement sqlStatement) {
+ public ResponseHeader execute() {
check(sqlStatement);
post(sqlStatement);
return new UpdateResponseHeader(sqlStatement);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/CreateShardingRuleBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/CreateShardingRuleBackendHandler.java
similarity index 86%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/CreateShardingRuleBackendHandler.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/CreateShardingRuleBackendHandler.java
index 477f45c..cc41ca1 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/CreateShardingRuleBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/CreateShardingRuleBackendHandler.java
@@ -15,14 +15,14 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl;
import org.apache.shardingsphere.distsql.parser.statement.rdl.create.impl.CreateShardingRuleStatement;
import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsPersistEvent;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
+import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.SchemaRequiredBackendHandler;
@@ -37,8 +37,12 @@ import java.util.Collections;
*/
public final class CreateShardingRuleBackendHandler extends SchemaRequiredBackendHandler<CreateShardingRuleStatement> {
+ public CreateShardingRuleBackendHandler(final CreateShardingRuleStatement sqlStatement, final BackendConnection backendConnection) {
+ super(sqlStatement, backendConnection);
+ }
+
@Override
- public ResponseHeader execute(final DatabaseType databaseType, final String schemaName, final CreateShardingRuleStatement sqlStatement) {
+ public ResponseHeader execute(final String schemaName, final CreateShardingRuleStatement sqlStatement) {
YamlShardingRuleConfiguration config = CreateShardingRuleStatementConverter.convert(sqlStatement);
Collection<RuleConfiguration> rules = new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(Collections.singleton(config));
post(schemaName, rules);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/DropDatabaseBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropDatabaseBackendHandler.java
similarity index 83%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/DropDatabaseBackendHandler.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropDatabaseBackendHandler.java
index 1cfc0ae..63354b3 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/DropDatabaseBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropDatabaseBackendHandler.java
@@ -15,25 +15,28 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl;
+import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.governance.core.event.model.schema.SchemaNamePersistEvent;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
-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.DBCreateExistsException;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
+import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
/**
* Drop database backend handler.
*/
-public final class DropDatabaseBackendHandler implements RDLBackendDetailHandler<DropDatabaseStatement> {
+@RequiredArgsConstructor
+public final class DropDatabaseBackendHandler implements TextProtocolBackendHandler {
+
+ private final DropDatabaseStatement sqlStatement;
@Override
- public ResponseHeader execute(final DatabaseType databaseType, final BackendConnection backendConnection, final DropDatabaseStatement sqlStatement) {
+ public ResponseHeader execute() {
check(sqlStatement);
post(sqlStatement);
return new UpdateResponseHeader(sqlStatement);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/DropShardingRuleBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingRuleBackendHandler.java
similarity index 94%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/DropShardingRuleBackendHandler.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingRuleBackendHandler.java
index c00d137..7be1ca8 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/detail/DropShardingRuleBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingRuleBackendHandler.java
@@ -15,14 +15,14 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.detail;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl;
import com.google.common.base.Preconditions;
import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.impl.DropShardingRuleStatement;
import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsPersistEvent;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+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.ShardingTableRuleNotExistedException;
import org.apache.shardingsphere.proxy.backend.exception.TablesInUsedException;
@@ -43,8 +43,12 @@ import java.util.stream.Collectors;
*/
public final class DropShardingRuleBackendHandler extends SchemaRequiredBackendHandler<DropShardingRuleStatement> {
+ public DropShardingRuleBackendHandler(final DropShardingRuleStatement sqlStatement, final BackendConnection backendConnection) {
+ super(sqlStatement, backendConnection);
+ }
+
@Override
- public ResponseHeader execute(final DatabaseType databaseType, final String schemaName, final DropShardingRuleStatement sqlStatement) {
+ public ResponseHeader execute(final String schemaName, final DropShardingRuleStatement sqlStatement) {
Collection<String> tableNames = sqlStatement.getTableNames().stream().map(each -> each.getIdentifier().getValue()).collect(Collectors.toList());
check(schemaName, tableNames);
drop(schemaName, tableNames);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/TextProtocolBackendHandlerFactoryTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/TextProtocolBackendHandlerFactoryTest.java
index c443967..d424d1c 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/TextProtocolBackendHandlerFactoryTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/TextProtocolBackendHandlerFactoryTest.java
@@ -44,6 +44,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.lang.reflect.Field;
+import java.sql.SQLException;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;
@@ -80,49 +81,49 @@ public final class TextProtocolBackendHandlerFactoryTest {
}
@Test
- public void assertNewInstanceWithSCTL() {
+ public void assertNewInstanceWithSCTL() throws SQLException {
String sql = "sctl:set transaction_type=XA";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(ShardingCTLSetBackendHandler.class));
}
@Test
- public void assertNewInstanceSCTLWithComment() {
+ public void assertNewInstanceSCTLWithComment() throws SQLException {
String sql = "/*ApplicationName=DataGrip 2018.1.4*/ sctl:show cached_connections;";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(ShardingCTLShowBackendHandler.class));
}
@Test
- public void assertNewInstanceWithBegin() {
+ public void assertNewInstanceWithBegin() throws SQLException {
String sql = "BEGIN";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(TransactionBackendHandler.class));
}
@Test
- public void assertNewInstanceWithStartTransaction() {
+ public void assertNewInstanceWithStartTransaction() throws SQLException {
String sql = "START TRANSACTION";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(TransactionBackendHandler.class));
}
@Test
- public void assertNewInstanceWithSetAutoCommitToOff() {
+ public void assertNewInstanceWithSetAutoCommitToOff() throws SQLException {
String sql = "SET AUTOCOMMIT=0";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(TransactionBackendHandler.class));
}
@Test
- public void assertNewInstanceWithScopeSetAutoCommitToOff() {
+ public void assertNewInstanceWithScopeSetAutoCommitToOff() throws SQLException {
String sql = "SET @@SESSION.AUTOCOMMIT = OFF";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(TransactionBackendHandler.class));
}
@Test
- public void assertNewInstanceWithSetAutoCommitToOnForInTransaction() {
+ public void assertNewInstanceWithSetAutoCommitToOnForInTransaction() throws SQLException {
when(backendConnection.getTransactionStatus().isInTransaction()).thenReturn(true);
String sql = "SET AUTOCOMMIT=1";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
@@ -130,7 +131,7 @@ public final class TextProtocolBackendHandlerFactoryTest {
}
@Test
- public void assertNewInstanceWithScopeSetAutoCommitToOnForInTransaction() {
+ public void assertNewInstanceWithScopeSetAutoCommitToOnForInTransaction() throws SQLException {
when(backendConnection.getTransactionStatus().isInTransaction()).thenReturn(true);
String sql = "SET @@SESSION.AUTOCOMMIT = ON";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
@@ -138,7 +139,7 @@ public final class TextProtocolBackendHandlerFactoryTest {
}
@Test
- public void assertNewInstanceWithSetAutoCommitToOnForNotInTransaction() {
+ public void assertNewInstanceWithSetAutoCommitToOnForNotInTransaction() throws SQLException {
String sql = "SET AUTOCOMMIT=1";
when(backendConnection.getTransactionStatus().isInTransaction()).thenReturn(false);
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
@@ -146,28 +147,28 @@ public final class TextProtocolBackendHandlerFactoryTest {
}
@Test
- public void assertNewInstanceWithUse() {
+ public void assertNewInstanceWithUse() throws SQLException {
String sql = "use sharding_db";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(UseDatabaseBackendHandler.class));
}
@Test
- public void assertNewInstanceWithShowDatabase() {
+ public void assertNewInstanceWithShowDatabase() throws SQLException {
String sql = "show databases";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(ShowDatabasesBackendHandler.class));
}
@Test
- public void assertNewInstanceWithSet() {
+ public void assertNewInstanceWithSet() throws SQLException {
String sql = "set @num=1";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(BroadcastDatabaseBackendHandler.class));
}
@Test
- public void assertNewInstanceWithShow() {
+ public void assertNewInstanceWithShow() throws SQLException {
String sql = "SHOW VARIABLES LIKE '%x%'";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(UnicastDatabaseBackendHandler.class));
@@ -183,14 +184,14 @@ public final class TextProtocolBackendHandlerFactoryTest {
}
@Test
- public void assertNewInstanceWithQuery() {
+ public void assertNewInstanceWithQuery() throws SQLException {
String sql = "select * from t_order limit 1";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(SchemaAssignedDatabaseBackendHandler.class));
}
@Test
- public void assertNewInstanceWithEmptyString() {
+ public void assertNewInstanceWithEmptyString() throws SQLException {
String sql = "";
TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection);
assertThat(actual, instanceOf(SkipBackendHandler.class));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/RDLBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/RDLBackendHandlerFactoryTest.java
similarity index 89%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/RDLBackendHandlerTest.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/RDLBackendHandlerFactoryTest.java
index f7de396..758040f 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/RDLBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/RDLBackendHandlerFactoryTest.java
@@ -32,7 +32,7 @@ import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.exception.DBCreateExistsException;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.RDLBackendHandler;
+import org.apache.shardingsphere.proxy.backend.text.distsql.rdl.RDLBackendHandlerFactory;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateDatabaseStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.ddl.MySQLCreateDatabaseStatement;
@@ -57,7 +57,7 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-public final class RDLBackendHandlerTest {
+public final class RDLBackendHandlerFactoryTest {
@Before
public void setUp() throws IllegalAccessException, NoSuchFieldException {
@@ -81,14 +81,13 @@ public final class RDLBackendHandlerTest {
BackendConnection connection = mock(BackendConnection.class);
when(connection.getSchemaName()).thenReturn("schema");
sqlStatement.setDatabaseName("new_db");
- RDLBackendHandler executeEngine = new RDLBackendHandler(sqlStatement, connection);
try {
- executeEngine.execute();
+ RDLBackendHandlerFactory.newInstance(sqlStatement, connection);
} catch (final SQLException ex) {
assertThat(ex.getMessage(), is(String.format("No Registry center to execute `%s` SQL", sqlStatement.getClass().getSimpleName())));
}
setGovernanceMetaDataContexts(true);
- ResponseHeader response = executeEngine.execute();
+ ResponseHeader response = RDLBackendHandlerFactory.newInstance(sqlStatement, connection).execute();
assertThat(response, instanceOf(UpdateResponseHeader.class));
}
@@ -106,14 +105,13 @@ public final class RDLBackendHandlerTest {
BackendConnection connection = mock(BackendConnection.class);
when(connection.getSchemaName()).thenReturn("schema");
sqlStatement.setDatabaseName("schema");
- RDLBackendHandler executeEngine = new RDLBackendHandler(sqlStatement, connection);
try {
- executeEngine.execute();
+ RDLBackendHandlerFactory.newInstance(sqlStatement, connection);
} catch (final SQLException ex) {
assertThat(ex.getMessage(), is(String.format("No Registry center to execute `%s` SQL", sqlStatement.getClass().getSimpleName())));
}
setGovernanceMetaDataContexts(true);
- ResponseHeader response = executeEngine.execute();
+ ResponseHeader response = RDLBackendHandlerFactory.newInstance(sqlStatement, connection).execute();
assertThat(response, instanceOf(UpdateResponseHeader.class));
}
@@ -131,15 +129,14 @@ public final class RDLBackendHandlerTest {
BackendConnection connection = mock(BackendConnection.class);
when(connection.getSchemaName()).thenReturn("schema");
sqlStatement.setDatabaseName("schema");
- RDLBackendHandler executeEngine = new RDLBackendHandler(sqlStatement, connection);
try {
- executeEngine.execute();
+ RDLBackendHandlerFactory.newInstance(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 {
- executeEngine.execute();
+ RDLBackendHandlerFactory.newInstance(sqlStatement, connection);
} catch (final DBCreateExistsException ex) {
assertNull(ex.getMessage());
}
@@ -155,14 +152,13 @@ public final class RDLBackendHandlerTest {
public void assertExecuteDataSourcesContext() throws SQLException {
BackendConnection connection = mock(BackendConnection.class);
when(connection.getSchemaName()).thenReturn("schema");
- RDLBackendHandler executeEngine = new RDLBackendHandler(mock(AddResourceStatement.class), connection);
try {
- executeEngine.execute();
+ RDLBackendHandlerFactory.newInstance(mock(AddResourceStatement.class), connection);
} catch (final SQLException ex) {
assertThat(ex.getMessage(), is("No Registry center to execute `AddResourceStatement` SQL"));
}
setGovernanceMetaDataContexts(true);
- ResponseHeader response = executeEngine.execute();
+ ResponseHeader response = RDLBackendHandlerFactory.newInstance(mock(AddResourceStatement.class), connection).execute();
assertThat(response, instanceOf(UpdateResponseHeader.class));
}
@@ -170,14 +166,13 @@ public final class RDLBackendHandlerTest {
public void assertExecuteShardingRuleContext() throws SQLException {
BackendConnection connection = mock(BackendConnection.class);
when(connection.getSchemaName()).thenReturn("schema");
- RDLBackendHandler executeEngine = new RDLBackendHandler(mock(CreateShardingRuleStatement.class), connection);
try {
- executeEngine.execute();
+ RDLBackendHandlerFactory.newInstance(mock(CreateShardingRuleStatement.class), connection);
} catch (final SQLException ex) {
assertThat(ex.getMessage(), is("No Registry center to execute `CreateShardingRuleStatement` SQL"));
}
setGovernanceMetaDataContexts(true);
- ResponseHeader response = executeEngine.execute();
+ ResponseHeader response = RDLBackendHandlerFactory.newInstance(mock(CreateShardingRuleStatement.class), connection).execute();
assertThat(response, instanceOf(UpdateResponseHeader.class));
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecuteEngine.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecuteEngine.java
index 84e3b59..9e2df1f 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecuteEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecuteEngine.java
@@ -56,7 +56,7 @@ public final class MySQLCommandExecuteEngine implements CommandExecuteEngine {
}
@Override
- public CommandExecutor getCommandExecutor(final CommandPacketType type, final CommandPacket packet, final BackendConnection backendConnection) {
+ public CommandExecutor getCommandExecutor(final CommandPacketType type, final CommandPacket packet, final BackendConnection backendConnection) throws SQLException {
return MySQLCommandExecutorFactory.newInstance((MySQLCommandPacketType) type, packet, backendConnection);
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
index 5b4fce5..0ea7afd 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
@@ -42,6 +42,8 @@ import org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.reset
import org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.fieldlist.MySQLComFieldListPacketExecutor;
import org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.query.MySQLComQueryPacketExecutor;
+import java.sql.SQLException;
+
/**
* Command executor factory for MySQL.
*/
@@ -56,8 +58,9 @@ public final class MySQLCommandExecutorFactory {
* @param commandPacket command packet for MySQL
* @param backendConnection backend connection
* @return command executor
+ * @throws SQLException SQL exception
*/
- public static CommandExecutor newInstance(final MySQLCommandPacketType commandPacketType, final CommandPacket commandPacket, final BackendConnection backendConnection) {
+ public static CommandExecutor newInstance(final MySQLCommandPacketType commandPacketType, final CommandPacket commandPacket, final BackendConnection backendConnection) throws SQLException {
log.debug("Execute packet type: {}, value: {}", commandPacketType, commandPacket);
switch (commandPacketType) {
case COM_QUIT:
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
index c7cde6b..9984604 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
@@ -48,7 +48,7 @@ public final class MySQLComQueryPacketExecutor implements QueryCommandExecutor {
private int currentSequenceId;
- public MySQLComQueryPacketExecutor(final MySQLComQueryPacket packet, final BackendConnection backendConnection) {
+ public MySQLComQueryPacketExecutor(final MySQLComQueryPacket packet, final BackendConnection backendConnection) throws SQLException {
textProtocolBackendHandler = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypeRegistry.getActualDatabaseType("MySQL"), packet.getSql(), backendConnection);
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
index d7a348b..fc9fd92 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
@@ -51,6 +51,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.lang.reflect.Field;
+import java.sql.SQLException;
import java.util.Collections;
import java.util.Map;
import java.util.Properties;
@@ -79,59 +80,59 @@ public final class MySQLCommandExecutorFactoryTest {
}
@Test
- public void assertNewInstanceWithComQuit() {
+ public void assertNewInstanceWithComQuit() throws SQLException {
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_QUIT, mock(CommandPacket.class), backendConnection), instanceOf(MySQLComQuitExecutor.class));
}
@Test
- public void assertNewInstanceWithComInitDb() {
+ public void assertNewInstanceWithComInitDb() throws SQLException {
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_INIT_DB, mock(MySQLComInitDbPacket.class), backendConnection), instanceOf(MySQLComInitDbExecutor.class));
}
@Test
- public void assertNewInstanceWithComFieldList() {
+ public void assertNewInstanceWithComFieldList() throws SQLException {
MySQLComFieldListPacket packet = mock(MySQLComFieldListPacket.class);
when(packet.getTable()).thenReturn("test");
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_FIELD_LIST, packet, backendConnection), instanceOf(MySQLComFieldListPacketExecutor.class));
}
@Test
- public void assertNewInstanceWithComQuery() {
+ public void assertNewInstanceWithComQuery() throws SQLException {
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_QUERY, mock(MySQLComQueryPacket.class), backendConnection), instanceOf(MySQLComQueryPacketExecutor.class));
}
@Test
- public void assertNewInstanceWithComPing() {
+ public void assertNewInstanceWithComPing() throws SQLException {
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_PING, mock(CommandPacket.class), backendConnection), instanceOf(MySQLComPingExecutor.class));
}
@Test
- public void assertNewInstanceWithComStmtPrepare() {
+ public void assertNewInstanceWithComStmtPrepare() throws SQLException {
assertThat(MySQLCommandExecutorFactory.newInstance(
MySQLCommandPacketType.COM_STMT_PREPARE, mock(MySQLComStmtPreparePacket.class), backendConnection), instanceOf(MySQLComStmtPrepareExecutor.class));
}
@Test
- public void assertNewInstanceWithComStmtExecute() {
+ public void assertNewInstanceWithComStmtExecute() throws SQLException {
MySQLComStmtExecutePacket packet = mock(MySQLComStmtExecutePacket.class);
when(packet.getSql()).thenReturn("SELECT 1");
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_STMT_EXECUTE, packet, backendConnection), instanceOf(MySQLComStmtExecuteExecutor.class));
}
@Test
- public void assertNewInstanceWithComStmtReset() {
+ public void assertNewInstanceWithComStmtReset() throws SQLException {
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_STMT_RESET,
mock(MySQLComStmtResetPacket.class), backendConnection), instanceOf(MySQLComStmtResetExecutor.class));
}
@Test
- public void assertNewInstanceWithComStmtClose() {
+ public void assertNewInstanceWithComStmtClose() throws SQLException {
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_STMT_CLOSE,
mock(MySQLComStmtClosePacket.class), backendConnection), instanceOf(MySQLComStmtCloseExecutor.class));
}
@Test
- public void assertNewInstanceWithUnsupportedCommand() {
+ public void assertNewInstanceWithUnsupportedCommand() throws SQLException {
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_REFRESH,
mock(CommandPacket.class), backendConnection), instanceOf(MySQLUnsupportedCommandExecutor.class));
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutorTest.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutorTest.java
index 9e491ba..807d4c1 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutorTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutorTest.java
@@ -44,10 +44,9 @@ public final class MySQLComQueryPacketExecutorTest {
@Mock
private TextProtocolBackendHandler textProtocolBackendHandler;
- private final MySQLComQueryPacketExecutor mysqlComQueryPacketExecutor = new MySQLComQueryPacketExecutor(mock(MySQLComQueryPacket.class), null);
-
@Test
public void assertIsQueryResponse() throws SQLException, NoSuchFieldException {
+ MySQLComQueryPacketExecutor mysqlComQueryPacketExecutor = new MySQLComQueryPacketExecutor(mock(MySQLComQueryPacket.class), null);
FieldSetter.setField(mysqlComQueryPacketExecutor, MySQLComQueryPacketExecutor.class.getDeclaredField("textProtocolBackendHandler"), textProtocolBackendHandler);
when(textProtocolBackendHandler.execute()).thenReturn(new QueryResponseHeader(Collections.singletonList(mock(QueryHeader.class))));
mysqlComQueryPacketExecutor.execute();
@@ -56,6 +55,7 @@ public final class MySQLComQueryPacketExecutorTest {
@Test
public void assertIsUpdateResponse() throws SQLException, NoSuchFieldException {
+ MySQLComQueryPacketExecutor mysqlComQueryPacketExecutor = new MySQLComQueryPacketExecutor(mock(MySQLComQueryPacket.class), null);
FieldSetter.setField(mysqlComQueryPacketExecutor, MySQLComQueryPacketExecutor.class.getDeclaredField("textProtocolBackendHandler"), textProtocolBackendHandler);
when(textProtocolBackendHandler.execute()).thenReturn(new UpdateResponseHeader(mock(SQLStatement.class)));
mysqlComQueryPacketExecutor.execute();
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngine.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngine.java
index c6c7a34..4e2d2f1 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngine.java
@@ -57,7 +57,7 @@ public final class PostgreSQLCommandExecuteEngine implements CommandExecuteEngin
}
@Override
- public CommandExecutor getCommandExecutor(final CommandPacketType type, final CommandPacket packet, final BackendConnection backendConnection) {
+ public CommandExecutor getCommandExecutor(final CommandPacketType type, final CommandPacket packet, final BackendConnection backendConnection) throws SQLException {
return PostgreSQLCommandExecutorFactory.newInstance((PostgreSQLCommandPacketType) type, (PostgreSQLCommandPacket) packet, backendConnection);
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactory.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactory.java
index 25dd60a..6cb4e52 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactory.java
@@ -36,6 +36,8 @@ import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.binary.
import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.binary.sync.PostgreSQLComSyncExecutor;
import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.text.PostgreSQLComQueryExecutor;
+import java.sql.SQLException;
+
/**
* Command executor factory for PostgreSQL.
*/
@@ -50,8 +52,10 @@ public final class PostgreSQLCommandExecutorFactory {
* @param commandPacket command packet for PostgreSQL
* @param backendConnection backend connection
* @return command executor
+ * @throws SQLException SQL exception
*/
- public static CommandExecutor newInstance(final PostgreSQLCommandPacketType commandPacketType, final PostgreSQLCommandPacket commandPacket, final BackendConnection backendConnection) {
+ public static CommandExecutor newInstance(final PostgreSQLCommandPacketType commandPacketType,
+ final PostgreSQLCommandPacket commandPacket, final BackendConnection backendConnection) throws SQLException {
log.debug("Execute packet type: {}, value: {}", commandPacketType, commandPacket);
switch (commandPacketType) {
case QUERY:
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutor.java
index eb5c811..d85e0b5 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutor.java
@@ -54,7 +54,7 @@ public final class PostgreSQLComQueryExecutor implements QueryCommandExecutor {
@Getter
private volatile ResponseType responseType;
- public PostgreSQLComQueryExecutor(final PostgreSQLComQueryPacket comQueryPacket, final BackendConnection backendConnection) {
+ public PostgreSQLComQueryExecutor(final PostgreSQLComQueryPacket comQueryPacket, final BackendConnection backendConnection) throws SQLException {
textProtocolBackendHandler = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypeRegistry.getActualDatabaseType("PostgreSQL"), comQueryPacket.getSql(), backendConnection);
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactoryTest.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactoryTest.java
index 5b4347e..1909c14 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactoryTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactoryTest.java
@@ -17,8 +17,6 @@
package org.apache.shardingsphere.proxy.frontend.postgresql.command;
-import java.util.Arrays;
-import java.util.Collection;
import lombok.AllArgsConstructor;
import org.apache.shardingsphere.db.protocol.postgresql.packet.command.PostgreSQLCommandPacket;
import org.apache.shardingsphere.db.protocol.postgresql.packet.command.PostgreSQLCommandPacketType;
@@ -37,6 +35,10 @@ import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.binary.
import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.text.PostgreSQLComQueryExecutor;
import org.junit.Test;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Collection;
+
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
@@ -45,7 +47,7 @@ import static org.mockito.Mockito.when;
public final class PostgreSQLCommandExecutorFactoryTest {
@Test
- public void assertNewInstance() {
+ public void assertNewInstance() throws SQLException {
BackendConnection backendConnection = mock(BackendConnection.class);
when(backendConnection.getSchemaName()).thenReturn("schema");
Collection<InputOutput> inputOutputs = Arrays.asList(
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecuteEngine.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecuteEngine.java
index 023f98d..29eb6d0 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecuteEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecuteEngine.java
@@ -60,8 +60,9 @@ public interface CommandExecuteEngine {
* @param packet command packet
* @param backendConnection backend connection
* @return command executor
+ * @throws SQLException SQL exception
*/
- CommandExecutor getCommandExecutor(CommandPacketType type, CommandPacket packet, BackendConnection backendConnection);
+ CommandExecutor getCommandExecutor(CommandPacketType type, CommandPacket packet, BackendConnection backendConnection) throws SQLException;
/**
* Get error packet.