pqb 0.0.1

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.
Files changed (122) hide show
  1. package/dist/index.d.ts +3630 -0
  2. package/dist/index.esm.js +4587 -0
  3. package/dist/index.esm.js.map +1 -0
  4. package/dist/index.js +4691 -0
  5. package/dist/index.js.map +1 -0
  6. package/package.json +59 -0
  7. package/rollup.config.js +35 -0
  8. package/src/adapter.test.ts +10 -0
  9. package/src/adapter.ts +171 -0
  10. package/src/columnSchema/array.ts +21 -0
  11. package/src/columnSchema/boolean.ts +10 -0
  12. package/src/columnSchema/columnType.test.ts +129 -0
  13. package/src/columnSchema/columnType.ts +77 -0
  14. package/src/columnSchema/columnTypes.ts +145 -0
  15. package/src/columnSchema/columnsSchema.test.ts +32 -0
  16. package/src/columnSchema/columnsSchema.ts +100 -0
  17. package/src/columnSchema/commonMethods.ts +130 -0
  18. package/src/columnSchema/dateTime.ts +104 -0
  19. package/src/columnSchema/enum.ts +13 -0
  20. package/src/columnSchema/index.ts +11 -0
  21. package/src/columnSchema/json/array.ts +55 -0
  22. package/src/columnSchema/json/discriminatedUnion.ts +91 -0
  23. package/src/columnSchema/json/enum.ts +29 -0
  24. package/src/columnSchema/json/instanceOf.ts +16 -0
  25. package/src/columnSchema/json/intersection.ts +23 -0
  26. package/src/columnSchema/json/lazy.ts +22 -0
  27. package/src/columnSchema/json/literal.ts +12 -0
  28. package/src/columnSchema/json/map.ts +29 -0
  29. package/src/columnSchema/json/nativeEnum.ts +30 -0
  30. package/src/columnSchema/json/nullable.ts +33 -0
  31. package/src/columnSchema/json/nullish.ts +30 -0
  32. package/src/columnSchema/json/object.ts +206 -0
  33. package/src/columnSchema/json/optional.ts +28 -0
  34. package/src/columnSchema/json/record.ts +40 -0
  35. package/src/columnSchema/json/scalarTypes.ts +117 -0
  36. package/src/columnSchema/json/set.ts +34 -0
  37. package/src/columnSchema/json/tuple.ts +40 -0
  38. package/src/columnSchema/json/typeBase.ts +202 -0
  39. package/src/columnSchema/json/union.ts +16 -0
  40. package/src/columnSchema/json.ts +64 -0
  41. package/src/columnSchema/number.ts +122 -0
  42. package/src/columnSchema/string.ts +222 -0
  43. package/src/columnSchema/utils.ts +27 -0
  44. package/src/common.ts +86 -0
  45. package/src/db.test.ts +67 -0
  46. package/src/db.ts +212 -0
  47. package/src/errors.ts +7 -0
  48. package/src/index.ts +18 -0
  49. package/src/operators.test.ts +608 -0
  50. package/src/operators.ts +177 -0
  51. package/src/query.ts +292 -0
  52. package/src/queryDataUtils.ts +50 -0
  53. package/src/queryMethods/aggregate.test.ts +583 -0
  54. package/src/queryMethods/aggregate.ts +878 -0
  55. package/src/queryMethods/callbacks.test.ts +69 -0
  56. package/src/queryMethods/callbacks.ts +55 -0
  57. package/src/queryMethods/clear.test.ts +64 -0
  58. package/src/queryMethods/clear.ts +58 -0
  59. package/src/queryMethods/columnInfo.test.ts +45 -0
  60. package/src/queryMethods/columnInfo.ts +67 -0
  61. package/src/queryMethods/delete.test.ts +135 -0
  62. package/src/queryMethods/delete.ts +50 -0
  63. package/src/queryMethods/for.test.ts +57 -0
  64. package/src/queryMethods/for.ts +99 -0
  65. package/src/queryMethods/from.test.ts +66 -0
  66. package/src/queryMethods/from.ts +58 -0
  67. package/src/queryMethods/get.test.ts +66 -0
  68. package/src/queryMethods/get.ts +88 -0
  69. package/src/queryMethods/having.test.ts +247 -0
  70. package/src/queryMethods/having.ts +99 -0
  71. package/src/queryMethods/insert.test.ts +555 -0
  72. package/src/queryMethods/insert.ts +453 -0
  73. package/src/queryMethods/join.test.ts +150 -0
  74. package/src/queryMethods/join.ts +508 -0
  75. package/src/queryMethods/json.test.ts +398 -0
  76. package/src/queryMethods/json.ts +259 -0
  77. package/src/queryMethods/log.test.ts +172 -0
  78. package/src/queryMethods/log.ts +123 -0
  79. package/src/queryMethods/queryMethods.test.ts +629 -0
  80. package/src/queryMethods/queryMethods.ts +428 -0
  81. package/src/queryMethods/select.test.ts +479 -0
  82. package/src/queryMethods/select.ts +249 -0
  83. package/src/queryMethods/then.ts +236 -0
  84. package/src/queryMethods/transaction.test.ts +66 -0
  85. package/src/queryMethods/transaction.ts +66 -0
  86. package/src/queryMethods/union.test.ts +59 -0
  87. package/src/queryMethods/union.ts +89 -0
  88. package/src/queryMethods/update.test.ts +417 -0
  89. package/src/queryMethods/update.ts +350 -0
  90. package/src/queryMethods/upsert.test.ts +56 -0
  91. package/src/queryMethods/upsert.ts +43 -0
  92. package/src/queryMethods/where.test.ts +1594 -0
  93. package/src/queryMethods/where.ts +450 -0
  94. package/src/queryMethods/window.test.ts +66 -0
  95. package/src/queryMethods/window.ts +108 -0
  96. package/src/queryMethods/with.test.ts +191 -0
  97. package/src/queryMethods/with.ts +92 -0
  98. package/src/quote.ts +36 -0
  99. package/src/relations.ts +194 -0
  100. package/src/sql/aggregate.ts +80 -0
  101. package/src/sql/columnInfo.ts +22 -0
  102. package/src/sql/common.ts +42 -0
  103. package/src/sql/delete.ts +41 -0
  104. package/src/sql/distinct.ts +19 -0
  105. package/src/sql/fromAndAs.ts +51 -0
  106. package/src/sql/having.ts +140 -0
  107. package/src/sql/index.ts +2 -0
  108. package/src/sql/insert.ts +102 -0
  109. package/src/sql/join.ts +242 -0
  110. package/src/sql/orderBy.ts +41 -0
  111. package/src/sql/select.ts +153 -0
  112. package/src/sql/toSql.ts +153 -0
  113. package/src/sql/truncate.ts +13 -0
  114. package/src/sql/types.ts +355 -0
  115. package/src/sql/update.ts +62 -0
  116. package/src/sql/where.ts +314 -0
  117. package/src/sql/window.ts +38 -0
  118. package/src/sql/with.ts +32 -0
  119. package/src/test-utils.ts +172 -0
  120. package/src/utils.ts +140 -0
  121. package/tsconfig.build.json +6 -0
  122. package/tsconfig.json +8 -0
