You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/06/28 10:21:41 UTC

[shardingsphere] branch master updated: Unify row type reply from proxy-backend (#18656)

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

panjuan 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 4e33fb4849e Unify row type reply from proxy-backend (#18656)
4e33fb4849e is described below

commit 4e33fb4849eb27fabf5e1dc7bcf855165d3190fc
Author: 吴伟杰 <wu...@apache.org>
AuthorDate: Tue Jun 28 18:21:36 2022 +0800

    Unify row type reply from proxy-backend (#18656)
    
    * Unify row type reply from proxy-backend
    
    * Complete tests related to QueryResponseRow
    
    * Complete tests in proxy-frontend
---
 .../backend/response/data/QueryResponseRow.java    | 14 ++++++----
 .../backend/text/TextProtocolBackendHandler.java   |  6 ++--
 .../admin/DatabaseAdminQueryBackendHandler.java    | 12 ++++----
 .../executor/UnicastResourceShowExecutor.java      |  7 ++---
 .../impl/SchemaAssignedDatabaseBackendHandler.java |  6 ++--
 .../data/impl/UnicastDatabaseBackendHandler.java   |  5 ++--
 .../distsql/ral/QueryableRALBackendHandler.java    |  4 +--
 .../ral/common/HintDistSQLBackendHandler.java      |  6 ++--
 .../query/QueryableScalingRALBackendHandler.java   | 11 ++++++--
 .../text/distsql/rql/RQLBackendHandler.java        | 12 ++++++--
 .../text/transaction/TransactionXAHandler.java     |  6 ++--
 .../response/data/QueryResponseRowTest.java        |  7 +++--
 .../DatabaseAdminQueryBackendHandlerTest.java      |  2 +-
 .../SchemaAssignedDatabaseBackendHandlerTest.java  |  2 +-
 .../impl/UnicastDatabaseBackendHandlerTest.java    |  2 +-
 .../ral/advance/ParseDistSQLHandlerTest.java       |  4 +--
 .../queryable/CountInstanceRulesHandlerTest.java   | 32 +++++++++++-----------
 .../ExportDatabaseConfigurationHandlerTest.java    |  4 +--
 .../queryable/ShowAuthorityRuleHandlerTest.java    |  3 +-
 .../queryable/ShowInstanceModeHandlerTest.java     |  3 +-
 .../queryable/ShowSQLParserRuleHandlerTest.java    |  3 +-
 .../queryable/ShowTableMetadataHandlerTest.java    |  5 ++--
 .../queryable/ShowTrafficRulesHandlerTest.java     |  3 +-
 .../queryable/ShowTransactionRuleHandlerTest.java  |  5 ++--
 .../queryable/ShowVariableBackendHandlerTest.java  | 11 ++++----
 .../text/distsql/rql/RQLBackendHandlerTest.java    |  2 +-
 .../text/query/MySQLComQueryPacketExecutor.java    |  2 +-
 .../query/simple/OpenGaussComQueryExecutor.java    |  2 +-
 .../simple/OpenGaussComQueryExecutorTest.java      |  2 ++
 .../command/query/extended/JDBCPortal.java         |  3 +-
 .../query/simple/PostgreSQLComQueryExecutor.java   |  2 +-
 .../simple/PostgreSQLComQueryExecutorTest.java     |  2 ++
 .../query/ReactiveMySQLComQueryPacketExecutor.java |  2 +-
 33 files changed, 104 insertions(+), 88 deletions(-)

diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRow.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRow.java
index 98fc13f78c9..8f274ec5061 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRow.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRow.java
@@ -20,8 +20,8 @@ package org.apache.shardingsphere.proxy.backend.response.data;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 
-import java.util.Collection;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Query response row.
@@ -30,14 +30,18 @@ import java.util.stream.Collectors;
 @Getter
 public final class QueryResponseRow {
     
-    private final Collection<QueryResponseCell> cells;
+    private final List<QueryResponseCell> cells;
     
     /**
      * Get row data.
      * 
      * @return row data
      */
-    public Collection<Object> getData() {
-        return cells.stream().map(QueryResponseCell::getData).collect(Collectors.toList());
+    public List<Object> getData() {
+        List<Object> result = new ArrayList<>(cells.size());
+        for (QueryResponseCell cell : cells) {
+            result.add(cell.getData());
+        }
+        return result;
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandler.java
index f5122816edb..31d9042f2eb 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandler.java
@@ -18,10 +18,10 @@
 package org.apache.shardingsphere.proxy.backend.text;
 
 import io.vertx.core.Future;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 
 import java.sql.SQLException;
-import java.util.Collection;
 import java.util.Collections;
 
 /**
@@ -66,8 +66,8 @@ public interface TextProtocolBackendHandler {
      * @return row data
      * @throws SQLException SQL exception
      */
-    default Collection<Object> getRowData() throws SQLException {
-        return Collections.emptyList();
+    default QueryResponseRow getRowData() throws SQLException {
+        return new QueryResponseRow(Collections.emptyList());
     }
     
     /**
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java
index 72544364f65..45f753498a0 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java
@@ -23,6 +23,8 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryRe
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilderEngine;
@@ -33,8 +35,6 @@ import org.apache.shardingsphere.proxy.backend.text.admin.executor.DatabaseAdmin
 
 import java.sql.SQLException;
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedList;
 import java.util.List;
 
 /**
@@ -76,11 +76,11 @@ public final class DatabaseAdminQueryBackendHandler implements TextProtocolBacke
     }
     
     @Override
-    public Collection<Object> getRowData() throws SQLException {
-        Collection<Object> result = new LinkedList<>();
+    public QueryResponseRow getRowData() throws SQLException {
+        List<QueryResponseCell> result = new ArrayList<>(queryResultMetaData.getColumnCount());
         for (int columnIndex = 1; columnIndex <= queryResultMetaData.getColumnCount(); columnIndex++) {
-            result.add(mergedResult.getValue(columnIndex, Object.class));
+            result.add(new QueryResponseCell(queryResultMetaData.getColumnType(columnIndex), mergedResult.getValue(columnIndex, Object.class)));
         }
-        return result;
+        return new QueryResponseRow(result);
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UnicastResourceShowExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UnicastResourceShowExecutor.java
index eab996376c9..857d42a1c6d 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UnicastResourceShowExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UnicastResourceShowExecutor.java
@@ -35,15 +35,14 @@ import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException;
 import org.apache.shardingsphere.proxy.backend.exception.RuleNotExistedException;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
+import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.admin.executor.DatabaseAdminQueryExecutor;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 
 import java.sql.SQLException;
 import java.sql.Types;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
@@ -112,8 +111,8 @@ public final class UnicastResourceShowExecutor implements DatabaseAdminQueryExec
     private QueryResult createQueryResult() throws SQLException {
         List<MemoryQueryResultDataRow> rows = new LinkedList<>();
         while (databaseCommunicationEngine.next()) {
-            Collection<Object> data = databaseCommunicationEngine.getQueryResponseRow().getData();
-            rows.add(new MemoryQueryResultDataRow(new ArrayList<>(data)));
+            List<Object> data = databaseCommunicationEngine.getQueryResponseRow().getData();
+            rows.add(new MemoryQueryResultDataRow(data));
         }
         return new RawMemoryQueryResult(getQueryResultMetaData(), rows);
     }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandler.java
index 870157a6f89..96d4159e2b2 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandler.java
@@ -33,13 +33,13 @@ import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicati
 import org.apache.shardingsphere.proxy.backend.communication.jdbc.JDBCDatabaseCommunicationEngine;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.exception.RuleNotExistedException;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.data.DatabaseBackendHandler;
 import org.apache.shardingsphere.sharding.merge.ddl.fetch.FetchOrderByValueGroupsHolder;
 
 import java.sql.SQLException;
-import java.util.Collection;
 
 /**
  * Database backend handler with assigned schema.
@@ -123,8 +123,8 @@ public final class SchemaAssignedDatabaseBackendHandler implements DatabaseBacke
     }
     
     @Override
-    public Collection<Object> getRowData() throws SQLException {
-        return databaseCommunicationEngine.getQueryResponseRow().getData();
+    public QueryResponseRow getRowData() throws SQLException {
+        return databaseCommunicationEngine.getQueryResponseRow();
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandler.java
index 57f8a925a6d..041a7a8bec2 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandler.java
@@ -26,6 +26,7 @@ import org.apache.shardingsphere.proxy.backend.communication.jdbc.JDBCDatabaseCo
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException;
 import org.apache.shardingsphere.proxy.backend.exception.RuleNotExistedException;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.data.DatabaseBackendHandler;
@@ -99,8 +100,8 @@ public final class UnicastDatabaseBackendHandler implements DatabaseBackendHandl
     }
     
     @Override
-    public Collection<Object> getRowData() throws SQLException {
-        return databaseCommunicationEngine.getQueryResponseRow().getData();
+    public QueryResponseRow getRowData() throws SQLException {
+        return databaseCommunicationEngine.getQueryResponseRow();
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/QueryableRALBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/QueryableRALBackendHandler.java
index 8502fb71312..2ede6fc394c 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/QueryableRALBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/QueryableRALBackendHandler.java
@@ -68,12 +68,12 @@ public abstract class QueryableRALBackendHandler<E extends RALStatement> extends
     }
     
     @Override
-    public final Collection<Object> getRowData() throws SQLException {
+    public final QueryResponseRow getRowData() throws SQLException {
         List<QueryResponseCell> cells = new ArrayList<>(queryHeaders.size());
         for (int i = 0; i < queryHeaders.size(); i++) {
             cells.add(new QueryResponseCell(queryHeaders.get(i).getColumnType(), mergedResult.getValue(i + 1, Object.class)));
         }
-        return new QueryResponseRow(cells).getData();
+        return new QueryResponseRow(cells);
     }
     
     protected abstract Collection<String> getColumnNames();
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/HintDistSQLBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/HintDistSQLBackendHandler.java
index 5cdc322730d..6d2bbbed981 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/HintDistSQLBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/HintDistSQLBackendHandler.java
@@ -22,6 +22,7 @@ import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.ral.common.HintDistSQLStatement;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
@@ -29,7 +30,6 @@ import org.apache.shardingsphere.proxy.backend.text.distsql.ral.common.hint.Hint
 import org.apache.shardingsphere.proxy.backend.text.distsql.ral.common.hint.HintStatementExecutorFactory;
 
 import java.sql.SQLException;
-import java.util.Collection;
 
 /**
  * Hint dist sql backend handler.
@@ -59,7 +59,7 @@ public final class HintDistSQLBackendHandler implements TextProtocolBackendHandl
     }
     
     @Override
-    public Collection<Object> getRowData() throws SQLException {
-        return hintStatementExecutor.getQueryResponseRow().getData();
+    public QueryResponseRow getRowData() throws SQLException {
+        return hintStatementExecutor.getQueryResponseRow();
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/scaling/query/QueryableScalingRALBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/scaling/query/QueryableScalingRALBackendHandler.java
index bf876640d3d..8c50dee8f7c 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/scaling/query/QueryableScalingRALBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/scaling/query/QueryableScalingRALBackendHandler.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.proxy.backend.text.distsql.ral.scaling.query;
 import org.apache.shardingsphere.distsql.parser.statement.ral.RALStatement;
 import org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
@@ -59,7 +61,12 @@ public final class QueryableScalingRALBackendHandler extends DatabaseRequiredBac
     }
     
     @Override
-    public Collection<Object> getRowData() {
-        return resultSet.getRowData();
+    public QueryResponseRow getRowData() {
+        Collection<Object> rowData = resultSet.getRowData();
+        List<QueryResponseCell> result = new ArrayList<>(rowData.size());
+        for (Object each : rowData) {
+            result.add(new QueryResponseCell(Types.CHAR, each));
+        }
+        return new QueryResponseRow(result);
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandler.java
index 5486620a34b..e1c67419560 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandler.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.proxy.backend.text.distsql.rql;
 import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
 import org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
@@ -27,6 +29,7 @@ import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.DatabaseRequiredBackendHandler;
 
 import java.sql.Types;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -57,7 +60,12 @@ public final class RQLBackendHandler extends DatabaseRequiredBackendHandler<RQLS
     }
     
     @Override
-    public Collection<Object> getRowData() {
-        return resultSet.getRowData();
+    public QueryResponseRow getRowData() {
+        Collection<Object> rowData = resultSet.getRowData();
+        List<QueryResponseCell> result = new ArrayList<>(rowData.size());
+        for (Object each : rowData) {
+            result.add(new QueryResponseCell(Types.CHAR, each));
+        }
+        return new QueryResponseRow(result);
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionXAHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionXAHandler.java
index 24472b886ea..b3ebbcee38a 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionXAHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/transaction/TransactionXAHandler.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.text.transaction;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
@@ -29,7 +30,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.XAStatement
 import org.apache.shardingsphere.transaction.TransactionHolder;
 
 import java.sql.SQLException;
-import java.util.Collection;
 import java.util.Collections;
 
 /**
@@ -57,8 +57,8 @@ public final class TransactionXAHandler implements TextProtocolBackendHandler {
     }
     
     @Override
-    public Collection<Object> getRowData() throws SQLException {
-        return this.tclStatement.getOp().equals("RECOVER") ? this.backendHandler.getRowData() : Collections.emptyList();
+    public QueryResponseRow getRowData() throws SQLException {
+        return this.tclStatement.getOp().equals("RECOVER") ? this.backendHandler.getRowData() : new QueryResponseRow(Collections.emptyList());
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRowTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRowTest.java
index c499c2acf28..8234843753b 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRowTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRowTest.java
@@ -22,10 +22,10 @@ import org.junit.Test;
 import java.sql.Types;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
 
 public final class QueryResponseRowTest {
     
@@ -40,7 +40,8 @@ public final class QueryResponseRowTest {
         QueryResponseCell queryResponseCell1 = new QueryResponseCell(Types.INTEGER, 1);
         QueryResponseCell queryResponseCell2 = new QueryResponseCell(Types.VARCHAR, "column");
         QueryResponseRow queryResponseRow = new QueryResponseRow(Arrays.asList(queryResponseCell1, queryResponseCell2));
-        assertThat(queryResponseRow.getData().size(), is(2));
-        assertTrue(queryResponseRow.getData().containsAll(Arrays.asList(1, "column")));
+        List<Object> actualData = queryResponseRow.getData();
+        assertThat(actualData.size(), is(2));
+        assertThat(actualData, is(Arrays.asList(1, "column")));
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandlerTest.java
index 55d6d03d595..1e93c5b79c7 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandlerTest.java
@@ -94,6 +94,6 @@ public final class DatabaseAdminQueryBackendHandlerTest extends ProxyContextRest
     public void assertGetRowData() throws SQLException {
         handler.execute();
         assertTrue(handler.next());
-        assertThat(handler.getRowData().size(), is(1));
+        assertThat(handler.getRowData().getData().size(), is(1));
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
index cb8bff153af..1882b7d29cc 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
@@ -128,7 +128,7 @@ public final class SchemaAssignedDatabaseBackendHandlerTest extends ProxyContext
     public void assertDatabaseUsingStream() throws SQLException {
         schemaAssignedDatabaseBackendHandler.execute();
         while (schemaAssignedDatabaseBackendHandler.next()) {
-            assertThat(schemaAssignedDatabaseBackendHandler.getRowData().size(), is(1));
+            assertThat(schemaAssignedDatabaseBackendHandler.getRowData().getData().size(), is(1));
         }
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandlerTest.java
index 7eb2f19ddd2..dc10ca4bb48 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandlerTest.java
@@ -122,7 +122,7 @@ public final class UnicastDatabaseBackendHandlerTest extends ProxyContextRestore
     public void assertDatabaseUsingStream() throws SQLException {
         unicastDatabaseBackendHandler.execute();
         while (unicastDatabaseBackendHandler.next()) {
-            assertThat(unicastDatabaseBackendHandler.getRowData().size(), is(1));
+            assertThat(unicastDatabaseBackendHandler.getRowData().getData().size(), is(1));
         }
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
index 60b5abd4296..168e603caf1 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
@@ -74,8 +74,8 @@ public final class ParseDistSQLHandlerTest extends ProxyContextRestorer {
         parseDistSQLHandler.execute();
         parseDistSQLHandler.next();
         SQLStatement statement = sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false);
-        assertThat(new LinkedList<>(parseDistSQLHandler.getRowData()).getFirst(), is("MySQLSelectStatement"));
-        assertThat(new LinkedList<>(parseDistSQLHandler.getRowData()).getLast(), is(new Gson().toJson(statement)));
+        assertThat(new LinkedList<>(parseDistSQLHandler.getRowData().getData()).getFirst(), is("MySQLSelectStatement"));
+        assertThat(new LinkedList<>(parseDistSQLHandler.getRowData().getData()).getLast(), is(new Gson().toJson(statement)));
     }
     
     @Test(expected = SQLParsingException.class)
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/CountInstanceRulesHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/CountInstanceRulesHandlerTest.java
index a1d0a65f0cf..83bcf6623a9 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/CountInstanceRulesHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/CountInstanceRulesHandlerTest.java
@@ -110,43 +110,43 @@ public final class CountInstanceRulesHandlerTest extends ProxyContextRestorer {
         handler.init(new CountInstanceRulesStatement(), null);
         handler.execute();
         handler.next();
-        Collection<Object> actual = handler.getRowData();
+        Collection<Object> actual = handler.getRowData().getData();
         assertThat(actual.size(), is(2));
         Iterator<Object> rowData = actual.iterator();
         assertThat(rowData.next(), is("single_table"));
         assertThat(rowData.next(), is(4));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("sharding_table"));
         assertThat(rowData.next(), is(4));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("sharding_binding_table"));
         assertThat(rowData.next(), is(2));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("sharding_broadcast_table"));
         assertThat(rowData.next(), is(4));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("sharding_scaling"));
         assertThat(rowData.next(), is(0));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("readwrite_splitting"));
         assertThat(rowData.next(), is(2));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("db_discovery"));
         assertThat(rowData.next(), is(0));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("encrypt"));
         assertThat(rowData.next(), is(2));
@@ -161,43 +161,43 @@ public final class CountInstanceRulesHandlerTest extends ProxyContextRestorer {
         when(database2.getRuleMetaData().getRules()).thenReturn(rules);
         handler.execute();
         handler.next();
-        Collection<Object> actual = handler.getRowData();
+        Collection<Object> actual = handler.getRowData().getData();
         assertThat(actual.size(), is(2));
         Iterator<Object> rowData = actual.iterator();
         assertThat(rowData.next(), is("single_table"));
         assertThat(rowData.next(), is(4));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("sharding_table"));
         assertThat(rowData.next(), is(0));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("sharding_binding_table"));
         assertThat(rowData.next(), is(0));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("sharding_broadcast_table"));
         assertThat(rowData.next(), is(0));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("sharding_scaling"));
         assertThat(rowData.next(), is(0));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("readwrite_splitting"));
         assertThat(rowData.next(), is(0));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("db_discovery"));
         assertThat(rowData.next(), is(0));
         handler.next();
-        actual = handler.getRowData();
+        actual = handler.getRowData().getData();
         rowData = actual.iterator();
         assertThat(rowData.next(), is("encrypt"));
         assertThat(rowData.next(), is(0));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ExportDatabaseConfigurationHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ExportDatabaseConfigurationHandlerTest.java
index d470ca4dce7..682fb9df593 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ExportDatabaseConfigurationHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ExportDatabaseConfigurationHandlerTest.java
@@ -151,7 +151,7 @@ public final class ExportDatabaseConfigurationHandlerTest extends ProxyContextRe
         handler.init(new ExportDatabaseConfigurationStatement(new DatabaseSegment(0, 0, new IdentifierValue("normal_db")), null), mock(ConnectionSession.class));
         assertQueryResponseHeader((QueryResponseHeader) handler.execute());
         assertTrue(handler.next());
-        assertRowData(handler.getRowData());
+        assertRowData(handler.getRowData().getData());
         assertFalse(handler.next());
     }
     
@@ -203,7 +203,7 @@ public final class ExportDatabaseConfigurationHandlerTest extends ProxyContextRe
         handler.init(new ExportDatabaseConfigurationStatement(new DatabaseSegment(0, 0, new IdentifierValue("empty_db")), null), mock(ConnectionSession.class));
         assertQueryResponseHeader((QueryResponseHeader) handler.execute());
         assertTrue(handler.next());
-        Collection<Object> rowData = handler.getRowData();
+        Collection<Object> rowData = handler.getRowData().getData();
         assertThat(rowData.size(), is(1));
         assertThat(rowData.iterator().next(), is("databaseName: empty_db\n"));
         assertFalse(handler.next());
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowAuthorityRuleHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowAuthorityRuleHandlerTest.java
index e15dfaaca96..997cef5d4c5 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowAuthorityRuleHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowAuthorityRuleHandlerTest.java
@@ -29,7 +29,6 @@ import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.junit.Test;
 
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Properties;
@@ -51,7 +50,7 @@ public final class ShowAuthorityRuleHandlerTest extends ProxyContextRestorer {
         handler.init(new ShowAuthorityRuleStatement(), null);
         handler.execute();
         handler.next();
-        List<Object> data = new ArrayList<>(handler.getRowData());
+        List<Object> data = handler.getRowData().getData();
         assertThat(data.size(), is(3));
         assertThat(data.get(0), is("root@localhost"));
         assertThat(data.get(1), is("ALL_PERMITTED"));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowInstanceModeHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowInstanceModeHandlerTest.java
index bcafa47747f..4e5770a2213 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowInstanceModeHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowInstanceModeHandlerTest.java
@@ -27,7 +27,6 @@ import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.junit.Test;
 
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
@@ -49,7 +48,7 @@ public final class ShowInstanceModeHandlerTest extends ProxyContextRestorer {
         ProxyContext.init(contextManager);
         handler.execute();
         handler.next();
-        List<Object> data = new ArrayList<>(handler.getRowData());
+        List<Object> data = handler.getRowData().getData();
         assertThat(data.size(), is(5));
         assertThat(data.get(0), is("127.0.0.1@3309"));
         assertThat(data.get(1), is("Cluster"));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowSQLParserRuleHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowSQLParserRuleHandlerTest.java
index fe762608ae0..e1171a31d56 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowSQLParserRuleHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowSQLParserRuleHandlerTest.java
@@ -28,7 +28,6 @@ import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.junit.Test;
 
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -50,7 +49,7 @@ public final class ShowSQLParserRuleHandlerTest extends ProxyContextRestorer {
         handler.init(new ShowSQLParserRuleStatement(), null);
         handler.execute();
         handler.next();
-        List<Object> data = new ArrayList<>(handler.getRowData());
+        List<Object> data = handler.getRowData().getData();
         assertThat(data.size(), is(3));
         assertThat(data.get(0), is(Boolean.TRUE.toString()));
         String parseTreeCache = String.valueOf(data.get(1));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTableMetadataHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTableMetadataHandlerTest.java
index 0d4b94a4e8e..629364d0b66 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTableMetadataHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTableMetadataHandlerTest.java
@@ -32,7 +32,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.Identifi
 import org.junit.Test;
 
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -60,14 +59,14 @@ public final class ShowTableMetadataHandlerTest extends ProxyContextRestorer {
         handler.init(createSqlStatement(), connectionSession);
         handler.execute();
         handler.next();
-        List<Object> data = new ArrayList<>(handler.getRowData());
+        List<Object> data = handler.getRowData().getData();
         assertThat(data.size(), is(4));
         assertThat(data.get(0), is("db_name"));
         assertThat(data.get(1), is("t_order"));
         assertThat(data.get(2), is("COLUMN"));
         assertThat(data.get(3), is("order_id"));
         handler.next();
-        data = new ArrayList<>(handler.getRowData());
+        data = handler.getRowData().getData();
         assertThat(data.size(), is(4));
         assertThat(data.get(0), is("db_name"));
         assertThat(data.get(1), is("t_order"));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTrafficRulesHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTrafficRulesHandlerTest.java
index 2ae899baa05..62780d17ee6 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTrafficRulesHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTrafficRulesHandlerTest.java
@@ -29,7 +29,6 @@ import org.apache.shardingsphere.traffic.rule.TrafficRule;
 import org.junit.Test;
 
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -56,7 +55,7 @@ public class ShowTrafficRulesHandlerTest extends ProxyContextRestorer {
         ProxyContext.init(contextManager);
         handler.execute();
         handler.next();
-        List<Object> data = new ArrayList<>(handler.getRowData());
+        List<Object> data = handler.getRowData().getData();
         assertThat(data.size(), is(6));
         assertThat(data.get(0), is("rule_name_1"));
         assertThat(data.get(1), is("olap,order_by"));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTransactionRuleHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTransactionRuleHandlerTest.java
index 5fc34630191..576cdf67135 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTransactionRuleHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowTransactionRuleHandlerTest.java
@@ -27,7 +27,6 @@ import org.apache.shardingsphere.transaction.rule.TransactionRule;
 import org.junit.Test;
 
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Properties;
@@ -51,7 +50,7 @@ public final class ShowTransactionRuleHandlerTest extends ProxyContextRestorer {
         ProxyContext.init(contextManager);
         handler.execute();
         handler.next();
-        List<Object> data = new ArrayList<>(handler.getRowData());
+        List<Object> data = handler.getRowData().getData();
         assertThat(data.size(), is(3));
         assertThat(data.get(0), is("XA"));
         assertThat(data.get(1), is("Atomikos"));
@@ -70,7 +69,7 @@ public final class ShowTransactionRuleHandlerTest extends ProxyContextRestorer {
         ProxyContext.init(contextManager);
         handler.execute();
         handler.next();
-        List<Object> data = new ArrayList<>(handler.getRowData());
+        List<Object> data = handler.getRowData().getData();
         assertThat(data.size(), is(3));
         assertThat(data.get(0), is("LOCAL"));
         assertThat(data.get(1), is(""));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowVariableBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowVariableBackendHandlerTest.java
index 4e6cc2bb93b..95c00ca8844 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowVariableBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/queryable/ShowVariableBackendHandlerTest.java
@@ -37,7 +37,6 @@ import org.junit.Before;
 import org.junit.Test;
 
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
@@ -68,7 +67,7 @@ public final class ShowVariableBackendHandlerTest extends ProxyContextRestorer {
         assertThat(actual, instanceOf(QueryResponseHeader.class));
         assertThat(((QueryResponseHeader) actual).getQueryHeaders().size(), is(2));
         backendHandler.next();
-        List<Object> rowData = new ArrayList<>(backendHandler.getRowData());
+        List<Object> rowData = backendHandler.getRowData().getData();
         assertThat(rowData.get(0), is("transaction_type"));
         assertThat(rowData.get(1), is("LOCAL"));
     }
@@ -82,7 +81,7 @@ public final class ShowVariableBackendHandlerTest extends ProxyContextRestorer {
         assertThat(actual, instanceOf(QueryResponseHeader.class));
         assertThat(((QueryResponseHeader) actual).getQueryHeaders().size(), is(2));
         backendHandler.next();
-        List<Object> rowData = new ArrayList<>(backendHandler.getRowData());
+        List<Object> rowData = backendHandler.getRowData().getData();
         assertThat(rowData.get(0), is("cached_connections"));
         assertThat(rowData.get(1), is("0"));
     }
@@ -105,7 +104,7 @@ public final class ShowVariableBackendHandlerTest extends ProxyContextRestorer {
         assertThat(actual, instanceOf(QueryResponseHeader.class));
         assertThat(((QueryResponseHeader) actual).getQueryHeaders().size(), is(2));
         backendHandler.next();
-        List<Object> rowData = new ArrayList<>(backendHandler.getRowData());
+        List<Object> rowData = backendHandler.getRowData().getData();
         assertThat(rowData.get(0), is("agent_plugins_enabled"));
         assertThat(rowData.get(1), is(Boolean.TRUE.toString()));
     }
@@ -126,7 +125,7 @@ public final class ShowVariableBackendHandlerTest extends ProxyContextRestorer {
         assertThat(actual, instanceOf(QueryResponseHeader.class));
         assertThat(((QueryResponseHeader) actual).getQueryHeaders().size(), is(2));
         backendHandler.next();
-        List<Object> rowData = new ArrayList<>(backendHandler.getRowData());
+        List<Object> rowData = backendHandler.getRowData().getData();
         assertThat(rowData.get(0), is("sql_show"));
         assertThat(rowData.get(1), is(Boolean.TRUE.toString()));
     }
@@ -145,7 +144,7 @@ public final class ShowVariableBackendHandlerTest extends ProxyContextRestorer {
         assertThat(actual, instanceOf(QueryResponseHeader.class));
         assertThat(((QueryResponseHeader) actual).getQueryHeaders().size(), is(2));
         backendHandler.next();
-        List<Object> rowData = new ArrayList<>(backendHandler.getRowData());
+        List<Object> rowData = backendHandler.getRowData().getData();
         assertThat(rowData.get(0), is("sql_show"));
         assertThat(rowData.get(1), is(Boolean.FALSE.toString()));
     }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerTest.java
index 59017116b31..7c242f028a1 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerTest.java
@@ -91,7 +91,7 @@ public final class RQLBackendHandlerTest extends ProxyContextRestorer {
         when(resultSet.getRowData()).thenReturn(Arrays.asList("foo_value", "bar_value"));
         RQLBackendHandler handler = new RQLBackendHandler(mock(RQLStatement.class), mock(ConnectionSession.class), resultSet);
         handler.execute("test", mock(RQLStatement.class));
-        Collection<Object> rowData = handler.getRowData();
+        Collection<Object> rowData = handler.getRowData().getData();
         assertThat(rowData.size(), is(2));
         assertTrue(rowData.contains("foo_value"));
         assertTrue(rowData.contains("bar_value"));
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 23507c3a6bc..c89828355bb 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
@@ -130,7 +130,7 @@ public final class MySQLComQueryPacketExecutor implements QueryCommandExecutor {
     
     @Override
     public MySQLPacket getQueryRowPacket() throws SQLException {
-        return new MySQLTextResultSetRowPacket(++currentSequenceId, textProtocolBackendHandler.getRowData());
+        return new MySQLTextResultSetRowPacket(++currentSequenceId, textProtocolBackendHandler.getRowData().getData());
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutor.java
index 0ca24970e08..5cf6104eae7 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutor.java
@@ -124,7 +124,7 @@ public final class OpenGaussComQueryExecutor implements QueryCommandExecutor {
     
     @Override
     public PostgreSQLPacket getQueryRowPacket() throws SQLException {
-        return new PostgreSQLDataRowPacket(textProtocolBackendHandler.getRowData());
+        return new PostgreSQLDataRowPacket(textProtocolBackendHandler.getRowData().getData());
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutorTest.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutorTest.java
index 67510b8fad1..b8fef81cd69 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutorTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutorTest.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.Pos
 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.PostgreSQLRowDescriptionPacket;
 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.simple.PostgreSQLComQueryPacket;
 import org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLCommandCompletePacket;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -120,6 +121,7 @@ public final class OpenGaussComQueryExecutorTest {
     
     @Test
     public void assertGetQueryRowPacket() throws SQLException {
+        when(textProtocolBackendHandler.getRowData()).thenReturn(new QueryResponseRow(Collections.emptyList()));
         PostgreSQLPacket actual = queryExecutor.getQueryRowPacket();
         assertThat(actual, is(instanceOf(PostgreSQLDataRowPacket.class)));
     }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/JDBCPortal.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/JDBCPortal.java
index 6aa508f1a5b..c7e0456022d 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/JDBCPortal.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/JDBCPortal.java
@@ -193,8 +193,7 @@ public final class JDBCPortal implements Portal<Void> {
     }
     
     private PostgreSQLPacket nextPacket() throws SQLException {
-        return null != databaseCommunicationEngine ? new PostgreSQLDataRowPacket(getData(databaseCommunicationEngine.getQueryResponseRow()))
-                : new PostgreSQLDataRowPacket(textProtocolBackendHandler.getRowData());
+        return new PostgreSQLDataRowPacket(getData(null != databaseCommunicationEngine ? databaseCommunicationEngine.getQueryResponseRow() : textProtocolBackendHandler.getRowData()));
     }
     
     private List<Object> getData(final QueryResponseRow queryResponseRow) {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutor.java
index 7b2879266fc..eb71c555c0f 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutor.java
@@ -124,7 +124,7 @@ public final class PostgreSQLComQueryExecutor implements QueryCommandExecutor {
     
     @Override
     public PostgreSQLPacket getQueryRowPacket() throws SQLException {
-        return new PostgreSQLDataRowPacket(textProtocolBackendHandler.getRowData());
+        return new PostgreSQLDataRowPacket(textProtocolBackendHandler.getRowData().getData());
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutorTest.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutorTest.java
index db14b46f13a..cdc68c1c895 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutorTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutorTest.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.Pos
 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.PostgreSQLRowDescriptionPacket;
 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.simple.PostgreSQLComQueryPacket;
 import org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLCommandCompletePacket;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -120,6 +121,7 @@ public final class PostgreSQLComQueryExecutorTest {
     
     @Test
     public void assertGetQueryRowPacket() throws SQLException {
+        when(textProtocolBackendHandler.getRowData()).thenReturn(new QueryResponseRow(Collections.emptyList()));
         PostgreSQLPacket actual = queryExecutor.getQueryRowPacket();
         assertThat(actual, is(instanceOf(PostgreSQLDataRowPacket.class)));
     }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/query/ReactiveMySQLComQueryPacketExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/query/ReactiveMySQLComQueryPacketExecutor.java
index 2d401612396..3ae6c01b399 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/query/ReactiveMySQLComQueryPacketExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/query/ReactiveMySQLComQueryPacketExecutor.java
@@ -69,7 +69,7 @@ public final class ReactiveMySQLComQueryPacketExecutor implements ReactiveComman
             try {
                 if (ResponseType.QUERY == responseType) {
                     while (textProtocolBackendHandler.next()) {
-                        result.add(new MySQLTextResultSetRowPacket(++currentSequenceId, textProtocolBackendHandler.getRowData()));
+                        result.add(new MySQLTextResultSetRowPacket(++currentSequenceId, textProtocolBackendHandler.getRowData().getData()));
                     }
                     result.add(new MySQLEofPacket(++currentSequenceId, ServerStatusFlagCalculator.calculateFor(connectionSession)));
                 }