github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/go-xorm/builder/builder_insert.go (about) 1 package builder 2 3 import ( 4 "bytes" 5 "errors" 6 "fmt" 7 ) 8 9 func (b *Builder) insertWriteTo(w Writer) error { 10 if len(b.tableName) <= 0 { 11 return errors.New("no table indicated") 12 } 13 if len(b.inserts) <= 0 { 14 return errors.New("no column to be update") 15 } 16 17 if _, err := fmt.Fprintf(w, "INSERT INTO %s (", b.tableName); err != nil { 18 return err 19 } 20 21 var args = make([]interface{}, 0) 22 var bs []byte 23 var valBuffer = bytes.NewBuffer(bs) 24 var i = 0 25 for col, value := range b.inserts { 26 fmt.Fprint(w, col) 27 if e, ok := value.(expr); ok { 28 fmt.Fprint(valBuffer, e.sql) 29 args = append(args, e.args...) 30 } else { 31 fmt.Fprint(valBuffer, "?") 32 args = append(args, value) 33 } 34 35 if i != len(b.inserts)-1 { 36 if _, err := fmt.Fprint(w, ","); err != nil { 37 return err 38 } 39 if _, err := fmt.Fprint(valBuffer, ","); err != nil { 40 return err 41 } 42 } 43 i = i + 1 44 } 45 46 if _, err := fmt.Fprint(w, ") Values ("); err != nil { 47 return err 48 } 49 50 if _, err := w.Write(valBuffer.Bytes()); err != nil { 51 return err 52 } 53 if _, err := fmt.Fprint(w, ")"); err != nil { 54 return err 55 } 56 57 w.Append(args...) 58 59 return nil 60 }