File tree Expand file tree Collapse file tree 1 file changed +29
-3
lines changed Expand file tree Collapse file tree 1 file changed +29
-3
lines changed Original file line number Diff line number Diff line change @@ -152,9 +152,35 @@ Query.prototype.submit = function (connection) {
152
152
if ( this . text && previous && this . text !== previous ) {
153
153
return new Error ( `Prepared statements must be unique - '${ this . name } ' was used for a different statement` )
154
154
}
155
- if ( this . values && ! Array . isArray ( this . values ) ) {
156
- return new Error ( 'Query values must be an array' )
157
- }
155
+ // if (this.values && !Array.isArray(this.values)) {
156
+ // return new Error('Query values must be an array')
157
+ // }
158
+ if ( this . values && ! ( Array . isArray ( this . values ) || typeof this . values == 'object' ) ) {
159
+ // const err = new Error('Query values must be an array or object')
160
+ // connection.emit('error', err)
161
+ // connection.emit('readyForQuery')
162
+ // return
163
+ return new Error ( 'Query values must be an array or object' ) ;
164
+ }
165
+ if ( ! Array . isArray ( this . values ) ) {
166
+ var sql = this . text
167
+ , data = this . values
168
+ , values = [ ]
169
+ ;
170
+ this . text = sql . replace ( / ( : ) ? : ( \w + ) / g, function ( $0 , $1 , key ) {
171
+ // lookbehind is not supported by node js 6.11.
172
+ // this.text = sql.replace(/(?<!:):{1}([a-zA-Z][\w]*)/g, function(_, key) {
173
+ if ( $1 ) return $0 ;
174
+ if ( key in data ) {
175
+ values . push ( data [ key ] )
176
+ return '$' + values . length
177
+ } else {
178
+ throw new Error ( 'Missing value for statement.\n' + key + ' not provided for statement:\n' + sql + '\nthis was provided:\n' + JSON . stringify ( data ) )
179
+ }
180
+ } ) ;
181
+ this . values = values ;
182
+ }
183
+
158
184
if ( this . requiresPreparation ( ) ) {
159
185
this . prepare ( connection )
160
186
} else {
You can’t perform that action at this time.
0 commit comments