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,428 @@
1
+ import { Expression, raw, RawExpression } from '../common';
2
+ import {
3
+ Query,
4
+ Selectable,
5
+ SetQueryReturnsAll,
6
+ SetQueryReturnsOne,
7
+ SetQueryReturnsPluck,
8
+ SetQueryReturnsRows,
9
+ SetQueryReturnsValueOptional,
10
+ SetQueryReturnsVoid,
11
+ SetQueryTableAlias,
12
+ SetQueryWindows,
13
+ QueryBase,
14
+ SetQueryReturnsOneOptional,
15
+ } from '../query';
16
+ import {
17
+ applyMixins,
18
+ getClonedQueryData,
19
+ GetTypesOrRaw,
20
+ PropertyKeyUnionToArray,
21
+ } from '../utils';
22
+ import {
23
+ SelectItem,
24
+ SelectQueryData,
25
+ SortDir,
26
+ Sql,
27
+ toSql,
28
+ TruncateQueryData,
29
+ } from '../sql';
30
+ import {
31
+ pushQueryArray,
32
+ pushQueryValue,
33
+ removeFromQuery,
34
+ } from '../queryDataUtils';
35
+ import { Then } from './then';
36
+ import { NumberColumn } from '../columnSchema';
37
+ import { Aggregate } from './aggregate';
38
+ import { addParserForSelectItem, Select } from './select';
39
+ import { From } from './from';
40
+ import { Join } from './join';
41
+ import { With } from './with';
42
+ import { Union } from './union';
43
+ import { Json } from './json';
44
+ import { Insert } from './insert';
45
+ import { Update } from './update';
46
+ import { Delete } from './delete';
47
+ import { Transaction } from './transaction';
48
+ import { For } from './for';
49
+ import { ColumnInfoMethods } from './columnInfo';
50
+ import { addWhere, Where, WhereArg, WhereResult } from './where';
51
+ import { Clear } from './clear';
52
+ import { Having } from './having';
53
+ import { Window } from './window';
54
+ import { QueryLog } from './log';
55
+ import { QueryCallbacks } from './callbacks';
56
+ import { QueryUpsert } from './upsert';
57
+ import { QueryGet } from './get';
58
+
59
+ export type WindowArg<T extends Query> = Record<
60
+ string,
61
+ WindowArgDeclaration<T> | RawExpression
62
+ >;
63
+
64
+ export type WindowArgDeclaration<T extends Query = Query> = {
65
+ partitionBy?: Expression<T> | Expression<T>[];
66
+ order?: OrderArg<T>;
67
+ };
68
+
69
+ type WindowResult<T extends Query, W extends WindowArg<T>> = SetQueryWindows<
70
+ T,
71
+ PropertyKeyUnionToArray<keyof W>
72
+ >;
73
+
74
+ export type OrderArg<T extends Query> =
75
+ | keyof T['selectable']
76
+ | {
77
+ [K in Selectable<T>]?:
78
+ | SortDir
79
+ | { dir: SortDir; nulls: 'FIRST' | 'LAST' };
80
+ }
81
+ | RawExpression;
82
+
83
+ export interface QueryMethods
84
+ extends Aggregate,
85
+ Select,
86
+ From,
87
+ Join,
88
+ With,
89
+ Union,
90
+ Json,
91
+ Insert,
92
+ Update,
93
+ Delete,
94
+ Transaction,
95
+ For,
96
+ ColumnInfoMethods,
97
+ Where,
98
+ Clear,
99
+ Having,
100
+ Window,
101
+ Then,
102
+ QueryLog,
103
+ QueryCallbacks,
104
+ QueryUpsert,
105
+ QueryGet {}
106
+
107
+ export class QueryMethods {
108
+ windows!: PropertyKey[];
109
+ __model!: Query;
110
+
111
+ all<T extends Query>(this: T): SetQueryReturnsAll<T> {
112
+ return this.query.returnType === 'all'
113
+ ? (this as unknown as SetQueryReturnsAll<T>)
114
+ : this.clone()._all();
115
+ }
116
+
117
+ _all<T extends Query>(this: T): SetQueryReturnsAll<T> {
118
+ this.query.returnType = 'all';
119
+ removeFromQuery(this, 'take');
120
+ return this as unknown as SetQueryReturnsAll<T>;
121
+ }
122
+
123
+ take<T extends Query>(this: T): SetQueryReturnsOne<T> {
124
+ return this.query.returnType === 'oneOrThrow'
125
+ ? (this as unknown as SetQueryReturnsOne<T>)
126
+ : this.clone()._take();
127
+ }
128
+
129
+ _take<T extends Query>(this: T): SetQueryReturnsOne<T> {
130
+ this.query.returnType = 'oneOrThrow';
131
+ this.query.take = true;
132
+ return this as unknown as SetQueryReturnsOne<T>;
133
+ }
134
+
135
+ takeOptional<T extends Query>(this: T): SetQueryReturnsOneOptional<T> {
136
+ return this.query.returnType === 'one'
137
+ ? (this as unknown as SetQueryReturnsOneOptional<T>)
138
+ : this.clone()._takeOptional();
139
+ }
140
+
141
+ _takeOptional<T extends Query>(this: T): SetQueryReturnsOneOptional<T> {
142
+ this.query.returnType = 'one';
143
+ this.query.take = true;
144
+ return this as unknown as SetQueryReturnsOneOptional<T>;
145
+ }
146
+
147
+ rows<T extends Query>(this: T): SetQueryReturnsRows<T> {
148
+ return this.query.returnType === 'rows'
149
+ ? (this as unknown as SetQueryReturnsRows<T>)
150
+ : this.clone()._rows();
151
+ }
152
+
153
+ _rows<T extends Query>(this: T): SetQueryReturnsRows<T> {
154
+ this.query.returnType = 'rows';
155
+ removeFromQuery(this, 'take');
156
+ return this as unknown as SetQueryReturnsRows<T>;
157
+ }
158
+
159
+ pluck<T extends Query, S extends Expression<T>>(
160
+ this: T,
161
+ select: S,
162
+ ): SetQueryReturnsPluck<T, S> {
163
+ return this.query.returnType === 'pluck'
164
+ ? (this as unknown as SetQueryReturnsPluck<T, S>)
165
+ : this.clone()._pluck(select);
166
+ }
167
+
168
+ _pluck<T extends Query, S extends Expression<T>>(
169
+ this: T,
170
+ select: S,
171
+ ): SetQueryReturnsPluck<T, S> {
172
+ this.query.returnType = 'pluck';
173
+ removeFromQuery(this, 'take');
174
+ (this.query as SelectQueryData).select = [select as SelectItem];
175
+ addParserForSelectItem(this, this.query.as || this.table, 'pluck', select);
176
+ return this as unknown as SetQueryReturnsPluck<T, S>;
177
+ }
178
+
179
+ exec<T extends Query>(this: T): SetQueryReturnsVoid<T> {
180
+ return this.query.returnType === 'void'
181
+ ? (this as unknown as SetQueryReturnsVoid<T>)
182
+ : this.clone()._exec();
183
+ }
184
+
185
+ _exec<T extends Query>(this: T): SetQueryReturnsVoid<T> {
186
+ this.query.returnType = 'void';
187
+ removeFromQuery(this, 'take');
188
+ return this as unknown as SetQueryReturnsVoid<T>;
189
+ }
190
+
191
+ clone<T extends QueryBase>(this: T): T {
192
+ const cloned = Object.create(this.__model);
193
+ cloned.query = getClonedQueryData(this.query);
194
+ return cloned;
195
+ }
196
+
197
+ toSql(this: Query, values?: unknown[]): Sql {
198
+ return toSql(this, values);
199
+ }
200
+
201
+ distinct<T extends Query>(this: T, ...columns: Expression<T>[]): T {
202
+ return this.clone()._distinct(...columns);
203
+ }
204
+
205
+ _distinct<T extends Query>(this: T, ...columns: Expression<T>[]): T {
206
+ return pushQueryArray(this, 'distinct', columns as string[]);
207
+ }
208
+
209
+ find<T extends Query>(
210
+ this: T,
211
+ ...args: GetTypesOrRaw<T['schema']['primaryTypes']>
212
+ ): SetQueryReturnsOne<WhereResult<T>> {
213
+ return this.clone()._find(...args);
214
+ }
215
+
216
+ _find<T extends Query>(
217
+ this: T,
218
+ ...args: GetTypesOrRaw<T['schema']['primaryTypes']>
219
+ ): SetQueryReturnsOne<WhereResult<T>> {
220
+ const conditions: Partial<T['type']> = {};
221
+ this.schema.primaryKeys.forEach((key: string, i: number) => {
222
+ conditions[key as keyof T['type']] = args[i];
223
+ });
224
+ return this._where(conditions as WhereArg<T>)._take();
225
+ }
226
+
227
+ findOptional<T extends Query>(
228
+ this: T,
229
+ ...args: GetTypesOrRaw<T['schema']['primaryTypes']>
230
+ ): SetQueryReturnsOneOptional<WhereResult<T>> {
231
+ return this.clone()._findOptional(...args);
232
+ }
233
+
234
+ _findOptional<T extends Query>(
235
+ this: T,
236
+ ...args: GetTypesOrRaw<T['schema']['primaryTypes']>
237
+ ): SetQueryReturnsOneOptional<WhereResult<T>> {
238
+ return this._find(
239
+ ...args,
240
+ ).takeOptional() as unknown as SetQueryReturnsOneOptional<WhereResult<T>>;
241
+ }
242
+
243
+ findBy<T extends Query>(
244
+ this: T,
245
+ ...args: WhereArg<T>[]
246
+ ): SetQueryReturnsOne<WhereResult<T>> {
247
+ return this.clone()._findBy(...args);
248
+ }
249
+
250
+ _findBy<T extends Query>(
251
+ this: T,
252
+ ...args: WhereArg<T>[]
253
+ ): SetQueryReturnsOne<WhereResult<T>> {
254
+ return addWhere(this, args).take();
255
+ }
256
+
257
+ findByOptional<T extends Query>(
258
+ this: T,
259
+ ...args: WhereArg<T>[]
260
+ ): SetQueryReturnsOneOptional<WhereResult<T>> {
261
+ return this.clone()._findByOptional(...args);
262
+ }
263
+
264
+ _findByOptional<T extends Query>(
265
+ this: T,
266
+ ...args: WhereArg<T>[]
267
+ ): SetQueryReturnsOneOptional<WhereResult<T>> {
268
+ return addWhere(this, args).takeOptional();
269
+ }
270
+
271
+ as<T extends Query, TableAlias extends string>(
272
+ this: T,
273
+ tableAlias: TableAlias,
274
+ ): SetQueryTableAlias<T, TableAlias> {
275
+ return this.clone()._as(tableAlias) as unknown as SetQueryTableAlias<
276
+ T,
277
+ TableAlias
278
+ >;
279
+ }
280
+
281
+ _as<T extends Query, TableAlias extends string>(
282
+ this: T,
283
+ tableAlias: TableAlias,
284
+ ): SetQueryTableAlias<T, TableAlias> {
285
+ this.query.as = tableAlias;
286
+ return this as unknown as SetQueryTableAlias<T, TableAlias>;
287
+ }
288
+
289
+ withSchema<T extends Query>(this: T, schema: string): T {
290
+ return this.clone()._withSchema(schema);
291
+ }
292
+
293
+ _withSchema<T extends Query>(this: T, schema: string): T {
294
+ this.query.schema = schema;
295
+ return this;
296
+ }
297
+
298
+ group<T extends Query>(this: T, ...columns: Expression<T>[]): T {
299
+ return this.clone()._group(...columns);
300
+ }
301
+
302
+ _group<T extends Query>(this: T, ...columns: Expression<T>[]): T {
303
+ return pushQueryArray(this, 'group', columns);
304
+ }
305
+
306
+ window<T extends Query, W extends WindowArg<T>>(
307
+ this: T,
308
+ arg: W,
309
+ ): WindowResult<T, W> {
310
+ return this.clone()._window(arg);
311
+ }
312
+
313
+ _window<T extends Query, W extends WindowArg<T>>(
314
+ this: T,
315
+ arg: W,
316
+ ): WindowResult<T, W> {
317
+ return pushQueryValue(this, 'window', arg) as unknown as WindowResult<T, W>;
318
+ }
319
+
320
+ wrap<T extends Query, Q extends Query, As extends string = 't'>(
321
+ this: T,
322
+ query: Q,
323
+ as?: As,
324
+ ): SetQueryTableAlias<Q, As> {
325
+ return this.clone()._wrap(query, as);
326
+ }
327
+
328
+ _wrap<T extends Query, Q extends Query, As extends string = 't'>(
329
+ this: T,
330
+ query: Q,
331
+ as?: As,
332
+ ): SetQueryTableAlias<Q, As> {
333
+ const sql = this.toSql();
334
+
335
+ return query
336
+ .as(as ?? 't')
337
+ ._from(
338
+ raw(`(${sql.text})`, ...sql.values),
339
+ ) as unknown as SetQueryTableAlias<Q, As>;
340
+ }
341
+
342
+ order<T extends Query>(this: T, ...args: OrderArg<T>[]): T {
343
+ return this.clone()._order(...args);
344
+ }
345
+
346
+ _order<T extends Query>(this: T, ...args: OrderArg<T>[]): T {
347
+ return pushQueryArray(this, 'order', args);
348
+ }
349
+
350
+ limit<T extends Query>(this: T, arg: number): T {
351
+ return this.clone()._limit(arg);
352
+ }
353
+
354
+ _limit<T extends Query>(this: T, arg: number): T {
355
+ (this.query as SelectQueryData).limit = arg;
356
+ return this;
357
+ }
358
+
359
+ offset<T extends Query>(this: T, arg: number): T {
360
+ return this.clone()._offset(arg);
361
+ }
362
+
363
+ _offset<T extends Query>(this: T, arg: number): T {
364
+ (this.query as SelectQueryData).offset = arg;
365
+ return this;
366
+ }
367
+
368
+ exists<T extends Query>(
369
+ this: T,
370
+ ): SetQueryReturnsValueOptional<T, NumberColumn> {
371
+ return this.clone()._exists();
372
+ }
373
+
374
+ _exists<T extends Query>(
375
+ this: T,
376
+ ): SetQueryReturnsValueOptional<T, NumberColumn> {
377
+ const q = this._getOptional(raw<NumberColumn>('1'));
378
+ delete q.query.take;
379
+ return q as unknown as SetQueryReturnsValueOptional<T, NumberColumn>;
380
+ }
381
+
382
+ truncate<T extends Query>(
383
+ this: T,
384
+ options?: { restartIdentity?: boolean; cascade?: boolean },
385
+ ): SetQueryReturnsVoid<T> {
386
+ return this.clone()._truncate(options);
387
+ }
388
+
389
+ _truncate<T extends Query>(
390
+ this: T,
391
+ options?: { restartIdentity?: boolean; cascade?: boolean },
392
+ ): SetQueryReturnsVoid<T> {
393
+ const q = this.query as TruncateQueryData;
394
+ q.type = 'truncate';
395
+ if (options?.restartIdentity) {
396
+ q.restartIdentity = true;
397
+ }
398
+ if (options?.cascade) {
399
+ q.cascade = true;
400
+ }
401
+ return this._exec();
402
+ }
403
+ }
404
+
405
+ applyMixins(QueryMethods, [
406
+ Aggregate,
407
+ Select,
408
+ From,
409
+ Join,
410
+ With,
411
+ Union,
412
+ Json,
413
+ Insert,
414
+ Update,
415
+ Delete,
416
+ Transaction,
417
+ For,
418
+ ColumnInfoMethods,
419
+ Where,
420
+ Clear,
421
+ Having,
422
+ Window,
423
+ Then,
424
+ QueryLog,
425
+ QueryCallbacks,
426
+ QueryUpsert,
427
+ QueryGet,
428
+ ]);