You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ki...@apache.org on 2020/12/01 17:19:09 UTC
[shardingsphere] branch master updated: Refactor binary execution
of proxy (#8460)
This is an automated email from the ASF dual-hosted git repository.
kimmking 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 ba6292b Refactor binary execution of proxy (#8460)
ba6292b is described below
commit ba6292b84038125896109658c0bbea8e967c8f6f
Author: Liang Zhang <te...@163.com>
AuthorDate: Wed Dec 2 01:18:47 2020 +0800
Refactor binary execution of proxy (#8460)
* Spilt QueryResponseData to TextQueryResponseData and BinaryQueryResponseData
* Move package
* Add QueryResponseCell
* Rename QueryResponseData to QueryResponseRow
* Refactor QueryResponseRow.cells to Collection
* Reduce package
* Add BinaryRow
* Refactor BinaryQueryResponseCell
---
.../{BinaryResultSetRow.java => BinaryCell.java} | 4 +--
.../{BinaryResultSetRow.java => BinaryRow.java} | 10 +++----
.../execute/MySQLBinaryResultSetRowPacket.java | 31 +++++--------------
.../execute/MySQLBinaryResultSetRowPacketTest.java | 7 +++--
.../bind/PostgreSQLBinaryResultSetRowPacket.java | 30 +++++--------------
.../PostgreSQLBinaryResultSetRowPacketTest.java | 14 ++++++---
.../communication/DatabaseCommunicationEngine.java | 35 ++++++++++++++++------
...eryResponseData.java => QueryResponseCell.java} | 20 +++++--------
...ueryResponseData.java => QueryResponseRow.java} | 10 +++----
.../data/impl/BinaryQueryResponseCell.java | 9 +++---
.../response/data/impl/TextQueryResponseCell.java | 9 +++---
.../backend/text/admin/UnicastBackendHandler.java | 4 ++-
.../backend/text/query/QueryBackendHandler.java | 4 ++-
.../sctl/hint/ShardingCTLHintBackendHandler.java | 4 ++-
.../sctl/hint/internal/HintCommandExecutor.java | 8 ++---
.../executor/AbstractHintQueryExecutor.java | 16 +++++-----
.../executor/AbstractHintUpdateExecutor.java | 4 +--
.../mysql/command/MySQLCommandExecuteEngine.java | 2 +-
.../execute/MySQLComStmtExecuteExecutor.java | 18 ++++++++---
.../fieldlist/MySQLComFieldListPacketExecutor.java | 2 +-
.../text/query/MySQLComQueryPacketExecutor.java | 2 +-
.../command/PostgreSQLCommandExecuteEngine.java | 2 +-
.../binary/bind/PostgreSQLComBindExecutor.java | 20 ++++++++++---
.../query/text/PostgreSQLComQueryExecutor.java | 2 +-
.../command/executor/QueryCommandExecutor.java | 6 ++--
25 files changed, 146 insertions(+), 127 deletions(-)
diff --git a/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java b/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryCell.java
similarity index 94%
copy from shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java
copy to shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryCell.java
index 08d179a..d3da7cb 100644
--- a/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java
+++ b/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryCell.java
@@ -21,11 +21,11 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
- * Binary result set row.
+ * Binary cell.
*/
@RequiredArgsConstructor
@Getter
-public final class BinaryResultSetRow {
+public final class BinaryCell {
private final BinaryColumnType columnType;
diff --git a/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java b/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryRow.java
similarity index 86%
copy from shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java
copy to shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryRow.java
index 08d179a..3a7cd14 100644
--- a/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java
+++ b/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryRow.java
@@ -20,14 +20,14 @@ package org.apache.shardingsphere.db.protocol.binary;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import java.util.Collection;
+
/**
- * Binary result set row.
+ * Binary row.
*/
@RequiredArgsConstructor
@Getter
-public final class BinaryResultSetRow {
-
- private final BinaryColumnType columnType;
+public final class BinaryRow {
- private final Object data;
+ private final Collection<BinaryCell> cells;
}
diff --git a/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/binary/execute/MySQLBinaryResultSetRowPacket.java b/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/binary/execute/MySQLBinaryResultSetRowPacket.java
index db86b96..89ef9ce 100644
--- a/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/binary/execute/MySQLBinaryResultSetRowPacket.java
+++ b/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/binary/execute/MySQLBinaryResultSetRowPacket.java
@@ -18,21 +18,19 @@
package org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.execute;
import lombok.Getter;
-import org.apache.shardingsphere.db.protocol.binary.BinaryResultSetRow;
-import org.apache.shardingsphere.db.protocol.mysql.constant.MySQLBinaryColumnType;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.db.protocol.binary.BinaryCell;
+import org.apache.shardingsphere.db.protocol.binary.BinaryRow;
import org.apache.shardingsphere.db.protocol.mysql.packet.MySQLPacket;
import org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.execute.protocol.MySQLBinaryProtocolValueFactory;
import org.apache.shardingsphere.db.protocol.mysql.payload.MySQLPacketPayload;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
/**
* Binary result set row packet for MySQL.
*
* @see <a href="https://dev.mysql.com/doc/internals/en/binary-protocol-resultset-row.html">Binary Protocol Resultset Row</a>
*/
+@RequiredArgsConstructor
public final class MySQLBinaryResultSetRowPacket implements MySQLPacket {
private static final int PACKET_HEADER = 0x00;
@@ -42,20 +40,7 @@ public final class MySQLBinaryResultSetRowPacket implements MySQLPacket {
@Getter
private final int sequenceId;
- private final Collection<BinaryResultSetRow> binaryRows;
-
- public MySQLBinaryResultSetRowPacket(final int sequenceId, final List<Object> data, final List<Integer> columnTypes) {
- this.sequenceId = sequenceId;
- binaryRows = getBinaryResultSetRows(columnTypes, data);
- }
-
- private Collection<BinaryResultSetRow> getBinaryResultSetRows(final List<Integer> columnTypes, final List<Object> data) {
- Collection<BinaryResultSetRow> result = new LinkedList<>();
- for (int i = 0; i < columnTypes.size(); i++) {
- result.add(new BinaryResultSetRow(MySQLBinaryColumnType.valueOfJDBCType(columnTypes.get(i)), data.get(i)));
- }
- return result;
- }
+ private final BinaryRow row;
@Override
public void write(final MySQLPacketPayload payload) {
@@ -71,9 +56,9 @@ public final class MySQLBinaryResultSetRowPacket implements MySQLPacket {
}
private MySQLNullBitmap getNullBitmap() {
- MySQLNullBitmap result = new MySQLNullBitmap(binaryRows.size(), NULL_BITMAP_OFFSET);
+ MySQLNullBitmap result = new MySQLNullBitmap(row.getCells().size(), NULL_BITMAP_OFFSET);
int index = 0;
- for (BinaryResultSetRow each : binaryRows) {
+ for (BinaryCell each : row.getCells()) {
if (null == each.getData()) {
result.setNullBit(index);
}
@@ -83,7 +68,7 @@ public final class MySQLBinaryResultSetRowPacket implements MySQLPacket {
}
private void writeValues(final MySQLPacketPayload payload) {
- for (BinaryResultSetRow each : binaryRows) {
+ for (BinaryCell each : row.getCells()) {
if (null != each.getData()) {
MySQLBinaryProtocolValueFactory.getBinaryProtocolValue(each.getColumnType()).write(payload, each.getData());
}
diff --git a/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/binary/execute/MySQLBinaryResultSetRowPacketTest.java b/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/binary/execute/MySQLBinaryResultSetRowPacketTest.java
index e3b16a5..2990287 100644
--- a/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/binary/execute/MySQLBinaryResultSetRowPacketTest.java
+++ b/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/binary/execute/MySQLBinaryResultSetRowPacketTest.java
@@ -17,13 +17,15 @@
package org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.execute;
+import org.apache.shardingsphere.db.protocol.binary.BinaryCell;
+import org.apache.shardingsphere.db.protocol.binary.BinaryRow;
+import org.apache.shardingsphere.db.protocol.mysql.constant.MySQLBinaryColumnType;
import org.apache.shardingsphere.db.protocol.mysql.payload.MySQLPacketPayload;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
-import java.sql.Types;
import java.util.Arrays;
import static org.hamcrest.CoreMatchers.is;
@@ -38,7 +40,8 @@ public final class MySQLBinaryResultSetRowPacketTest {
@Test
public void assertWrite() {
- MySQLBinaryResultSetRowPacket actual = new MySQLBinaryResultSetRowPacket(1, Arrays.asList("value", null), Arrays.asList(Types.CHAR, Types.CHAR));
+ BinaryRow row = new BinaryRow(Arrays.asList(new BinaryCell(MySQLBinaryColumnType.MYSQL_TYPE_STRING, "value"), new BinaryCell(MySQLBinaryColumnType.MYSQL_TYPE_STRING, null)));
+ MySQLBinaryResultSetRowPacket actual = new MySQLBinaryResultSetRowPacket(1, row);
assertThat(actual.getSequenceId(), is(1));
actual.write(payload);
verify(payload).writeInt1(0x00);
diff --git a/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLBinaryResultSetRowPacket.java b/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLBinaryResultSetRowPacket.java
index f818f2d..91d6e2f 100644
--- a/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLBinaryResultSetRowPacket.java
+++ b/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLBinaryResultSetRowPacket.java
@@ -18,48 +18,34 @@
package org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.bind;
import lombok.Getter;
-import org.apache.shardingsphere.db.protocol.binary.BinaryResultSetRow;
-import org.apache.shardingsphere.db.protocol.postgresql.constant.PostgreSQLBinaryColumnType;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.db.protocol.binary.BinaryCell;
+import org.apache.shardingsphere.db.protocol.binary.BinaryRow;
import org.apache.shardingsphere.db.protocol.postgresql.packet.PostgreSQLPacket;
import org.apache.shardingsphere.db.protocol.postgresql.packet.command.PostgreSQLCommandPacketType;
import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.bind.protocol.PostgreSQLBinaryProtocolValue;
import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.bind.protocol.PostgreSQLBinaryProtocolValueFactory;
import org.apache.shardingsphere.db.protocol.postgresql.payload.PostgreSQLPacketPayload;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
/**
* Binary result set row packet for PostgreSQL.
*/
+@RequiredArgsConstructor
public final class PostgreSQLBinaryResultSetRowPacket implements PostgreSQLPacket {
@Getter
private final char messageType = PostgreSQLCommandPacketType.DATA_ROW.getValue();
-
- private final Collection<BinaryResultSetRow> binaryRows;
-
- public PostgreSQLBinaryResultSetRowPacket(final List<Object> data, final List<Integer> columnTypes) {
- binaryRows = getBinaryResultSetRows(columnTypes, data);
- }
-
- private Collection<BinaryResultSetRow> getBinaryResultSetRows(final List<Integer> columnTypes, final List<Object> data) {
- Collection<BinaryResultSetRow> result = new LinkedList<>();
- for (int i = 0; i < columnTypes.size(); i++) {
- result.add(new BinaryResultSetRow(PostgreSQLBinaryColumnType.valueOfJDBCType(columnTypes.get(i)), data.get(i)));
- }
- return result;
- }
+
+ private final BinaryRow row;
@Override
public void write(final PostgreSQLPacketPayload payload) {
- payload.writeInt2(binaryRows.size());
+ payload.writeInt2(row.getCells().size());
writeValues(payload);
}
private void writeValues(final PostgreSQLPacketPayload payload) {
- for (BinaryResultSetRow each : binaryRows) {
+ for (BinaryCell each : row.getCells()) {
PostgreSQLBinaryProtocolValue binaryProtocolValue = PostgreSQLBinaryProtocolValueFactory.getBinaryProtocolValue(each.getColumnType());
Object value = each.getData();
payload.writeInt4(binaryProtocolValue.getColumnLength(value));
diff --git a/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/test/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLBinaryResultSetRowPacketTest.java b/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/test/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLBinaryResultSetRowPacketTest.java
index 23f5896..6ee00ff 100644
--- a/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/test/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLBinaryResultSetRowPacketTest.java
+++ b/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/test/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLBinaryResultSetRowPacketTest.java
@@ -17,6 +17,9 @@
package org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.bind;
+import org.apache.shardingsphere.db.protocol.binary.BinaryCell;
+import org.apache.shardingsphere.db.protocol.binary.BinaryRow;
+import org.apache.shardingsphere.db.protocol.postgresql.constant.PostgreSQLBinaryColumnType;
import org.apache.shardingsphere.db.protocol.postgresql.packet.command.PostgreSQLCommandPacketType;
import org.apache.shardingsphere.db.protocol.postgresql.payload.PostgreSQLPacketPayload;
import org.junit.Test;
@@ -24,12 +27,12 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
-import java.sql.Types;
import java.util.Arrays;
import java.util.Collections;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
@@ -40,7 +43,9 @@ public final class PostgreSQLBinaryResultSetRowPacketTest {
@Test
public void assertWriteStringData() {
- PostgreSQLBinaryResultSetRowPacket rowPacket = new PostgreSQLBinaryResultSetRowPacket(Arrays.asList("value", "b"), Arrays.asList(Types.VARCHAR, Types.VARCHAR));
+ BinaryRow row = new BinaryRow(
+ Arrays.asList(new BinaryCell(PostgreSQLBinaryColumnType.POSTGRESQL_TYPE_VARCHAR, "value"), new BinaryCell(PostgreSQLBinaryColumnType.POSTGRESQL_TYPE_VARCHAR, "b")));
+ PostgreSQLBinaryResultSetRowPacket rowPacket = new PostgreSQLBinaryResultSetRowPacket(row);
rowPacket.write(payload);
verify(payload).writeInt2(2);
verify(payload).writeInt4(5);
@@ -51,7 +56,8 @@ public final class PostgreSQLBinaryResultSetRowPacketTest {
@Test
public void assertWriteIntData() {
- PostgreSQLBinaryResultSetRowPacket rowPacket = new PostgreSQLBinaryResultSetRowPacket(Collections.singletonList(10), Collections.singletonList(Types.INTEGER));
+ BinaryRow row = new BinaryRow(Collections.singletonList(new BinaryCell(PostgreSQLBinaryColumnType.POSTGRESQL_TYPE_INT4, 10)));
+ PostgreSQLBinaryResultSetRowPacket rowPacket = new PostgreSQLBinaryResultSetRowPacket(row);
rowPacket.write(payload);
verify(payload).writeInt2(1);
verify(payload).writeInt4(4);
@@ -60,7 +66,7 @@ public final class PostgreSQLBinaryResultSetRowPacketTest {
@Test
public void assertGetMessageType() {
- PostgreSQLBinaryResultSetRowPacket rowPacket = new PostgreSQLBinaryResultSetRowPacket(Collections.emptyList(), Collections.emptyList());
+ PostgreSQLBinaryResultSetRowPacket rowPacket = new PostgreSQLBinaryResultSetRowPacket(mock(BinaryRow.class));
assertThat(rowPacket.getMessageType(), is(PostgreSQLCommandPacketType.DATA_ROW.getValue()));
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index e0ef45e..db29dfc 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.ExecuteResult
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
import org.apache.shardingsphere.infra.executor.sql.log.SQLLogger;
+import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.builder.JDBCExecutionUnitBuilderType;
import org.apache.shardingsphere.infra.merge.MergeEngine;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
@@ -40,7 +41,10 @@ import org.apache.shardingsphere.infra.rule.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.spi.ordered.OrderedSPIRegistry;
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.data.QueryResponseData;
+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.data.impl.BinaryQueryResponseCell;
+import org.apache.shardingsphere.proxy.backend.response.data.impl.TextQueryResponseCell;
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.impl.QueryHeader;
@@ -62,6 +66,8 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public final class DatabaseCommunicationEngine {
+ private final String driverType;
+
private final ShardingSphereMetaData metaData;
private final LogicSQL logicSQL;
@@ -74,10 +80,11 @@ public final class DatabaseCommunicationEngine {
private MergedResult mergedResult;
- public DatabaseCommunicationEngine(final String type, final ShardingSphereMetaData metaData, final LogicSQL logicSQL, final BackendConnection backendConnection) {
+ public DatabaseCommunicationEngine(final String driverType, final ShardingSphereMetaData metaData, final LogicSQL logicSQL, final BackendConnection backendConnection) {
+ this.driverType = driverType;
this.metaData = metaData;
this.logicSQL = logicSQL;
- proxySQLExecutor = new ProxySQLExecutor(type, backendConnection);
+ proxySQLExecutor = new ProxySQLExecutor(driverType, backendConnection);
kernelProcessor = new KernelProcessor();
}
@@ -193,16 +200,26 @@ public final class DatabaseCommunicationEngine {
}
/**
- * Get query response data.
+ * Get query response row.
*
- * @return query response data
+ * @return query response row
* @throws SQLException SQL exception
*/
- public QueryResponseData getQueryResponseData() throws SQLException {
- List<Object> row = new ArrayList<>(queryHeaders.size());
+ public QueryResponseRow getQueryResponseRow() throws SQLException {
+ List<QueryResponseCell> cells = new ArrayList<>(queryHeaders.size());
+ boolean isBinary = isBinary();
for (int columnIndex = 1; columnIndex <= queryHeaders.size(); columnIndex++) {
- row.add(mergedResult.getValue(columnIndex, Object.class));
+ Object data = mergedResult.getValue(columnIndex, Object.class);
+ if (isBinary) {
+ cells.add(new BinaryQueryResponseCell(queryHeaders.get(columnIndex).getColumnType(), data));
+ } else {
+ cells.add(new TextQueryResponseCell(data));
+ }
}
- return new QueryResponseData(queryHeaders.stream().map(QueryHeader::getColumnType).collect(Collectors.toList()), row);
+ return new QueryResponseRow(cells);
+ }
+
+ private boolean isBinary() {
+ return JDBCExecutionUnitBuilderType.PREPARED_STATEMENT.equals(driverType);
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseData.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseCell.java
similarity index 76%
copy from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseData.java
copy to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseCell.java
index e9acccb..139ea95 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseData.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseCell.java
@@ -17,19 +17,15 @@
package org.apache.shardingsphere.proxy.backend.response.data;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-import java.util.List;
-
/**
- * Query response data.
+ * Query response cell.
*/
-@RequiredArgsConstructor
-@Getter
-public final class QueryResponseData {
-
- private final List<Integer> columnTypes;
+public interface QueryResponseCell {
- private final List<Object> data;
+ /**
+ * Get data.
+ *
+ * @return data
+ */
+ Object getData();
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseData.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRow.java
similarity index 84%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseData.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRow.java
index e9acccb..137019d 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseData.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/QueryResponseRow.java
@@ -20,16 +20,14 @@ package org.apache.shardingsphere.proxy.backend.response.data;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import java.util.List;
+import java.util.Collection;
/**
- * Query response data.
+ * Query response row.
*/
@RequiredArgsConstructor
@Getter
-public final class QueryResponseData {
+public final class QueryResponseRow {
- private final List<Integer> columnTypes;
-
- private final List<Object> data;
+ private final Collection<QueryResponseCell> cells;
}
diff --git a/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/impl/BinaryQueryResponseCell.java
similarity index 76%
copy from shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java
copy to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/impl/BinaryQueryResponseCell.java
index 08d179a..bfb4166 100644
--- a/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/impl/BinaryQueryResponseCell.java
@@ -15,19 +15,20 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.db.protocol.binary;
+package org.apache.shardingsphere.proxy.backend.response.data.impl;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
/**
- * Binary result set row.
+ * Binary query response cell.
*/
@RequiredArgsConstructor
@Getter
-public final class BinaryResultSetRow {
+public final class BinaryQueryResponseCell implements QueryResponseCell {
- private final BinaryColumnType columnType;
+ private final int jdbcType;
private final Object data;
}
diff --git a/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/impl/TextQueryResponseCell.java
similarity index 79%
rename from shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/impl/TextQueryResponseCell.java
index 08d179a..e48e111 100644
--- a/shardingsphere-db-protocol/shardingsphere-db-protocol-core/src/main/java/org/apache/shardingsphere/db/protocol/binary/BinaryResultSetRow.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/data/impl/TextQueryResponseCell.java
@@ -15,19 +15,18 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.db.protocol.binary;
+package org.apache.shardingsphere.proxy.backend.response.data.impl;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
/**
- * Binary result set row.
+ * Text query response cell.
*/
@RequiredArgsConstructor
@Getter
-public final class BinaryResultSetRow {
-
- private final BinaryColumnType columnType;
+public final class TextQueryResponseCell implements QueryResponseCell {
private final Object data;
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UnicastBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UnicastBackendHandler.java
index 4f7f2be..2530a6c 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UnicastBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UnicastBackendHandler.java
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.Bac
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException;
import org.apache.shardingsphere.proxy.backend.exception.RuleNotExistsException;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -32,6 +33,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
+import java.util.stream.Collectors;
/**
* Backend handler for unicast.
@@ -73,6 +75,6 @@ public final class UnicastBackendHandler implements TextProtocolBackendHandler {
@Override
public Collection<Object> getRowData() throws SQLException {
- return databaseCommunicationEngine.getQueryResponseData().getData();
+ return databaseCommunicationEngine.getQueryResponseRow().getCells().stream().map(QueryResponseCell::getData).collect(Collectors.toList());
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/query/QueryBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/query/QueryBackendHandler.java
index e42bf56..f7aba39 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/query/QueryBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/query/QueryBackendHandler.java
@@ -23,12 +23,14 @@ import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicati
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.RuleNotExistsException;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.sql.SQLException;
import java.util.Collection;
+import java.util.stream.Collectors;
/**
* Backend handler with query.
@@ -62,6 +64,6 @@ public final class QueryBackendHandler implements TextProtocolBackendHandler {
@Override
public Collection<Object> getRowData() throws SQLException {
- return databaseCommunicationEngine.getQueryResponseData().getData();
+ return databaseCommunicationEngine.getQueryResponseRow().getCells().stream().map(QueryResponseCell::getData).collect(Collectors.toList());
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/ShardingCTLHintBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/ShardingCTLHintBackendHandler.java
index 3786ae1..15ef7e5 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/ShardingCTLHintBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/ShardingCTLHintBackendHandler.java
@@ -21,6 +21,7 @@ import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
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.data.QueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import org.apache.shardingsphere.proxy.backend.text.sctl.exception.InvalidShardingCTLFormatException;
@@ -31,6 +32,7 @@ import org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal.HintComma
import java.sql.SQLException;
import java.util.Collection;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
* Sharding CTL hint backend handler.
@@ -66,6 +68,6 @@ public final class ShardingCTLHintBackendHandler implements TextProtocolBackendH
@Override
public Collection<Object> getRowData() throws SQLException {
- return hintCommandExecutor.getQueryResponseData().getData();
+ return hintCommandExecutor.getQueryResponseRow().getCells().stream().map(QueryResponseCell::getData).collect(Collectors.toList());
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/HintCommandExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/HintCommandExecutor.java
index 51f3a17..2047cd6 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/HintCommandExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/HintCommandExecutor.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseData;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
import java.sql.SQLException;
@@ -44,10 +44,10 @@ public interface HintCommandExecutor<T extends HintCommand> {
boolean next() throws SQLException;
/**
- * Get query response data.
+ * Get query response row.
*
- * @return query response data
+ * @return query response row
* @throws SQLException SQL exception
*/
- QueryResponseData getQueryResponseData() throws SQLException;
+ QueryResponseRow getQueryResponseRow() throws SQLException;
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/executor/AbstractHintQueryExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/executor/AbstractHintQueryExecutor.java
index aa6aa4d..b61c75e 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/executor/AbstractHintQueryExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/executor/AbstractHintQueryExecutor.java
@@ -17,11 +17,13 @@
package org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal.executor;
-import org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
+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.data.impl.TextQueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseData;
import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
+import org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
import org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal.HintCommand;
import org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal.HintCommandExecutor;
@@ -55,13 +57,11 @@ public abstract class AbstractHintQueryExecutor<T extends HintCommand> implement
}
@Override
- public final QueryResponseData getQueryResponseData() throws SQLException {
- List<Integer> columnTypes = new ArrayList<>(queryHeaders.size());
- List<Object> row = new ArrayList<>(queryHeaders.size());
+ public final QueryResponseRow getQueryResponseRow() throws SQLException {
+ List<QueryResponseCell> cells = new ArrayList<>(queryHeaders.size());
for (int i = 0; i < queryHeaders.size(); i++) {
- columnTypes.add(queryHeaders.get(i).getColumnType());
- row.add(mergedResult.getValue(i + 1, Object.class));
+ cells.add(new TextQueryResponseCell(mergedResult.getValue(i + 1, Object.class)));
}
- return new QueryResponseData(columnTypes, row);
+ return new QueryResponseRow(cells);
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/executor/AbstractHintUpdateExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/executor/AbstractHintUpdateExecutor.java
index b0d4d8a..f0cc8ce 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/executor/AbstractHintUpdateExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/executor/AbstractHintUpdateExecutor.java
@@ -17,7 +17,7 @@
package org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal.executor;
-import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseData;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
import org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal.HintCommand;
import org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal.HintCommandExecutor;
@@ -32,7 +32,7 @@ public abstract class AbstractHintUpdateExecutor<T extends HintCommand> implemen
}
@Override
- public final QueryResponseData getQueryResponseData() {
+ public final QueryResponseRow getQueryResponseRow() {
return null;
}
}
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 abf5aed..84e3b59 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
@@ -85,7 +85,7 @@ public final class MySQLCommandExecuteEngine implements CommandExecuteEngine {
context.flush();
backendConnection.getResourceLock().doAwait();
}
- DatabasePacket<?> dataValue = queryCommandExecutor.getQueryData();
+ DatabasePacket<?> dataValue = queryCommandExecutor.getQueryRowPacket();
context.write(dataValue);
if (flushThreshold == count) {
context.flush();
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
index 5f4fd53..4f5e480 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
@@ -18,6 +18,9 @@
package org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.execute;
import lombok.Getter;
+import org.apache.shardingsphere.db.protocol.binary.BinaryCell;
+import org.apache.shardingsphere.db.protocol.binary.BinaryRow;
+import org.apache.shardingsphere.db.protocol.mysql.constant.MySQLBinaryColumnType;
import org.apache.shardingsphere.db.protocol.mysql.packet.MySQLPacket;
import org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.execute.MySQLBinaryResultSetRowPacket;
import org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.execute.MySQLComStmtExecutePacket;
@@ -28,7 +31,8 @@ import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicati
import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
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.data.QueryResponseData;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
+import org.apache.shardingsphere.proxy.backend.response.data.impl.BinaryQueryResponseCell;
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.update.UpdateResponseHeader;
@@ -39,6 +43,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.sql.SQLException;
import java.util.Collection;
+import java.util.stream.Collectors;
/**
* COM_STMT_EXECUTE command executor for MySQL.
@@ -83,8 +88,13 @@ public final class MySQLComStmtExecuteExecutor implements QueryCommandExecutor {
}
@Override
- public MySQLPacket getQueryData() throws SQLException {
- QueryResponseData queryData = databaseCommunicationEngine.getQueryResponseData();
- return new MySQLBinaryResultSetRowPacket(++currentSequenceId, queryData.getData(), queryData.getColumnTypes());
+ public MySQLPacket getQueryRowPacket() throws SQLException {
+ QueryResponseRow queryResponseRow = databaseCommunicationEngine.getQueryResponseRow();
+ return new MySQLBinaryResultSetRowPacket(++currentSequenceId, createBinaryRow(queryResponseRow));
+ }
+
+ private BinaryRow createBinaryRow(final QueryResponseRow queryResponseRow) {
+ return new BinaryRow(queryResponseRow.getCells().stream().map(
+ each -> new BinaryCell(MySQLBinaryColumnType.valueOfJDBCType(((BinaryQueryResponseCell) each).getJdbcType()), each.getData())).collect(Collectors.toList()));
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
index d7ddea5..e360a13 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
@@ -69,7 +69,7 @@ public final class MySQLComFieldListPacketExecutor implements CommandExecutor {
private Collection<DatabasePacket<?>> createColumnDefinition41Packets() throws SQLException {
Collection<DatabasePacket<?>> result = new LinkedList<>();
while (databaseCommunicationEngine.next()) {
- String columnName = databaseCommunicationEngine.getQueryResponseData().getData().get(0).toString();
+ String columnName = databaseCommunicationEngine.getQueryResponseRow().getCells().iterator().next().getData().toString();
result.add(new MySQLColumnDefinition41Packet(
++currentSequenceId, schemaName, packet.getTable(), packet.getTable(), columnName, columnName, 100, MySQLBinaryColumnType.MYSQL_TYPE_VARCHAR, 0));
}
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 dec8e48..c7cde6b 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
@@ -76,7 +76,7 @@ public final class MySQLComQueryPacketExecutor implements QueryCommandExecutor {
}
@Override
- public MySQLPacket getQueryData() throws SQLException {
+ public MySQLPacket getQueryRowPacket() throws SQLException {
return new MySQLTextResultSetRowPacket(++currentSequenceId, textProtocolBackendHandler.getRowData());
}
}
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 19c6674..c6c7a34 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
@@ -93,7 +93,7 @@ public final class PostgreSQLCommandExecuteEngine implements CommandExecuteEngin
context.flush();
backendConnection.getResourceLock().doAwait();
}
- DatabasePacket<?> resultValue = queryCommandExecutor.getQueryData();
+ DatabasePacket<?> resultValue = queryCommandExecutor.getQueryRowPacket();
context.write(resultValue);
if (proxyFrontendFlushThreshold == count) {
context.flush();
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/bind/PostgreSQLComBindExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/bind/PostgreSQLComBindExecutor.java
index 0fbdf51..eb9c337 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/bind/PostgreSQLComBindExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/bind/PostgreSQLComBindExecutor.java
@@ -18,7 +18,10 @@
package org.apache.shardingsphere.proxy.frontend.postgresql.command.query.binary.bind;
import lombok.Getter;
+import org.apache.shardingsphere.db.protocol.binary.BinaryCell;
+import org.apache.shardingsphere.db.protocol.binary.BinaryRow;
import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
+import org.apache.shardingsphere.db.protocol.postgresql.constant.PostgreSQLBinaryColumnType;
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.PostgreSQLRowDescriptionPacket;
@@ -33,7 +36,9 @@ import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicati
import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
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.data.QueryResponseData;
+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.data.impl.BinaryQueryResponseCell;
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.impl.QueryHeader;
@@ -48,6 +53,7 @@ import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
* Command bind executor for PostgreSQL.
@@ -122,8 +128,14 @@ public final class PostgreSQLComBindExecutor implements QueryCommandExecutor {
}
@Override
- public PostgreSQLPacket getQueryData() throws SQLException {
- QueryResponseData queryData = databaseCommunicationEngine.getQueryResponseData();
- return packet.isBinaryRowData() ? new PostgreSQLBinaryResultSetRowPacket(queryData.getData(), queryData.getColumnTypes()) : new PostgreSQLDataRowPacket(queryData.getData());
+ public PostgreSQLPacket getQueryRowPacket() throws SQLException {
+ QueryResponseRow queryResponseRow = databaseCommunicationEngine.getQueryResponseRow();
+ return packet.isBinaryRowData() ? new PostgreSQLBinaryResultSetRowPacket(createBinaryRow(queryResponseRow))
+ : new PostgreSQLDataRowPacket(queryResponseRow.getCells().stream().map(QueryResponseCell::getData).collect(Collectors.toList()));
+ }
+
+ private BinaryRow createBinaryRow(final QueryResponseRow queryResponseRow) {
+ return new BinaryRow(queryResponseRow.getCells().stream().map(
+ each -> new BinaryCell(PostgreSQLBinaryColumnType.valueOfJDBCType(((BinaryQueryResponseCell) each).getJdbcType()), each.getData())).collect(Collectors.toList()));
}
}
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 271a1bb..eb5c811 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
@@ -99,7 +99,7 @@ public final class PostgreSQLComQueryExecutor implements QueryCommandExecutor {
}
@Override
- public PostgreSQLPacket getQueryData() throws SQLException {
+ public PostgreSQLPacket getQueryRowPacket() throws SQLException {
return new PostgreSQLDataRowPacket(textProtocolBackendHandler.getRowData());
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/command/executor/QueryCommandExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/command/executor/QueryCommandExecutor.java
index c0e5990..c2ee2ce 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/command/executor/QueryCommandExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/command/executor/QueryCommandExecutor.java
@@ -42,10 +42,10 @@ public interface QueryCommandExecutor extends CommandExecutor {
boolean next() throws SQLException;
/**
- * Get query data.
+ * Get query row packet.
*
- * @return database packet of query data
+ * @return database packet of query row
* @throws SQLException SQL exception
*/
- DatabasePacket<?> getQueryData() throws SQLException;
+ DatabasePacket<?> getQueryRowPacket() throws SQLException;
}