Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // creates the string to send to the database and execute it returning an error
- func bulkCreateRecordsV2(d []map[string]interface{}) error {
- if len(d) <= 0 {
- return errors.New("no data to process")
- }
- var keyStrings []string
- valueStrings := make([]string, 0, len(d)) //allocate space
- var valueArgs []interface{}
- //get keys
- for key, _ := range d[0] {
- keyStrings = append(keyStrings, key)
- }
- // for each map
- for _, v := range d {
- nofk := len(v) // get the len of keys in the map
- tmpQstnMrk := make([]string, 0, len(v)) // tmp variable to store the question marks for every key
- for n := 0; n < nofk; n++ { // for each key
- tmpQstnMrk = append(tmpQstnMrk, "?") // add a "?" to the temp variable
- }
- tmpToAppend := strings.Join(tmpQstnMrk, ",") // join all the ? with a , in between ?,?,?,?...
- valueStrings = append(valueStrings, fmt.Sprintf("(%s)", tmpToAppend)) // append the (?,?,?,?) to the valueStrings slice
- for _, strKey := range keyStrings {
- valueArgs = append(valueArgs, v[strKey])
- }
- }
- smt := `INSERT INTO mytable(%s) VALUES %s`
- smt = fmt.Sprintf(smt, strings.Join(keyStrings, ","), strings.Join(valueStrings, ","))
- fmt.Println(smt)
- tx := db.GetDB().Begin()
- if err := tx.Exec(smt, valueArgs...).Error; err != nil {
- tx.Rollback()
- return err
- }
- tx.Commit()
- return nil
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement