@@ -77,46 +77,36 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
77
77
// Write packet buffer 'data'
78
78
// The packet header must be already included
79
79
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 {
102
80
pktLen := len (data ) - 4
103
81
104
82
if pktLen > mc .maxPacketAllowed {
105
83
return errPktTooLarge
106
84
}
107
85
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
+ }
112
99
data [3 ] = mc .sequence
113
100
114
101
// 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 {
117
104
mc .sequence ++
118
- data = data [maxPacketSize :]
119
- pktLen -= maxPacketSize
105
+ if size != maxPacketSize {
106
+ break
107
+ }
108
+ pktLen -= size
109
+ data = data [size :]
120
110
continue
121
111
}
122
112
@@ -129,11 +119,7 @@ func (mc *mysqlConn) splitPacket(data []byte) error {
129
119
return driver .ErrBadConn
130
120
}
131
121
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
137
123
}
138
124
139
125
/******************************************************************************
@@ -748,6 +734,7 @@ func (stmt *mysqlStmt) writeCommandLongData(paramID int, arg []byte) error {
748
734
pktLen = dataOffset + argLen
749
735
}
750
736
737
+ stmt .mc .sequence = 0
751
738
// Add the packet header [24bit length + 1 byte sequence]
752
739
data [0 ] = byte (pktLen )
753
740
data [1 ] = byte (pktLen >> 8 )
0 commit comments