@@ -9,6 +9,7 @@ package mysql
9
9
import (
10
10
"context"
11
11
"fmt"
12
+ "github.com/pkg/errors"
12
13
"os"
13
14
"strings"
14
15
"sync/atomic"
@@ -182,10 +183,8 @@ func (d *dumper) getChunkData() (nRows int64, err error) {
182
183
d .Iteration += 1
183
184
rows , err := d .db .Query (query )
184
185
if err != nil {
185
- d .Logger .Debug ("error at select chunk. query: " , query )
186
- newErr := fmt .Errorf ("error at select chunk. err: %v" , err )
187
- d .Logger .Error (newErr .Error ())
188
- return 0 , err
186
+ d .Logger .Error ("error at select chunk" , "query" , query )
187
+ return 0 , errors .Wrap (err , "select chunk" )
189
188
}
190
189
191
190
columns , err := rows .Columns ()
@@ -264,9 +263,9 @@ func (d *dumper) getChunkData() (nRows int64, err error) {
264
263
entrySize := 0
265
264
var valuesX [][]* []byte
266
265
scanArgs := make ([]interface {}, len (columns )) // tmp use, for casting `values` to `[]interface{}`
266
+ splitPoints := []int {0 }
267
267
hasRow := rows .Next ()
268
268
for hasRow {
269
- nRows += 1
270
269
rowValuesRaw := make ([]* []byte , len (columns ))
271
270
for i := range rowValuesRaw {
272
271
scanArgs [i ] = & rowValuesRaw [i ]
@@ -283,14 +282,20 @@ func (d *dumper) getChunkData() (nRows int64, err error) {
283
282
entrySize += getRowSize (rowValuesRaw )
284
283
285
284
if ! hasRow || entrySize >= d .dumpEntryLimit {
286
- d .Logger .Debug ("reach DUMP_ENTRY_LIMIT." , "size" , entrySize , "n_row" , len (valuesX ))
287
-
288
- err = handleEntry (valuesX , ! hasRow )
289
- if err != nil {
290
- return 0 , err
291
- }
285
+ d .Logger .Debug ("reach dumpEntryLimit." , "size" , entrySize , "point" , len (valuesX ))
286
+ splitPoints = append (splitPoints , len (valuesX ))
292
287
entrySize = 0
293
- valuesX = nil
288
+ }
289
+ }
290
+ if err = rows .Err (); err != nil {
291
+ return 0 , err
292
+ }
293
+ nRows = int64 (len (valuesX ))
294
+
295
+ for i := 1 ; i < len (splitPoints ); i ++ {
296
+ err = handleEntry (valuesX [splitPoints [i - 1 ]:splitPoints [i ]], i == len (splitPoints )- 1 )
297
+ if err != nil {
298
+ return 0 , err
294
299
}
295
300
}
296
301
0 commit comments