@@ -3,7 +3,7 @@ const tls = require('tls')
33const frontend = require ( './frontend.js' )
44const Backend = require ( './backend.js' )
55const Queue = require ( './queue.js' )
6- const { END } = require ( './types.js' )
6+ const { END , retryRoutines } = require ( './types.js' )
77const { errors } = require ( './errors.js' )
88
99module . exports = Connection
@@ -128,8 +128,17 @@ function Connection(options = {}) {
128128 q . reject ( err )
129129 }
130130
131+ function retry ( query ) {
132+ query . retried = true
133+ delete statements [ query . sig ]
134+ ready = true
135+ backend . query = backend . error = null
136+ send ( query , { sig : query . sig , str : query . str , args : query . args } )
137+ }
138+
131139 function send ( query , { sig, str, args = [ ] } ) {
132140 try {
141+ query . sig = sig
133142 query . str = str
134143 query . args = args
135144 query . result = [ ]
@@ -204,6 +213,9 @@ function Connection(options = {}) {
204213 clearTimeout ( connect_timer )
205214 if ( err ) {
206215 if ( backend . query ) {
216+ if ( ! backend . query . retried && retryRoutines [ err . routine ] )
217+ return retry ( backend . query )
218+
207219 err . stack += backend . query . origin . replace ( / .* \n / , '\n' )
208220 Object . defineProperty ( err , 'query' , {
209221 value : backend . query . str ,
0 commit comments