@@ -215,21 +215,30 @@ initPool AppConfig{..} observer = do
215215--  |  Run an action with a database connection. 
216216usePool  ::  AppState  ->  SQL. Sessiona  ->  IO Either SQL. UsageErrora )
217217usePool AppState {stateObserver= observer, stateMainThreadId= mainThreadId, .. } sess =  do 
218-   observer PoolRequest 
218+      observer PoolRequest 
219219
220-   res <-  SQL. use statePool sess
220+      res <-  SQL. use statePool sess
221221
222-   observer PoolRequestFullfilled 
222+      observer PoolRequestFullfilled 
223223
224-   whenLeft res (\ case 
225-     SQL. AcquisitionTimeoutUsageError-> 
226-       observer $  PoolAcqTimeoutObs  SQL. AcquisitionTimeoutUsageError
227-     err@ (SQL. ConnectionUsageError-> 
228-       let  failureMessage =  BS. unpack $  fromMaybe mempty  e in 
229-       when ((" FATAL:  password authentication failed" `isInfixOf`  failureMessage) ||  (" no password supplied" `isInfixOf`  failureMessage)) $  do 
230-         observer $  ExitDBFatalError  ServerAuthError  err
231-         killThread mainThreadId
232-     err@ (SQL. SessionUsageErrorSQL. QueryErrorSQL. ResultError->  do 
224+     whenLeft res (\ case 
225+       SQL. AcquisitionTimeoutUsageError-> 
226+         observer $  PoolAcqTimeoutObs  SQL. AcquisitionTimeoutUsageError
227+       err@ (SQL. ConnectionUsageError-> 
228+         let  failureMessage =  BS. unpack $  fromMaybe mempty  e in 
229+         when ((" FATAL:  password authentication failed" `isInfixOf`  failureMessage) ||  (" no password supplied" `isInfixOf`  failureMessage)) $  do 
230+           observer $  ExitDBFatalError  ServerAuthError  err
231+           killThread mainThreadId
232+       err@ (SQL. SessionUsageErrorSQL. QueryErrorSQL. ResultError->  handleResultError err tpl resultErr
233+       --  Passing the empty template will not work for schema cache queries, see TODO further below.
234+       err@ (SQL. SessionUsageErrorSQL. PipelineErrorSQL. ResultError->  handleResultError err mempty  resultErr
235+       SQL. SessionUsageErrorSQL. QueryErrorSQL. ClientError->  pure  () 
236+       SQL. SessionUsageErrorSQL. PipelineErrorSQL. ClientError->  pure  () 
237+       )
238+ 
239+     return  res
240+   where 
241+     handleResultError err tpl resultErr =  do 
233242      case  resultErr of 
234243        SQL. UnexpectedResult->  do 
235244          observer $  ExitDBFatalError  ServerPgrstBug  err
@@ -262,12 +271,6 @@ usePool AppState{stateObserver=observer, stateMainThreadId=mainThreadId, ..} ses
262271        SQL. ServerError-> 
263272          when (Error. status (Error. PgErrorFalse >=  HTTP. status500) $ 
264273            observer $  QueryErrorCodeHighObs  err
265-     err@ (SQL. SessionUsageErrorSQL. QueryErrorSQL. ClientError-> 
266-       --  An error on the client-side, usually indicates problems wth connection
267-         observer $  QueryErrorCodeHighObs  err
268-     )
269- 
270-   return  res
271274
272275--  |  Flush the connection pool so that any future use of the pool will 
273276--  use connections freshly established after this call. 
0 commit comments