MCPcopy
hub / github.com/go-sql-driver/mysql / writePackets

Method writePackets

compress.go:152–193  ·  view source on GitHub ↗

writePackets sends one or some packets with compression. Use this instead of mc.netConn.Write() when mc.compress is true.

(packets []byte)

Source from the content-addressed store, hash-verified

150// writePackets sends one or some packets with compression.
151// Use this instead of mc.netConn.Write() when mc.compress is true.
152func (c *compIO) writePackets(packets []byte) (int, error) {
153 totalBytes := len(packets)
154 blankHeader := make([]byte, 7)
155 buf := &c.buff
156
157 for len(packets) > 0 {
158 payloadLen := min(maxPayloadLen, len(packets))
159 payload := packets[:payloadLen]
160 uncompressedLen := payloadLen
161
162 buf.Reset()
163 buf.Write(blankHeader) // Buffer.Write() never returns error
164
165 // If payload is less than minCompressLength, don't compress.
166 if uncompressedLen < minCompressLength {
167 buf.Write(payload)
168 uncompressedLen = 0
169 } else {
170 err := zCompress(payload, buf)
171 if debug && err != nil {
172 fmt.Printf("zCompress error: %v", err)
173 }
174 // do not compress if compressed data is larger than uncompressed data
175 // I intentionally miss 7 byte header in the buf; zCompress must compress more than 7 bytes.
176 if err != nil || buf.Len() >= uncompressedLen {
177 buf.Reset()
178 buf.Write(blankHeader)
179 buf.Write(payload)
180 uncompressedLen = 0
181 }
182 }
183
184 if n, err := c.writeCompressedPacket(buf.Bytes(), uncompressedLen); err != nil {
185 // To allow returning ErrBadConn when sending really 0 bytes, we sum
186 // up compressed bytes that is returned by underlying Write().
187 return totalBytes - len(packets) + n, err
188 }
189 packets = packets[payloadLen:]
190 }
191
192 return totalBytes, nil
193}
194
195// writeCompressedPacket writes a compressed packet with header.
196// data should start with 7 size space for header followed by payload.

Callers

nothing calls this directly

Calls 3

writeCompressedPacketMethod · 0.95
zCompressFunction · 0.85
WriteMethod · 0.45

Tested by

no test coverage detected