|
1 | 1 | package kallax |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "bytes" |
4 | 5 | "database/sql" |
5 | 6 | "errors" |
6 | 7 | "fmt" |
@@ -162,23 +163,38 @@ func (s *Store) Insert(schema Schema, record Record) error { |
162 | 163 | cols = append(cols, virtualCols...) |
163 | 164 | values = append(values, virtualColValues...) |
164 | 165 |
|
165 | | - builder := s.builder. |
166 | | - Insert(schema.Table()). |
167 | | - Columns(cols...). |
168 | | - Values(values...) |
| 166 | + var colBuf bytes.Buffer |
| 167 | + var valBuf bytes.Buffer |
| 168 | + |
| 169 | + for i, col := range cols { |
| 170 | + if i != 0 { |
| 171 | + colBuf.WriteRune(',') |
| 172 | + valBuf.WriteRune(',') |
| 173 | + } |
| 174 | + colBuf.WriteString(col) |
| 175 | + valBuf.WriteString(fmt.Sprintf("$%d", i+1)) |
| 176 | + } |
| 177 | + |
| 178 | + var query bytes.Buffer |
| 179 | + query.WriteString("INSERT INTO ") |
| 180 | + query.WriteString(schema.Table()) |
| 181 | + query.WriteString(" (") |
| 182 | + query.WriteString(colBuf.String()) |
| 183 | + query.WriteString(") VALUES (") |
| 184 | + query.WriteString(valBuf.String()) |
| 185 | + query.WriteString(")") |
| 186 | + |
169 | 187 | if schema.isPrimaryKeyAutoIncrementable() { |
170 | 188 | var pk interface{} |
171 | 189 | pk, err = record.ColumnAddress(schema.ID().String()) |
172 | 190 | if err != nil { |
173 | 191 | return err |
174 | 192 | } |
175 | 193 |
|
176 | | - err = builder. |
177 | | - Suffix(fmt.Sprintf("RETURNING %q", schema.ID())). |
178 | | - QueryRow(). |
179 | | - Scan(pk) |
| 194 | + query.WriteString(fmt.Sprintf(" RETURNING %s", schema.ID().String())) |
| 195 | + err = s.proxy.QueryRow(query.String(), values...).Scan(pk) |
180 | 196 | } else { |
181 | | - _, err = builder.Exec() |
| 197 | + _, err = s.proxy.Exec(query.String(), values...) |
182 | 198 | } |
183 | 199 |
|
184 | 200 | if err != nil { |
|
0 commit comments