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.
- package/dist/index.d.ts +3630 -0
- package/dist/index.esm.js +4587 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +4691 -0
- package/dist/index.js.map +1 -0
- package/package.json +59 -0
- package/rollup.config.js +35 -0
- package/src/adapter.test.ts +10 -0
- package/src/adapter.ts +171 -0
- package/src/columnSchema/array.ts +21 -0
- package/src/columnSchema/boolean.ts +10 -0
- package/src/columnSchema/columnType.test.ts +129 -0
- package/src/columnSchema/columnType.ts +77 -0
- package/src/columnSchema/columnTypes.ts +145 -0
- package/src/columnSchema/columnsSchema.test.ts +32 -0
- package/src/columnSchema/columnsSchema.ts +100 -0
- package/src/columnSchema/commonMethods.ts +130 -0
- package/src/columnSchema/dateTime.ts +104 -0
- package/src/columnSchema/enum.ts +13 -0
- package/src/columnSchema/index.ts +11 -0
- package/src/columnSchema/json/array.ts +55 -0
- package/src/columnSchema/json/discriminatedUnion.ts +91 -0
- package/src/columnSchema/json/enum.ts +29 -0
- package/src/columnSchema/json/instanceOf.ts +16 -0
- package/src/columnSchema/json/intersection.ts +23 -0
- package/src/columnSchema/json/lazy.ts +22 -0
- package/src/columnSchema/json/literal.ts +12 -0
- package/src/columnSchema/json/map.ts +29 -0
- package/src/columnSchema/json/nativeEnum.ts +30 -0
- package/src/columnSchema/json/nullable.ts +33 -0
- package/src/columnSchema/json/nullish.ts +30 -0
- package/src/columnSchema/json/object.ts +206 -0
- package/src/columnSchema/json/optional.ts +28 -0
- package/src/columnSchema/json/record.ts +40 -0
- package/src/columnSchema/json/scalarTypes.ts +117 -0
- package/src/columnSchema/json/set.ts +34 -0
- package/src/columnSchema/json/tuple.ts +40 -0
- package/src/columnSchema/json/typeBase.ts +202 -0
- package/src/columnSchema/json/union.ts +16 -0
- package/src/columnSchema/json.ts +64 -0
- package/src/columnSchema/number.ts +122 -0
- package/src/columnSchema/string.ts +222 -0
- package/src/columnSchema/utils.ts +27 -0
- package/src/common.ts +86 -0
- package/src/db.test.ts +67 -0
- package/src/db.ts +212 -0
- package/src/errors.ts +7 -0
- package/src/index.ts +18 -0
- package/src/operators.test.ts +608 -0
- package/src/operators.ts +177 -0
- package/src/query.ts +292 -0
- package/src/queryDataUtils.ts +50 -0
- package/src/queryMethods/aggregate.test.ts +583 -0
- package/src/queryMethods/aggregate.ts +878 -0
- package/src/queryMethods/callbacks.test.ts +69 -0
- package/src/queryMethods/callbacks.ts +55 -0
- package/src/queryMethods/clear.test.ts +64 -0
- package/src/queryMethods/clear.ts +58 -0
- package/src/queryMethods/columnInfo.test.ts +45 -0
- package/src/queryMethods/columnInfo.ts +67 -0
- package/src/queryMethods/delete.test.ts +135 -0
- package/src/queryMethods/delete.ts +50 -0
- package/src/queryMethods/for.test.ts +57 -0
- package/src/queryMethods/for.ts +99 -0
- package/src/queryMethods/from.test.ts +66 -0
- package/src/queryMethods/from.ts +58 -0
- package/src/queryMethods/get.test.ts +66 -0
- package/src/queryMethods/get.ts +88 -0
- package/src/queryMethods/having.test.ts +247 -0
- package/src/queryMethods/having.ts +99 -0
- package/src/queryMethods/insert.test.ts +555 -0
- package/src/queryMethods/insert.ts +453 -0
- package/src/queryMethods/join.test.ts +150 -0
- package/src/queryMethods/join.ts +508 -0
- package/src/queryMethods/json.test.ts +398 -0
- package/src/queryMethods/json.ts +259 -0
- package/src/queryMethods/log.test.ts +172 -0
- package/src/queryMethods/log.ts +123 -0
- package/src/queryMethods/queryMethods.test.ts +629 -0
- package/src/queryMethods/queryMethods.ts +428 -0
- package/src/queryMethods/select.test.ts +479 -0
- package/src/queryMethods/select.ts +249 -0
- package/src/queryMethods/then.ts +236 -0
- package/src/queryMethods/transaction.test.ts +66 -0
- package/src/queryMethods/transaction.ts +66 -0
- package/src/queryMethods/union.test.ts +59 -0
- package/src/queryMethods/union.ts +89 -0
- package/src/queryMethods/update.test.ts +417 -0
- package/src/queryMethods/update.ts +350 -0
- package/src/queryMethods/upsert.test.ts +56 -0
- package/src/queryMethods/upsert.ts +43 -0
- package/src/queryMethods/where.test.ts +1594 -0
- package/src/queryMethods/where.ts +450 -0
- package/src/queryMethods/window.test.ts +66 -0
- package/src/queryMethods/window.ts +108 -0
- package/src/queryMethods/with.test.ts +191 -0
- package/src/queryMethods/with.ts +92 -0
- package/src/quote.ts +36 -0
- package/src/relations.ts +194 -0
- package/src/sql/aggregate.ts +80 -0
- package/src/sql/columnInfo.ts +22 -0
- package/src/sql/common.ts +42 -0
- package/src/sql/delete.ts +41 -0
- package/src/sql/distinct.ts +19 -0
- package/src/sql/fromAndAs.ts +51 -0
- package/src/sql/having.ts +140 -0
- package/src/sql/index.ts +2 -0
- package/src/sql/insert.ts +102 -0
- package/src/sql/join.ts +242 -0
- package/src/sql/orderBy.ts +41 -0
- package/src/sql/select.ts +153 -0
- package/src/sql/toSql.ts +153 -0
- package/src/sql/truncate.ts +13 -0
- package/src/sql/types.ts +355 -0
- package/src/sql/update.ts +62 -0
- package/src/sql/where.ts +314 -0
- package/src/sql/window.ts +38 -0
- package/src/sql/with.ts +32 -0
- package/src/test-utils.ts +172 -0
- package/src/utils.ts +140 -0
- package/tsconfig.build.json +6 -0
- 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
|
+
}
|