Skip to content

Commit b203832

Browse files
committed
Merge writePacket and splitPacket into one function
1 parent c3c542b commit b203832

File tree

1 file changed

+22
-35
lines changed

1 file changed

+22
-35
lines changed

packets.go

Lines changed: 22 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -77,46 +77,36 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
7777
// Write packet buffer 'data'
7878
// The packet header must be already included
7979
func (mc *mysqlConn) writePacket(data []byte) error {
80-
if len(data)-4 <= mc.maxWriteSize { // Can send data at once
81-
// Write packet
82-
n, err := mc.netConn.Write(data)
83-
if err == nil && n == len(data) {
84-
mc.sequence++
85-
return nil
86-
}
87-
88-
// Handle error
89-
if err == nil { // n != len(data)
90-
errLog.Print(errMalformPkt.Error())
91-
} else {
92-
errLog.Print(err.Error())
93-
}
94-
return driver.ErrBadConn
95-
}
96-
97-
// Must split packet
98-
return mc.splitPacket(data)
99-
}
100-
101-
func (mc *mysqlConn) splitPacket(data []byte) error {
10280
pktLen := len(data) - 4
10381

10482
if pktLen > mc.maxPacketAllowed {
10583
return errPktTooLarge
10684
}
10785

108-
for pktLen >= maxPacketSize {
109-
data[0] = 0xff
110-
data[1] = 0xff
111-
data[2] = 0xff
86+
for {
87+
var size int
88+
if pktLen >= maxPacketSize {
89+
data[0] = 0xff
90+
data[1] = 0xff
91+
data[2] = 0xff
92+
size = maxPacketSize
93+
} else {
94+
data[0] = byte(pktLen)
95+
data[1] = byte(pktLen >> 8)
96+
data[2] = byte(pktLen >> 16)
97+
size = pktLen
98+
}
11299
data[3] = mc.sequence
113100

114101
// Write packet
115-
n, err := mc.netConn.Write(data[:4+maxPacketSize])
116-
if err == nil && n == 4+maxPacketSize {
102+
n, err := mc.netConn.Write(data[:4+size])
103+
if err == nil && n == 4+size {
117104
mc.sequence++
118-
data = data[maxPacketSize:]
119-
pktLen -= maxPacketSize
105+
if size != maxPacketSize {
106+
break
107+
}
108+
pktLen -= size
109+
data = data[size:]
120110
continue
121111
}
122112

@@ -129,11 +119,7 @@ func (mc *mysqlConn) splitPacket(data []byte) error {
129119
return driver.ErrBadConn
130120
}
131121

132-
data[0] = byte(pktLen)
133-
data[1] = byte(pktLen >> 8)
134-
data[2] = byte(pktLen >> 16)
135-
data[3] = mc.sequence
136-
return mc.writePacket(data)
122+
return nil
137123
}
138124

139125
/******************************************************************************
@@ -748,6 +734,7 @@ func (stmt *mysqlStmt) writeCommandLongData(paramID int, arg []byte) error {
748734
pktLen = dataOffset + argLen
749735
}
750736

737+
stmt.mc.sequence = 0
751738
// Add the packet header [24bit length + 1 byte sequence]
752739
data[0] = byte(pktLen)
753740
data[1] = byte(pktLen >> 8)

0 commit comments

Comments
 (0)