@taylordb/query-builder 0.9.0 → 0.9.2
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/__tests__/query-builder.spec.js +126 -23
- package/dist/cjs/__tests__/query-builder.spec.js.map +1 -1
- 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.d.ts +4 -1
- package/dist/cjs/executor.js +20 -35
- 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 +224 -5
- package/dist/cjs/query-builder.js +219 -5
- 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/{subscription-manager.d.ts → socket-connection.d.ts} +5 -4
- package/dist/cjs/{subscription-manager.js → socket-connection.js} +55 -9
- package/dist/cjs/socket-connection.js.map +1 -0
- 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/cjs/with-resolver.d.ts +5 -0
- package/dist/cjs/with-resolver.js +17 -0
- package/dist/cjs/with-resolver.js.map +1 -0
- package/dist/esm/__tests__/query-builder.spec.js +126 -23
- package/dist/esm/__tests__/query-builder.spec.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/executor.d.ts +4 -1
- package/dist/esm/executor.js +20 -35
- 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 +224 -5
- package/dist/esm/query-builder.js +217 -4
- 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/{subscription-manager.d.ts → socket-connection.d.ts} +5 -4
- package/dist/esm/{subscription-manager.js → socket-connection.js} +53 -7
- package/dist/esm/socket-connection.js.map +1 -0
- 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/esm/with-resolver.d.ts +5 -0
- package/dist/esm/with-resolver.js +14 -0
- package/dist/esm/with-resolver.js.map +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +4 -2
- package/dist/cjs/subscription-manager.js.map +0 -1
- package/dist/esm/subscription-manager.js.map +0 -1
|
@@ -9,22 +9,166 @@ import { Executor } from './executor.js';
|
|
|
9
9
|
import { InsertQueryBuilder } from './insert-query-builder.js';
|
|
10
10
|
import { UpdateQueryBuilder } from './update-query-builder.js';
|
|
11
11
|
import { FilterableQueryBuilder } from './where-query-builder.js';
|
|
12
|
+
/**
|
|
13
|
+
* The main query builder class for constructing and executing select queries.
|
|
14
|
+
* @template DB - The database type.
|
|
15
|
+
* @template TableName - The name of the table to query.
|
|
16
|
+
* @template Selection - The type of the selected fields.
|
|
17
|
+
* @template LinkName - The name of the link field if this is a subquery.
|
|
18
|
+
*/
|
|
12
19
|
export declare class QueryBuilder<DB extends AnyDB, TableName extends keyof DB, Selection = object, LinkName = null> extends FilterableQueryBuilder<DB, TableName> {
|
|
13
20
|
_node: QueryNode;
|
|
14
21
|
constructor(node: QueryNode, executor: Executor);
|
|
22
|
+
/**
|
|
23
|
+
* Selects a set of fields from the table.
|
|
24
|
+
* @param fields - An array of field names to select.
|
|
25
|
+
* @returns A new `QueryBuilder` instance with the specified fields selected.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const users = await qb
|
|
30
|
+
* .selectFrom('users')
|
|
31
|
+
* .select(['id', 'name'])
|
|
32
|
+
* .execute();
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
15
35
|
select<const TFields extends readonly NonLinkColumnNames<DB[TableName]>[]>(fields: TFields): QueryBuilder<DB, TableName, ResolveSelection<DB, TableName, TFields, Selection>>;
|
|
36
|
+
/**
|
|
37
|
+
* Selects all fields from the table.
|
|
38
|
+
* @returns A new `QueryBuilder` instance with all fields selected.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const users = await qb
|
|
43
|
+
* .selectFrom('users')
|
|
44
|
+
* .selectAll()
|
|
45
|
+
* .execute();
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
16
48
|
selectAll(): QueryBuilder<DB, TableName, Selection & {
|
|
17
49
|
[K in keyof DB[TableName]]: InferDataType<DB[TableName][K]>;
|
|
18
50
|
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Includes related records from a linked table.
|
|
53
|
+
* This method has two overloads:
|
|
54
|
+
* 1. Pass an array of link field names to include all fields from the related records.
|
|
55
|
+
* 2. Pass an object to specify subqueries for each link field.
|
|
56
|
+
*
|
|
57
|
+
* @param relations - The relations to include.
|
|
58
|
+
* @returns A new `QueryBuilder` instance with the specified relations included.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const usersWithPosts = await qb
|
|
63
|
+
* .selectFrom('users')
|
|
64
|
+
* .select(['id', 'name'])
|
|
65
|
+
* .with(['posts']) // Assuming 'posts' is a link field on the 'users' table
|
|
66
|
+
* .execute();
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const usersWithPublishedPosts = await qb
|
|
72
|
+
* .selectFrom('users')
|
|
73
|
+
* .select(['id', 'name'])
|
|
74
|
+
* .with({
|
|
75
|
+
* posts: (qb) => qb.select(['title', 'content']).where('isPublished', '=', true),
|
|
76
|
+
* })
|
|
77
|
+
* .execute();
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
19
80
|
with<const TArg extends (LinkColumnNames<DB[TableName]> & string) | readonly (LinkColumnNames<DB[TableName]> & string)[]>(relations: TArg): QueryBuilder<DB, TableName, ResolveWithPlain<DB, TableName, TArg, Selection>>;
|
|
20
81
|
with<const TArg extends {
|
|
21
82
|
[K in LinkColumnNames<DB[TableName]>]?: (qb: QueryBuilder<DB, DB[TableName][K] extends LinkColumnType<any, boolean> ? DB[TableName][K]['linkedTo'] : never, object, K>) => QueryBuilder<DB, any, any, any>;
|
|
22
83
|
}>(relations: TArg): QueryBuilder<DB, TableName, ResolveWithObject<TArg, Selection>>;
|
|
84
|
+
/**
|
|
85
|
+
* Sets the maximum number of records to return.
|
|
86
|
+
* @param count - The maximum number of records.
|
|
87
|
+
* @returns A new `QueryBuilder` instance with the limit applied.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* const users = await qb
|
|
92
|
+
* .selectFrom('users')
|
|
93
|
+
* .select(['id', 'name'])
|
|
94
|
+
* .limit(10)
|
|
95
|
+
* .execute();
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
23
98
|
limit(count: number): QueryBuilder<DB, TableName, Selection, LinkName>;
|
|
99
|
+
/**
|
|
100
|
+
* Sets the number of records to skip.
|
|
101
|
+
* @param count - The number of records to skip.
|
|
102
|
+
* @returns A new `QueryBuilder` instance with the offset applied.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* const users = await qb
|
|
107
|
+
* .selectFrom('users')
|
|
108
|
+
* .select(['id', 'name'])
|
|
109
|
+
* .offset(10)
|
|
110
|
+
* .execute();
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
24
113
|
offset(count: number): QueryBuilder<DB, TableName, Selection, LinkName>;
|
|
114
|
+
/**
|
|
115
|
+
* Paginates the results.
|
|
116
|
+
* @param page - The page number to retrieve.
|
|
117
|
+
* @param limit - The number of records per page.
|
|
118
|
+
* @returns A new `QueryBuilder` instance with pagination applied.
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```typescript
|
|
122
|
+
* const users = await qb
|
|
123
|
+
* .selectFrom('users')
|
|
124
|
+
* .select(['id', 'name'])
|
|
125
|
+
* .paginate(2, 25) // Retrieves page 2 with 25 records per page
|
|
126
|
+
* .execute();
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
25
129
|
paginate(page: number, limit: number): QueryBuilder<DB, TableName, Selection, LinkName>;
|
|
130
|
+
/**
|
|
131
|
+
* Sorts the results by a specified field.
|
|
132
|
+
* @param field - The field to sort by.
|
|
133
|
+
* @param direction - The sort direction ('asc' or 'desc').
|
|
134
|
+
* @returns A new `QueryBuilder` instance with the sorting applied.
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* const users = await qb
|
|
139
|
+
* .selectFrom('users')
|
|
140
|
+
* .select(['id', 'name'])
|
|
141
|
+
* .orderBy('name', 'asc')
|
|
142
|
+
* .execute();
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
26
145
|
orderBy(field: keyof DB[TableName], direction?: 'asc' | 'desc'): QueryBuilder<DB, TableName, Selection, LinkName>;
|
|
146
|
+
/**
|
|
147
|
+
* Executes the select query.
|
|
148
|
+
* @returns A promise that resolves with an array of the selected records.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* const users = await qb
|
|
153
|
+
* .selectFrom('users')
|
|
154
|
+
* .select(['id', 'name'])
|
|
155
|
+
* .execute();
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
27
158
|
execute(): Promise<Selection[]>;
|
|
159
|
+
/**
|
|
160
|
+
* Executes the select query and returns the first result.
|
|
161
|
+
* @returns A promise that resolves with the first record, or `null` if no records were found.
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```typescript
|
|
165
|
+
* const user = await qb
|
|
166
|
+
* .selectFrom('users')
|
|
167
|
+
* .where('id', '=', 1)
|
|
168
|
+
* .select(['id', 'name'])
|
|
169
|
+
* .executeTakeFirst();
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
28
172
|
executeTakeFirst(): Promise<Selection | null>;
|
|
29
173
|
subscribe(callback: (result: Selection[]) => void): Promise<{
|
|
30
174
|
unsubscribe: () => Promise<void>;
|
|
@@ -37,19 +181,94 @@ export declare class QueryBuilder<DB extends AnyDB, TableName extends keyof DB,
|
|
|
37
181
|
isSelectionQueryNode(node: QueryNode): node is SelectionQueryNode;
|
|
38
182
|
isRootQueryNode(node: QueryNode): node is RootQueryNode;
|
|
39
183
|
}
|
|
40
|
-
|
|
184
|
+
/**
|
|
185
|
+
* The root query builder class that provides entry points for all query types.
|
|
186
|
+
*/
|
|
187
|
+
export declare class BaseRootQueryBuilder<DB extends AnyDB> {
|
|
41
188
|
#private;
|
|
42
|
-
constructor(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
189
|
+
constructor(executor: Executor);
|
|
190
|
+
/**
|
|
191
|
+
* Creates a new select query builder for the specified table.
|
|
192
|
+
* @param from - The name of the table to select from.
|
|
193
|
+
* @returns A new `QueryBuilder` instance.
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```typescript
|
|
197
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
198
|
+
* const userQuery = qb.selectFrom('users');
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
46
201
|
selectFrom<TableName extends keyof Omit<DB, 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(from: TableName): QueryBuilder<DB, TableName>;
|
|
202
|
+
/**
|
|
203
|
+
* Creates a new insert query builder for the specified table.
|
|
204
|
+
* @param into - The name of the table to insert into.
|
|
205
|
+
* @returns A new `InsertQueryBuilder` instance.
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```typescript
|
|
209
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
210
|
+
* const insertQuery = qb.insertInto('users');
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
47
213
|
insertInto<TableName extends keyof Omit<DB, 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(into: TableName): InsertQueryBuilder<DB, TableName>;
|
|
214
|
+
/**
|
|
215
|
+
* Creates a new update query builder for the specified table.
|
|
216
|
+
* @param tableName - The name of the table to update.
|
|
217
|
+
* @returns A new `UpdateQueryBuilder` instance.
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
222
|
+
* const updateQuery = qb.update('users');
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
48
225
|
update<TableName extends keyof Omit<DB, 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): UpdateQueryBuilder<DB, TableName>;
|
|
226
|
+
/**
|
|
227
|
+
* Creates a new delete query builder for the specified table.
|
|
228
|
+
* @param tableName - The name of the table to delete from.
|
|
229
|
+
* @returns A new `DeleteQueryBuilder` instance.
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
* ```typescript
|
|
233
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
234
|
+
* const deleteQuery = qb.deleteFrom('users');
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
49
237
|
deleteFrom<TableName extends keyof Omit<DB, 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): DeleteQueryBuilder<DB, TableName>;
|
|
238
|
+
/**
|
|
239
|
+
* Creates a new batch query builder.
|
|
240
|
+
* @param builders - An array of query builders to execute in a batch.
|
|
241
|
+
* @returns A new `BatchQueryBuilder` instance.
|
|
242
|
+
*
|
|
243
|
+
* @example
|
|
244
|
+
* ```typescript
|
|
245
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
246
|
+
* const batchQuery = qb.batch([
|
|
247
|
+
* qb.selectFrom('users').select(['id', 'name']),
|
|
248
|
+
* qb.insertInto('users').values({ name: 'New User' }),
|
|
249
|
+
* ]);
|
|
250
|
+
* const [users, newUser] = await batchQuery.execute();
|
|
251
|
+
* ```
|
|
252
|
+
*/
|
|
50
253
|
batch<const TBuilders extends readonly AnyQueryBuilder[]>(builders: TBuilders): AreAllBuildersSubscribable<TBuilders> extends true ? BatchQueryBuilder<TBuilders> : Omit<BatchQueryBuilder<TBuilders>, 'subscribe'>;
|
|
254
|
+
/**
|
|
255
|
+
* Creates a new aggregation query builder for the specified table.
|
|
256
|
+
* @param tableName - The name of the table to aggregate from.
|
|
257
|
+
* @returns A new `AggregationQueryBuilder` instance.
|
|
258
|
+
*
|
|
259
|
+
* @example
|
|
260
|
+
* ```typescript
|
|
261
|
+
* const qb = createQueryBuilder<MyDatabase>({ ... });
|
|
262
|
+
* const aggregateQuery = qb.aggregateFrom('users');
|
|
263
|
+
* ```
|
|
264
|
+
*/
|
|
51
265
|
aggregateFrom<TableName extends keyof Omit<DB, 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): AggregationQueryBuilder<DB, TableName>;
|
|
52
266
|
}
|
|
267
|
+
export declare class RootQueryBuilder<DB extends AnyDB> extends BaseRootQueryBuilder<DB> {
|
|
268
|
+
#private;
|
|
269
|
+
constructor(executor: Executor);
|
|
270
|
+
transaction<T>(callback: (qb: BaseRootQueryBuilder<DB>) => Promise<T>): Promise<T>;
|
|
271
|
+
}
|
|
53
272
|
export declare function createQueryBuilder<DB extends AnyDB>(config: {
|
|
54
273
|
baseUrl: string;
|
|
55
274
|
apiKey: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RootQueryBuilder = exports.QueryBuilder = void 0;
|
|
3
|
+
exports.RootQueryBuilder = exports.BaseRootQueryBuilder = exports.QueryBuilder = void 0;
|
|
4
4
|
exports.createQueryBuilder = createQueryBuilder;
|
|
5
5
|
const zod_1 = require("zod");
|
|
6
6
|
const aggregation_query_builder_js_1 = require("./aggregation-query-builder.js");
|
|
@@ -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;
|
|
152
|
-
|
|
267
|
+
/**
|
|
268
|
+
* The root query builder class that provides entry points for all query types.
|
|
269
|
+
*/
|
|
270
|
+
class BaseRootQueryBuilder {
|
|
153
271
|
#executor;
|
|
154
|
-
constructor(
|
|
155
|
-
this.#executor =
|
|
272
|
+
constructor(executor) {
|
|
273
|
+
this.#executor = executor;
|
|
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,
|
|
@@ -201,6 +389,31 @@ class RootQueryBuilder {
|
|
|
201
389
|
return new aggregation_query_builder_js_1.AggregationQueryBuilder(node, this.#executor);
|
|
202
390
|
}
|
|
203
391
|
}
|
|
392
|
+
exports.BaseRootQueryBuilder = BaseRootQueryBuilder;
|
|
393
|
+
class RootQueryBuilder extends BaseRootQueryBuilder {
|
|
394
|
+
#executor;
|
|
395
|
+
constructor(executor) {
|
|
396
|
+
super(executor);
|
|
397
|
+
this.#executor = executor;
|
|
398
|
+
}
|
|
399
|
+
async transaction(callback) {
|
|
400
|
+
if (this.#executor.isInTransaction) {
|
|
401
|
+
throw new Error('Nested transactions are not supported.');
|
|
402
|
+
}
|
|
403
|
+
const { startTransaction: transactionId } = await this.#executor.rawRequest('mutation { startTransaction }', {});
|
|
404
|
+
const transactionalExecutor = this.#executor.withTransactionId(transactionId);
|
|
405
|
+
const transactionalQb = new BaseRootQueryBuilder(transactionalExecutor);
|
|
406
|
+
try {
|
|
407
|
+
const result = await callback(transactionalQb);
|
|
408
|
+
await transactionalExecutor.rawRequest('mutation { commitTransaction }', {});
|
|
409
|
+
return result;
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
await transactionalExecutor.rawRequest('mutation { rollbackTransaction }', {});
|
|
413
|
+
throw error;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
204
417
|
exports.RootQueryBuilder = RootQueryBuilder;
|
|
205
418
|
const QBConfigSchema = zod_1.z.object({
|
|
206
419
|
baseUrl: zod_1.z.string().url(),
|
|
@@ -208,6 +421,7 @@ const QBConfigSchema = zod_1.z.object({
|
|
|
208
421
|
});
|
|
209
422
|
function createQueryBuilder(config) {
|
|
210
423
|
QBConfigSchema.parse(config);
|
|
211
|
-
|
|
424
|
+
const executor = new executor_js_1.Executor(config.baseUrl, config.apiKey);
|
|
425
|
+
return new RootQueryBuilder(executor);
|
|
212
426
|
}
|
|
213
427
|
//# sourceMappingURL=query-builder.js.map
|
|
@@ -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);
|
|
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
|
}
|
|
@@ -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"}
|