Skip to content

Commit 94e706b

Browse files
committed
Fix insert into helper
1 parent 2469b2e commit 94e706b

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

lib/index.js

+9-14
Original file line numberDiff line numberDiff line change
@@ -391,23 +391,18 @@ function Postgres(url, options) {
391391

392392
function insertHelper(first, columns, xargs, types) {
393393
first = Array.isArray(first) ? first : [first]
394-
return '(' + escapeHelper(Object.keys(first[0])) + ') values ' +
395-
first.map(row =>
396-
'(' + Object.entries(row).reduce((acc, [k, v]) =>
397-
acc + (!columns.length || columns.indexOf(k) > -1
398-
? (acc ? ',' : '') + parseValue(v, xargs, types)
399-
: ''
400-
)
401-
, '') + ')'
402-
).join(',')
394+
columns = columns.length ? columns : Object.keys(first[0])
395+
return '(' + escapeHelper(columns) + ') values ' +
396+
first.reduce((acc, row) =>
397+
acc + (acc ? ',' : '') + '(' +
398+
columns.reduce((acc, k) => acc + (acc ? ',' : '') + parseValue(row[k], xargs, types), '') +
399+
')'
400+
, '')
403401
}
404402

405403
function equalsHelper(first, columns, xargs, types) {
406-
return Object.entries(first).reduce((acc, [k, v]) =>
407-
acc + (!columns.length || columns.indexOf(k) > -1
408-
? (acc ? ',' : '') + escape(k) + ' = ' + parseValue(v, xargs, types)
409-
: ''
410-
)
404+
return columns.length ? columns : Object.keys(first).reduce((acc, [k, v]) =>
405+
acc + (acc ? ',' : '') + escape(k) + ' = ' + parseValue(v, xargs, types)
411406
, '')
412407
}
413408

tests/index.js

+7
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,13 @@ t('dynamic insert', async () => {
441441
return ['the answer', (await sql`insert into test ${ sql(x) } returning *`)[0].b]
442442
}, () => sql`drop table test`)
443443

444+
t('dynamic insert pluck', async () => {
445+
await sql`create table test (a int, b text)`
446+
const x = { a: 42, b: 'the answer' }
447+
448+
return [null, (await sql`insert into test ${ sql(x, 'a') } returning *`)[0].b]
449+
}, () => sql`drop table test`)
450+
444451
t('array insert', async () => {
445452
await sql`create table test (a int, b int)`
446453
return [2, (await sql`insert into test (a, b) values (${ [1,2] }) returning *`)[0].b]

0 commit comments

Comments
 (0)