github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/data/bulk/gorm-bulk/bulk_insert_extend_test.go (about) 1 package gormbulk 2 3 import ( 4 "time" 5 6 "github.com/angenalZZZ/gofunc/f" 7 "github.com/jinzhu/gorm" 8 9 "testing" 10 11 _ "github.com/jinzhu/gorm/dialects/mssql" 12 _ "github.com/jinzhu/gorm/dialects/mysql" 13 json "github.com/json-iterator/go" 14 ) 15 16 func TestBulkInsertByJs(t *testing.T) { 17 var record map[string]interface{} 18 item := `{"Code":"Login","Type":2,"Message":"Admin Login","Account":"admin","CreateTime":"2020-10-25T11:29:43.5757388+08:00"}` 19 if err := json.Unmarshal([]byte(item), &record); err != nil { 20 t.Fatal(err) 21 } 22 23 records := make([]map[string]interface{}, 0, 10) 24 f.Times(cap(records), func(i int) { 25 records = append(records, record) 26 }) 27 28 script := ` 29 "insert into logtest(Code,Type,Message,Account,CreateTime) values" 30 + records.map(function(item){ 31 return "(" 32 + "'" + item.Code + "'," 33 + item.Type + "," 34 + "'" + item.Message + "'," 35 + "'" + item.Account + "'," 36 + "'" + item.CreateTime.replace('T',' ').split('.')[0] + "'" 37 + ")"; 38 }).join(",") + ";"` 39 40 // save database 41 db, err := gorm.Open("mysql", "root:HGJ766GR767FKJU0@tcp(localhost:3306)/test?charset=utf8") 42 if err != nil { 43 t.Fatal(err) 44 } 45 46 db = db.Debug() 47 defer func() { _ = db.Close() }() 48 if err = BulkInsertByJs(db, records, 5, script, time.Second); err != nil { 49 t.Fatal(err) 50 } 51 } 52 53 func TestBulkInsertByJsFunction(t *testing.T) { 54 var record map[string]interface{} 55 item := `{"Code":"Login","Type":2,"Message":"Admin Login","Account":"admin","CreateTime":"2020-10-25T11:29:43.5757388+08:00"}` 56 if err := json.Unmarshal([]byte(item), &record); err != nil { 57 t.Fatal(err) 58 } 59 60 records := make([]map[string]interface{}, 0, 10) 61 f.Times(cap(records), func(i int) { 62 records = append(records, record) 63 }) 64 65 script := ` 66 function f(records) { 67 if (!records || records.constructor.name != "Array") return ""; 68 var items = records.filter(function (item) { return item.constructor.name == "Object" && item.hasOwnProperty("Code"); }); 69 if (items.length == 0) return ""; 70 return "insert into logtest(Code,Type,Message,Account,CreateTime) values" 71 + items.map(function (item) { 72 return "(" 73 + "'" + item.Code.replace("'", "") + "'," 74 + item.Type + "," 75 + "'" + item.Message.replace("'", "''") + "'," 76 + "'" + item.Account + "'," 77 + "'" + item.CreateTime.replace("T", " ").split(".")[0] + "'" 78 + ")"; 79 }).join(",") + ";"; 80 }` 81 82 // save database 83 db, err := gorm.Open("mysql", "root:HGJ766GR767FKJU0@tcp(localhost:3306)/test?charset=utf8") 84 if err != nil { 85 t.Fatal(err) 86 } 87 88 db = db.Debug() 89 defer func() { _ = db.Close() }() 90 if err = BulkInsertByJsFunction(db, records, 5, script, "f", time.Second); err != nil { 91 t.Fatal(err) 92 } 93 }