workers-qb 1.10.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,14 @@
1
1
  <div align="center">
2
- <h1>workers-qb</h1>
3
- <p><em>Zero-dependency Query Builder for Cloudflare Workers</em></p>
2
+ <a href="https://workers-qb.massadas.com/">
3
+ <img src="https://raw.githubusercontent.com/G4brym/workers-qb/refs/heads/main/docs/assets/logo.png" width="500" height="auto" alt="workers-qb"/>
4
+ </a>
5
+ </div>
6
+
7
+ <p align="center">
8
+ <em>Zero-dependency Query Builder for Cloudflare Workers</em>
9
+ </p>
4
10
 
5
- <p>
11
+ <p align="center">
6
12
  <a href="https://workers-qb.massadas.com/" target="_blank">
7
13
  <img src="https://img.shields.io/badge/docs-workers--qb-blue.svg" alt="Documentation">
8
14
  </a>
@@ -12,8 +18,7 @@
12
18
  <a href="https://github.com/G4brym/workers-qb/blob/main/LICENSE" target="_blank">
13
19
  <img src="https://img.shields.io/badge/license-MIT-brightgreen.svg" alt="Software License">
14
20
  </a>
15
- </p>
16
- </div>
21
+ </p>
17
22
 
18
23
  ## Overview
19
24
 
@@ -49,6 +54,7 @@ workers-qb is a lightweight query builder designed specifically for Cloudflare W
49
54
  - CRUD operations (insert/update/select/delete)
50
55
  - Bulk inserts
51
56
  - JOIN queries
57
+ - Subqueries
52
58
  - Modular SELECT queries
53
59
  - ON CONFLICT handling
54
60
  - UPSERT support
