Этот коммит содержится в:
Christopher Speller
2016-09-23 10:17:51 -04:00
коммит произвёл GitHub
родитель 6d62d65b2d
Коммит 2ca0e8f9a0
366 изменённых файлов: 31573 добавлений и 16566 удалений

55
vendor/github.com/go-sql-driver/mysql/buffer.go сгенерированный поставляемый
Просмотреть файл

@@ -8,11 +8,7 @@
package mysql
import (
"io"
"net"
"time"
)
import "io"
const defaultBufSize = 4096
@@ -22,28 +18,25 @@ const defaultBufSize = 4096
// The buffer is similar to bufio.Reader / Writer but zero-copy-ish
// Also highly optimized for this particular use case.
type buffer struct {
buf []byte
nc net.Conn
idx int
length int
timeout time.Duration
buf []byte
rd io.Reader
idx int
length int
}
func newBuffer(nc net.Conn) buffer {
func newBuffer(rd io.Reader) buffer {
var b [defaultBufSize]byte
return buffer{
buf: b[:],
nc: nc,
rd: rd,
}
}
// fill reads into the buffer until at least _need_ bytes are in it
func (b *buffer) fill(need int) error {
n := b.length
// move existing data to the beginning
if n > 0 && b.idx > 0 {
copy(b.buf[0:n], b.buf[b.idx:])
if b.length > 0 && b.idx > 0 {
copy(b.buf[0:b.length], b.buf[b.idx:])
}
// grow buffer if necessary
@@ -59,33 +52,19 @@ func (b *buffer) fill(need int) error {
b.idx = 0
for {
if b.timeout > 0 {
if err := b.nc.SetReadDeadline(time.Now().Add(b.timeout)); err != nil {
return err
}
}
n, err := b.rd.Read(b.buf[b.length:])
b.length += n
nn, err := b.nc.Read(b.buf[n:])
n += nn
switch err {
case nil:
if n < need {
if err == nil {
if b.length < need {
continue
}
b.length = n
return nil
case io.EOF:
if n >= need {
b.length = n
return nil
}
return io.ErrUnexpectedEOF
default:
return err
}
if b.length >= need && err == io.EOF {
return nil
}
return err
}
}