public PostgreSQLAggregatedCommandPacket()

in db-protocol/postgresql/src/main/java/org/apache/shardingsphere/db/protocol/postgresql/packet/command/query/extended/PostgreSQLAggregatedCommandPacket.java [41:94]


    public PostgreSQLAggregatedCommandPacket(final List<PostgreSQLCommandPacket> packets) {
        this.packets = packets;
        String firstStatementId = null;
        String firstPortal = null;
        int parsePacketCount = 0;
        int bindPacketCountForFirstStatement = 0;
        int executePacketCountForFirstStatement = 0;
        int batchPacketBeginIndex = -1;
        int batchPacketEndIndex = -1;
        int index = 0;
        for (PostgreSQLCommandPacket each : packets) {
            if (each instanceof PostgreSQLComParsePacket) {
                if (++parsePacketCount > 1) {
                    break;
                }
                if (null == firstStatementId) {
                    firstStatementId = ((PostgreSQLComParsePacket) each).getStatementId();
                } else if (!firstStatementId.equals(((PostgreSQLComParsePacket) each).getStatementId())) {
                    break;
                }
            }
            if (each instanceof PostgreSQLComBindPacket) {
                if (-1 == batchPacketBeginIndex) {
                    batchPacketBeginIndex = index;
                }
                if (null == firstStatementId) {
                    firstStatementId = ((PostgreSQLComBindPacket) each).getStatementId();
                } else if (!firstStatementId.equals(((PostgreSQLComBindPacket) each).getStatementId())) {
                    break;
                }
                if (null == firstPortal) {
                    firstPortal = ((PostgreSQLComBindPacket) each).getPortal();
                } else if (!firstPortal.equals(((PostgreSQLComBindPacket) each).getPortal())) {
                    break;
                }
                bindPacketCountForFirstStatement++;
            }
            if (each instanceof PostgreSQLComExecutePacket) {
                if (index > batchPacketEndIndex) {
                    batchPacketEndIndex = index;
                }
                if (null == firstPortal) {
                    firstPortal = ((PostgreSQLComExecutePacket) each).getPortal();
                } else if (!firstPortal.equals(((PostgreSQLComExecutePacket) each).getPortal())) {
                    break;
                }
                executePacketCountForFirstStatement++;
            }
            index++;
        }
        this.batchPacketBeginIndex = batchPacketBeginIndex;
        this.batchPacketEndIndex = batchPacketEndIndex;
        containsBatchedStatements = bindPacketCountForFirstStatement == executePacketCountForFirstStatement && bindPacketCountForFirstStatement >= 3;
    }