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 3b2faef  Correct PostgreSQL Bind Packet data row type (#10706)
3b2faef is described below

commit 3b2faef9723627f38d24f371a880cc580d6b3320
Author: 吴伟杰 <[email protected]>
AuthorDate: Mon Jun 7 21:13:49 2021 +0800

    Correct PostgreSQL Bind Packet data row type (#10706)
---
 .../query/binary/bind/PostgreSQLComBindPacket.java     | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git 
a/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLComBindPacket.java
 
b/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLComBindPacket.java
index 44442a3..7e902c1 100644
--- 
a/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLComBindPacket.java
+++ 
b/shardingsphere-db-protocol/shardingsphere-db-protocol-postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/binary/bind/PostgreSQLComBindPacket.java
@@ -62,11 +62,7 @@ public final class PostgreSQLComBindPacket extends 
PostgreSQLCommandPacket {
         PostgreSQLBinaryStatement binaryStatement = 
PostgreSQLBinaryStatementRegistry.getInstance().get(connectionId).getBinaryStatement(statementId);
         sql = null == binaryStatement ? null : binaryStatement.getSql();
         parameters = null == sql ? Collections.emptyList() : 
getParameters(payload, parameterFormats, binaryStatement.getColumnTypes());
-        int resultFormatsLength = payload.readInt2();
-        binaryRowData = parameterFormats.contains(1);
-        for (int i = 0; i < resultFormatsLength; i++) {
-            payload.readInt2();
-        }
+        binaryRowData = isBinaryRowData(payload);
     }
     
     private List<Object> getParameters(final PostgreSQLPacketPayload payload, 
final List<Integer> parameterFormats, final List<PostgreSQLBinaryColumnType> 
columnTypes) {
@@ -143,6 +139,18 @@ public final class PostgreSQLComBindPacket extends 
PostgreSQLCommandPacket {
         return binaryProtocolValue.read(payload, parameterValueLength);
     }
     
+    private boolean isBinaryRowData(final PostgreSQLPacketPayload payload) {
+        int resultFormatsLength = payload.readInt2();
+        if (0 == resultFormatsLength) {
+            return false;
+        }
+        List<Integer> resultFormats = new ArrayList<>(resultFormatsLength);
+        for (int i = 0; i < resultFormatsLength; i++) {
+            resultFormats.add(payload.readInt2());
+        }
+        return resultFormats.stream().allMatch(each -> 1 == each);
+    }
+    
     @Override
     public void write(final PostgreSQLPacketPayload payload) {
     }

Reply via email to