@taylordb/query-builder 0.9.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/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/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 +217 -0
- package/dist/cjs/query-builder.js +188 -0
- package/dist/cjs/query-builder.js.map +1 -1
- package/dist/cjs/selection-builder.d.ts +11 -0
- 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 +59 -0
- package/dist/cjs/where-query-builder.js +6 -0
- package/dist/cjs/where-query-builder.js.map +1 -1
- 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/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 +217 -0
- package/dist/esm/query-builder.js +188 -0
- package/dist/esm/query-builder.js.map +1 -1
- package/dist/esm/selection-builder.d.ts +11 -0
- 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 +59 -0
- 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 +2 -2
|
@@ -8,6 +8,13 @@ import { SelectionBuilder } from './selection-builder.js';
|
|
|
8
8
|
import { UpdateQueryBuilder } from './update-query-builder.js';
|
|
9
9
|
import { FilterableQueryBuilder } from './where-query-builder.js';
|
|
10
10
|
const DEFAULT_LIMIT = 50;
|
|
11
|
+
/**
|
|
12
|
+
* The main query builder class for constructing and executing select queries.
|
|
13
|
+
* @template DB - The database type.
|
|
14
|
+
* @template TableName - The name of the table to query.
|
|
15
|
+
* @template Selection - The type of the selected fields.
|
|
16
|
+
* @template LinkName - The name of the link field if this is a subquery.
|
|
17
|
+
*/
|
|
11
18
|
export class QueryBuilder extends FilterableQueryBuilder {
|
|
12
19
|
constructor(node, executor) {
|
|
13
20
|
super(node, executor);
|
|
@@ -16,12 +23,37 @@ export class QueryBuilder extends FilterableQueryBuilder {
|
|
|
16
23
|
pagination: { limit: DEFAULT_LIMIT, offset: 0, ...node.pagination },
|
|
17
24
|
};
|
|
18
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Selects a set of fields from the table.
|
|
28
|
+
* @param fields - An array of field names to select.
|
|
29
|
+
* @returns A new `QueryBuilder` instance with the specified fields selected.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const users = await qb
|
|
34
|
+
* .selectFrom('users')
|
|
35
|
+
* .select(['id', 'name'])
|
|
36
|
+
* .execute();
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
19
39
|
select(fields) {
|
|
20
40
|
return new QueryBuilder({
|
|
21
41
|
...this._node,
|
|
22
42
|
fields: [...this._node.fields, ...fields],
|
|
23
43
|
}, this._executor);
|
|
24
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Selects all fields from the table.
|
|
47
|
+
* @returns A new `QueryBuilder` instance with all fields selected.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const users = await qb
|
|
52
|
+
* .selectFrom('users')
|
|
53
|
+
* .selectAll()
|
|
54
|
+
* .execute();
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
25
57
|
selectAll() {
|
|
26
58
|
return new QueryBuilder({
|
|
27
59
|
...this._node,
|
|
@@ -55,21 +87,79 @@ export class QueryBuilder extends FilterableQueryBuilder {
|
|
|
55
87
|
fields: [...this._node.fields, ...newSelects],
|
|
56
88
|
}, this._executor);
|
|
57
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Sets the maximum number of records to return.
|
|
92
|
+
* @param count - The maximum number of records.
|
|
93
|
+
* @returns A new `QueryBuilder` instance with the limit applied.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const users = await qb
|
|
98
|
+
* .selectFrom('users')
|
|
99
|
+
* .select(['id', 'name'])
|
|
100
|
+
* .limit(10)
|
|
101
|
+
* .execute();
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
58
104
|
limit(count) {
|
|
59
105
|
return new QueryBuilder({
|
|
60
106
|
...this._node,
|
|
61
107
|
pagination: { ...this._node.pagination, limit: count },
|
|
62
108
|
}, this._executor);
|
|
63
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Sets the number of records to skip.
|
|
112
|
+
* @param count - The number of records to skip.
|
|
113
|
+
* @returns A new `QueryBuilder` instance with the offset applied.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* const users = await qb
|
|
118
|
+
* .selectFrom('users')
|
|
119
|
+
* .select(['id', 'name'])
|
|
120
|
+
* .offset(10)
|
|
121
|
+
* .execute();
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
64
124
|
offset(count) {
|
|
65
125
|
return new QueryBuilder({
|
|
66
126
|
...this._node,
|
|
67
127
|
pagination: { ...this._node.pagination, offset: count },
|
|
68
128
|
}, this._executor);
|
|
69
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Paginates the results.
|
|
132
|
+
* @param page - The page number to retrieve.
|
|
133
|
+
* @param limit - The number of records per page.
|
|
134
|
+
* @returns A new `QueryBuilder` instance with pagination applied.
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* const users = await qb
|
|
139
|
+
* .selectFrom('users')
|
|
140
|
+
* .select(['id', 'name'])
|
|
141
|
+
* .paginate(2, 25) // Retrieves page 2 with 25 records per page
|
|
142
|
+
* .execute();
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
70
145
|
paginate(page, limit) {
|
|
71
146
|
return this.offset((page - 1) * limit).limit(limit);
|
|
72
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Sorts the results by a specified field.
|
|
150
|
+
* @param field - The field to sort by.
|
|
151
|
+
* @param direction - The sort direction ('asc' or 'desc').
|
|
152
|
+
* @returns A new `QueryBuilder` instance with the sorting applied.
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```typescript
|
|
156
|
+
* const users = await qb
|
|
157
|
+
* .selectFrom('users')
|
|
158
|
+
* .select(['id', 'name'])
|
|
159
|
+
* .orderBy('name', 'asc')
|
|
160
|
+
* .execute();
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
73
163
|
orderBy(field, direction = 'asc') {
|
|
74
164
|
const newSorting = {
|
|
75
165
|
field: field,
|
|
@@ -80,10 +170,35 @@ export class QueryBuilder extends FilterableQueryBuilder {
|
|
|
80
170
|
sorting: [...(this._node.sorting || []), newSorting],
|
|
81
171
|
}, this._executor);
|
|
82
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Executes the select query.
|
|
175
|
+
* @returns A promise that resolves with an array of the selected records.
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```typescript
|
|
179
|
+
* const users = await qb
|
|
180
|
+
* .selectFrom('users')
|
|
181
|
+
* .select(['id', 'name'])
|
|
182
|
+
* .execute();
|
|
183
|
+
* ```
|
|
184
|
+
*/
|
|
83
185
|
async execute() {
|
|
84
186
|
const response = await this._executor.execute(this);
|
|
85
187
|
return response[0];
|
|
86
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* Executes the select query and returns the first result.
|
|
191
|
+
* @returns A promise that resolves with the first record, or `null` if no records were found.
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* const user = await qb
|
|
196
|
+
* .selectFrom('users')
|
|
197
|
+
* .where('id', '=', 1)
|
|
198
|
+
* .select(['id', 'name'])
|
|
199
|
+
* .executeTakeFirst();
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
87
202
|
async executeTakeFirst() {
|
|
88
203
|
const response = await this._executor.execute(this);
|
|
89
204
|
return response[0]?.[0] ?? null;
|
|
@@ -144,11 +259,25 @@ export class QueryBuilder extends FilterableQueryBuilder {
|
|
|
144
259
|
return node.queryType === 'root';
|
|
145
260
|
}
|
|
146
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* The root query builder class that provides entry points for all query types.
|
|
264
|
+
*/
|
|
147
265
|
export class RootQueryBuilder {
|
|
148
266
|
#executor;
|
|
149
267
|
constructor(config) {
|
|
150
268
|
this.#executor = new Executor(config.baseUrl, config.apiKey);
|
|
151
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Creates a new select query builder for the specified table.
|
|
272
|
+
* @param from - The name of the table to select from.
|
|
273
|
+
* @returns A new `QueryBuilder` instance.
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```typescript
|
|
277
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
278
|
+
* const userQuery = qb.selectFrom('users');
|
|
279
|
+
* ```
|
|
280
|
+
*/
|
|
152
281
|
selectFrom(from) {
|
|
153
282
|
return new QueryBuilder({
|
|
154
283
|
tableName: from,
|
|
@@ -158,6 +287,17 @@ export class RootQueryBuilder {
|
|
|
158
287
|
queryType: 'root',
|
|
159
288
|
}, this.#executor);
|
|
160
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* Creates a new insert query builder for the specified table.
|
|
292
|
+
* @param into - The name of the table to insert into.
|
|
293
|
+
* @returns A new `InsertQueryBuilder` instance.
|
|
294
|
+
*
|
|
295
|
+
* @example
|
|
296
|
+
* ```typescript
|
|
297
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
298
|
+
* const insertQuery = qb.insertInto('users');
|
|
299
|
+
* ```
|
|
300
|
+
*/
|
|
161
301
|
insertInto(into) {
|
|
162
302
|
return new InsertQueryBuilder({
|
|
163
303
|
tableName: into,
|
|
@@ -166,6 +306,17 @@ export class RootQueryBuilder {
|
|
|
166
306
|
type: 'create',
|
|
167
307
|
}, this.#executor);
|
|
168
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Creates a new update query builder for the specified table.
|
|
311
|
+
* @param tableName - The name of the table to update.
|
|
312
|
+
* @returns A new `UpdateQueryBuilder` instance.
|
|
313
|
+
*
|
|
314
|
+
* @example
|
|
315
|
+
* ```typescript
|
|
316
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
317
|
+
* const updateQuery = qb.update('users');
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
169
320
|
update(tableName) {
|
|
170
321
|
return new UpdateQueryBuilder({
|
|
171
322
|
tableName: tableName,
|
|
@@ -174,6 +325,17 @@ export class RootQueryBuilder {
|
|
|
174
325
|
type: 'update',
|
|
175
326
|
}, this.#executor);
|
|
176
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Creates a new delete query builder for the specified table.
|
|
330
|
+
* @param tableName - The name of the table to delete from.
|
|
331
|
+
* @returns A new `DeleteQueryBuilder` instance.
|
|
332
|
+
*
|
|
333
|
+
* @example
|
|
334
|
+
* ```typescript
|
|
335
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
336
|
+
* const deleteQuery = qb.deleteFrom('users');
|
|
337
|
+
* ```
|
|
338
|
+
*/
|
|
177
339
|
deleteFrom(tableName) {
|
|
178
340
|
return new DeleteQueryBuilder({
|
|
179
341
|
tableName: tableName,
|
|
@@ -182,9 +344,35 @@ export class RootQueryBuilder {
|
|
|
182
344
|
type: 'delete',
|
|
183
345
|
}, this.#executor);
|
|
184
346
|
}
|
|
347
|
+
/**
|
|
348
|
+
* Creates a new batch query builder.
|
|
349
|
+
* @param builders - An array of query builders to execute in a batch.
|
|
350
|
+
* @returns A new `BatchQueryBuilder` instance.
|
|
351
|
+
*
|
|
352
|
+
* @example
|
|
353
|
+
* ```typescript
|
|
354
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
355
|
+
* const batchQuery = qb.batch([
|
|
356
|
+
* qb.selectFrom('users').select(['id', 'name']),
|
|
357
|
+
* qb.insertInto('users').values({ name: 'New User' }),
|
|
358
|
+
* ]);
|
|
359
|
+
* const [users, newUser] = await batchQuery.execute();
|
|
360
|
+
* ```
|
|
361
|
+
*/
|
|
185
362
|
batch(builders) {
|
|
186
363
|
return new BatchQueryBuilder(builders, this.#executor);
|
|
187
364
|
}
|
|
365
|
+
/**
|
|
366
|
+
* Creates a new aggregation query builder for the specified table.
|
|
367
|
+
* @param tableName - The name of the table to aggregate from.
|
|
368
|
+
* @returns A new `AggregationQueryBuilder` instance.
|
|
369
|
+
*
|
|
370
|
+
* @example
|
|
371
|
+
* ```typescript
|
|
372
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
373
|
+
* const aggregateQuery = qb.aggregateFrom('users');
|
|
374
|
+
* ```
|
|
375
|
+
*/
|
|
188
376
|
aggregateFrom(tableName) {
|
|
189
377
|
const node = {
|
|
190
378
|
tableName: tableName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAGL,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,OAAO,YAKX,SAAQ,sBAAqC;IAG7C,YAAY,IAAe,EAAE,QAAkB;QAC7C,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG;YACX,GAAG,IAAI;YACP,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;SACpE,CAAC;IACJ,CAAC;IAED,MAAM,CACJ,MAAe;QAMf,OAAO,IAAI,YAAY,CACrB;YACE,GAAG,IAAI,CAAC,KAAK;YACb,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;SAC7B,EACd,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,SAAS;QAOP,OAAO,IAAI,YAAY,CACrB;YACE,GAAG,IAAI,CAAC,KAAK;YACb,MAAM,EAAE,CAAC,GAAG,CAAC;SACD,EACd,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;
|
|
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);
|
|
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
|
+
*/
|
|
9
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
|
}
|
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import { QueryBuilder } from './query-builder.js';
|
|
2
|
+
/**
|
|
3
|
+
* A builder for creating subqueries on linked records.
|
|
4
|
+
* This is used internally by the `with` method on the `QueryBuilder`.
|
|
5
|
+
* @template DB - The database type.
|
|
6
|
+
* @template CurrentTableName - The name of the table the selection is starting from.
|
|
7
|
+
*/
|
|
2
8
|
export class SelectionBuilder {
|
|
3
9
|
_executor;
|
|
4
10
|
constructor(executor) {
|
|
5
11
|
this._executor = executor;
|
|
6
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates a new query builder for a linked table.
|
|
15
|
+
* @param from - The name of the link field to select from.
|
|
16
|
+
* @returns A new `QueryBuilder` instance for the linked table.
|
|
17
|
+
*/
|
|
7
18
|
useLink(from) {
|
|
8
19
|
return new QueryBuilder({
|
|
9
20
|
field: from,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-builder.js","sourceRoot":"","sources":["../../src/selection-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,gBAAgB;IAI3B,SAAS,CAAW;IAEpB,YAAY,QAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,OAAO,CACL,IAAc;QAEd,OAAO,IAAI,YAAY,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,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,OAAO,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,YAAY,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"}
|
|
@@ -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
|
}>;
|
|
@@ -1,16 +1,48 @@
|
|
|
1
1
|
import { FilterableQueryBuilder } from './where-query-builder.js';
|
|
2
|
+
/**
|
|
3
|
+
* A query builder for updating records in the database.
|
|
4
|
+
* @template DB - The database type.
|
|
5
|
+
* @template TableName - The name of the table to update.
|
|
6
|
+
*/
|
|
2
7
|
export class UpdateQueryBuilder extends FilterableQueryBuilder {
|
|
3
8
|
#node;
|
|
4
9
|
constructor(node, executor) {
|
|
5
10
|
super(node, executor);
|
|
6
11
|
this.#node = node;
|
|
7
12
|
}
|
|
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) {
|
|
9
28
|
return new UpdateQueryBuilder({
|
|
10
29
|
...this.#node,
|
|
11
30
|
values,
|
|
12
31
|
}, this._executor);
|
|
13
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Executes the update query.
|
|
35
|
+
* @returns A promise that resolves with the number of affected records.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const { affectedRecords } = await qb
|
|
40
|
+
* .update('users')
|
|
41
|
+
* .set({ name: 'New Name' })
|
|
42
|
+
* .where('id', '=', 1)
|
|
43
|
+
* .execute();
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
14
46
|
async execute() {
|
|
15
47
|
const response = await this._executor.execute(this);
|
|
16
48
|
return response[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-query-builder.js","sourceRoot":"","sources":["../../src/update-query-builder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,OAAO,kBAGX,SAAQ,sBAAqC;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,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;;GAIG;AACH,MAAM,OAAO,kBAGX,SAAQ,sBAAqC;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"}
|
|
@@ -2,12 +2,71 @@ 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);
|
|
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
|
+
*/
|
|
9
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;
|
|
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
|
+
*/
|
|
11
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
|
}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { SelectionBuilder } from './selection-builder.js';
|
|
2
|
+
/**
|
|
3
|
+
* A base class for query builders that support filtering.
|
|
4
|
+
* It provides the `where` and `orWhere` methods.
|
|
5
|
+
* @template DB - The database type.
|
|
6
|
+
* @template TableName - The name of the table to query.
|
|
7
|
+
*/
|
|
2
8
|
export class FilterableQueryBuilder {
|
|
3
9
|
_executor;
|
|
4
10
|
constructor(node, executor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"where-query-builder.js","sourceRoot":"","sources":["../../src/where-query-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,OAAO,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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"}
|