@@ -178,7 +184,7 @@ Visit our [comprehensive documentation](https://workers-qb.massadas.com/) for de
178
184
  - [Advanced Queries](https://workers-qb.massadas.com/advanced-queries/)
179
185
  - [Migrations](https://workers-qb.massadas.com/migrations/)
180
186
  - [Type Checking](https://workers-qb.massadas.com/type-check/)
181
- - [Database-specific guides](https://workers-qb.massadas.com/databases/)
187
+ - [Database-specific guides](https://workers-qb.massadas.com/databases/d1)
182
188
 
183
189
  ## Contributing
184
190
 
package/dist/index.d.mts CHANGED
@@ -40,6 +40,42 @@ declare class QueryWithExtra<GenericResultWrapper, Result = any, IsAsync extends
40
40
  }
41
41
  declare function trimQuery(query: string): string;
42
42
 
43
+ interface SelectExecuteOptions {
44
+ lazy?: boolean;
45
+ }
46
+ declare class SelectBuilder<GenericResultWrapper, GenericResult = DefaultReturnObject, IsAsync extends boolean = true> {
47
+ _debugger: boolean;
48
+ _options: Partial<SelectAll>;
49
+ _fetchAll: (params: SelectAll) => QueryWithExtra<GenericResultWrapper, any, IsAsync>;
50
+ _fetchOne: (params: SelectOne) => QueryWithExtra<GenericResultWrapper, any, IsAsync>;
51
+ constructor(options: Partial<SelectAll>, fetchAll: (params: SelectAll) => QueryWithExtra<GenericResultWrapper, any, IsAsync>, fetchOne: (params: SelectOne) => QueryWithExtra<GenericResultWrapper, any, IsAsync>);
52
+ setDebugger(state: boolean): void;
53
+ tableName(tableName: SelectAll['tableName']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
54
+ fields(fields: SelectAll['fields']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
55
+ where(conditions: string | Array<string>, params?: Primitive | Primitive[]): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
56
+ whereIn<T extends string | Array<string>, P extends T extends Array<string> ? Primitive[][] : Primitive[]>(fields: T, values: P): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
57
+ join(join: SelectAll['join']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
58
+ groupBy(groupBy: SelectAll['groupBy']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
59
+ having(conditions: string | Array<string>, params?: Primitive | Primitive[]): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
60
+ orderBy(orderBy: SelectAll['orderBy']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
61
+ offset(offset: SelectAll['offset']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
62
+ limit(limit: SelectAll['limit']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
63
+ _parseArray(fieldName: string, option: any, value: any): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
64
+ getQueryAll<P extends SelectExecuteOptions = SelectExecuteOptions>(options?: P): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync, P extends {
65
+ lazy: true;
66
+ } ? true : false>, IsAsync>;
67
+ getQueryOne(): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
68
+ execute<P extends SelectExecuteOptions = SelectExecuteOptions>(options?: P): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, P extends {
69
+ lazy: true;
70
+ } ? true : false>;
71
+ all<P extends SelectExecuteOptions = SelectExecuteOptions>(options?: P): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, P extends {
72
+ lazy: true;
73
+ } ? true : false>;
74
+ one(): MaybeAsync<IsAsync, OneResult<GenericResultWrapper, GenericResult>>;
75
+ count(): MaybeAsync<IsAsync, CountResult<GenericResultWrapper>>;
76
+ getOptions(): SelectAll;
77
+ }
78
+
43
79
  type OmitIndexSignature<ObjectType> = {
44
80
  [KeyType in keyof ObjectType as {} extends Record<KeyType, unknown> ? never : KeyType]: ObjectType[KeyType];
45
81
  };
@@ -54,7 +90,7 @@ type SimpleMerge<Destination, Source> = {
54
90
  } & Source;
55
91
  type Merge<Destination, Source> = Simplify<SimpleMerge<PickIndexSignature<Destination>, PickIndexSignature<Source>> & SimpleMerge<OmitIndexSignature<Destination>, OmitIndexSignature<Source>>>;
56
92
 
57
- type Primitive = null | string | number | boolean | bigint | Raw;
93
+ type Primitive = null | string | number | boolean | bigint | Raw | SelectAll | SelectBuilder<any, any, any>;
58
94
  type QueryLoggerMeta = {
59
95
  duration?: number;
60
96
  };
@@ -69,7 +105,7 @@ type Where = {
69
105
  } | string | Array<string>;
70
106
  type Join = {
71
107
  type?: string | JoinTypes;
72
- table: string | SelectAll;
108
+ table: string | SelectAll | SelectBuilder<any, any, any>;
73
109
  on: string;
74
110
  alias?: string;
75
111
  };
@@ -79,9 +115,11 @@ type SelectOne = {
79
115
  where?: Where;
80
116
  join?: Join | Array<Join>;
81
117
  groupBy?: string | Array<string>;
82
- having?: string | Array<string>;
118
+ having?: Where;
83
119
  orderBy?: string | Array<string> | Record<string, string | OrderTypes>;
84
120
  offset?: number;
121
+ subQueryPlaceholders?: Record<string, SelectAll>;
122
+ subQueryTokenNextId?: number;
85
123
  };
86
124
  type RawQuery = {
87
125
  query: string;
@@ -95,9 +133,9 @@ type RawQueryFetchAll = Omit<RawQuery, 'fetchType'> & {
95
133
  fetchType: FetchTypes.ALL;
96
134
  };
97
135
  type RawQueryWithoutFetching = Omit<RawQuery, 'fetchType'>;
98
- type SelectAll<IsLazy extends true | undefined = undefined> = SelectOne & {
136
+ type SelectAll = SelectOne & {
99
137
  limit?: number;
100
- lazy?: IsLazy;
138
+ lazy?: boolean;
101
139
  };
102
140
  type ConflictUpsert = {
103
141
  column: string | Array<string>;
@@ -166,17 +204,17 @@ type PGResult = {
166
204
  lastRowId?: string | number;
167
205
  rowCount: number;
168
206
  };
169
- type IterableResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IsLazy extends true ? IsAsync extends true ? Promise<Merge<ResultWrapper, {
207
+ type IterableResult<ResultWrapper, Result, IsAsync extends boolean> = IsAsync extends true ? Promise<Merge<ResultWrapper, {
170
208
  results?: AsyncIterable<Result>;
171
209
  }>> : Merge<ResultWrapper, {
172
210
  results?: Iterable<Result>;
173
- }> : never;
174
- type FullArrayResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IsLazy extends undefined ? IsAsync extends true ? Promise<Merge<ResultWrapper, {
211
+ }>;
212
+ type FullArrayResult<ResultWrapper, Result, IsAsync extends boolean> = IsAsync extends true ? Promise<Merge<ResultWrapper, {
175
213
  results?: Array<Result>;
176
214
  }>> : Merge<ResultWrapper, {
177
215
  results?: Array<Result>;
178
- }> : never;
179
- type ArrayResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IterableResult<ResultWrapper, Result, IsAsync, IsLazy> | FullArrayResult<ResultWrapper, Result, IsAsync, IsLazy>;
216
+ }>;
217
+ type ArrayResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends boolean = false> = IsLazy extends true ? IterableResult<ResultWrapper, Result, IsAsync> : FullArrayResult<ResultWrapper, Result, IsAsync>;
180
218
  type OneResult<ResultWrapper, Result> = Merge<ResultWrapper, {
181
219
  results?: Result;
182
220
  }>;
@@ -191,35 +229,6 @@ declare function defaultLogger(query: RawQuery, meta: QueryLoggerMeta): any;
191
229
  declare function asyncLoggerWrapper<Async extends boolean = true>(query: Query<any, Async> | Query<any, Async>[], loggerFunction: CallableFunction | undefined, innerFunction: () => any): Promise<any>;
192
230
  declare function syncLoggerWrapper<Async extends boolean = false>(query: Query<any, Async> | Query<any, Async>[], loggerFunction: CallableFunction | undefined, innerFunction: () => any): any;
193
231
 
194
- interface SelectExecuteOptions<IsLazy extends true | undefined> {
195
- lazy?: IsLazy;
196
- }
197
- declare class SelectBuilder<GenericResultWrapper, GenericResult = DefaultReturnObject, IsAsync extends boolean = true> {
198
- _debugger: boolean;
199
- _options: Partial<SelectAll>;
200
- _fetchAll: (params: SelectAll) => QueryWithExtra<GenericResultWrapper, any, IsAsync>;
201
- _fetchOne: (params: SelectOne) => QueryWithExtra<GenericResultWrapper, any, IsAsync>;
202
- constructor(options: Partial<SelectAll>, fetchAll: (params: SelectAll) => QueryWithExtra<GenericResultWrapper, any, IsAsync>, fetchOne: (params: SelectOne) => QueryWithExtra<GenericResultWrapper, any, IsAsync>);
203
- setDebugger(state: boolean): void;
204
- tableName(tableName: SelectAll['tableName']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
205
- fields(fields: SelectAll['fields']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
206
- where(conditions: string | Array<string>, params?: Primitive | Primitive[]): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
207
- whereIn<T extends string | Array<string>, P extends T extends Array<string> ? Primitive[][] : Primitive[]>(fields: T, values: P): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
208
- join(join: SelectAll['join']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
209
- groupBy(groupBy: SelectAll['groupBy']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
210
- having(having: SelectAll['having']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
211
- orderBy(orderBy: SelectAll['orderBy']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
212
- offset(offset: SelectAll['offset']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
213
- limit(limit: SelectAll['limit']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
214
- _parseArray(fieldName: string, option: any, value: any): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
215
- getQueryAll<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>, IsAsync>;
216
- getQueryOne(): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
217
- execute<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>;
218
- all<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>;
219
- one(): MaybeAsync<IsAsync, OneResult<GenericResultWrapper, GenericResult>>;
220
- count(): MaybeAsync<IsAsync, CountResult<GenericResultWrapper>>;
221
- }
222
-
223
232
  declare class QueryBuilder<GenericResultWrapper, IsAsync extends boolean = true> {
224
233
  protected options: QueryBuilderOptions<IsAsync>;
225
234
  loggerWrapper: typeof asyncLoggerWrapper;
@@ -239,7 +248,9 @@ declare class QueryBuilder<GenericResultWrapper, IsAsync extends boolean = true>
239
248
  }): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
240
249
  select<GenericResult = DefaultReturnObject>(tableName: string): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
241
250
  fetchOne<GenericResult = DefaultReturnObject>(params: SelectOne): QueryWithExtra<GenericResultWrapper, OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
242
- fetchAll<GenericResult = DefaultReturnObject, IsLazy extends true | undefined = undefined>(params: SelectAll<IsLazy>): QueryWithExtra<GenericResultWrapper, ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>, IsAsync>;
251
+ fetchAll<GenericResult = DefaultReturnObject, P extends SelectAll = SelectAll>(params: P): QueryWithExtra<GenericResultWrapper, ArrayResult<GenericResultWrapper, GenericResult, IsAsync, P extends {
252
+ lazy: true;
253
+ } ? true : false>, IsAsync>;
243
254
  raw<GenericResult = DefaultReturnObject>(params: RawQueryFetchOne): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
244
255
  raw<GenericResult = DefaultReturnObject>(params: RawQueryFetchAll): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
245
256
  raw<GenericResult = DefaultReturnObject>(params: RawQueryWithoutFetching): Query<GenericResultWrapper, IsAsync>;
@@ -255,12 +266,25 @@ declare class QueryBuilder<GenericResultWrapper, IsAsync extends boolean = true>
255
266
  protected _insert(params: Insert): string;
256
267
  protected _update(params: Update): string;
257
268
  protected _delete(params: Delete): string;
258
- protected _select(params: SelectAll): string;
269
+ protected _select(params: SelectAll, queryArgs?: any[]): string;
259
270
  protected _fields(value?: string | Array<string>): string;
260
- protected _where(value?: Where): string;
261
- protected _join(value?: Join | Array<Join>): string;
271
+ protected _where(value: Where | undefined, context?: {
272
+ subQueryPlaceholders?: Record<string, SelectAll>;
273
+ queryArgs: any[];
274
+ toSQLCompiler?: (params: SelectAll, queryArgs: any[]) => string;
275
+ }): string;
276
+ protected _join(value: Join | Array<Join> | undefined, context: {
277
+ subQueryPlaceholders?: Record<string, SelectAll>;
278
+ queryArgs: any[];
279
+ toSQLCompiler: (params: SelectAll, queryArgs: any[]) => string;
280
+ }): string;
262
281
  protected _groupBy(value?: string | Array<string>): string;
263
- protected _having(value?: string | Array<string>): string;
282
+ protected _having(value: Where | undefined, // Using Where type as Having structure is similar for conditions/params
283
+ context: {
284
+ subQueryPlaceholders?: Record<string, SelectAll>;
285
+ queryArgs: any[];
286
+ toSQLCompiler?: (params: SelectAll, queryArgs: any[]) => string;
287
+ }): string;
264
288
  protected _orderBy(value?: string | Array<string> | Record<string, string | OrderTypes>): string;
265
289
  protected _limit(value?: number): string;
266
290
  protected _offset(value?: number): string;
package/dist/index.d.ts CHANGED
@@ -40,6 +40,42 @@ declare class QueryWithExtra<GenericResultWrapper, Result = any, IsAsync extends
40
40
  }
41
41
  declare function trimQuery(query: string): string;
42
42
 
43
+ interface SelectExecuteOptions {
44
+ lazy?: boolean;
45
+ }
46
+ declare class SelectBuilder<GenericResultWrapper, GenericResult = DefaultReturnObject, IsAsync extends boolean = true> {
47
+ _debugger: boolean;
48
+ _options: Partial<SelectAll>;
49
+ _fetchAll: (params: SelectAll) => QueryWithExtra<GenericResultWrapper, any, IsAsync>;
50
+ _fetchOne: (params: SelectOne) => QueryWithExtra<GenericResultWrapper, any, IsAsync>;
51
+ constructor(options: Partial<SelectAll>, fetchAll: (params: SelectAll) => QueryWithExtra<GenericResultWrapper, any, IsAsync>, fetchOne: (params: SelectOne) => QueryWithExtra<GenericResultWrapper, any, IsAsync>);
52
+ setDebugger(state: boolean): void;
53
+ tableName(tableName: SelectAll['tableName']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
54
+ fields(fields: SelectAll['fields']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
55
+ where(conditions: string | Array<string>, params?: Primitive | Primitive[]): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
56
+ whereIn<T extends string | Array<string>, P extends T extends Array<string> ? Primitive[][] : Primitive[]>(fields: T, values: P): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
57
+ join(join: SelectAll['join']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
58
+ groupBy(groupBy: SelectAll['groupBy']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
59
+ having(conditions: string | Array<string>, params?: Primitive | Primitive[]): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
60
+ orderBy(orderBy: SelectAll['orderBy']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
61
+ offset(offset: SelectAll['offset']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
62
+ limit(limit: SelectAll['limit']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
63
+ _parseArray(fieldName: string, option: any, value: any): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
64
+ getQueryAll<P extends SelectExecuteOptions = SelectExecuteOptions>(options?: P): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync, P extends {
65
+ lazy: true;
66
+ } ? true : false>, IsAsync>;
67
+ getQueryOne(): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
68
+ execute<P extends SelectExecuteOptions = SelectExecuteOptions>(options?: P): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, P extends {
69
+ lazy: true;
70
+ } ? true : false>;
71
+ all<P extends SelectExecuteOptions = SelectExecuteOptions>(options?: P): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, P extends {
72
+ lazy: true;
73
+ } ? true : false>;
74
+ one(): MaybeAsync<IsAsync, OneResult<GenericResultWrapper, GenericResult>>;
75
+ count(): MaybeAsync<IsAsync, CountResult<GenericResultWrapper>>;
76
+ getOptions(): SelectAll;
77
+ }
78
+
43
79
  type OmitIndexSignature<ObjectType> = {
44
80
  [KeyType in keyof ObjectType as {} extends Record<KeyType, unknown> ? never : KeyType]: ObjectType[KeyType];
45
81
  };
@@ -54,7 +90,7 @@ type SimpleMerge<Destination, Source> = {
54
90
  } & Source;
55
91
  type Merge<Destination, Source> = Simplify<SimpleMerge<PickIndexSignature<Destination>, PickIndexSignature<Source>> & SimpleMerge<OmitIndexSignature<Destination>, OmitIndexSignature<Source>>>;
56
92
 
57
- type Primitive = null | string | number | boolean | bigint | Raw;
93
+ type Primitive = null | string | number | boolean | bigint | Raw | SelectAll | SelectBuilder<any, any, any>;
58
94
  type QueryLoggerMeta = {
59
95
  duration?: number;
60
96
  };
@@ -69,7 +105,7 @@ type Where = {
69
105
  } | string | Array<string>;
70
106
  type Join = {
71
107
  type?: string | JoinTypes;
72
- table: string | SelectAll;
108
+ table: string | SelectAll | SelectBuilder<any, any, any>;
73
109
  on: string;
74
110
  alias?: string;
75
111
  };
@@ -79,9 +115,11 @@ type SelectOne = {
79
115
  where?: Where;
80
116
  join?: Join | Array<Join>;
81
117
  groupBy?: string | Array<string>;
82
- having?: string | Array<string>;
118
+ having?: Where;
83
119
  orderBy?: string | Array<string> | Record<string, string | OrderTypes>;
84
120
  offset?: number;
121
+ subQueryPlaceholders?: Record<string, SelectAll>;
122
+ subQueryTokenNextId?: number;
85
123
  };
86
124
  type RawQuery = {
87
125
  query: string;
@@ -95,9 +133,9 @@ type RawQueryFetchAll = Omit<RawQuery, 'fetchType'> & {
95
133
  fetchType: FetchTypes.ALL;
96
134
  };
97
135
  type RawQueryWithoutFetching = Omit<RawQuery, 'fetchType'>;
98
- type SelectAll<IsLazy extends true | undefined = undefined> = SelectOne & {
136
+ type SelectAll = SelectOne & {
99
137
  limit?: number;
100
- lazy?: IsLazy;
138
+ lazy?: boolean;
101
139
  };
102
140
  type ConflictUpsert = {
103
141
  column: string | Array<string>;
@@ -166,17 +204,17 @@ type PGResult = {
166
204
  lastRowId?: string | number;
167
205
  rowCount: number;
168
206
  };
169
- type IterableResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IsLazy extends true ? IsAsync extends true ? Promise<Merge<ResultWrapper, {
207
+ type IterableResult<ResultWrapper, Result, IsAsync extends boolean> = IsAsync extends true ? Promise<Merge<ResultWrapper, {
170
208
  results?: AsyncIterable<Result>;
171
209
  }>> : Merge<ResultWrapper, {
172
210
  results?: Iterable<Result>;
173
- }> : never;
174
- type FullArrayResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IsLazy extends undefined ? IsAsync extends true ? Promise<Merge<ResultWrapper, {
211
+ }>;
212
+ type FullArrayResult<ResultWrapper, Result, IsAsync extends boolean> = IsAsync extends true ? Promise<Merge<ResultWrapper, {
175
213
  results?: Array<Result>;
176
214
  }>> : Merge<ResultWrapper, {
177
215
  results?: Array<Result>;
178
- }> : never;
179
- type ArrayResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IterableResult<ResultWrapper, Result, IsAsync, IsLazy> | FullArrayResult<ResultWrapper, Result, IsAsync, IsLazy>;
216
+ }>;
217
+ type ArrayResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends boolean = false> = IsLazy extends true ? IterableResult<ResultWrapper, Result, IsAsync> : FullArrayResult<ResultWrapper, Result, IsAsync>;
180
218
  type OneResult<ResultWrapper, Result> = Merge<ResultWrapper, {
181
219
  results?: Result;
182
220
  }>;
@@ -191,35 +229,6 @@ declare function defaultLogger(query: RawQuery, meta: QueryLoggerMeta): any;
191
229
  declare function asyncLoggerWrapper<Async extends boolean = true>(query: Query<any, Async> | Query<any, Async>[], loggerFunction: CallableFunction | undefined, innerFunction: () => any): Promise<any>;
192
230
  declare function syncLoggerWrapper<Async extends boolean = false>(query: Query<any, Async> | Query<any, Async>[], loggerFunction: CallableFunction | undefined, innerFunction: () => any): any;
193
231
 
194
- interface SelectExecuteOptions<IsLazy extends true | undefined> {
195
- lazy?: IsLazy;
196
- }
197
- declare class SelectBuilder<GenericResultWrapper, GenericResult = DefaultReturnObject, IsAsync extends boolean = true> {
198
- _debugger: boolean;
199
- _options: Partial<SelectAll>;
200
- _fetchAll: (params: SelectAll) => QueryWithExtra<GenericResultWrapper, any, IsAsync>;
201
- _fetchOne: (params: SelectOne) => QueryWithExtra<GenericResultWrapper, any, IsAsync>;
202
- constructor(options: Partial<SelectAll>, fetchAll: (params: SelectAll) => QueryWithExtra<GenericResultWrapper, any, IsAsync>, fetchOne: (params: SelectOne) => QueryWithExtra<GenericResultWrapper, any, IsAsync>);
203
- setDebugger(state: boolean): void;
204
- tableName(tableName: SelectAll['tableName']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
205
- fields(fields: SelectAll['fields']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
206
- where(conditions: string | Array<string>, params?: Primitive | Primitive[]): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
207
- whereIn<T extends string | Array<string>, P extends T extends Array<string> ? Primitive[][] : Primitive[]>(fields: T, values: P): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
208
- join(join: SelectAll['join']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
209
- groupBy(groupBy: SelectAll['groupBy']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
210
- having(having: SelectAll['having']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
211
- orderBy(orderBy: SelectAll['orderBy']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
212
- offset(offset: SelectAll['offset']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
213
- limit(limit: SelectAll['limit']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
214
- _parseArray(fieldName: string, option: any, value: any): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
215
- getQueryAll<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>, IsAsync>;
216
- getQueryOne(): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
217
- execute<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>;
218
- all<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>;
219
- one(): MaybeAsync<IsAsync, OneResult<GenericResultWrapper, GenericResult>>;
220
- count(): MaybeAsync<IsAsync, CountResult<GenericResultWrapper>>;
221
- }
222
-
223
232
  declare class QueryBuilder<GenericResultWrapper, IsAsync extends boolean = true> {
224
233
  protected options: QueryBuilderOptions<IsAsync>;
225
234
  loggerWrapper: typeof asyncLoggerWrapper;
@@ -239,7 +248,9 @@ declare class QueryBuilder<GenericResultWrapper, IsAsync extends boolean = true>
239
248
  }): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
240
249
  select<GenericResult = DefaultReturnObject>(tableName: string): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
241
250
  fetchOne<GenericResult = DefaultReturnObject>(params: SelectOne): QueryWithExtra<GenericResultWrapper, OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
242
- fetchAll<GenericResult = DefaultReturnObject, IsLazy extends true | undefined = undefined>(params: SelectAll<IsLazy>): QueryWithExtra<GenericResultWrapper, ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>, IsAsync>;
251
+ fetchAll<GenericResult = DefaultReturnObject, P extends SelectAll = SelectAll>(params: P): QueryWithExtra<GenericResultWrapper, ArrayResult<GenericResultWrapper, GenericResult, IsAsync, P extends {
252
+ lazy: true;
253
+ } ? true : false>, IsAsync>;
243
254
  raw<GenericResult = DefaultReturnObject>(params: RawQueryFetchOne): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
244
255
  raw<GenericResult = DefaultReturnObject>(params: RawQueryFetchAll): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
245
256
  raw<GenericResult = DefaultReturnObject>(params: RawQueryWithoutFetching): Query<GenericResultWrapper, IsAsync>;
@@ -255,12 +266,25 @@ declare class QueryBuilder<GenericResultWrapper, IsAsync extends boolean = true>
255
266
  protected _insert(params: Insert): string;
256
267
  protected _update(params: Update): string;
257
268
  protected _delete(params: Delete): string;
258
- protected _select(params: SelectAll): string;
269
+ protected _select(params: SelectAll, queryArgs?: any[]): string;
259
270
  protected _fields(value?: string | Array<string>): string;
260
- protected _where(value?: Where): string;
261
- protected _join(value?: Join | Array<Join>): string;
271
+ protected _where(value: Where | undefined, context?: {
272
+ subQueryPlaceholders?: Record<string, SelectAll>;
273
+ queryArgs: any[];
274
+ toSQLCompiler?: (params: SelectAll, queryArgs: any[]) => string;
275
+ }): string;
276
+ protected _join(value: Join | Array<Join> | undefined, context: {
277
+ subQueryPlaceholders?: Record<string, SelectAll>;
278
+ queryArgs: any[];
279
+ toSQLCompiler: (params: SelectAll, queryArgs: any[]) => string;
280
+ }): string;
262
281
  protected _groupBy(value?: string | Array<string>): string;
263
- protected _having(value?: string | Array<string>): string;
282
+ protected _having(value: Where | undefined, // Using Where type as Having structure is similar for conditions/params
283
+ context: {
284
+ subQueryPlaceholders?: Record<string, SelectAll>;
285
+ queryArgs: any[];
286
+ toSQLCompiler?: (params: SelectAll, queryArgs: any[]) => string;
287
+ }): string;
264
288
  protected _orderBy(value?: string | Array<string> | Record<string, string | OrderTypes>): string;
265
289
  protected _limit(value?: number): string;
266
290
  protected _offset(value?: number): string;