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  }