MCPcopy
hub / github.com/beego/beego / InsertOrUpdateSQL

Method InsertOrUpdateSQL

client/orm/db.go:566–675  ·  view source on GitHub ↗
(names []string, values *[]interface{}, mi *models.ModelInfo, a *alias, args ...string)

Source from the content-addressed store, hash-verified

564}
565
566func (d *dbBase) InsertOrUpdateSQL(names []string, values *[]interface{}, mi *models.ModelInfo, a *alias, args ...string) (string, error) {
567
568 args0 := ""
569
570 switch a.Driver {
571 case DRMySQL:
572 case DRPostgres:
573 if len(args) == 0 {
574 return "", fmt.Errorf("`%s` use InsertOrUpdate must have a conflict column", a.DriverName)
575 }
576 args0 = strings.ToLower(args[0])
577 default:
578 return "", fmt.Errorf("`%s` nonsupport InsertOrUpdate in beego", a.DriverName)
579 }
580
581 argsMap := map[string]string{}
582 // Get on the key-value pairs
583 for _, v := range args {
584 kv := strings.Split(v, "=")
585 if len(kv) == 2 {
586 argsMap[strings.ToLower(kv[0])] = kv[1]
587 }
588 }
589
590 quote := d.ins.TableQuote()
591
592 buf := buffers.Get()
593 defer buffers.Put(buf)
594
595 _, _ = buf.WriteString("INSERT INTO ")
596 _, _ = buf.WriteString(quote)
597 _, _ = buf.WriteString(mi.Table)
598 _, _ = buf.WriteString(quote)
599 _, _ = buf.WriteString(" (")
600
601 for i, name := range names {
602 if i > 0 {
603 _, _ = buf.WriteString(", ")
604 }
605 _, _ = buf.WriteString(quote)
606 _, _ = buf.WriteString(name)
607 _, _ = buf.WriteString(quote)
608 }
609
610 _, _ = buf.WriteString(") VALUES (")
611
612 for i := 0; i < len(names); i++ {
613 if i > 0 {
614 _, _ = buf.WriteString(", ")
615 }
616 _, _ = buf.WriteString("?")
617 }
618
619 _, _ = buf.WriteString(") ")
620
621 switch a.Driver {
622 case DRMySQL:
623 _, _ = buf.WriteString("ON DUPLICATE KEY UPDATE ")

Callers 2

InsertOrUpdateMethod · 0.95

Calls 6

GetFunction · 0.92
PutFunction · 0.92
TableQuoteMethod · 0.65
WriteStringMethod · 0.65
StringMethod · 0.65
ReplaceMarksMethod · 0.65

Tested by 1