@taylordb/query-builder 0.8.0 → 0.9.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/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/cjs/@types/insert.d.ts +13 -4
- package/dist/cjs/@types/query-builder.d.ts +2 -2
- package/dist/cjs/@types/type-helpers.d.ts +3 -3
- package/dist/cjs/@types/update.d.ts +8 -3
- package/dist/cjs/__tests__/query-builder.spec.js +1 -1
- package/dist/cjs/__tests__/query-builder.spec.js.map +1 -1
- package/dist/cjs/__tests__/taylorclient.types.d.ts +57 -51
- package/dist/cjs/aggregation-query-builder.d.ts +92 -0
- package/dist/cjs/aggregation-query-builder.js +92 -0
- package/dist/cjs/aggregation-query-builder.js.map +1 -1
- package/dist/cjs/batch-query-builder.d.ts +36 -0
- package/dist/cjs/batch-query-builder.js +36 -0
- package/dist/cjs/batch-query-builder.js.map +1 -1
- package/dist/cjs/delete-query-builder.d.ts +17 -0
- package/dist/cjs/delete-query-builder.js +17 -0
- package/dist/cjs/delete-query-builder.js.map +1 -1
- package/dist/cjs/executor.js +1 -1
- package/dist/cjs/executor.js.map +1 -1
- package/dist/cjs/insert-query-builder.d.ts +68 -0
- package/dist/cjs/insert-query-builder.js +71 -0
- package/dist/cjs/insert-query-builder.js.map +1 -1
- package/dist/cjs/query-builder.d.ts +218 -1
- package/dist/cjs/query-builder.js +188 -0
- package/dist/cjs/query-builder.js.map +1 -1
- package/dist/cjs/selection-builder.d.ts +12 -1
- package/dist/cjs/selection-builder.js +11 -0
- package/dist/cjs/selection-builder.js.map +1 -1
- package/dist/cjs/update-query-builder.d.ts +32 -0
- package/dist/cjs/update-query-builder.js +32 -0
- package/dist/cjs/update-query-builder.js.map +1 -1
- package/dist/cjs/where-query-builder.d.ts +61 -2
- package/dist/cjs/where-query-builder.js +6 -0
- package/dist/cjs/where-query-builder.js.map +1 -1
- package/dist/esm/@types/insert.d.ts +13 -4
- package/dist/esm/@types/query-builder.d.ts +2 -2
- package/dist/esm/@types/type-helpers.d.ts +3 -3
- package/dist/esm/@types/update.d.ts +8 -3
- package/dist/esm/__tests__/query-builder.spec.js +1 -1
- package/dist/esm/__tests__/query-builder.spec.js.map +1 -1
- package/dist/esm/__tests__/taylorclient.types.d.ts +57 -51
- package/dist/esm/aggregation-query-builder.d.ts +92 -0
- package/dist/esm/aggregation-query-builder.js +92 -0
- package/dist/esm/aggregation-query-builder.js.map +1 -1
- package/dist/esm/batch-query-builder.d.ts +36 -0
- package/dist/esm/batch-query-builder.js +36 -0
- package/dist/esm/batch-query-builder.js.map +1 -1
- package/dist/esm/delete-query-builder.d.ts +17 -0
- package/dist/esm/delete-query-builder.js +17 -0
- package/dist/esm/delete-query-builder.js.map +1 -1
- package/dist/esm/executor.js +1 -1
- package/dist/esm/executor.js.map +1 -1
- package/dist/esm/insert-query-builder.d.ts +68 -0
- package/dist/esm/insert-query-builder.js +71 -0
- package/dist/esm/insert-query-builder.js.map +1 -1
- package/dist/esm/query-builder.d.ts +218 -1
- package/dist/esm/query-builder.js +188 -0
- package/dist/esm/query-builder.js.map +1 -1
- package/dist/esm/selection-builder.d.ts +12 -1
- package/dist/esm/selection-builder.js +11 -0
- package/dist/esm/selection-builder.js.map +1 -1
- package/dist/esm/update-query-builder.d.ts +32 -0
- package/dist/esm/update-query-builder.js +32 -0
- package/dist/esm/update-query-builder.js.map +1 -1
- package/dist/esm/where-query-builder.d.ts +61 -2
- package/dist/esm/where-query-builder.js +6 -0
- package/dist/esm/where-query-builder.js.map +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -12,6 +12,13 @@ const selection_builder_js_1 = require("./selection-builder.js");
|
|
|
12
12
|
const update_query_builder_js_1 = require("./update-query-builder.js");
|
|
13
13
|
const where_query_builder_js_1 = require("./where-query-builder.js");
|
|
14
14
|
const DEFAULT_LIMIT = 50;
|
|
15
|
+
/**
|
|
16
|
+
* The main query builder class for constructing and executing select queries.
|
|
17
|
+
* @template DB - The database type.
|
|
18
|
+
* @template TableName - The name of the table to query.
|
|
19
|
+
* @template Selection - The type of the selected fields.
|
|
20
|
+
* @template LinkName - The name of the link field if this is a subquery.
|
|
21
|
+
*/
|
|
15
22
|
class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
|
|
16
23
|
constructor(node, executor) {
|
|
17
24
|
super(node, executor);
|
|
@@ -20,12 +27,37 @@ class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
|
|
|
20
27
|
pagination: { limit: DEFAULT_LIMIT, offset: 0, ...node.pagination },
|
|
21
28
|
};
|
|
22
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Selects a set of fields from the table.
|
|
32
|
+
* @param fields - An array of field names to select.
|
|
33
|
+
* @returns A new `QueryBuilder` instance with the specified fields selected.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const users = await qb
|
|
38
|
+
* .selectFrom('users')
|
|
39
|
+
* .select(['id', 'name'])
|
|
40
|
+
* .execute();
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
23
43
|
select(fields) {
|
|
24
44
|
return new QueryBuilder({
|
|
25
45
|
...this._node,
|
|
26
46
|
fields: [...this._node.fields, ...fields],
|
|
27
47
|
}, this._executor);
|
|
28
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Selects all fields from the table.
|
|
51
|
+
* @returns A new `QueryBuilder` instance with all fields selected.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const users = await qb
|
|
56
|
+
* .selectFrom('users')
|
|
57
|
+
* .selectAll()
|
|
58
|
+
* .execute();
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
29
61
|
selectAll() {
|
|
30
62
|
return new QueryBuilder({
|
|
31
63
|
...this._node,
|
|
@@ -59,21 +91,79 @@ class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
|
|
|
59
91
|
fields: [...this._node.fields, ...newSelects],
|
|
60
92
|
}, this._executor);
|
|
61
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Sets the maximum number of records to return.
|
|
96
|
+
* @param count - The maximum number of records.
|
|
97
|
+
* @returns A new `QueryBuilder` instance with the limit applied.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* const users = await qb
|
|
102
|
+
* .selectFrom('users')
|
|
103
|
+
* .select(['id', 'name'])
|
|
104
|
+
* .limit(10)
|
|
105
|
+
* .execute();
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
62
108
|
limit(count) {
|
|
63
109
|
return new QueryBuilder({
|
|
64
110
|
...this._node,
|
|
65
111
|
pagination: { ...this._node.pagination, limit: count },
|
|
66
112
|
}, this._executor);
|
|
67
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Sets the number of records to skip.
|
|
116
|
+
* @param count - The number of records to skip.
|
|
117
|
+
* @returns A new `QueryBuilder` instance with the offset applied.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```typescript
|
|
121
|
+
* const users = await qb
|
|
122
|
+
* .selectFrom('users')
|
|
123
|
+
* .select(['id', 'name'])
|
|
124
|
+
* .offset(10)
|
|
125
|
+
* .execute();
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
68
128
|
offset(count) {
|
|
69
129
|
return new QueryBuilder({
|
|
70
130
|
...this._node,
|
|
71
131
|
pagination: { ...this._node.pagination, offset: count },
|
|
72
132
|
}, this._executor);
|
|
73
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Paginates the results.
|
|
136
|
+
* @param page - The page number to retrieve.
|
|
137
|
+
* @param limit - The number of records per page.
|
|
138
|
+
* @returns A new `QueryBuilder` instance with pagination applied.
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* const users = await qb
|
|
143
|
+
* .selectFrom('users')
|
|
144
|
+
* .select(['id', 'name'])
|
|
145
|
+
* .paginate(2, 25) // Retrieves page 2 with 25 records per page
|
|
146
|
+
* .execute();
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
74
149
|
paginate(page, limit) {
|
|
75
150
|
return this.offset((page - 1) * limit).limit(limit);
|
|
76
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Sorts the results by a specified field.
|
|
154
|
+
* @param field - The field to sort by.
|
|
155
|
+
* @param direction - The sort direction ('asc' or 'desc').
|
|
156
|
+
* @returns A new `QueryBuilder` instance with the sorting applied.
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* ```typescript
|
|
160
|
+
* const users = await qb
|
|
161
|
+
* .selectFrom('users')
|
|
162
|
+
* .select(['id', 'name'])
|
|
163
|
+
* .orderBy('name', 'asc')
|
|
164
|
+
* .execute();
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
77
167
|
orderBy(field, direction = 'asc') {
|
|
78
168
|
const newSorting = {
|
|
79
169
|
field: field,
|
|
@@ -84,10 +174,35 @@ class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
|
|
|
84
174
|
sorting: [...(this._node.sorting || []), newSorting],
|
|
85
175
|
}, this._executor);
|
|
86
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Executes the select query.
|
|
179
|
+
* @returns A promise that resolves with an array of the selected records.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* const users = await qb
|
|
184
|
+
* .selectFrom('users')
|
|
185
|
+
* .select(['id', 'name'])
|
|
186
|
+
* .execute();
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
87
189
|
async execute() {
|
|
88
190
|
const response = await this._executor.execute(this);
|
|
89
191
|
return response[0];
|
|
90
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Executes the select query and returns the first result.
|
|
195
|
+
* @returns A promise that resolves with the first record, or `null` if no records were found.
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```typescript
|
|
199
|
+
* const user = await qb
|
|
200
|
+
* .selectFrom('users')
|
|
201
|
+
* .where('id', '=', 1)
|
|
202
|
+
* .select(['id', 'name'])
|
|
203
|
+
* .executeTakeFirst();
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
91
206
|
async executeTakeFirst() {
|
|
92
207
|
const response = await this._executor.execute(this);
|
|
93
208
|
return response[0]?.[0] ?? null;
|
|
@@ -149,11 +264,25 @@ class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
|
|
|
149
264
|
}
|
|
150
265
|
}
|
|
151
266
|
exports.QueryBuilder = QueryBuilder;
|
|
267
|
+
/**
|
|
268
|
+
* The root query builder class that provides entry points for all query types.
|
|
269
|
+
*/
|
|
152
270
|
class RootQueryBuilder {
|
|
153
271
|
#executor;
|
|
154
272
|
constructor(config) {
|
|
155
273
|
this.#executor = new executor_js_1.Executor(config.baseUrl, config.apiKey);
|
|
156
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Creates a new select query builder for the specified table.
|
|
277
|
+
* @param from - The name of the table to select from.
|
|
278
|
+
* @returns A new `QueryBuilder` instance.
|
|
279
|
+
*
|
|
280
|
+
* @example
|
|
281
|
+
* ```typescript
|
|
282
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
283
|
+
* const userQuery = qb.selectFrom('users');
|
|
284
|
+
* ```
|
|
285
|
+
*/
|
|
157
286
|
selectFrom(from) {
|
|
158
287
|
return new QueryBuilder({
|
|
159
288
|
tableName: from,
|
|
@@ -163,6 +292,17 @@ class RootQueryBuilder {
|
|
|
163
292
|
queryType: 'root',
|
|
164
293
|
}, this.#executor);
|
|
165
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Creates a new insert query builder for the specified table.
|
|
297
|
+
* @param into - The name of the table to insert into.
|
|
298
|
+
* @returns A new `InsertQueryBuilder` instance.
|
|
299
|
+
*
|
|
300
|
+
* @example
|
|
301
|
+
* ```typescript
|
|
302
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
303
|
+
* const insertQuery = qb.insertInto('users');
|
|
304
|
+
* ```
|
|
305
|
+
*/
|
|
166
306
|
insertInto(into) {
|
|
167
307
|
return new insert_query_builder_js_1.InsertQueryBuilder({
|
|
168
308
|
tableName: into,
|
|
@@ -171,6 +311,17 @@ class RootQueryBuilder {
|
|
|
171
311
|
type: 'create',
|
|
172
312
|
}, this.#executor);
|
|
173
313
|
}
|
|
314
|
+
/**
|
|
315
|
+
* Creates a new update query builder for the specified table.
|
|
316
|
+
* @param tableName - The name of the table to update.
|
|
317
|
+
* @returns A new `UpdateQueryBuilder` instance.
|
|
318
|
+
*
|
|
319
|
+
* @example
|
|
320
|
+
* ```typescript
|
|
321
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
322
|
+
* const updateQuery = qb.update('users');
|
|
323
|
+
* ```
|
|
324
|
+
*/
|
|
174
325
|
update(tableName) {
|
|
175
326
|
return new update_query_builder_js_1.UpdateQueryBuilder({
|
|
176
327
|
tableName: tableName,
|
|
@@ -179,6 +330,17 @@ class RootQueryBuilder {
|
|
|
179
330
|
type: 'update',
|
|
180
331
|
}, this.#executor);
|
|
181
332
|
}
|
|
333
|
+
/**
|
|
334
|
+
* Creates a new delete query builder for the specified table.
|
|
335
|
+
* @param tableName - The name of the table to delete from.
|
|
336
|
+
* @returns A new `DeleteQueryBuilder` instance.
|
|
337
|
+
*
|
|
338
|
+
* @example
|
|
339
|
+
* ```typescript
|
|
340
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
341
|
+
* const deleteQuery = qb.deleteFrom('users');
|
|
342
|
+
* ```
|
|
343
|
+
*/
|
|
182
344
|
deleteFrom(tableName) {
|
|
183
345
|
return new delete_query_builder_js_1.DeleteQueryBuilder({
|
|
184
346
|
tableName: tableName,
|
|
@@ -187,9 +349,35 @@ class RootQueryBuilder {
|
|
|
187
349
|
type: 'delete',
|
|
188
350
|
}, this.#executor);
|
|
189
351
|
}
|
|
352
|
+
/**
|
|
353
|
+
* Creates a new batch query builder.
|
|
354
|
+
* @param builders - An array of query builders to execute in a batch.
|
|
355
|
+
* @returns A new `BatchQueryBuilder` instance.
|
|
356
|
+
*
|
|
357
|
+
* @example
|
|
358
|
+
* ```typescript
|
|
359
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
360
|
+
* const batchQuery = qb.batch([
|
|
361
|
+
* qb.selectFrom('users').select(['id', 'name']),
|
|
362
|
+
* qb.insertInto('users').values({ name: 'New User' }),
|
|
363
|
+
* ]);
|
|
364
|
+
* const [users, newUser] = await batchQuery.execute();
|
|
365
|
+
* ```
|
|
366
|
+
*/
|
|
190
367
|
batch(builders) {
|
|
191
368
|
return new batch_query_builder_js_1.BatchQueryBuilder(builders, this.#executor);
|
|
192
369
|
}
|
|
370
|
+
/**
|
|
371
|
+
* Creates a new aggregation query builder for the specified table.
|
|
372
|
+
* @param tableName - The name of the table to aggregate from.
|
|
373
|
+
* @returns A new `AggregationQueryBuilder` instance.
|
|
374
|
+
*
|
|
375
|
+
* @example
|
|
376
|
+
* ```typescript
|
|
377
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
378
|
+
* const aggregateQuery = qb.aggregateFrom('users');
|
|
379
|
+
* ```
|
|
380
|
+
*/
|
|
193
381
|
aggregateFrom(tableName) {
|
|
194
382
|
const node = {
|
|
195
383
|
tableName: tableName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query-builder.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,19 @@ import type { AnyDB } from './@types/internal-types.js';
|
|
|
3
3
|
import { LinkColumnNames } from './@types/query-builder.js';
|
|
4
4
|
import { Executor } from './executor.js';
|
|
5
5
|
import { QueryBuilder } from './query-builder.js';
|
|
6
|
+
/**
|
|
7
|
+
* A builder for creating subqueries on linked records.
|
|
8
|
+
* This is used internally by the `with` method on the `QueryBuilder`.
|
|
9
|
+
* @template DB - The database type.
|
|
10
|
+
* @template CurrentTableName - The name of the table the selection is starting from.
|
|
11
|
+
*/
|
|
6
12
|
export declare class SelectionBuilder<DB extends AnyDB, CurrentTableName extends keyof DB> {
|
|
7
13
|
_executor: Executor;
|
|
8
14
|
constructor(executor: Executor);
|
|
9
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Creates a new query builder for a linked table.
|
|
17
|
+
* @param from - The name of the link field to select from.
|
|
18
|
+
* @returns A new `QueryBuilder` instance for the linked table.
|
|
19
|
+
*/
|
|
20
|
+
useLink<LinkName extends LinkColumnNames<DB[CurrentTableName]> & string>(from: LinkName): QueryBuilder<DB, DB[CurrentTableName][LinkName] extends LinkColumnType<any, boolean> ? DB[CurrentTableName][LinkName]["linkedTo"] : never, object, LinkName>;
|
|
10
21
|
}
|
|
@@ -2,11 +2,22 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SelectionBuilder = void 0;
|
|
4
4
|
const query_builder_js_1 = require("./query-builder.js");
|
|
5
|
+
/**
|
|
6
|
+
* A builder for creating subqueries on linked records.
|
|
7
|
+
* This is used internally by the `with` method on the `QueryBuilder`.
|
|
8
|
+
* @template DB - The database type.
|
|
9
|
+
* @template CurrentTableName - The name of the table the selection is starting from.
|
|
10
|
+
*/
|
|
5
11
|
class SelectionBuilder {
|
|
6
12
|
_executor;
|
|
7
13
|
constructor(executor) {
|
|
8
14
|
this._executor = executor;
|
|
9
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new query builder for a linked table.
|
|
18
|
+
* @param from - The name of the link field to select from.
|
|
19
|
+
* @returns A new `QueryBuilder` instance for the linked table.
|
|
20
|
+
*/
|
|
10
21
|
useLink(from) {
|
|
11
22
|
return new query_builder_js_1.QueryBuilder({
|
|
12
23
|
field: from,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-builder.js","sourceRoot":"","sources":["../../src/selection-builder.ts"],"names":[],"mappings":";;;AAIA,yDAAkD;AAElD,MAAa,gBAAgB;IAI3B,SAAS,CAAW;IAEpB,YAAY,QAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,OAAO,CACL,IAAc;QAEd,OAAO,IAAI,+BAAY,CAQrB;YACE,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;YAClD,SAAS,EAAE,MAAM;SAClB,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"selection-builder.js","sourceRoot":"","sources":["../../src/selection-builder.ts"],"names":[],"mappings":";;;AAIA,yDAAkD;AAElD;;;;;GAKG;AACH,MAAa,gBAAgB;IAI3B,SAAS,CAAW;IAEpB,YAAY,QAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,OAAO,CACL,IAAc;QAEd,OAAO,IAAI,+BAAY,CAQrB;YACE,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;YAClD,SAAS,EAAE,MAAM;SAClB,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;CACF;AAnCD,4CAmCC"}
|
|
@@ -2,10 +2,42 @@ import type { AnyDB } from './@types/internal-types.js';
|
|
|
2
2
|
import type { Updatable, UpdateNode } from './@types/update.js';
|
|
3
3
|
import { Executor } from './executor.js';
|
|
4
4
|
import { FilterableQueryBuilder } from './where-query-builder.js';
|
|
5
|
+
/**
|
|
6
|
+
* A query builder for updating records in the database.
|
|
7
|
+
* @template DB - The database type.
|
|
8
|
+
* @template TableName - The name of the table to update.
|
|
9
|
+
*/
|
|
5
10
|
export declare class UpdateQueryBuilder<DB extends AnyDB, TableName extends keyof DB> extends FilterableQueryBuilder<DB, TableName> {
|
|
6
11
|
#private;
|
|
7
12
|
constructor(node: UpdateNode, executor: Executor);
|
|
13
|
+
/**
|
|
14
|
+
* Sets the values to update for the records that match the where clauses.
|
|
15
|
+
* @param values - An object containing the fields and their new values.
|
|
16
|
+
* @returns The `UpdateQueryBuilder` instance for chaining.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const { affectedRecords } = await qb
|
|
21
|
+
* .update('users')
|
|
22
|
+
* .set({ name: 'New Name' })
|
|
23
|
+
* .where('id', '=', 1)
|
|
24
|
+
* .execute();
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
8
27
|
set(values: Updatable<DB[TableName]>): UpdateQueryBuilder<DB, TableName>;
|
|
28
|
+
/**
|
|
29
|
+
* Executes the update query.
|
|
30
|
+
* @returns A promise that resolves with the number of affected records.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const { affectedRecords } = await qb
|
|
35
|
+
* .update('users')
|
|
36
|
+
* .set({ name: 'New Name' })
|
|
37
|
+
* .where('id', '=', 1)
|
|
38
|
+
* .execute();
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
9
41
|
execute(): Promise<{
|
|
10
42
|
affectedRecords: number;
|
|
11
43
|
}>;
|
|
@@ -2,18 +2,50 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UpdateQueryBuilder = void 0;
|
|
4
4
|
const where_query_builder_js_1 = require("./where-query-builder.js");
|
|
5
|
+
/**
|
|
6
|
+
* A query builder for updating records in the database.
|
|
7
|
+
* @template DB - The database type.
|
|
8
|
+
* @template TableName - The name of the table to update.
|
|
9
|
+
*/
|
|
5
10
|
class UpdateQueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
|
|
6
11
|
#node;
|
|
7
12
|
constructor(node, executor) {
|
|
8
13
|
super(node, executor);
|
|
9
14
|
this.#node = node;
|
|
10
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Sets the values to update for the records that match the where clauses.
|
|
18
|
+
* @param values - An object containing the fields and their new values.
|
|
19
|
+
* @returns The `UpdateQueryBuilder` instance for chaining.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const { affectedRecords } = await qb
|
|
24
|
+
* .update('users')
|
|
25
|
+
* .set({ name: 'New Name' })
|
|
26
|
+
* .where('id', '=', 1)
|
|
27
|
+
* .execute();
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
11
30
|
set(values) {
|
|
12
31
|
return new UpdateQueryBuilder({
|
|
13
32
|
...this.#node,
|
|
14
33
|
values,
|
|
15
34
|
}, this._executor);
|
|
16
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Executes the update query.
|
|
38
|
+
* @returns A promise that resolves with the number of affected records.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const { affectedRecords } = await qb
|
|
43
|
+
* .update('users')
|
|
44
|
+
* .set({ name: 'New Name' })
|
|
45
|
+
* .where('id', '=', 1)
|
|
46
|
+
* .execute();
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
17
49
|
async execute() {
|
|
18
50
|
const response = await this._executor.execute(this);
|
|
19
51
|
return response[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-query-builder.js","sourceRoot":"","sources":["../../src/update-query-builder.ts"],"names":[],"mappings":";;;AAGA,qEAAkE;AAElE,MAAa,kBAGX,SAAQ,+CAAqC;IAC7C,KAAK,CAAa;IAElB,YAAY,IAAgB,EAAE,QAAkB;QAC9C,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,GAAG,CAAC,MAAgC;QAClC,OAAO,IAAI,kBAAkB,CAC3B;YACE,GAAG,IAAI,CAAC,KAAK;YACb,MAAM;SACP,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GACZ,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAgC,IAAI,CAAC,CAAC;QAEpE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACL,MAAM,KAAK,GAAG,6DAA6D,CAAC;QAE5E,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAE3C,OAAO;YACL,KAAK;YACL,SAAS,EAAE;gBACT,QAAQ;aACT;SACF,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC7C,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;gBACvC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"update-query-builder.js","sourceRoot":"","sources":["../../src/update-query-builder.ts"],"names":[],"mappings":";;;AAGA,qEAAkE;AAElE;;;;GAIG;AACH,MAAa,kBAGX,SAAQ,+CAAqC;IAC7C,KAAK,CAAa;IAElB,YAAY,IAAgB,EAAE,QAAkB;QAC9C,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,GAAG,CAAC,MAAgC;QAClC,OAAO,IAAI,kBAAkB,CAC3B;YACE,GAAG,IAAI,CAAC,KAAK;YACb,MAAM;SACP,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GACZ,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAgC,IAAI,CAAC,CAAC;QAEpE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACL,MAAM,KAAK,GAAG,6DAA6D,CAAC;QAE5E,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAE3C,OAAO;YACL,KAAK;YACL,SAAS,EAAE;gBACT,QAAQ;aACT;SACF,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC7C,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;gBACvC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;CACF;AA9ED,gDA8EC"}
|
|
@@ -2,13 +2,72 @@ import { LinkColumnType } from '@taylordb/shared';
|
|
|
2
2
|
import { AnyDB, FilterableNode } from './@types/internal-types.js';
|
|
3
3
|
import { ColumnNames } from './@types/query-builder.js';
|
|
4
4
|
import { Executor } from './executor.js';
|
|
5
|
+
/**
|
|
6
|
+
* A base class for query builders that support filtering.
|
|
7
|
+
* It provides the `where` and `orWhere` methods.
|
|
8
|
+
* @template DB - The database type.
|
|
9
|
+
* @template TableName - The name of the table to query.
|
|
10
|
+
*/
|
|
5
11
|
export declare class FilterableQueryBuilder<DB extends AnyDB, TableName extends keyof DB> {
|
|
6
12
|
_node: FilterableNode;
|
|
7
13
|
_executor: Executor;
|
|
8
14
|
constructor(node: FilterableNode, executor: Executor);
|
|
9
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Adds a `where` clause to the query.
|
|
17
|
+
* This can be a simple condition, a nested query, or a cross-filter on a linked table.
|
|
18
|
+
*
|
|
19
|
+
* @param field - The field to filter on.
|
|
20
|
+
* @param operator - The filter operator.
|
|
21
|
+
* @param value - The value to filter by.
|
|
22
|
+
* @returns The query builder instance for chaining.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const users = await qb
|
|
27
|
+
* .selectFrom('users')
|
|
28
|
+
* .where('name', '=', 'John Doe')
|
|
29
|
+
* .execute();
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const users = await qb
|
|
35
|
+
* .selectFrom('users')
|
|
36
|
+
* .where((qb) =>
|
|
37
|
+
* qb.where('name', '=', 'John Doe').orWhere('email', '=', 'john.doe@example.com')
|
|
38
|
+
* )
|
|
39
|
+
* .execute();
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const users = await qb
|
|
45
|
+
* .selectFrom('users')
|
|
46
|
+
* .where('posts', 'hasAnyOf', (qb) => qb.where('isPublished', '=', true))
|
|
47
|
+
* .execute();
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
where<TField extends ColumnNames<DB[TableName]> & string, TOperator extends keyof DB[TableName][TField]['filters']>(field: TField, operator: TOperator, value: DB[TableName][TField] extends LinkColumnType<any, boolean> ? ((qb: FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any, boolean> ? DB[TableName][TField]['linkedTo'] : never>) => FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any, boolean> ? DB[TableName][TField]['linkedTo'] : never>) | DB[TableName][TField]['filters'][TOperator] : DB[TableName][TField]['filters'][TOperator]): this;
|
|
10
51
|
where<C extends (builder: WhereQueryBuilder<DB, TableName>) => WhereQueryBuilder<DB, TableName>>(column: C): this;
|
|
11
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Adds an `orWhere` clause to the query.
|
|
54
|
+
* This is similar to `where`, but the condition will be joined with `OR`.
|
|
55
|
+
*
|
|
56
|
+
* @param field - The field to filter on.
|
|
57
|
+
* @param operator - The filter operator.
|
|
58
|
+
* @param value - The value to filter by.
|
|
59
|
+
* @returns The query builder instance for chaining.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const users = await qb
|
|
64
|
+
* .selectFrom('users')
|
|
65
|
+
* .where('name', '=', 'John Doe')
|
|
66
|
+
* .orWhere('name', '=', 'Jane Doe')
|
|
67
|
+
* .execute();
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
orWhere<TField extends ColumnNames<DB[TableName]> & string, TOperator extends keyof DB[TableName][TField]['filters']>(field: TField, operator: TOperator, value: DB[TableName][TField] extends LinkColumnType<any, boolean> ? (qb: FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any, boolean> ? DB[TableName][TField]['linkedTo'] : never>) => FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any, boolean> ? DB[TableName][TField]['linkedTo'] : never> | DB[TableName][TField]['filters'][TOperator] : DB[TableName][TField]['filters'][TOperator]): this;
|
|
12
71
|
orWhere<C extends (builder: WhereQueryBuilder<DB, TableName>) => WhereQueryBuilder<DB, TableName>>(column: C): this;
|
|
13
72
|
}
|
|
14
73
|
export declare class WhereQueryBuilder<DB extends AnyDB, TableName extends keyof DB> extends FilterableQueryBuilder<DB, TableName> {
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WhereQueryBuilder = exports.FilterableQueryBuilder = void 0;
|
|
4
4
|
const selection_builder_js_1 = require("./selection-builder.js");
|
|
5
|
+
/**
|
|
6
|
+
* A base class for query builders that support filtering.
|
|
7
|
+
* It provides the `where` and `orWhere` methods.
|
|
8
|
+
* @template DB - The database type.
|
|
9
|
+
* @template TableName - The name of the table to query.
|
|
10
|
+
*/
|
|
5
11
|
class FilterableQueryBuilder {
|
|
6
12
|
_executor;
|
|
7
13
|
constructor(node, executor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"where-query-builder.js","sourceRoot":"","sources":["../../src/where-query-builder.ts"],"names":[],"mappings":";;;AAIA,iEAA0D;AAE1D,MAAa,sBAAsB;IAKjC,SAAS,CAAW;IAEpB,YAAY,IAAoB,EAAE,QAAkB;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;
|
|
1
|
+
{"version":3,"file":"where-query-builder.js","sourceRoot":"","sources":["../../src/where-query-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { QueryNode } from './internal-types.js';
|
|
1
|
+
import { CreateMutationMetaData, MetadataWithTableName } from '@taylordb/shared';
|
|
2
|
+
import { AnyDB, QueryNode } from './internal-types.js';
|
|
3
3
|
export type InsertNode = MetadataWithTableName<CreateMutationMetaData> & {
|
|
4
4
|
returning: (string | QueryNode)[];
|
|
5
5
|
};
|
|
6
|
-
|
|
7
|
-
[K in keyof T]
|
|
6
|
+
type RequiredKeys<T extends AnyDB[string]> = {
|
|
7
|
+
[K in keyof T]: T[K]['isRequired'] extends true ? T[K]['insert'] extends never ? never : K : never;
|
|
8
|
+
}[keyof T];
|
|
9
|
+
type OptionalKeys<T extends AnyDB[string]> = {
|
|
10
|
+
[K in keyof T]: T[K]['isRequired'] extends false ? T[K]['insert'] extends never ? never : K : never;
|
|
11
|
+
}[keyof T];
|
|
12
|
+
export type Insertable<T extends AnyDB[string]> = {
|
|
13
|
+
[K in RequiredKeys<T>]: T[K]['insert'];
|
|
14
|
+
} & {
|
|
15
|
+
[K in OptionalKeys<T>]?: T[K]['insert'];
|
|
8
16
|
};
|
|
17
|
+
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { LinkColumnType } from '@taylordb/shared';
|
|
2
2
|
export type NonLinkColumnNames<T> = {
|
|
3
|
-
[K in keyof T]: T[K] extends LinkColumnType<any> ? never : K;
|
|
3
|
+
[K in keyof T]: T[K] extends LinkColumnType<any, any> ? never : K;
|
|
4
4
|
}[keyof T];
|
|
5
5
|
export type LinkColumnNames<T> = {
|
|
6
|
-
[K in keyof T]: T[K] extends LinkColumnType<any> ? K : never;
|
|
6
|
+
[K in keyof T]: T[K] extends LinkColumnType<any, any> ? K : never;
|
|
7
7
|
}[keyof T];
|
|
8
8
|
export type ColumnNames<T> = keyof T;
|
|
@@ -2,8 +2,8 @@ import { ColumnType, LinkColumnType } from '@taylordb/shared';
|
|
|
2
2
|
import { QueryBuilder } from '../query-builder.js';
|
|
3
3
|
import { AnyDB } from './internal-types.js';
|
|
4
4
|
import { LinkColumnNames, NonLinkColumnNames } from './query-builder.js';
|
|
5
|
-
export type InferDataType<TColumn
|
|
6
|
-
export type TableShape<TTable> = {
|
|
5
|
+
export type InferDataType<TColumn extends ColumnType<any, any, any, any, any>> = TColumn['isRequired'] extends true ? TColumn['raw'] : TColumn['raw'] | undefined;
|
|
6
|
+
export type TableShape<TTable extends AnyDB[string]> = {
|
|
7
7
|
[K in keyof TTable]: InferDataType<TTable[K]>;
|
|
8
8
|
};
|
|
9
9
|
type InferSubqueryResult<TSubquery> = TSubquery extends QueryBuilder<any, any, infer TSelection, any> ? TSelection[] : never;
|
|
@@ -18,7 +18,7 @@ export type ResolveSelection<DB extends AnyDB, TName extends keyof DB, TFields e
|
|
|
18
18
|
}[number]>;
|
|
19
19
|
export type ResolveWithPlain<DB extends AnyDB, TName extends keyof DB, TRelations extends (LinkColumnNames<DB[TName]> & string) | readonly (LinkColumnNames<DB[TName]> & string)[], TCurrentSelection> = TCurrentSelection & UnionToIntersection<{
|
|
20
20
|
[K in TRelations extends readonly any[] ? TRelations[number] : TRelations]: {
|
|
21
|
-
[P in K]: TableShape<DB[DB[TName][P] extends LinkColumnType<infer L> ? L : never]>[];
|
|
21
|
+
[P in K]: TableShape<DB[DB[TName][P] extends LinkColumnType<infer L, any> ? L : never]>[];
|
|
22
22
|
};
|
|
23
23
|
}[TRelations extends readonly any[] ? TRelations[number] : TRelations]>;
|
|
24
24
|
export type ResolveWithObject<TRelations extends Record<string, (qb: any) => QueryBuilder<any, any, any, any>>, TCurrentSelection> = TCurrentSelection & {
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MetadataWithTableName, UpdateMutationMetaData } from '@taylordb/shared';
|
|
2
|
+
import { AnyDB } from './internal-types';
|
|
2
3
|
export type UpdateNode = MetadataWithTableName<UpdateMutationMetaData>;
|
|
3
|
-
|
|
4
|
-
[K in keyof T]
|
|
4
|
+
type NotUpdatableKeys<T extends AnyDB[string]> = {
|
|
5
|
+
[K in keyof T]: T[K]['update'] extends never ? K : never;
|
|
6
|
+
}[keyof T];
|
|
7
|
+
export type Updatable<T extends AnyDB[string]> = {
|
|
8
|
+
[K in keyof Omit<T, NotUpdatableKeys<T>>]?: T[K]['update'];
|
|
5
9
|
};
|
|
10
|
+
export {};
|