@@ -11,6 +11,7 @@ import {
1111 InsertOne ,
1212 InsertWithoutReturning ,
1313 Join ,
14+ MaybeAsync ,
1415 OneResult ,
1516 QueryBuilderOptions ,
1617 QueryLoggerMeta ,
@@ -28,11 +29,13 @@ import {
2829import { ConflictTypes , FetchTypes , OrderTypes } from './enums'
2930import { Query , QueryWithExtra , Raw } from './tools'
3031import { SelectBuilder } from './modularBuilder'
32+ import { asyncLoggerWrapper , defaultLogger } from './logger'
3133
32- export class QueryBuilder < GenericResultWrapper > {
33- protected options : QueryBuilderOptions
34+ export class QueryBuilder < GenericResultWrapper , IsAsync extends boolean = true > {
35+ protected options : QueryBuilderOptions < IsAsync >
36+ loggerWrapper = asyncLoggerWrapper
3437
35- constructor ( options ?: QueryBuilderOptions ) {
38+ constructor ( options ?: QueryBuilderOptions < IsAsync > ) {
3639 this . options = options || { }
3740 }
3841
@@ -43,48 +46,27 @@ export class QueryBuilder<GenericResultWrapper> {
4346 return
4447 }
4548
46- this . options . logger = ( query : RawQuery , meta : QueryLoggerMeta ) => {
47- console . log ( `[workers-qb][${ meta . duration } ms] ${ JSON . stringify ( query ) } ` )
48- }
49+ this . options . logger = defaultLogger
4950 } else {
5051 this . options . logger = undefined
5152 }
5253 }
5354
54- async loggerWrapper ( query : Query | Query [ ] , innerFunction : ( ) => any ) {
55- const start = Date . now ( )
56- try {
57- return await innerFunction ( )
58- } catch ( e ) {
59- throw e
60- } finally {
61- if ( this . options . logger ) {
62- if ( Array . isArray ( query ) ) {
63- for ( const q of query ) {
64- await this . options . logger ( q . toObject ( ) , { duration : Date . now ( ) - start } )
65- }
66- } else {
67- await this . options . logger ( query . toObject ( ) , { duration : Date . now ( ) - start } )
68- }
69- }
70- }
71- }
72-
73- async execute ( query : Query ) : Promise < any > {
55+ execute ( query : Query < any , IsAsync > ) : MaybeAsync < IsAsync , any > {
7456 throw new Error ( 'Execute method not implemented' )
7557 }
7658
77- async batchExecute ( queryArray : Query [ ] ) : Promise < any [ ] > {
59+ batchExecute ( queryArray : Query < any , IsAsync > [ ] ) : MaybeAsync < IsAsync , any [ ] > {
7860 throw new Error ( 'Batch execute method not implemented' )
7961 }
8062
8163 createTable < GenericResult = undefined > ( params : {
8264 tableName : string
8365 schema : string
8466 ifNotExists ?: boolean
85- } ) : Query < ArrayResult < GenericResultWrapper , GenericResult > > {
67+ } ) : Query < ArrayResult < GenericResultWrapper , GenericResult > , IsAsync > {
8668 return new Query (
87- ( q : Query ) => {
69+ ( q ) => {
8870 return this . execute ( q )
8971 } ,
9072 `CREATE TABLE ${ params . ifNotExists ? 'IF NOT EXISTS' : '' } ${ params . tableName }
@@ -95,14 +77,16 @@ export class QueryBuilder<GenericResultWrapper> {
9577 dropTable < GenericResult = undefined > ( params : {
9678 tableName : string
9779 ifExists ?: boolean
98- } ) : Query < ArrayResult < GenericResultWrapper , GenericResult > > {
99- return new Query ( ( q : Query ) => {
80+ } ) : Query < ArrayResult < GenericResultWrapper , GenericResult > , IsAsync > {
81+ return new Query ( ( q ) => {
10082 return this . execute ( q )
10183 } , `DROP TABLE ${ params . ifExists ? 'IF EXISTS' : '' } ${ params . tableName } ` )
10284 }
10385
104- select < GenericResult = DefaultReturnObject > ( tableName : string ) : SelectBuilder < GenericResultWrapper , GenericResult > {
105- return new SelectBuilder < GenericResultWrapper , GenericResult > (
86+ select < GenericResult = DefaultReturnObject > (
87+ tableName : string
88+ ) : SelectBuilder < GenericResultWrapper , GenericResult , IsAsync > {
89+ return new SelectBuilder < GenericResultWrapper , GenericResult , IsAsync > (
10690 {
10791 tableName : tableName ,
10892 } ,
@@ -117,9 +101,9 @@ export class QueryBuilder<GenericResultWrapper> {
117101
118102 fetchOne < GenericResult = DefaultReturnObject > (
119103 params : SelectOne
120- ) : QueryWithExtra < GenericResultWrapper , OneResult < GenericResultWrapper , GenericResult > > {
104+ ) : QueryWithExtra < GenericResultWrapper , OneResult < GenericResultWrapper , GenericResult > , IsAsync > {
121105 return new QueryWithExtra (
122- ( q : Query ) => {
106+ ( q ) => {
123107 return this . execute ( q )
124108 } ,
125109 this . _select ( { ...params , limit : 1 } ) ,
@@ -140,9 +124,9 @@ export class QueryBuilder<GenericResultWrapper> {
140124
141125 fetchAll < GenericResult = DefaultReturnObject > (
142126 params : SelectAll
143- ) : QueryWithExtra < GenericResultWrapper , ArrayResult < GenericResultWrapper , GenericResult > > {
127+ ) : QueryWithExtra < GenericResultWrapper , ArrayResult < GenericResultWrapper , GenericResult > , IsAsync > {
144128 return new QueryWithExtra (
145- ( q : Query ) => {
129+ ( q ) => {
146130 return this . execute ( q )
147131 } ,
148132 this . _select ( params ) ,
@@ -163,14 +147,14 @@ export class QueryBuilder<GenericResultWrapper> {
163147
164148 raw < GenericResult = DefaultReturnObject > (
165149 params : RawQueryFetchOne
166- ) : Query < OneResult < GenericResultWrapper , GenericResult > >
150+ ) : Query < OneResult < GenericResultWrapper , GenericResult > , IsAsync >
167151 raw < GenericResult = DefaultReturnObject > (
168152 params : RawQueryFetchAll
169- ) : Query < ArrayResult < GenericResultWrapper , GenericResult > >
170- raw < GenericResult = DefaultReturnObject > ( params : RawQueryWithoutFetching ) : Query < GenericResultWrapper >
153+ ) : Query < ArrayResult < GenericResultWrapper , GenericResult > , IsAsync >
154+ raw < GenericResult = DefaultReturnObject > ( params : RawQueryWithoutFetching ) : Query < GenericResultWrapper , IsAsync >
171155 raw < GenericResult = DefaultReturnObject > ( params : RawQuery ) : unknown {
172- return new Query (
173- ( q : Query ) => {
156+ return new Query < any , IsAsync > (
157+ ( q ) => {
174158 return this . execute ( q )
175159 } ,
176160 params . query ,
@@ -179,11 +163,13 @@ export class QueryBuilder<GenericResultWrapper> {
179163 )
180164 }
181165
182- insert < GenericResult = DefaultReturnObject > ( params : InsertOne ) : Query < OneResult < GenericResultWrapper , GenericResult > >
166+ insert < GenericResult = DefaultReturnObject > (
167+ params : InsertOne
168+ ) : Query < OneResult < GenericResultWrapper , GenericResult > , IsAsync >
183169 insert < GenericResult = DefaultReturnObject > (
184170 params : InsertMultiple
185- ) : Query < ArrayResult < GenericResultWrapper , GenericResult > >
186- insert < GenericResult = DefaultReturnObject > ( params : InsertWithoutReturning ) : Query < GenericResultWrapper >
171+ ) : Query < ArrayResult < GenericResultWrapper , GenericResult > , IsAsync >
172+ insert < GenericResult = DefaultReturnObject > ( params : InsertWithoutReturning ) : Query < GenericResultWrapper , IsAsync >
187173 insert < GenericResult = DefaultReturnObject > ( params : Insert ) : unknown {
188174 let args : any [ ] = [ ]
189175
@@ -214,8 +200,8 @@ export class QueryBuilder<GenericResultWrapper> {
214200
215201 const fetchType = Array . isArray ( params . data ) ? FetchTypes . ALL : FetchTypes . ONE
216202
217- return new Query (
218- ( q : Query ) => {
203+ return new Query < any , IsAsync > (
204+ ( q ) => {
219205 return this . execute ( q )
220206 } ,
221207 this . _insert ( params ) ,
@@ -226,8 +212,8 @@ export class QueryBuilder<GenericResultWrapper> {
226212
227213 update < GenericResult = DefaultReturnObject > (
228214 params : UpdateReturning
229- ) : Query < ArrayResult < GenericResultWrapper , GenericResult > >
230- update < GenericResult = DefaultReturnObject > ( params : UpdateWithoutReturning ) : Query < GenericResultWrapper >
215+ ) : Query < ArrayResult < GenericResultWrapper , GenericResult > , IsAsync >
216+ update < GenericResult = DefaultReturnObject > ( params : UpdateWithoutReturning ) : Query < GenericResultWrapper , IsAsync >
231217 update < GenericResult = DefaultReturnObject > ( params : Update ) : unknown {
232218 let args = this . _parse_arguments ( params . data )
233219
@@ -239,8 +225,8 @@ export class QueryBuilder<GenericResultWrapper> {
239225 }
240226 }
241227
242- return new Query (
243- ( q : Query ) => {
228+ return new Query < any , IsAsync > (
229+ ( q ) => {
244230 return this . execute ( q )
245231 } ,
246232 this . _update ( params ) ,
@@ -251,11 +237,11 @@ export class QueryBuilder<GenericResultWrapper> {
251237
252238 delete < GenericResult = DefaultReturnObject > (
253239 params : DeleteReturning
254- ) : Query < ArrayResult < GenericResultWrapper , GenericResult > >
255- delete < GenericResult = DefaultReturnObject > ( params : DeleteWithoutReturning ) : Query < GenericResultWrapper >
240+ ) : Query < ArrayResult < GenericResultWrapper , GenericResult > , IsAsync >
241+ delete < GenericResult = DefaultReturnObject > ( params : DeleteWithoutReturning ) : Query < GenericResultWrapper , IsAsync >
256242 delete < GenericResult = DefaultReturnObject > ( params : Delete ) : unknown {
257- return new Query (
258- ( q : Query ) => {
243+ return new Query < any , IsAsync > (
244+ ( q ) => {
259245 return this . execute ( q )
260246 } ,
261247 this . _delete ( params ) ,
0 commit comments