@@ -29,14 +29,7 @@ function UPDATE(table) {
2929
3030UPDATE . prototype = {
3131 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 ) ;
4033 return this ;
4134 } ,
4235 WHERE : function ( where , conjunction ) {
@@ -176,16 +169,34 @@ DELETE.prototype = {
176169 }
177170} ;
178171
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+
179190// used in UPDATE, SELECT and DELETE
180191// can handle where objects like so:
181192// { foo: [1,2,3,4], bar: NOT_NULL, baz: null }
182193function 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 ) {
184195 var value = where [ c ] ;
185196 if ( Array . isArray ( value ) ) {
186197 return c + ' IN (' + value . map ( function ( v , i ) {
187198 values . push ( v ) ;
188- return '$' + values . length ;
199+ return '$' + values . length ;
189200 } ) . join ( ', ' ) + ')' ;
190201 } else if ( value === null ) {
191202 return c + ' IS NULL' ;
0 commit comments