Skip to content

Commit 71f003c

Browse files
committed
Merge pull request #424 from methane/feature/load-local
LOAD LOCAL can send file larger than max_allowed_packet
2 parents 1309049 + e294c69 commit 71f003c

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

Diff for: infile.go

+7-8
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ func deferredClose(err *error, closer io.Closer) {
9696
func (mc *mysqlConn) handleInFileRequest(name string) (err error) {
9797
var rdr io.Reader
9898
var data []byte
99+
packetSize := 16 * 1024 // 16KB is small enough for disk readahead and large enough for TCP
100+
if mc.maxWriteSize < packetSize {
101+
packetSize = mc.maxWriteSize
102+
}
99103

100104
if idx := strings.Index(name, "Reader::"); idx == 0 || (idx > 0 && name[idx-1] == '/') { // io.Reader
101105
// The server might return an an absolute path. See issue #355.
@@ -108,8 +112,6 @@ func (mc *mysqlConn) handleInFileRequest(name string) (err error) {
108112
if inMap {
109113
rdr = handler()
110114
if rdr != nil {
111-
data = make([]byte, 4+mc.maxWriteSize)
112-
113115
if cl, ok := rdr.(io.Closer); ok {
114116
defer deferredClose(&err, cl)
115117
}
@@ -134,12 +136,8 @@ func (mc *mysqlConn) handleInFileRequest(name string) (err error) {
134136
// get file size
135137
if fi, err = file.Stat(); err == nil {
136138
rdr = file
137-
if fileSize := int(fi.Size()); fileSize <= mc.maxWriteSize {
138-
data = make([]byte, 4+fileSize)
139-
} else if fileSize <= mc.maxPacketAllowed {
140-
data = make([]byte, 4+mc.maxWriteSize)
141-
} else {
142-
err = fmt.Errorf("local file '%s' too large: size: %d, max: %d", name, fileSize, mc.maxPacketAllowed)
139+
if fileSize := int(fi.Size()); fileSize < packetSize {
140+
packetSize = fileSize
143141
}
144142
}
145143
}
@@ -150,6 +148,7 @@ func (mc *mysqlConn) handleInFileRequest(name string) (err error) {
150148

151149
// send content packets
152150
if err == nil {
151+
data := make([]byte, 4+packetSize)
153152
var n int
154153
for err == nil {
155154
n, err = rdr.Read(data[4:])

0 commit comments

Comments
 (0)