@@ -29,14 +29,7 @@ function UPDATE(table) {
29
29
30
30
UPDATE . prototype = {
31
31
SET : function ( set ) {
32
- // build set clause:
33
- var set_columns = Object . keys ( set ) ,
34
- set_clause = set_columns . map ( function ( c , i ) {
35
- return c + ' = $' + ( i + 1 ) ;
36
- } ) ,
37
- set_values = set_columns . map ( function ( c ) { return set [ c ] ; } ) ;
38
- this . text += ' SET ' + set_clause . join ( ', ' ) ;
39
- this . values . push . apply ( this . values , set_values ) ;
32
+ this . text += ' SET ' + get_set_clause ( set , this . values ) ;
40
33
return this ;
41
34
} ,
42
35
WHERE : function ( where , conjunction ) {
@@ -176,16 +169,34 @@ DELETE.prototype = {
176
169
}
177
170
} ;
178
171
172
+ function get_set_placeholder ( value , values ) {
173
+ if ( Array . isArray ( value ) ) {
174
+ return 'ARRAY[' + value . map ( function ( item ) {
175
+ return get_set_placeholder ( item , values ) ;
176
+ } ) . join ( ', ' ) + ']'
177
+ } else {
178
+ values . push ( value ) ;
179
+ return '$' + values . length ;
180
+ }
181
+ }
182
+
183
+ // only used in UPDATE, but here for clarity/efficiency
184
+ function get_set_clause ( set , values ) {
185
+ return Object . keys ( set ) . map ( function ( c , i ) {
186
+ return c + ' = ' + get_set_placeholder ( set [ c ] , values ) ;
187
+ } ) . join ( ', ' ) ;
188
+ }
189
+
179
190
// used in UPDATE, SELECT and DELETE
180
191
// can handle where objects like so:
181
192
// { foo: [1,2,3,4], bar: NOT_NULL, baz: null }
182
193
function get_where_clause ( where , values , conjunction ) {
183
- return Object . keys ( where ) . map ( function ( c , i ) {
194
+ return Object . keys ( where ) . map ( function column_to_where ( c , i ) {
184
195
var value = where [ c ] ;
185
196
if ( Array . isArray ( value ) ) {
186
197
return c + ' IN (' + value . map ( function ( v , i ) {
187
198
values . push ( v ) ;
188
- return '$' + values . length ;
199
+ return '$' + values . length ;
189
200
} ) . join ( ', ' ) + ')' ;
190
201
} else if ( value === null ) {
191
202
return c + ' IS NULL' ;
0 commit comments