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

zhangliang 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 f060e21  PostgreSQL Proxy support empty statement (#10340)
f060e21 is described below

commit f060e21cf400d26eedae8060d9cfe5cd33482aa5
Author: 吴伟杰 <[email protected]>
AuthorDate: Sat May 15 01:19:51 2021 +0800

    PostgreSQL Proxy support empty statement (#10340)
    
    * PostgreSQL Proxy support empty statement
    
    * Fix testcases
---
 .../query/PostgreSQLEmptyQueryResponsePacket.java   | 21 +++++++++++++--------
 .../PostgreSQLEmptyQueryResponsePacketTest.java     | 17 ++++++++---------
 .../text/TextProtocolBackendHandlerFactory.java     |  7 ++++---
 .../proxy/backend/text/skip/SkipBackendHandler.java |  7 ++++++-
 .../TransactionBackendHandlerFactory.java           |  2 +-
 .../backend/text/skip/SkipBackendHandlerTest.java   |  2 +-
 .../command/MySQLCommandExecutorFactoryTest.java    |  4 +++-
 .../text/query/MySQLComQueryPacketExecutorTest.java | 13 +++++++++++--
 .../query/text/PostgreSQLComQueryExecutor.java      |  7 +++++--
 .../PostgreSQLCommandExecutorFactoryTest.java       | 11 ++++++++++-
 .../query/text/PostgreSQLComQueryExecutorTest.java  |  1 +
 .../sql/common/statement/dml/EmptyStatement.java    | 14 ++++++--------
 12 files changed, 69 insertions(+), 37 deletions(-)

diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandler.java
 
b/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/PostgreSQLEmptyQueryResponsePacket.java
similarity index 50%
copy from 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandler.java
copy to 
shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/PostgreSQLEmptyQueryResponsePacket.java
index 429e622..fdd2815 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandler.java
+++ 
b/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/PostgreSQLEmptyQueryResponsePacket.java
@@ -15,19 +15,24 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.text.skip;
+package org.apache.shardingsphere.db.protocol.postgresql.packet.command.query;
 
-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.db.protocol.postgresql.packet.identifier.PostgreSQLIdentifierPacket;
+import 
org.apache.shardingsphere.db.protocol.postgresql.packet.identifier.PostgreSQLIdentifierTag;
+import 
org.apache.shardingsphere.db.protocol.postgresql.packet.identifier.PostgreSQLMessagePacketType;
+import 
org.apache.shardingsphere.db.protocol.postgresql.payload.PostgreSQLPacketPayload;
 
 /**
- * Skip backend handler.
+ * Empty query response packet for PostgreSQL.
  */
-public final class SkipBackendHandler implements TextProtocolBackendHandler {
+public final class PostgreSQLEmptyQueryResponsePacket implements 
PostgreSQLIdentifierPacket {
     
     @Override
-    public ResponseHeader execute() {
-        return new UpdateResponseHeader(null);
+    public void write(final PostgreSQLPacketPayload payload) {
+    }
+    
+    @Override
+    public PostgreSQLIdentifierTag getIdentifier() {
+        return PostgreSQLMessagePacketType.EMPTY_QUERY_RESPONSE;
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandlerTest.java
 
b/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/test/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/PostgreSQLEmptyQueryResponsePacketTest.java
similarity index 59%
copy from 
shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandlerTest.java
copy to 
shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/test/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/PostgreSQLEmptyQueryResponsePacketTest.java
index accba7d..82fd73d 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandlerTest.java
+++ 
b/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/test/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/PostgreSQLEmptyQueryResponsePacketTest.java
@@ -15,21 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.text.skip;
+package org.apache.shardingsphere.db.protocol.postgresql.packet.command.query;
 
-import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
+import 
org.apache.shardingsphere.db.protocol.postgresql.packet.identifier.PostgreSQLIdentifierTag;
+import 
org.apache.shardingsphere.db.protocol.postgresql.packet.identifier.PostgreSQLMessagePacketType;
 import org.junit.Test;
 
-import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
-public final class SkipBackendHandlerTest {
+public final class PostgreSQLEmptyQueryResponsePacketTest {
     
     @Test
-    public void assertExecuteSkipBackendHandler() {
-        SkipBackendHandler skipBackendHandler = new SkipBackendHandler();
-        ResponseHeader actual = skipBackendHandler.execute();
-        assertThat(actual, instanceOf(UpdateResponseHeader.class));
+    public void assertIdentifier() {
+        PostgreSQLIdentifierTag actual = new 
PostgreSQLEmptyQueryResponsePacket().getIdentifier();
+        assertThat(actual, 
is(PostgreSQLMessagePacketType.EMPTY_QUERY_RESPONSE));
     }
 }
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 4ebe9ef..95a58d9 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
@@ -37,6 +37,7 @@ import 
org.apache.shardingsphere.proxy.backend.text.sctl.utils.SCTLUtils;
 import org.apache.shardingsphere.proxy.backend.text.skip.SkipBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.text.transaction.TransactionBackendHandlerFactory;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.EmptyStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.TCLStatement;
 
 import java.sql.SQLException;
@@ -65,11 +66,11 @@ public final class TextProtocolBackendHandlerFactory {
      * @throws SQLException SQL exception
      */
     public static TextProtocolBackendHandler newInstance(final DatabaseType 
databaseType, final String sql, final BackendConnection backendConnection) 
throws SQLException {
-        if (Strings.isNullOrEmpty(sql)) {
-            return new SkipBackendHandler();
+        String trimSQL = SCTLUtils.trimComment(sql);
+        if (Strings.isNullOrEmpty(trimSQL)) {
+            return new SkipBackendHandler(new EmptyStatement());
         }
         // TODO Parse sctl SQL with ANTLR
-        String trimSQL = SCTLUtils.trimComment(sql);
         if 
(trimSQL.toUpperCase().startsWith(ShardingCTLBackendHandlerFactory.SCTL)) {
             return ShardingCTLBackendHandlerFactory.newInstance(trimSQL, 
backendConnection);
         }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandler.java
index 429e622..c9945b6 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandler.java
@@ -17,17 +17,22 @@
 
 package org.apache.shardingsphere.proxy.backend.text.skip;
 
+import lombok.RequiredArgsConstructor;
 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.SQLStatement;
 
 /**
  * Skip backend handler.
  */
+@RequiredArgsConstructor
 public final class SkipBackendHandler implements TextProtocolBackendHandler {
     
+    private final SQLStatement sqlStatement;
+    
     @Override
     public ResponseHeader execute() {
-        return new UpdateResponseHeader(null);
+        return new UpdateResponseHeader(sqlStatement);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionBackendHandlerFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionBackendHandlerFactory.java
index 2c152f0..e5d5d8a 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionBackendHandlerFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionBackendHandlerFactory.java
@@ -51,7 +51,7 @@ public final class TransactionBackendHandlerFactory {
         if (tclStatement instanceof SetAutoCommitStatement) {
             if (((SetAutoCommitStatement) tclStatement).isAutoCommit()) {
                 return 
backendConnection.getTransactionStatus().isInTransaction()
-                        ? new TransactionBackendHandler(tclStatement, 
TransactionOperationType.COMMIT, backendConnection) : new SkipBackendHandler();
+                        ? new TransactionBackendHandler(tclStatement, 
TransactionOperationType.COMMIT, backendConnection) : new 
SkipBackendHandler(tclStatement);
             }
             return new TransactionBackendHandler(tclStatement, 
TransactionOperationType.BEGIN, backendConnection);
         }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandlerTest.java
index accba7d..71282d3 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandlerTest.java
@@ -28,7 +28,7 @@ public final class SkipBackendHandlerTest {
     
     @Test
     public void assertExecuteSkipBackendHandler() {
-        SkipBackendHandler skipBackendHandler = new SkipBackendHandler();
+        SkipBackendHandler skipBackendHandler = new SkipBackendHandler(null);
         ResponseHeader actual = skipBackendHandler.execute();
         assertThat(actual, instanceOf(UpdateResponseHeader.class));
     }
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 c031d2f..c935912 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
@@ -108,7 +108,9 @@ public final class MySQLCommandExecutorFactoryTest {
     
     @Test
     public void assertNewInstanceWithComQuery() throws SQLException {
-        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_QUERY,
 mock(MySQLComQueryPacket.class), backendConnection), 
instanceOf(MySQLComQueryPacketExecutor.class));
+        MySQLComQueryPacket packet = mock(MySQLComQueryPacket.class);
+        when(packet.getSql()).thenReturn("");
+        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_QUERY,
 packet, backendConnection), instanceOf(MySQLComQueryPacketExecutor.class));
     }
     
     @Test
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 807d4c1..39ed500 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
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResp
 import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
 import org.apache.shardingsphere.proxy.frontend.command.executor.ResponseType;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -44,9 +45,17 @@ public final class MySQLComQueryPacketExecutorTest {
     @Mock
     private TextProtocolBackendHandler textProtocolBackendHandler;
     
+    @Mock
+    private MySQLComQueryPacket packet;
+    
+    @Before
+    public void setUp() {
+        when(packet.getSql()).thenReturn("");
+    }
+    
     @Test
     public void assertIsQueryResponse() throws SQLException, 
NoSuchFieldException {
-        MySQLComQueryPacketExecutor mysqlComQueryPacketExecutor = new 
MySQLComQueryPacketExecutor(mock(MySQLComQueryPacket.class), null);
+        MySQLComQueryPacketExecutor mysqlComQueryPacketExecutor = new 
MySQLComQueryPacketExecutor(packet, null);
         FieldSetter.setField(mysqlComQueryPacketExecutor, 
MySQLComQueryPacketExecutor.class.getDeclaredField("textProtocolBackendHandler"),
 textProtocolBackendHandler);
         when(textProtocolBackendHandler.execute()).thenReturn(new 
QueryResponseHeader(Collections.singletonList(mock(QueryHeader.class))));
         mysqlComQueryPacketExecutor.execute();
@@ -55,7 +64,7 @@ public final class MySQLComQueryPacketExecutorTest {
     
     @Test
     public void assertIsUpdateResponse() throws SQLException, 
NoSuchFieldException {
-        MySQLComQueryPacketExecutor mysqlComQueryPacketExecutor = new 
MySQLComQueryPacketExecutor(mock(MySQLComQueryPacket.class), null);
+        MySQLComQueryPacketExecutor mysqlComQueryPacketExecutor = new 
MySQLComQueryPacketExecutor(packet, 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/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 0381af1..17f414f 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
@@ -21,6 +21,7 @@ import lombok.Getter;
 import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.PostgreSQLPacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.PostgreSQLColumnDescription;
+import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.PostgreSQLEmptyQueryResponsePacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.PostgreSQLRowDescriptionPacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.text.PostgreSQLComQueryPacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.text.PostgreSQLDataRowPacket;
@@ -36,6 +37,7 @@ import 
org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandlerFa
 import 
org.apache.shardingsphere.proxy.frontend.command.executor.QueryCommandExecutor;
 import org.apache.shardingsphere.proxy.frontend.command.executor.ResponseType;
 import 
org.apache.shardingsphere.proxy.frontend.postgresql.command.query.PostgreSQLCommand;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.EmptyStatement;
 
 import java.sql.SQLException;
 import java.util.Collection;
@@ -87,8 +89,9 @@ public final class PostgreSQLComQueryExecutor implements 
QueryCommandExecutor {
         return result;
     }
     
-    private PostgreSQLCommandCompletePacket createUpdatePacket(final 
UpdateResponseHeader updateResponseHeader) {
-        return new PostgreSQLCommandCompletePacket(new 
PostgreSQLCommand(updateResponseHeader.getSqlStatement()).getSQLCommand(), 
updateResponseHeader.getUpdateCount());
+    private PostgreSQLPacket createUpdatePacket(final UpdateResponseHeader 
updateResponseHeader) {
+        return updateResponseHeader.getSqlStatement() instanceof 
EmptyStatement ? new PostgreSQLEmptyQueryResponsePacket()
+                : new PostgreSQLCommandCompletePacket(new 
PostgreSQLCommand(updateResponseHeader.getSqlStatement()).getSQLCommand(), 
updateResponseHeader.getUpdateCount());
     }
     
     @Override
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 b7851c3..0bcf87c 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
@@ -67,11 +67,20 @@ public final class PostgreSQLCommandExecutorFactoryTest {
             if (null == commandPacketClass) {
                 commandPacketClass = PostgreSQLCommandPacket.class;
             }
-            CommandExecutor actual = 
PostgreSQLCommandExecutorFactory.newInstance(inputOutput.getCommandPacketType(),
 mock(commandPacketClass), mock(BackendConnection.class));
+            PostgreSQLCommandPacket packet = preparePacket(commandPacketClass);
+            CommandExecutor actual = 
PostgreSQLCommandExecutorFactory.newInstance(inputOutput.getCommandPacketType(),
 packet, mock(BackendConnection.class));
             assertThat(actual, instanceOf(inputOutput.getResultClass()));
         }
     }
     
+    private PostgreSQLCommandPacket preparePacket(final Class<? extends 
PostgreSQLCommandPacket> commandPacketClass) {
+        PostgreSQLCommandPacket result = mock(commandPacketClass);
+        if (result instanceof PostgreSQLComQueryPacket) {
+            when(((PostgreSQLComQueryPacket) result).getSql()).thenReturn("");
+        }
+        return result;
+    }
+    
     @RequiredArgsConstructor
     @Getter
     private static final class InputOutput {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutorTest.java
index fa4a07a..60f7e96 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutorTest.java
@@ -64,6 +64,7 @@ public final class PostgreSQLComQueryExecutorTest {
     public void setUp() throws SQLException {
         PostgreSQLComQueryPacket queryPacket = 
mock(PostgreSQLComQueryPacket.class);
         BackendConnection backendConnection = mock(BackendConnection.class);
+        when(queryPacket.getSql()).thenReturn("");
         queryExecutor = new PostgreSQLComQueryExecutor(queryPacket, 
backendConnection);
         setMockFieldIntoExecutor(queryExecutor);
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandler.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dml/EmptyStatement.java
similarity index 62%
copy from 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandler.java
copy to 
shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dml/EmptyStatement.java
index 429e622..c6799d9 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/skip/SkipBackendHandler.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dml/EmptyStatement.java
@@ -15,19 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.text.skip;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.dml;
 
-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.SQLStatement;
 
 /**
- * Skip backend handler.
+ * Empty statement.
  */
-public final class SkipBackendHandler implements TextProtocolBackendHandler {
+public final class EmptyStatement implements SQLStatement {
     
     @Override
-    public ResponseHeader execute() {
-        return new UpdateResponseHeader(null);
+    public int getParameterCount() {
+        return 0;
     }
 }

Reply via email to