@@ -146,14 +146,21 @@ Client.prototype.connect = function (callback) {
146
146
Client . prototype . query = function ( config , values , callback ) {
147
147
var query
148
148
var result
149
-
150
- if ( typeof config . submit === 'function' ) {
149
+ var readTimeout
150
+ var readTimeoutTimer
151
+ var queryCallback
152
+
153
+ if ( config === null || config === undefined ) {
154
+ throw new TypeError ( 'Client was passed a null or undefined query' )
155
+ } else if ( typeof config . submit === 'function' ) {
156
+ readTimeout = config . query_timeout || this . connectionParameters . query_timeout
151
157
result = query = config
152
158
// accept query(new Query(...), (err, res) => { }) style
153
159
if ( typeof values === 'function' ) {
154
160
config . callback = values
155
161
}
156
162
} else {
163
+ readTimeout = this . connectionParameters . query_timeout
157
164
query = new NativeQuery ( config , values , callback )
158
165
if ( ! query . callback ) {
159
166
let resolveOut , rejectOut
@@ -165,6 +172,40 @@ Client.prototype.query = function (config, values, callback) {
165
172
}
166
173
}
167
174
175
+ if ( readTimeout ) {
176
+ queryCallback = query . callback
177
+
178
+ readTimeoutTimer = setTimeout ( ( ) => {
179
+ var error = new Error ( 'Query read timeout' )
180
+
181
+ process . nextTick ( ( ) => {
182
+ query . handleError ( error , this . connection )
183
+ } )
184
+
185
+ if ( typeof queryCallback === 'function' ) {
186
+ queryCallback ( error )
187
+
188
+ // we already returned an error,
189
+ // just do nothing if query completes
190
+ query . callback = ( ) => {
191
+ }
192
+ }
193
+
194
+ // Remove from queue
195
+ var index = this . _queryQueue . indexOf ( query )
196
+ if ( index > - 1 ) {
197
+ this . _queryQueue . splice ( index , 1 )
198
+ }
199
+
200
+ this . _pulseQueryQueue ( )
201
+ } , readTimeout )
202
+
203
+ query . callback = ( err , res ) => {
204
+ clearTimeout ( readTimeoutTimer )
205
+ queryCallback ( err , res )
206
+ }
207
+ }
208
+
168
209
if ( ! this . _queryable ) {
169
210
query . native = this . native
170
211
process . nextTick ( ( ) => {
0 commit comments