| 115 | } |
| 116 | |
| 117 | func (d *insertData) appendValuesToSQL(w io.Writer, args []interface{}) ([]interface{}, error) { |
| 118 | if len(d.Values) == 0 { |
| 119 | return args, errors.New("values for insert statements are not set") |
| 120 | } |
| 121 | |
| 122 | io.WriteString(w, "VALUES ") |
| 123 | |
| 124 | valuesStrings := make([]string, len(d.Values)) |
| 125 | for r, row := range d.Values { |
| 126 | valueStrings := make([]string, len(row)) |
| 127 | for v, val := range row { |
| 128 | if vs, ok := val.(Sqlizer); ok { |
| 129 | vsql, vargs, err := vs.ToSql() |
| 130 | if err != nil { |
| 131 | return nil, err |
| 132 | } |
| 133 | valueStrings[v] = vsql |
| 134 | args = append(args, vargs...) |
| 135 | } else { |
| 136 | valueStrings[v] = "?" |
| 137 | args = append(args, val) |
| 138 | } |
| 139 | } |
| 140 | valuesStrings[r] = fmt.Sprintf("(%s)", strings.Join(valueStrings, ",")) |
| 141 | } |
| 142 | |
| 143 | io.WriteString(w, strings.Join(valuesStrings, ",")) |
| 144 | |
| 145 | return args, nil |
| 146 | } |
| 147 | |
| 148 | func (d *insertData) appendSelectToSQL(w io.Writer, args []interface{}) ([]interface{}, error) { |
| 149 | if d.Select == nil { |