33const fp = require ( 'fastify-plugin' )
44var pg = require ( 'pg' )
55
6- function transactionHelper ( query , values , cb = null ) {
7- return new Promise ( ( resolve , reject ) => {
8- this . connect ( ( err , client , done ) => {
9- if ( err ) reject ( err )
10-
11- const shouldAbort = ( err ) => {
12- if ( err ) {
13- client . query ( 'ROLLBACK' , ( ) => {
14- done ( )
15- } )
16- }
17- return ! ! err
6+ function transactionUtil ( pool , query , values , cb ) {
7+ pool . connect ( ( err , client , done ) => {
8+ if ( err ) return cb ( err )
9+
10+ const shouldAbort = ( err ) => {
11+ if ( err ) {
12+ client . query ( 'ROLLBACK' , ( ) => {
13+ done ( )
14+ } )
1815 }
16+ return ! ! err
17+ }
1918
20- client . query ( 'BEGIN' , ( err ) => {
21- if ( shouldAbort ( err ) ) return cb ? cb ( err ) : reject ( err )
22- client . query ( query , values , ( err , res ) => {
23- if ( shouldAbort ( err ) ) return cb ? cb ( err ) : reject ( err )
24-
25- client . query ( 'COMMIT' , ( err ) => {
26- done ( )
27- if ( err ) {
28- return cb ? cb ( err ) : reject ( err )
29- }
30- return cb ? cb ( null , res ) : resolve ( res )
31- } )
19+ client . query ( 'BEGIN' , ( err ) => {
20+ if ( shouldAbort ( err ) ) return cb ( err )
21+ client . query ( query , values , ( err , res ) => {
22+ if ( shouldAbort ( err ) ) return cb ( err )
23+
24+ client . query ( 'COMMIT' , ( err ) => {
25+ done ( )
26+ if ( err ) {
27+ return cb ( err )
28+ }
29+ return cb ( null , res )
3230 } )
3331 } )
3432 } )
3533 } )
3634}
3735
36+ function transact ( query , values , cb ) {
37+ if ( ! cb ) {
38+ return new Promise ( ( resolve , reject ) => {
39+ transactionUtil ( this , query , values , function ( err , res ) {
40+ if ( err ) { return reject ( err ) }
41+ return resolve ( res )
42+ } )
43+ } )
44+ }
45+
46+ return transactionUtil ( this , query , values , cb )
47+ }
48+
3849function fastifyPostgres ( fastify , options , next ) {
3950 if ( options . native ) {
4051 delete options . native
@@ -54,7 +65,7 @@ function fastifyPostgres (fastify, options, next) {
5465 pool : pool ,
5566 Client : pg . Client ,
5667 query : pool . query . bind ( pool ) ,
57- transact : transactionHelper . bind ( pool )
68+ transact : transact . bind ( pool )
5869 }
5970
6071 if ( name ) {
0 commit comments