@@ -336,20 +336,54 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner {
336
336
) : Promise < ReadStream > {
337
337
if ( this . isReleased ) throw new QueryRunnerAlreadyReleasedError ( )
338
338
339
- const databaseConnection = await this . connect ( )
340
- this . driver . connection . logger . logQuery ( query , parameters , this )
339
+ const release = await this . lock . acquire ( )
340
+ let dropStatement : ( ) => Promise < void >
341
341
342
- const prepareAsync = promisify ( databaseConnection . prepare ) . bind (
343
- databaseConnection ,
344
- )
345
- const statement = await prepareAsync ( query )
346
- const resultSet = statement . executeQuery ( parameters )
347
- const stream = this . driver . streamClient . createObjectStream ( resultSet )
342
+ try {
343
+ const databaseConnection = await this . connect ( )
344
+ this . driver . connection . logger . logQuery ( query , parameters , this )
348
345
349
- if ( onEnd ) stream . on ( "end" , onEnd )
350
- if ( onError ) stream . on ( "error" , onError )
346
+ const statement = await promisify ( databaseConnection . prepare ) . call (
347
+ databaseConnection ,
348
+ query ,
349
+ )
350
+ const resultSet = await promisify ( statement . executeQuery ) . call (
351
+ statement ,
352
+ parameters ,
353
+ )
354
+ const stream =
355
+ this . driver . streamClient . createObjectStream ( resultSet )
356
+ dropStatement = promisify ( statement . drop ) . bind ( statement )
357
+
358
+ stream . on ( "end" , async ( ) => {
359
+ await dropStatement ( )
360
+ release ( )
361
+ onEnd ?.( )
362
+ } )
363
+ stream . on ( "error" , async ( error : Error ) => {
364
+ this . driver . connection . logger . logQueryError (
365
+ error ,
366
+ query ,
367
+ parameters ,
368
+ this ,
369
+ )
370
+ await dropStatement ( )
371
+ release ( )
372
+ onError ?.( error )
373
+ } )
351
374
352
- return stream
375
+ return stream
376
+ } catch ( error ) {
377
+ this . driver . connection . logger . logQueryError (
378
+ error ,
379
+ query ,
380
+ parameters ,
381
+ this ,
382
+ )
383
+ await dropStatement ?.( )
384
+ release ( )
385
+ throw new QueryFailedError ( query , parameters , error )
386
+ }
353
387
}
354
388
355
389
/**
0 commit comments