Skip to content

Commit 7810e43

Browse files
committed
fix name convert
1 parent 971b13c commit 7810e43

File tree

1 file changed

+56
-28
lines changed

1 file changed

+56
-28
lines changed

models/models.go

Lines changed: 56 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"os"
1414
"path"
1515
"path/filepath"
16-
"reflect"
16+
"sort"
1717
"strings"
1818

1919
"code.gitea.io/gitea/modules/log"
@@ -373,35 +373,33 @@ func dumpTableFixtures(bean interface{}, dirPath string) error {
373373
return err
374374
}
375375
defer f.Close()
376-
var bufferSize = 100
377-
var objs = make([]interface{}, 0, bufferSize)
378-
err = x.BufferSize(bufferSize).Iterate(bean, func(idx int, obj interface{}) error {
379-
objs = append(objs, obj)
380-
if len(objs) == bufferSize {
381-
// BLOCK: need yaml support gonic name mapper
382-
data, err := yaml.Marshal(objs)
383-
if err != nil {
384-
return err
385-
}
386-
_, err = f.Write(data)
387-
if err != nil {
388-
return err
389-
}
390-
objs = make([]interface{}, 0, bufferSize)
376+
377+
const bufferSize = 100
378+
var start = 0
379+
for {
380+
objs, err := x.Table(table.Name).Limit(bufferSize, start).QueryInterface()
381+
if err != nil {
382+
return err
391383
}
392-
return err
393-
})
394-
if err != nil {
395-
return err
396-
}
397-
if len(objs) > 0 {
384+
if len(objs) == 0 {
385+
break
386+
}
387+
398388
data, err := yaml.Marshal(objs)
399389
if err != nil {
400390
return err
401391
}
402392
_, err = f.Write(data)
393+
if err != nil {
394+
return err
395+
}
396+
if len(objs) < bufferSize {
397+
break
398+
}
399+
start += len(objs)
403400
}
404-
return err
401+
402+
return nil
405403
}
406404

407405
// RestoreDatabaseFixtures restores all data from dir to database
@@ -421,14 +419,44 @@ func restoreTableFixtures(bean interface{}, dirPath string) error {
421419
return err
422420
}
423421

424-
var bufferSize = 100
425-
v := reflect.MakeSlice(table.Type, 0, bufferSize)
426-
// BLOCK: need yaml support gonic name mapper
427-
err = yaml.Unmarshal(data, v.Interface())
422+
const bufferSize = 100
423+
var records = make([]map[string]interface{}, 0, bufferSize*10)
424+
err = yaml.Unmarshal(data, records)
428425
if err != nil {
429426
return err
430427
}
431428

432-
_, err = x.Insert(v.Interface())
429+
if len(records) == 0 {
430+
return nil
431+
}
432+
433+
var columns = make([]string, 0, len(records[0]))
434+
for k, _ := range records[0] {
435+
columns = append(columns, k)
436+
}
437+
sort.Strings(columns)
438+
439+
qm := strings.Repeat("?,", len(columns))
440+
qm = "(" + qm[:len(qm)-1] + ")"
441+
442+
var sql = "INSERT INTO " + table.Name + "(" + strings.Join(columns, ",") + ") VALUES "
443+
var args = make([]interface{}, 0, bufferSize)
444+
var insertSQLs = make([]string, 0, bufferSize)
445+
for i, vals := range records {
446+
insertSQLs = append(insertSQLs, qm)
447+
for _, colName := range columns {
448+
args = append(args, vals[colName])
449+
}
450+
451+
if i+1%100 == 0 || i == len(records)-1 {
452+
_, err = x.Exec(sql+strings.Join(insertSQLs, ","), args...)
453+
if err != nil {
454+
return err
455+
}
456+
insertSQLs = make([]string, 0, bufferSize)
457+
args = make([]interface{}, 0, bufferSize)
458+
}
459+
}
460+
433461
return err
434462
}

0 commit comments

Comments
 (0)