@@ -0,0 +1,878 @@
1
+ import {
2
+ BooleanExpression,
3
+ Expression,
4
+ ExpressionOutput,
5
+ NumberExpression,
6
+ raw,
7
+ StringExpression,
8
+ } from '../common';
9
+ import { AddQuerySelect, Query, SetQueryReturnsValue } from '../query';
10
+ import { pushQueryValue, removeFromQuery } from '../queryDataUtils';
11
+ import {
12
+ BooleanColumn,
13
+ ColumnType,
14
+ ArrayColumn,
15
+ NumberColumn,
16
+ StringColumn,
17
+ IntegerColumn,
18
+ NullableColumn,
19
+ } from '../columnSchema';
20
+ import { CoalesceString } from '../utils';
21
+ import { OrderArg, WindowArgDeclaration } from './queryMethods';
22
+ import { WhereArg } from './where';
23
+ import { addParserToQuery } from './select';
24
+ import { SelectItem } from '../sql';
25
+
26
+ const allColumns = raw('*');
27
+
28
+ export type AggregateArg<T extends Query> =
29
+ | Expression<T>
30
+ | Record<string, Expression<T>>
31
+ | [Expression<T>, string];
32
+
33
+ export type AggregateOptions<
34
+ T extends Query = Query,
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
+ As extends string | undefined = any,
37
+ > = {
38
+ as?: As;
39
+ distinct?: boolean;
40
+ order?: OrderArg<T> | OrderArg<T>[];
41
+ filter?: WhereArg<T>;
42
+ filterOr?: WhereArg<T>[];
43
+ withinGroup?: boolean;
44
+ over?: T['windows'][number] | WindowArgDeclaration<T>;
45
+ };
46
+
47
+ // 1 in the name means only methods which takes 1 argument are listed here
48
+ // only such one argument methods are available in .having method
49
+ export type Aggregate1ArgumentTypes<
50
+ T extends Query = Query,
51
+ C extends ColumnType = ColumnType,
52
+ > = {
53
+ count: Expression<T, C>;
54
+ avg: NumberExpression<T, C>;
55
+ min: Expression<T, C>;
56
+ max: Expression<T, C>;
57
+ sum: NumberExpression<T, C>;
58
+ bitAnd: NumberExpression<T, C>;
59
+ bitOr: NumberExpression<T, C>;
60
+ boolAnd: BooleanExpression<T, C>;
61
+ boolOr: BooleanExpression<T, C>;
62
+ every: BooleanExpression<T, C>;
63
+ jsonAgg: Expression<T, C>;
64
+ jsonbAgg: Expression<T, C>;
65
+ xmlAgg: Expression<T, C>;
66
+ };
67
+
68
+ export const aggregate1FunctionNames = {
69
+ count: 'count',
70
+ avg: 'avg',
71
+ min: 'min',
72
+ max: 'max',
73
+ sum: 'sum',
74
+ bitAnd: 'bit_and',
75
+ bitOr: 'bit_or',
76
+ boolAnd: 'bool_and',
77
+ boolOr: 'bool_or',
78
+ every: 'every',
79
+ jsonAgg: 'json_agg',
80
+ jsonbAgg: 'jsonb_agg',
81
+ xmlAgg: 'xmlagg',
82
+ } as const;
83
+
84
+ export type SelectAgg<
85
+ T extends Query,
86
+ Func extends string,
87
+ As extends string | undefined,
88
+ Value extends ColumnType,
89
+ > = AddQuerySelect<T, Record<CoalesceString<As, Func>, Value>>;
90
+
91
+ type AT1<T extends Query> = Aggregate1ArgumentTypes<T>;
92
+
93
+ export type WindowFunctionOptions<
94
+ T extends Query = Query,
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
+ As extends string | undefined = any,
97
+ > = { as?: As } & WindowArgDeclaration<T>;
98
+
99
+ const buildAggregateSelectItem = <T extends Query>(
100
+ functionName: string,
101
+ arg: AggregateArg<T>,
102
+ options?: AggregateOptions<T>,
103
+ ) => {
104
+ return {
105
+ function: functionName,
106
+ arg,
107
+ options: {
108
+ ...options,
109
+ order: options?.order
110
+ ? Array.isArray(options.order)
111
+ ? options.order
112
+ : [options.order]
113
+ : undefined,
114
+ filter: options?.filter,
115
+ filterOr: options?.filterOr,
116
+ },
117
+ };
118
+ };
119
+
120
+ const parseIntColumn = new IntegerColumn().parse((input) =>
121
+ parseInt(input as unknown as string),
122
+ );
123
+
124
+ const parseIntOrNullColumn = new IntegerColumn().parse((input) =>
125
+ input === null ? null : parseInt(input as unknown as string),
126
+ );
127
+
128
+ const get = <T extends Query, Column extends ColumnType>(
129
+ q: Query,
130
+ ): SetQueryReturnsValue<T, Column> => {
131
+ q.query.returnType = 'valueOrThrow';
132
+ removeFromQuery(q, 'take');
133
+
134
+ const select = q.query.select as SelectItem[];
135
+ if (select.length > 1) {
136
+ select[0] = select[select.length - 1];
137
+ select.length = 1;
138
+ }
139
+
140
+ return q as unknown as SetQueryReturnsValue<T, Column>;
141
+ };
142
+
143
+ export class Aggregate {
144
+ selectAgg<
145
+ T extends Query,
146
+ Func extends string,
147
+ As extends string | undefined,
148
+ Value extends ColumnType,
149
+ >(
150
+ this: T,
151
+ functionName: Func,
152
+ arg: AggregateArg<T>,
153
+ options?: AggregateOptions<T, As>,
154
+ ): SelectAgg<T, Func, As, Value> {
155
+ return this.clone()._selectAgg(functionName, arg, options) as SelectAgg<
156
+ T,
157
+ Func,
158
+ As,
159
+ Value
160
+ >;
161
+ }
162
+
163
+ _selectAgg<
164
+ T extends Query,
165
+ Func extends string,
166
+ As extends string | undefined,
167
+ Value extends ColumnType,
168
+ >(
169
+ this: T,
170
+ functionName: Func,
171
+ arg: AggregateArg<T>,
172
+ options?: AggregateOptions<T, As>,
173
+ columnType?: ColumnType,
174
+ ): SelectAgg<T, Func, As, Value> {
175
+ pushQueryValue(
176
+ this,
177
+ 'select',
178
+ buildAggregateSelectItem<T>(functionName, arg, options),
179
+ );
180
+
181
+ if (columnType?.parseFn) {
182
+ addParserToQuery(
183
+ this.query,
184
+ options?.as || functionName,
185
+ columnType.parseFn,
186
+ );
187
+ }
188
+
189
+ return this as unknown as SelectAgg<T, Func, As, Value>;
190
+ }
191
+
192
+ count<T extends Query>(
193
+ this: T,
194
+ arg?: AT1<T>['count'] | '*',
195
+ options?: AggregateOptions<T>,
196
+ ): SetQueryReturnsValue<T, NumberColumn> {
197
+ return this.clone()._count(arg, options);
198
+ }
199
+
200
+ _count<T extends Query>(
201
+ this: T,
202
+ arg: AT1<T>['count'] | '*' = '*',
203
+ options?: AggregateOptions<T>,
204
+ ): SetQueryReturnsValue<T, NumberColumn> {
205
+ return get<T, NumberColumn>(this._selectCount(arg, options));
206
+ }
207
+
208
+ selectCount<T extends Query, As extends string | undefined = undefined>(
209
+ this: T,
210
+ arg?: AT1<T>['count'] | '*',
211
+ options?: AggregateOptions<T, As>,
212
+ ): SelectAgg<T, 'count', As, NumberColumn> {
213
+ return this.clone()._selectCount(arg, options);
214
+ }
215
+
216
+ _selectCount<T extends Query, As extends string | undefined = undefined>(
217
+ this: T,
218
+ arg: AT1<T>['count'] | '*' = '*',
219
+ options?: AggregateOptions<T, As>,
220
+ ): SelectAgg<T, 'count', As, NumberColumn> {
221
+ return this._selectAgg(
222
+ aggregate1FunctionNames.count,
223
+ arg === '*' ? allColumns : arg,
224
+ options,
225
+ parseIntColumn,
226
+ );
227
+ }
228
+
229
+ avg<T extends Query>(
230
+ this: T,
231
+ arg: Aggregate1ArgumentTypes<T>['avg'],
232
+ options?: AggregateOptions<T>,
233
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
234
+ return this.clone()._avg(arg, options);
235
+ }
236
+
237
+ _avg<T extends Query>(
238
+ this: T,
239
+ arg: Aggregate1ArgumentTypes<T>['avg'],
240
+ options?: AggregateOptions<T>,
241
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
242
+ return get<T, NullableColumn<NumberColumn>>(this._selectAvg(arg, options));
243
+ }
244
+
245
+ selectAvg<T extends Query, As extends string | undefined = undefined>(
246
+ this: T,
247
+ arg: Expression<T>,
248
+ options?: AggregateOptions<T, As>,
249
+ ): SelectAgg<T, 'avg', As, NullableColumn<NumberColumn>> {
250
+ return this.clone()._selectAvg(arg, options);
251
+ }
252
+
253
+ _selectAvg<T extends Query, As extends string | undefined = undefined>(
254
+ this: T,
255
+ arg: Expression<T>,
256
+ options?: AggregateOptions<T, As>,
257
+ ): SelectAgg<T, 'avg', As, NullableColumn<NumberColumn>> {
258
+ return this._selectAgg(
259
+ aggregate1FunctionNames.avg,
260
+ arg,
261
+ options,
262
+ parseIntOrNullColumn,
263
+ );
264
+ }
265
+
266
+ min<T extends Query>(
267
+ this: T,
268
+ arg: Aggregate1ArgumentTypes<T>['min'],
269
+ options?: AggregateOptions<T>,
270
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
271
+ return this.clone()._min(arg, options);
272
+ }
273
+
274
+ _min<T extends Query>(
275
+ this: T,
276
+ arg: Aggregate1ArgumentTypes<T>['min'],
277
+ options?: AggregateOptions<T>,
278
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
279
+ return get<T, NullableColumn<NumberColumn>>(this._selectMin(arg, options));
280
+ }
281
+
282
+ selectMin<T extends Query, As extends string | undefined = undefined>(
283
+ this: T,
284
+ arg: Expression<T>,
285
+ options?: AggregateOptions<T, As>,
286
+ ): SelectAgg<T, 'min', As, NullableColumn<NumberColumn>> {
287
+ return this.clone()._selectMin(arg, options);
288
+ }
289
+
290
+ _selectMin<T extends Query, As extends string | undefined = undefined>(
291
+ this: T,
292
+ arg: Expression<T>,
293
+ options?: AggregateOptions<T, As>,
294
+ ): SelectAgg<T, 'min', As, NullableColumn<NumberColumn>> {
295
+ return this._selectAgg(
296
+ aggregate1FunctionNames.min,
297
+ arg,
298
+ options,
299
+ parseIntOrNullColumn,
300
+ );
301
+ }
302
+
303
+ max<T extends Query>(
304
+ this: T,
305
+ arg: Aggregate1ArgumentTypes<T>['max'],
306
+ options?: AggregateOptions<T>,
307
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
308
+ return this.clone()._max(arg, options);
309
+ }
310
+
311
+ _max<T extends Query>(
312
+ this: T,
313
+ arg: Aggregate1ArgumentTypes<T>['max'],
314
+ options?: AggregateOptions<T>,
315
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
316
+ return get<T, NullableColumn<NumberColumn>>(this._selectMax(arg, options));
317
+ }
318
+
319
+ selectMax<T extends Query, As extends string | undefined = undefined>(
320
+ this: T,
321
+ arg: Expression<T>,
322
+ options?: AggregateOptions<T, As>,
323
+ ): SelectAgg<T, 'max', As, NullableColumn<NumberColumn>> {
324
+ return this.clone()._selectMax(arg, options);
325
+ }
326
+
327
+ _selectMax<T extends Query, As extends string | undefined = undefined>(
328
+ this: T,
329
+ arg: Expression<T>,
330
+ options?: AggregateOptions<T, As>,
331
+ ): SelectAgg<T, 'max', As, NullableColumn<NumberColumn>> {
332
+ return this._selectAgg(
333
+ aggregate1FunctionNames.max,
334
+ arg,
335
+ options,
336
+ parseIntOrNullColumn,
337
+ );
338
+ }
339
+
340
+ sum<T extends Query>(
341
+ this: T,
342
+ arg: Aggregate1ArgumentTypes<T>['sum'],
343
+ options?: AggregateOptions<T>,
344
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
345
+ return this.clone()._sum(arg, options);
346
+ }
347
+
348
+ _sum<T extends Query>(
349
+ this: T,
350
+ arg: Aggregate1ArgumentTypes<T>['sum'],
351
+ options?: AggregateOptions<T>,
352
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
353
+ return get<T, NullableColumn<NumberColumn>>(this._selectSum(arg, options));
354
+ }
355
+
356
+ selectSum<T extends Query, As extends string | undefined = undefined>(
357
+ this: T,
358
+ arg: Expression<T>,
359
+ options?: AggregateOptions<T, As>,
360
+ ): SelectAgg<T, 'sum', As, NullableColumn<NumberColumn>> {
361
+ return this.clone()._selectSum(arg, options);
362
+ }
363
+
364
+ _selectSum<T extends Query, As extends string | undefined = undefined>(
365
+ this: T,
366
+ arg: Expression<T>,
367
+ options?: AggregateOptions<T, As>,
368
+ ): SelectAgg<T, 'sum', As, NullableColumn<NumberColumn>> {
369
+ return this._selectAgg(
370
+ aggregate1FunctionNames.sum,
371
+ arg,
372
+ options,
373
+ parseIntOrNullColumn,
374
+ );
375
+ }
376
+
377
+ bitAnd<T extends Query>(
378
+ this: T,
379
+ arg: Aggregate1ArgumentTypes<T>['bitAnd'],
380
+ options?: AggregateOptions<T>,
381
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
382
+ return this.clone()._bitAnd(arg, options);
383
+ }
384
+
385
+ _bitAnd<T extends Query>(
386
+ this: T,
387
+ arg: Aggregate1ArgumentTypes<T>['bitAnd'],
388
+ options?: AggregateOptions<T>,
389
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
390
+ return get<T, NullableColumn<NumberColumn>>(
391
+ this._selectBitAnd(arg, options),
392
+ );
393
+ }
394
+
395
+ selectBitAnd<T extends Query, As extends string | undefined = undefined>(
396
+ this: T,
397
+ arg: Expression<T>,
398
+ options?: AggregateOptions<T, As>,
399
+ ): SelectAgg<T, 'bit_and', As, NullableColumn<NumberColumn>> {
400
+ return this.clone()._selectBitAnd(arg, options);
401
+ }
402
+
403
+ _selectBitAnd<T extends Query, As extends string | undefined = undefined>(
404
+ this: T,
405
+ arg: Expression<T>,
406
+ options?: AggregateOptions<T, As>,
407
+ ): SelectAgg<T, 'bit_and', As, NullableColumn<NumberColumn>> {
408
+ return this._selectAgg(aggregate1FunctionNames.bitAnd, arg, options);
409
+ }
410
+
411
+ bitOr<T extends Query>(
412
+ this: T,
413
+ arg: Aggregate1ArgumentTypes<T>['bitOr'],
414
+ options?: AggregateOptions<T>,
415
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
416
+ return this.clone()._bitOr(arg, options);
417
+ }
418
+
419
+ _bitOr<T extends Query>(
420
+ this: T,
421
+ arg: Aggregate1ArgumentTypes<T>['bitOr'],
422
+ options?: AggregateOptions<T>,
423
+ ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {
424
+ return get<T, NullableColumn<NumberColumn>>(
425
+ this._selectBitOr(arg, options),
426
+ );
427
+ }
428
+
429
+ selectBitOr<T extends Query, As extends string | undefined = undefined>(
430
+ this: T,
431
+ arg: Expression<T>,
432
+ options?: AggregateOptions<T, As>,
433
+ ): SelectAgg<T, 'bit_or', As, NullableColumn<NumberColumn>> {
434
+ return this.clone()._selectBitOr(arg, options);
435
+ }
436
+
437
+ _selectBitOr<T extends Query, As extends string | undefined = undefined>(
438
+ this: T,
439
+ arg: Expression<T>,
440
+ options?: AggregateOptions<T, As>,
441
+ ): SelectAgg<T, 'bit_or', As, NullableColumn<NumberColumn>> {
442
+ return this._selectAgg(aggregate1FunctionNames.bitOr, arg, options);
443
+ }
444
+
445
+ boolAnd<T extends Query>(
446
+ this: T,
447
+ arg: Aggregate1ArgumentTypes<T>['boolAnd'],
448
+ options?: AggregateOptions<T>,
449
+ ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {
450
+ return this.clone()._boolAnd(arg, options);
451
+ }
452
+
453
+ _boolAnd<T extends Query>(
454
+ this: T,
455
+ arg: Aggregate1ArgumentTypes<T>['boolAnd'],
456
+ options?: AggregateOptions<T>,
457
+ ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {
458
+ return get<T, NullableColumn<BooleanColumn>>(
459
+ this._selectBoolAnd(arg, options),
460
+ );
461
+ }
462
+
463
+ selectBoolAnd<T extends Query, As extends string | undefined = undefined>(
464
+ this: T,
465
+ arg: Expression<T>,
466
+ options?: AggregateOptions<T, As>,
467
+ ): SelectAgg<T, 'bool_and', As, NullableColumn<BooleanColumn>> {
468
+ return this.clone()._selectBoolAnd(arg, options);
469
+ }
470
+
471
+ _selectBoolAnd<T extends Query, As extends string | undefined = undefined>(
472
+ this: T,
473
+ arg: Expression<T>,
474
+ options?: AggregateOptions<T, As>,
475
+ ): SelectAgg<T, 'bool_and', As, NullableColumn<BooleanColumn>> {
476
+ return this._selectAgg(aggregate1FunctionNames.boolAnd, arg, options);
477
+ }
478
+
479
+ boolOr<T extends Query>(
480
+ this: T,
481
+ arg: Aggregate1ArgumentTypes<T>['boolOr'],
482
+ options?: AggregateOptions<T>,
483
+ ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {
484
+ return this.clone()._boolOr(arg, options);
485
+ }
486
+
487
+ _boolOr<T extends Query>(
488
+ this: T,
489
+ arg: Aggregate1ArgumentTypes<T>['boolOr'],
490
+ options?: AggregateOptions<T>,
491
+ ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {
492
+ return get<T, NullableColumn<BooleanColumn>>(
493
+ this._selectBoolOr(arg, options),
494
+ );
495
+ }
496
+
497
+ selectBoolOr<T extends Query, As extends string | undefined = undefined>(
498
+ this: T,
499
+ arg: Expression<T>,
500
+ options?: AggregateOptions<T, As>,
501
+ ): SelectAgg<T, 'bool_or', As, NullableColumn<BooleanColumn>> {
502
+ return this.clone()._selectBoolOr(arg, options);
503
+ }
504
+
505
+ _selectBoolOr<T extends Query, As extends string | undefined = undefined>(
506
+ this: T,
507
+ arg: Expression<T>,
508
+ options?: AggregateOptions<T, As>,
509
+ ): SelectAgg<T, 'bool_or', As, NullableColumn<BooleanColumn>> {
510
+ return this._selectAgg(aggregate1FunctionNames.boolOr, arg, options);
511
+ }
512
+
513
+ every<T extends Query>(
514
+ this: T,
515
+ arg: Aggregate1ArgumentTypes<T>['every'],
516
+ options?: AggregateOptions<T>,
517
+ ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {
518
+ return this.clone()._every(arg, options);
519
+ }
520
+
521
+ _every<T extends Query>(
522
+ this: T,
523
+ arg: Aggregate1ArgumentTypes<T>['every'],
524
+ options?: AggregateOptions<T>,
525
+ ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {
526
+ return get<T, NullableColumn<BooleanColumn>>(
527
+ this._selectEvery(arg, options),
528
+ );
529
+ }
530
+
531
+ selectEvery<T extends Query, As extends string | undefined = undefined>(
532
+ this: T,
533
+ arg: Expression<T>,
534
+ options?: AggregateOptions<T, As>,
535
+ ): SelectAgg<T, 'every', As, NullableColumn<BooleanColumn>> {
536
+ return this.clone()._selectEvery(arg, options);
537
+ }
538
+
539
+ _selectEvery<T extends Query, As extends string | undefined = undefined>(
540
+ this: T,
541
+ arg: Expression<T>,
542
+ options?: AggregateOptions<T, As>,
543
+ ): SelectAgg<T, 'every', As, NullableColumn<BooleanColumn>> {
544
+ return this._selectAgg(aggregate1FunctionNames.every, arg, options);
545
+ }
546
+
547
+ jsonAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['jsonAgg']>(
548
+ this: T,
549
+ arg: Expr,
550
+ options?: AggregateOptions<T>,
551
+ ): SetQueryReturnsValue<
552
+ T,
553
+ NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>
554
+ > {
555
+ return this.clone()._jsonAgg(arg, options);
556
+ }
557
+
558
+ _jsonAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['jsonAgg']>(
559
+ this: T,
560
+ arg: Expr,
561
+ options?: AggregateOptions<T>,
562
+ ): SetQueryReturnsValue<
563
+ T,
564
+ NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>
565
+ > {
566
+ return get<T, NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>>(
567
+ this._selectJsonAgg(arg, options),
568
+ );
569
+ }
570
+
571
+ selectJsonAgg<
572
+ T extends Query,
573
+ Expr extends Aggregate1ArgumentTypes<T>['jsonAgg'],
574
+ As extends string | undefined = undefined,
575
+ >(
576
+ this: T,
577
+ arg: Expr,
578
+ options?: AggregateOptions<T, As>,
579
+ ): SelectAgg<
580
+ T,
581
+ 'json_agg',
582
+ As,
583
+ NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>
584
+ > {
585
+ return this.clone()._selectJsonAgg(arg, options);
586
+ }
587
+
588
+ _selectJsonAgg<
589
+ T extends Query,
590
+ Expr extends Aggregate1ArgumentTypes<T>['jsonAgg'],
591
+ As extends string | undefined = undefined,
592
+ >(
593
+ this: T,
594
+ arg: Expr,
595
+ options?: AggregateOptions<T, As>,
596
+ ): SelectAgg<
597
+ T,
598
+ 'json_agg',
599
+ As,
600
+ NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>
601
+ > {
602
+ return this._selectAgg(aggregate1FunctionNames.jsonAgg, arg, options);
603
+ }
604
+
605
+ jsonbAgg<
606
+ T extends Query,
607
+ Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],
608
+ >(
609
+ this: T,
610
+ arg: Expr,
611
+ options?: AggregateOptions<T>,
612
+ ): SetQueryReturnsValue<
613
+ T,
614
+ NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>
615
+ > {
616
+ return this.clone()._jsonbAgg(arg, options);
617
+ }
618
+
619
+ _jsonbAgg<
620
+ T extends Query,
621
+ Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],
622
+ >(
623
+ this: T,
624
+ arg: Expr,
625
+ options?: AggregateOptions<T>,
626
+ ): SetQueryReturnsValue<
627
+ T,
628
+ NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>
629
+ > {
630
+ return get<T, NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>>(
631
+ this._selectJsonbAgg(arg, options),
632
+ );
633
+ }
634
+
635
+ selectJsonbAgg<
636
+ T extends Query,
637
+ Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],
638
+ As extends string | undefined = undefined,
639
+ >(
640
+ this: T,
641
+ arg: Expr,
642
+ options?: AggregateOptions<T, As>,
643
+ ): SelectAgg<
644
+ T,
645
+ 'jsonb_agg',
646
+ As,
647
+ NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>
648
+ > {
649
+ return this.clone()._selectJsonbAgg(arg, options);
650
+ }
651
+
652
+ _selectJsonbAgg<
653
+ T extends Query,
654
+ Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],
655
+ As extends string | undefined = undefined,
656
+ >(
657
+ this: T,
658
+ arg: Expr,
659
+ options?: AggregateOptions<T, As>,
660
+ ): SelectAgg<
661
+ T,
662
+ 'jsonb_agg',
663
+ As,
664
+ NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>
665
+ > {
666
+ return this._selectAgg(aggregate1FunctionNames.jsonbAgg, arg, options);
667
+ }
668
+
669
+ xmlAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['xmlAgg']>(
670
+ this: T,
671
+ arg: Expr,
672
+ options?: AggregateOptions<T>,
673
+ ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {
674
+ return this.clone()._xmlAgg(arg, options);
675
+ }
676
+
677
+ _xmlAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['xmlAgg']>(
678
+ this: T,
679
+ arg: Expr,
680
+ options?: AggregateOptions<T>,
681
+ ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {
682
+ return get<T, NullableColumn<StringColumn>>(
683
+ this._selectXmlAgg(arg, options),
684
+ );
685
+ }
686
+
687
+ selectXmlAgg<T extends Query, As extends string | undefined = undefined>(
688
+ this: T,
689
+ arg: Aggregate1ArgumentTypes<T>['xmlAgg'],
690
+ options?: AggregateOptions<T, As>,
691
+ ): SelectAgg<T, 'xmlagg', As, NullableColumn<StringColumn>> {
692
+ return this.clone()._selectXmlAgg(arg, options);
693
+ }
694
+
695
+ _selectXmlAgg<T extends Query, As extends string | undefined = undefined>(
696
+ this: T,
697
+ arg: Aggregate1ArgumentTypes<T>['xmlAgg'],
698
+ options?: AggregateOptions<T, As>,
699
+ ): SelectAgg<T, 'xmlagg', As, NullableColumn<StringColumn>> {
700
+ return this._selectAgg(aggregate1FunctionNames.xmlAgg, arg, options);
701
+ }
702
+
703
+ jsonObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(
704
+ this: T,
705
+ obj: Obj,
706
+ options?: AggregateOptions<T>,
707
+ ): SetQueryReturnsValue<
708
+ T,
709
+ NullableColumn<
710
+ ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>
711
+ >
712
+ > {
713
+ return this.clone()._jsonObjectAgg(obj, options);
714
+ }
715
+
716
+ _jsonObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(
717
+ this: T,
718
+ obj: Obj,
719
+ options?: AggregateOptions<T>,
720
+ ): SetQueryReturnsValue<
721
+ T,
722
+ NullableColumn<
723
+ ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>
724
+ >
725
+ > {
726
+ return get<
727
+ T,
728
+ NullableColumn<
729
+ ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>
730
+ >
731
+ >(this._selectJsonObjectAgg(obj, options));
732
+ }
733
+
734
+ selectJsonObjectAgg<
735
+ T extends Query,
736
+ Obj extends Record<string, Expression<T>>,
737
+ As extends string | undefined = undefined,
738
+ >(
739
+ this: T,
740
+ obj: Obj,
741
+ options?: AggregateOptions<T, As>,
742
+ ): SelectAgg<
743
+ T,
744
+ 'json_object_agg',
745
+ As,
746
+ NullableColumn<
747
+ ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>
748
+ >
749
+ > {
750
+ return this.clone()._selectJsonObjectAgg(obj, options);
751
+ }
752
+
753
+ _selectJsonObjectAgg<
754
+ T extends Query,
755
+ Obj extends Record<string, Expression<T>>,
756
+ As extends string | undefined = undefined,
757
+ >(
758
+ this: T,
759
+ obj: Obj,
760
+ options?: AggregateOptions<T, As>,
761
+ ): SelectAgg<
762
+ T,
763
+ 'json_object_agg',
764
+ As,
765
+ NullableColumn<
766
+ ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>
767
+ >
768
+ > {
769
+ return this._selectAgg('json_object_agg', obj, options);
770
+ }
771
+
772
+ jsonbObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(
773
+ this: T,
774
+ obj: Obj,
775
+ options?: AggregateOptions<T>,
776
+ ): SetQueryReturnsValue<
777
+ T,
778
+ NullableColumn<
779
+ ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>
780
+ >
781
+ > {
782
+ return this.clone()._jsonbObjectAgg(obj, options);
783
+ }
784
+
785
+ _jsonbObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(
786
+ this: T,
787
+ obj: Obj,
788
+ options?: AggregateOptions<T>,
789
+ ): SetQueryReturnsValue<
790
+ T,
791
+ NullableColumn<
792
+ ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>
793
+ >
794
+ > {
795
+ return get<
796
+ T,
797
+ NullableColumn<
798
+ ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>
799
+ >
800
+ >(this._selectJsonbObjectAgg(obj, options));
801
+ }
802
+
803
+ selectJsonbObjectAgg<
804
+ T extends Query,
805
+ Obj extends Record<string, Expression<T>>,
806
+ As extends string | undefined = undefined,
807
+ >(
808
+ this: T,
809
+ obj: Obj,
810
+ options?: AggregateOptions<T, As>,
811
+ ): SelectAgg<
812
+ T,
813
+ 'jsonb_object_agg',
814
+ As,
815
+ NullableColumn<
816
+ ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>
817
+ >
818
+ > {
819
+ return this.clone()._selectJsonbObjectAgg(obj, options);
820
+ }
821
+
822
+ _selectJsonbObjectAgg<
823
+ T extends Query,
824
+ Obj extends Record<string, Expression<T>>,
825
+ As extends string | undefined = undefined,
826
+ >(
827
+ this: T,
828
+ obj: Obj,
829
+ options?: AggregateOptions<T, As>,
830
+ ): SelectAgg<
831
+ T,
832
+ 'jsonb_object_agg',
833
+ As,
834
+ NullableColumn<
835
+ ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>
836
+ >
837
+ > {
838
+ return this._selectAgg('jsonb_object_agg', obj, options);
839
+ }
840
+
841
+ stringAgg<T extends Query>(
842
+ this: T,
843
+ arg: StringExpression<T>,
844
+ delimiter: string,
845
+ options?: AggregateOptions<T>,
846
+ ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {
847
+ return this.clone()._stringAgg(arg, delimiter, options);
848
+ }
849
+
850
+ _stringAgg<T extends Query>(
851
+ this: T,
852
+ arg: StringExpression<T>,
853
+ delimiter: string,
854
+ options?: AggregateOptions<T>,
855
+ ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {
856
+ return get<T, NullableColumn<StringColumn>>(
857
+ this._selectStringAgg(arg, delimiter, options),
858
+ );
859
+ }
860
+
861
+ selectStringAgg<T extends Query, As extends string | undefined = undefined>(
862
+ this: T,
863
+ arg: StringExpression<T>,
864
+ delimiter: string,
865
+ options?: AggregateOptions<T, As>,
866
+ ): SelectAgg<T, 'string_agg', As, NullableColumn<StringColumn>> {
867
+ return this.clone()._selectStringAgg(arg, delimiter, options);
868
+ }
869
+
870
+ _selectStringAgg<T extends Query, As extends string | undefined = undefined>(
871
+ this: T,
872
+ arg: StringExpression<T>,
873
+ delimiter: string,
874
+ options?: AggregateOptions<T, As>,
875
+ ): SelectAgg<T, 'string_agg', As, NullableColumn<StringColumn>> {
876
+ return this._selectAgg('string_agg', [arg, delimiter], options);
877
+ }
878
+ }