kysely 0.3.4 → 0.3.9
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/.prettierignore +1 -0
- package/README.md +9 -0
- package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
- package/dist/cjs/driver/driver-config.d.ts +6 -0
- package/dist/cjs/index.d.ts +11 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/kysely.d.ts +25 -0
- package/dist/cjs/kysely.js +27 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +2 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +4 -2
- package/dist/cjs/operation-node/select-query-node.js +9 -1
- package/dist/cjs/parser/filter-parser.d.ts +6 -7
- package/dist/cjs/parser/filter-parser.js +10 -19
- package/dist/cjs/parser/insert-values-parser.d.ts +9 -1
- package/dist/cjs/parser/insert-values-parser.js +9 -5
- package/dist/cjs/parser/join-parser.d.ts +2 -2
- package/dist/cjs/parser/join-parser.js +1 -1
- package/dist/cjs/parser/mutation-parser.d.ts +2 -3
- package/dist/cjs/parser/reference-parser.d.ts +8 -3
- package/dist/cjs/parser/returning-parser.d.ts +2 -2
- package/dist/cjs/parser/select-parser.d.ts +6 -5
- package/dist/cjs/parser/select-parser.js +1 -1
- package/dist/cjs/parser/table-parser.d.ts +2 -2
- package/dist/cjs/parser/value-parser.d.ts +6 -7
- package/dist/cjs/parser/value-parser.js +3 -1
- package/dist/cjs/parser/with-parser.d.ts +2 -1
- package/dist/cjs/query-builder/join-builder.d.ts +9 -9
- package/dist/cjs/query-builder/join-builder.js +8 -8
- package/dist/cjs/query-builder/query-builder.d.ts +202 -106
- package/dist/cjs/query-builder/query-builder.js +44 -25
- package/dist/cjs/query-builder/type-utils.d.ts +23 -6
- package/dist/cjs/query-compiler/default-query-compiler.js +7 -6
- package/dist/cjs/query-creator.d.ts +2 -0
- package/dist/cjs/query-creator.js +2 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +3 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +3 -3
- package/dist/cjs/util/generated-placeholder.d.ts +3 -0
- package/dist/cjs/util/generated-placeholder.js +11 -0
- package/dist/cjs/util/object-utils.d.ts +1 -0
- package/dist/cjs/util/object-utils.js +2 -1
- package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
- package/dist/esm/driver/driver-config.d.ts +6 -0
- package/dist/esm/index.d.ts +11 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/kysely.d.ts +25 -0
- package/dist/esm/kysely.js +27 -0
- package/dist/esm/operation-node/operation-node-transformer.js +2 -1
- package/dist/esm/operation-node/select-query-node.d.ts +4 -2
- package/dist/esm/operation-node/select-query-node.js +9 -1
- package/dist/esm/parser/filter-parser.d.ts +6 -7
- package/dist/esm/parser/filter-parser.js +5 -14
- package/dist/esm/parser/insert-values-parser.d.ts +9 -1
- package/dist/esm/parser/insert-values-parser.js +7 -3
- package/dist/esm/parser/join-parser.d.ts +2 -2
- package/dist/esm/parser/join-parser.js +2 -2
- package/dist/esm/parser/mutation-parser.d.ts +2 -3
- package/dist/esm/parser/reference-parser.d.ts +8 -3
- package/dist/esm/parser/reference-parser.js +1 -1
- package/dist/esm/parser/returning-parser.d.ts +2 -2
- package/dist/esm/parser/select-parser.d.ts +6 -5
- package/dist/esm/parser/select-parser.js +2 -2
- package/dist/esm/parser/table-parser.d.ts +2 -2
- package/dist/esm/parser/value-parser.d.ts +6 -7
- package/dist/esm/parser/value-parser.js +4 -2
- package/dist/esm/parser/with-parser.d.ts +2 -1
- package/dist/esm/query-builder/join-builder.d.ts +9 -9
- package/dist/esm/query-builder/join-builder.js +9 -9
- package/dist/esm/query-builder/query-builder.d.ts +202 -106
- package/dist/esm/query-builder/query-builder.js +46 -27
- package/dist/esm/query-builder/type-utils.d.ts +23 -6
- package/dist/esm/query-compiler/default-query-compiler.js +7 -6
- package/dist/esm/query-creator.d.ts +2 -0
- package/dist/esm/query-creator.js +2 -0
- package/dist/esm/schema/alter-table-builder.d.ts +3 -2
- package/dist/esm/schema/column-definition-builder.d.ts +3 -3
- package/dist/esm/util/generated-placeholder.d.ts +3 -0
- package/dist/esm/util/generated-placeholder.js +7 -0
- package/dist/esm/util/object-utils.d.ts +1 -0
- package/dist/esm/util/object-utils.js +1 -1
- package/package.json +2 -2
|
@@ -45,7 +45,7 @@ class QueryBuilder {
|
|
|
45
45
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
46
46
|
return new QueryBuilder({
|
|
47
47
|
executor: this.#executor,
|
|
48
|
-
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'and', filter_parser_js_1.
|
|
48
|
+
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'and', filter_parser_js_1.parseFilter('Where', args)),
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
@@ -75,7 +75,8 @@ class QueryBuilder {
|
|
|
75
75
|
* Usage in a subquery:
|
|
76
76
|
*
|
|
77
77
|
* ```ts
|
|
78
|
-
* db
|
|
78
|
+
* const persons = await db
|
|
79
|
+
* .selectFrom('person')
|
|
79
80
|
* .selectAll('person')
|
|
80
81
|
* .select((qb) => qb
|
|
81
82
|
* .subQuery('pet')
|
|
@@ -84,6 +85,7 @@ class QueryBuilder {
|
|
|
84
85
|
* .limit(1)
|
|
85
86
|
* .as('pet_name')
|
|
86
87
|
* )
|
|
88
|
+
* .execute()
|
|
87
89
|
* ```
|
|
88
90
|
*
|
|
89
91
|
* The generated SQL (postgresql):
|
|
@@ -93,21 +95,22 @@ class QueryBuilder {
|
|
|
93
95
|
* select "name"
|
|
94
96
|
* from "pet"
|
|
95
97
|
* where "pet"."owner_id" = "person"."id"
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
+
* limit $1
|
|
99
|
+
* ) as "pet_name"
|
|
100
|
+
* from "person"
|
|
98
101
|
*/
|
|
99
102
|
whereRef(lhs, op, rhs) {
|
|
100
103
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
101
104
|
return new QueryBuilder({
|
|
102
105
|
executor: this.#executor,
|
|
103
|
-
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'and', filter_parser_js_1.
|
|
106
|
+
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'and', filter_parser_js_1.parseReferenceFilter(lhs, op, rhs)),
|
|
104
107
|
});
|
|
105
108
|
}
|
|
106
109
|
orWhere(...args) {
|
|
107
110
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
108
111
|
return new QueryBuilder({
|
|
109
112
|
executor: this.#executor,
|
|
110
|
-
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'or', filter_parser_js_1.
|
|
113
|
+
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'or', filter_parser_js_1.parseFilter('Where', args)),
|
|
111
114
|
});
|
|
112
115
|
}
|
|
113
116
|
/**
|
|
@@ -120,7 +123,7 @@ class QueryBuilder {
|
|
|
120
123
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
121
124
|
return new QueryBuilder({
|
|
122
125
|
executor: this.#executor,
|
|
123
|
-
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'or', filter_parser_js_1.
|
|
126
|
+
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'or', filter_parser_js_1.parseReferenceFilter(lhs, op, rhs)),
|
|
124
127
|
});
|
|
125
128
|
}
|
|
126
129
|
/**
|
|
@@ -132,7 +135,8 @@ class QueryBuilder {
|
|
|
132
135
|
* The query below selets all persons that own a pet named Catto:
|
|
133
136
|
*
|
|
134
137
|
* ```ts
|
|
135
|
-
* db
|
|
138
|
+
* const persons = await db
|
|
139
|
+
* .selectFrom('person')
|
|
136
140
|
* .selectAll()
|
|
137
141
|
* .whereExists((qb) => qb
|
|
138
142
|
* .subQuery('pet')
|
|
@@ -140,6 +144,7 @@ class QueryBuilder {
|
|
|
140
144
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
141
145
|
* .where('pet.name', '=', 'Catto')
|
|
142
146
|
* )
|
|
147
|
+
* .execute()
|
|
143
148
|
* ```
|
|
144
149
|
*
|
|
145
150
|
* The generated SQL (postgresql):
|
|
@@ -184,7 +189,7 @@ class QueryBuilder {
|
|
|
184
189
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
185
190
|
return new QueryBuilder({
|
|
186
191
|
executor: this.#executor,
|
|
187
|
-
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'and', filter_parser_js_1.
|
|
192
|
+
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'and', filter_parser_js_1.parseExistExpression('exists', arg)),
|
|
188
193
|
});
|
|
189
194
|
}
|
|
190
195
|
/**
|
|
@@ -194,7 +199,7 @@ class QueryBuilder {
|
|
|
194
199
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
195
200
|
return new QueryBuilder({
|
|
196
201
|
executor: this.#executor,
|
|
197
|
-
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'and', filter_parser_js_1.
|
|
202
|
+
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'and', filter_parser_js_1.parseExistExpression('not exists', arg)),
|
|
198
203
|
});
|
|
199
204
|
}
|
|
200
205
|
/**
|
|
@@ -204,7 +209,7 @@ class QueryBuilder {
|
|
|
204
209
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
205
210
|
return new QueryBuilder({
|
|
206
211
|
executor: this.#executor,
|
|
207
|
-
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'or', filter_parser_js_1.
|
|
212
|
+
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'or', filter_parser_js_1.parseExistExpression('exists', arg)),
|
|
208
213
|
});
|
|
209
214
|
}
|
|
210
215
|
/**
|
|
@@ -214,14 +219,14 @@ class QueryBuilder {
|
|
|
214
219
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
215
220
|
return new QueryBuilder({
|
|
216
221
|
executor: this.#executor,
|
|
217
|
-
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'or', filter_parser_js_1.
|
|
222
|
+
queryNode: query_node_js_1.queryNode.cloneWithWhere(this.#queryNode, 'or', filter_parser_js_1.parseExistExpression('not exists', arg)),
|
|
218
223
|
});
|
|
219
224
|
}
|
|
220
225
|
having(...args) {
|
|
221
226
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
222
227
|
return new QueryBuilder({
|
|
223
228
|
executor: this.#executor,
|
|
224
|
-
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'and', filter_parser_js_1.
|
|
229
|
+
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'and', filter_parser_js_1.parseFilter('Having', args)),
|
|
225
230
|
});
|
|
226
231
|
}
|
|
227
232
|
/**
|
|
@@ -232,14 +237,14 @@ class QueryBuilder {
|
|
|
232
237
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
233
238
|
return new QueryBuilder({
|
|
234
239
|
executor: this.#executor,
|
|
235
|
-
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'and', filter_parser_js_1.
|
|
240
|
+
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'and', filter_parser_js_1.parseReferenceFilter(lhs, op, rhs)),
|
|
236
241
|
});
|
|
237
242
|
}
|
|
238
243
|
orHaving(...args) {
|
|
239
244
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
240
245
|
return new QueryBuilder({
|
|
241
246
|
executor: this.#executor,
|
|
242
|
-
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'or', filter_parser_js_1.
|
|
247
|
+
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'or', filter_parser_js_1.parseFilter('Having', args)),
|
|
243
248
|
});
|
|
244
249
|
}
|
|
245
250
|
/**
|
|
@@ -250,7 +255,7 @@ class QueryBuilder {
|
|
|
250
255
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
251
256
|
return new QueryBuilder({
|
|
252
257
|
executor: this.#executor,
|
|
253
|
-
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'or', filter_parser_js_1.
|
|
258
|
+
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'or', filter_parser_js_1.parseReferenceFilter(lhs, op, rhs)),
|
|
254
259
|
});
|
|
255
260
|
}
|
|
256
261
|
/**
|
|
@@ -261,7 +266,7 @@ class QueryBuilder {
|
|
|
261
266
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
262
267
|
return new QueryBuilder({
|
|
263
268
|
executor: this.#executor,
|
|
264
|
-
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'and', filter_parser_js_1.
|
|
269
|
+
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'and', filter_parser_js_1.parseExistExpression('exists', arg)),
|
|
265
270
|
});
|
|
266
271
|
}
|
|
267
272
|
/**
|
|
@@ -272,7 +277,7 @@ class QueryBuilder {
|
|
|
272
277
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
273
278
|
return new QueryBuilder({
|
|
274
279
|
executor: this.#executor,
|
|
275
|
-
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'and', filter_parser_js_1.
|
|
280
|
+
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'and', filter_parser_js_1.parseExistExpression('not exists', arg)),
|
|
276
281
|
});
|
|
277
282
|
}
|
|
278
283
|
/**
|
|
@@ -283,7 +288,7 @@ class QueryBuilder {
|
|
|
283
288
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
284
289
|
return new QueryBuilder({
|
|
285
290
|
executor: this.#executor,
|
|
286
|
-
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'or', filter_parser_js_1.
|
|
291
|
+
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'or', filter_parser_js_1.parseExistExpression('exists', arg)),
|
|
287
292
|
});
|
|
288
293
|
}
|
|
289
294
|
/**
|
|
@@ -294,7 +299,7 @@ class QueryBuilder {
|
|
|
294
299
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
295
300
|
return new QueryBuilder({
|
|
296
301
|
executor: this.#executor,
|
|
297
|
-
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'or', filter_parser_js_1.
|
|
302
|
+
queryNode: select_query_node_js_1.selectQueryNode.cloneWithHaving(this.#queryNode, 'or', filter_parser_js_1.parseExistExpression('not exists', arg)),
|
|
298
303
|
});
|
|
299
304
|
}
|
|
300
305
|
select(selection) {
|
|
@@ -312,13 +317,27 @@ class QueryBuilder {
|
|
|
312
317
|
});
|
|
313
318
|
}
|
|
314
319
|
/**
|
|
320
|
+
* Makes the selection distinct.
|
|
315
321
|
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```ts
|
|
324
|
+
* await db.selectFrom('person')
|
|
325
|
+
* .select('first_name')
|
|
326
|
+
* .distinct()
|
|
327
|
+
* .execute()
|
|
328
|
+
* ```
|
|
329
|
+
*
|
|
330
|
+
* The generated SQL (postgresql):
|
|
331
|
+
*
|
|
332
|
+
* ```sql
|
|
333
|
+
* select distinct "first_name" from "person"
|
|
334
|
+
* ```
|
|
316
335
|
*/
|
|
317
336
|
distinct() {
|
|
318
337
|
ensureCanHaveSelectClause(this.#queryNode);
|
|
319
338
|
return new QueryBuilder({
|
|
320
339
|
executor: this.#executor,
|
|
321
|
-
queryNode: select_query_node_js_1.selectQueryNode.
|
|
340
|
+
queryNode: select_query_node_js_1.selectQueryNode.cloneWithDistinct(this.#queryNode),
|
|
322
341
|
});
|
|
323
342
|
}
|
|
324
343
|
/**
|
|
@@ -420,7 +439,7 @@ class QueryBuilder {
|
|
|
420
439
|
ensureCanHaveInsertValues(this.#queryNode);
|
|
421
440
|
return new QueryBuilder({
|
|
422
441
|
executor: this.#executor,
|
|
423
|
-
queryNode: insert_query_node_js_1.insertQueryNode.cloneWithColumnsAndValues(this.#queryNode, ...insert_values_parser_js_1.
|
|
442
|
+
queryNode: insert_query_node_js_1.insertQueryNode.cloneWithColumnsAndValues(this.#queryNode, ...insert_values_parser_js_1.parseInsertObjectOrList(args)),
|
|
424
443
|
});
|
|
425
444
|
}
|
|
426
445
|
onConflictDoNothing(columns) {
|
|
@@ -438,7 +457,7 @@ class QueryBuilder {
|
|
|
438
457
|
});
|
|
439
458
|
}
|
|
440
459
|
/**
|
|
441
|
-
* Sets the values to update for an
|
|
460
|
+
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
442
461
|
*
|
|
443
462
|
* This method takes an object whose keys are column names and values are
|
|
444
463
|
* values to update. In addition to the column's type, the values can be `raw`
|
|
@@ -469,7 +488,7 @@ class QueryBuilder {
|
|
|
469
488
|
* ```
|
|
470
489
|
*
|
|
471
490
|
* @example
|
|
472
|
-
* On postgresql you
|
|
491
|
+
* On postgresql you ca chain `returning` to the query to get
|
|
473
492
|
* the updated rows' columns (or any other expression) as the
|
|
474
493
|
* return value:
|
|
475
494
|
*
|
|
@@ -482,7 +501,7 @@ class QueryBuilder {
|
|
|
482
501
|
* })
|
|
483
502
|
* .where('id', '=', 1)
|
|
484
503
|
* .returning('id')
|
|
485
|
-
* .
|
|
504
|
+
* .executeTakeFirstOrThrow()
|
|
486
505
|
*
|
|
487
506
|
* row.id
|
|
488
507
|
* ```
|
|
@@ -40,7 +40,7 @@ export declare type RowType<DB, TB extends keyof DB> = UnionToIntersection<DB[TB
|
|
|
40
40
|
*/
|
|
41
41
|
export declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
42
42
|
/**
|
|
43
|
-
* Given a database type and a union of table
|
|
43
|
+
* Given a database type and a union of table names in that db, returns
|
|
44
44
|
* a union type with all possible column names.
|
|
45
45
|
*
|
|
46
46
|
* Example:
|
|
@@ -74,7 +74,7 @@ export declare type AnyColumn<DB, TB extends keyof DB> = {
|
|
|
74
74
|
[T in TB]: keyof DB[T];
|
|
75
75
|
}[TB];
|
|
76
76
|
/**
|
|
77
|
-
* Given a database type and a union of table names in that db returns
|
|
77
|
+
* Given a database type and a union of table names in that db, returns
|
|
78
78
|
* a union type with all possible `table`.`column` combinations.
|
|
79
79
|
*
|
|
80
80
|
* Example:
|
|
@@ -107,29 +107,46 @@ export declare type AnyColumn<DB, TB extends keyof DB> = {
|
|
|
107
107
|
export declare type AnyColumnWithTable<DB, TB extends keyof DB> = {
|
|
108
108
|
[T in TB]: T extends string ? keyof DB[T] extends string ? `${T}.${keyof DB[T]}` : never : never;
|
|
109
109
|
}[TB];
|
|
110
|
+
/**
|
|
111
|
+
* Just like {@link AnyColumn} but with a ` as <string>` suffix.
|
|
112
|
+
*/
|
|
110
113
|
export declare type AnyAliasedColumn<DB, TB extends keyof DB> = {
|
|
111
114
|
[T in TB]: T extends string ? keyof DB[T] extends string ? `${keyof DB[T]} as ${string}` : never : never;
|
|
112
115
|
}[TB];
|
|
113
|
-
export declare type AnyAliasedColumnWithTable<DB, TB extends keyof DB> = `${AnyColumnWithTable<DB, TB>} as ${string}`;
|
|
114
116
|
/**
|
|
115
|
-
*
|
|
117
|
+
* Just like {@link AnyColumnWithTable} but with a ` as <string>` suffix.
|
|
118
|
+
*/
|
|
119
|
+
export declare type AnyAliasedColumnWithTable<DB, TB extends keyof DB> = {
|
|
120
|
+
[T in TB]: T extends string ? keyof DB[T] extends string ? `${T}.${keyof DB[T]} as ${string}` : never : never;
|
|
121
|
+
}[TB];
|
|
122
|
+
/**
|
|
123
|
+
* Extracts the item type of an array.
|
|
116
124
|
*/
|
|
117
125
|
export declare type ArrayItemType<T> = T extends ReadonlyArray<infer I> ? I : never;
|
|
118
126
|
export declare type AnyQueryBuilder = QueryBuilder<any, any, any>;
|
|
119
127
|
export declare type AnyAliasedQueryBuilder = AliasedQueryBuilder<any, any, any, any>;
|
|
128
|
+
export declare type AnyRawBuilder = RawBuilder<any>;
|
|
129
|
+
export declare type AnyAliasedRawBuilder = AliasedRawBuilder<any, any>;
|
|
120
130
|
export declare type QueryBuilderFactory<DB, TB extends keyof DB> = (qb: SubQueryBuilder<DB, TB>) => QueryBuilder<any, any, any>;
|
|
121
131
|
export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: SubQueryBuilder<DB, TB>) => AnyAliasedQueryBuilder;
|
|
122
|
-
export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: SubQueryBuilder<DB, TB>) =>
|
|
123
|
-
export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: SubQueryBuilder<DB, TB>) =>
|
|
132
|
+
export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: SubQueryBuilder<DB, TB>) => AnyRawBuilder;
|
|
133
|
+
export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: SubQueryBuilder<DB, TB>) => AnyAliasedRawBuilder;
|
|
124
134
|
export interface InsertResultTypeTag {
|
|
135
|
+
/** @internal */
|
|
125
136
|
__isInsertResultTypeTag__: true;
|
|
126
137
|
}
|
|
127
138
|
export interface DeleteResultTypeTag {
|
|
139
|
+
/** @internal */
|
|
128
140
|
__isDeleteResultTypeTag__: true;
|
|
129
141
|
}
|
|
130
142
|
export interface UpdateResultTypeTag {
|
|
143
|
+
/** @internal */
|
|
131
144
|
__isUpdateResultTypeTag__: true;
|
|
132
145
|
}
|
|
146
|
+
export interface GeneratedPlaceholder {
|
|
147
|
+
/** @internal */
|
|
148
|
+
__isGeneratedPlaceholder__: true;
|
|
149
|
+
}
|
|
133
150
|
export declare type ManyResultRowType<O> = O extends InsertResultTypeTag ? number | undefined : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O;
|
|
134
151
|
export declare type SingleResultRowType<O> = O extends InsertResultTypeTag ? number | undefined : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O | undefined;
|
|
135
152
|
export declare type NonEmptySingleResultRowType<O> = O extends InsertResultTypeTag ? number : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O;
|
|
@@ -38,8 +38,8 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
38
38
|
this.compileDistinctOn(node.distinctOnSelections);
|
|
39
39
|
this.append(' ');
|
|
40
40
|
}
|
|
41
|
-
if (node.
|
|
42
|
-
this.append(
|
|
41
|
+
if (node.isDistinct) {
|
|
42
|
+
this.append('distinct');
|
|
43
43
|
this.append(' ');
|
|
44
44
|
}
|
|
45
45
|
if (node.selections) {
|
|
@@ -75,9 +75,11 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
75
75
|
this.append(' ');
|
|
76
76
|
this.visitNode(node.offset);
|
|
77
77
|
}
|
|
78
|
-
if (node.
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
if (node.modifiers) {
|
|
79
|
+
node.modifiers.forEach((modifier) => {
|
|
80
|
+
this.append(' ');
|
|
81
|
+
this.append(SELECT_MODIFIER_SQL[modifier]);
|
|
82
|
+
});
|
|
81
83
|
}
|
|
82
84
|
if (isSubQuery) {
|
|
83
85
|
this.append(')');
|
|
@@ -626,7 +628,6 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
626
628
|
}
|
|
627
629
|
exports.DefaultQueryCompiler = DefaultQueryCompiler;
|
|
628
630
|
const SELECT_MODIFIER_SQL = {
|
|
629
|
-
Distinct: 'distinct',
|
|
630
631
|
ForKeyShare: 'for key share',
|
|
631
632
|
ForNoKeyUpdate: 'for no key update',
|
|
632
633
|
ForUpdate: 'for update',
|
|
@@ -138,6 +138,7 @@ export declare class QueryCreator<DB> {
|
|
|
138
138
|
* const maybePrimaryKey: number | undefined = await db
|
|
139
139
|
* .insertInto('person')
|
|
140
140
|
* .values({
|
|
141
|
+
* id: db.generated,
|
|
141
142
|
* first_name: 'Jennifer',
|
|
142
143
|
* last_name: 'Aniston'
|
|
143
144
|
* })
|
|
@@ -151,6 +152,7 @@ export declare class QueryCreator<DB> {
|
|
|
151
152
|
* const { id } = await db
|
|
152
153
|
* .insertInto('person')
|
|
153
154
|
* .values({
|
|
155
|
+
* id: db.generated,
|
|
154
156
|
* first_name: 'Jennifer',
|
|
155
157
|
* last_name: 'Aniston'
|
|
156
158
|
* })
|
|
@@ -43,6 +43,7 @@ class QueryCreator {
|
|
|
43
43
|
* const maybePrimaryKey: number | undefined = await db
|
|
44
44
|
* .insertInto('person')
|
|
45
45
|
* .values({
|
|
46
|
+
* id: db.generated,
|
|
46
47
|
* first_name: 'Jennifer',
|
|
47
48
|
* last_name: 'Aniston'
|
|
48
49
|
* })
|
|
@@ -56,6 +57,7 @@ class QueryCreator {
|
|
|
56
57
|
* const { id } = await db
|
|
57
58
|
* .insertInto('person')
|
|
58
59
|
* .values({
|
|
60
|
+
* id: db.generated,
|
|
59
61
|
* first_name: 'Jennifer',
|
|
60
62
|
* last_name: 'Aniston'
|
|
61
63
|
* })
|
|
@@ -9,6 +9,7 @@ import { Compilable } from '../util/compilable.js';
|
|
|
9
9
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
10
10
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
11
11
|
import { ColumnDefinitionBuilder, ColumnDefinitionBuilderInterface } from './column-definition-builder.js';
|
|
12
|
+
import { AnyRawBuilder } from '../query-builder/type-utils.js';
|
|
12
13
|
export declare class AlterTableBuilder {
|
|
13
14
|
#private;
|
|
14
15
|
constructor(args: AlterTableBuilderConstructorArgs);
|
|
@@ -23,7 +24,7 @@ export declare class AlterColumnBuilder {
|
|
|
23
24
|
#private;
|
|
24
25
|
constructor(args: AlterColumnBuilderConstructorArgs);
|
|
25
26
|
setDataType(dataType: ColumnDataType): AlterTableExecutor;
|
|
26
|
-
setDefault(value: PrimitiveValue |
|
|
27
|
+
setDefault(value: PrimitiveValue | AnyRawBuilder): AlterTableExecutor;
|
|
27
28
|
dropDefault(): AlterTableExecutor;
|
|
28
29
|
setNotNull(): AlterTableExecutor;
|
|
29
30
|
dropNotNull(): AlterTableExecutor;
|
|
@@ -44,7 +45,7 @@ export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuild
|
|
|
44
45
|
onDelete(onDelete: OnDelete): AlterTableAddColumnBuilder;
|
|
45
46
|
unique(): AlterTableAddColumnBuilder;
|
|
46
47
|
notNull(): AlterTableAddColumnBuilder;
|
|
47
|
-
defaultTo(value: PrimitiveValue |
|
|
48
|
+
defaultTo(value: PrimitiveValue | AnyRawBuilder): AlterTableAddColumnBuilder;
|
|
48
49
|
check(sql: string): AlterTableAddColumnBuilder;
|
|
49
50
|
toOperationNode(): AlterTableNode;
|
|
50
51
|
compile(): CompiledQuery;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
2
2
|
import { OnDelete } from '../operation-node/references-node.js';
|
|
3
|
-
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
4
3
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
5
4
|
import { ColumnDefinitionNode } from '../operation-node/column-definition-node.js';
|
|
5
|
+
import { AnyRawBuilder } from '../query-builder/type-utils.js';
|
|
6
6
|
export interface ColumnDefinitionBuilderInterface<R> {
|
|
7
7
|
/**
|
|
8
8
|
* Makes the column automatically incrementing.
|
|
@@ -51,7 +51,7 @@ export interface ColumnDefinitionBuilderInterface<R> {
|
|
|
51
51
|
* .execute()
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
|
-
defaultTo(value: PrimitiveValue |
|
|
54
|
+
defaultTo(value: PrimitiveValue | AnyRawBuilder): R;
|
|
55
55
|
/**
|
|
56
56
|
* Adds a check constraint for the column.
|
|
57
57
|
*
|
|
@@ -74,7 +74,7 @@ export declare class ColumnDefinitionBuilder implements ColumnDefinitionBuilderI
|
|
|
74
74
|
onDelete(onDelete: OnDelete): ColumnDefinitionBuilder;
|
|
75
75
|
unique(): ColumnDefinitionBuilder;
|
|
76
76
|
notNull(): ColumnDefinitionBuilder;
|
|
77
|
-
defaultTo(value: PrimitiveValue |
|
|
77
|
+
defaultTo(value: PrimitiveValue | AnyRawBuilder): ColumnDefinitionBuilder;
|
|
78
78
|
check(sql: string): ColumnDefinitionBuilder;
|
|
79
79
|
toOperationNode(): ColumnDefinitionNode;
|
|
80
80
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isGeneratedPlaceholder = exports.generatedPlaceholder = void 0;
|
|
4
|
+
const object_utils_1 = require("./object-utils");
|
|
5
|
+
exports.generatedPlaceholder = object_utils_1.freeze({
|
|
6
|
+
__isGeneratedPlaceholder__: true,
|
|
7
|
+
});
|
|
8
|
+
function isGeneratedPlaceholder(obj) {
|
|
9
|
+
return object_utils_1.isObject(obj) && obj.__isGeneratedPlaceholder__ === true;
|
|
10
|
+
}
|
|
11
|
+
exports.isGeneratedPlaceholder = isGeneratedPlaceholder;
|
|
@@ -15,3 +15,4 @@ export declare function getLast<T>(arr: ArrayLike<T>): T | undefined;
|
|
|
15
15
|
export declare function freeze<T>(obj: T): Readonly<T>;
|
|
16
16
|
export declare function asArray<T>(arg: T | T[]): T[];
|
|
17
17
|
export declare function asReadonlyArray<T>(arg: T | ReadonlyArray<T>): ReadonlyArray<T>;
|
|
18
|
+
export declare function isReadonlyArray(arg: unknown): arg is ReadonlyArray<unknown>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.asReadonlyArray = exports.asArray = exports.freeze = exports.getLast = exports.isObject = exports.isFunction = exports.isPrimitive = exports.isBigInt = exports.isBuffer = exports.isDate = exports.isNull = exports.isBoolean = exports.isNumber = exports.isString = exports.isEmpty = void 0;
|
|
3
|
+
exports.isReadonlyArray = exports.asReadonlyArray = exports.asArray = exports.freeze = exports.getLast = exports.isObject = exports.isFunction = exports.isPrimitive = exports.isBigInt = exports.isBuffer = exports.isDate = exports.isNull = exports.isBoolean = exports.isNumber = exports.isString = exports.isEmpty = void 0;
|
|
4
4
|
function isEmpty(obj) {
|
|
5
5
|
if (Array.isArray(obj) || isString(obj) || Buffer.isBuffer(obj)) {
|
|
6
6
|
return obj.length === 0;
|
|
@@ -86,3 +86,4 @@ exports.asReadonlyArray = asReadonlyArray;
|
|
|
86
86
|
function isReadonlyArray(arg) {
|
|
87
87
|
return Array.isArray(arg);
|
|
88
88
|
}
|
|
89
|
+
exports.isReadonlyArray = isReadonlyArray;
|
|
@@ -23,6 +23,7 @@ export class PostgresDriver extends Driver {
|
|
|
23
23
|
port: cfg.port,
|
|
24
24
|
user: cfg.user,
|
|
25
25
|
password: cfg.password,
|
|
26
|
+
ssl: cfg.ssl,
|
|
26
27
|
// Pool options.
|
|
27
28
|
connectionTimeoutMillis: cfg.pool.connectionTimeoutMillis,
|
|
28
29
|
idleTimeoutMillis: cfg.pool.idleTimeoutMillis,
|
|
@@ -59,7 +60,7 @@ export class PostgresDriver extends Driver {
|
|
|
59
60
|
async function importPgPool() {
|
|
60
61
|
try {
|
|
61
62
|
// For this to work with both esm and cjs modules we need
|
|
62
|
-
// this hacky
|
|
63
|
+
// this hacky crap here.
|
|
63
64
|
const pg = (await import('pg'));
|
|
64
65
|
if (isFunction(pg.Pool)) {
|
|
65
66
|
return pg.Pool;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { SecureContextOptions } from 'tls';
|
|
1
3
|
import { DatabaseConnection } from './database-connection.js';
|
|
2
4
|
export interface DriverConfig {
|
|
3
5
|
/**
|
|
@@ -24,6 +26,10 @@ export interface DriverConfig {
|
|
|
24
26
|
* Connection pooling config.
|
|
25
27
|
*/
|
|
26
28
|
pool?: PoolConfig;
|
|
29
|
+
/**
|
|
30
|
+
* Optional SSL configuration.
|
|
31
|
+
*/
|
|
32
|
+
ssl?: SecureContextOptions;
|
|
27
33
|
}
|
|
28
34
|
export interface PoolConfig {
|
|
29
35
|
/**
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -95,4 +95,15 @@ export * from './operation-node/offset-node.js';
|
|
|
95
95
|
export * from './operation-node//on-conflict-node.js';
|
|
96
96
|
export * from './operation-node/operation-node.js';
|
|
97
97
|
export * from './operation-node/operation-node-source.js';
|
|
98
|
+
export * from './operation-node/order-by-node.js';
|
|
98
99
|
export * from './util/compilable.js';
|
|
100
|
+
export { AnyColumn } from './query-builder/type-utils.js';
|
|
101
|
+
export { SelectExpression, SelectExpressionOrList, } from './parser/select-parser';
|
|
102
|
+
export { ReferenceExpression, ReferenceExpressionOrList, } from './parser/reference-parser';
|
|
103
|
+
export { ValueExpression, ValueExpressionOrList } from './parser/value-parser';
|
|
104
|
+
export { ExistsExpression, FilterOperator } from './parser/filter-parser';
|
|
105
|
+
export { TableExpression } from './parser/table-parser';
|
|
106
|
+
export { JoinReferenceExpression, JoinCallbackExpression, } from './parser/join-parser';
|
|
107
|
+
export { InsertObject } from './parser/insert-values-parser';
|
|
108
|
+
export { MutationObject } from './parser/mutation-parser';
|
|
109
|
+
export { OrderByExpression } from './parser/order-by-parser';
|
package/dist/esm/index.js
CHANGED
|
@@ -95,4 +95,5 @@ export * from './operation-node/offset-node.js';
|
|
|
95
95
|
export * from './operation-node//on-conflict-node.js';
|
|
96
96
|
export * from './operation-node/operation-node.js';
|
|
97
97
|
export * from './operation-node/operation-node-source.js';
|
|
98
|
+
export * from './operation-node/order-by-node.js';
|
|
98
99
|
export * from './util/compilable.js';
|
package/dist/esm/kysely.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { MigrationModule } from './migration/migration.js';
|
|
|
8
8
|
import { QueryExecutor } from './query-executor/query-executor.js';
|
|
9
9
|
import { QueryCreator } from './query-creator.js';
|
|
10
10
|
import { KyselyPlugin } from './plugin/plugin.js';
|
|
11
|
+
import { GeneratedPlaceholder } from './query-builder/type-utils.js';
|
|
11
12
|
/**
|
|
12
13
|
* The main Kysely class.
|
|
13
14
|
*
|
|
@@ -62,6 +63,30 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
|
|
|
62
63
|
* passing in dynamic values for the queries.
|
|
63
64
|
*/
|
|
64
65
|
get dynamic(): DynamicModule;
|
|
66
|
+
/**
|
|
67
|
+
* A value to be used in place of columns that are generated in the database
|
|
68
|
+
* when inserting rows.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* In this example the `Person` table has non-null properties `id` and `created_at`
|
|
72
|
+
* which are both automatically genereted by the database. Since their types are
|
|
73
|
+
* `number` and `string` respectively instead of `number | null` and `string | null`
|
|
74
|
+
* the `values` method requires you to give a value for them. the `generated`
|
|
75
|
+
* placeholder can be used in these cases.
|
|
76
|
+
*
|
|
77
|
+
* ```ts
|
|
78
|
+
* await db.insertInto('person')
|
|
79
|
+
* .values({
|
|
80
|
+
* id: db.generated,
|
|
81
|
+
* created_at: db.generated,
|
|
82
|
+
* first_name: 'Jennifer',
|
|
83
|
+
* last_name: 'Aniston',
|
|
84
|
+
* gender: 'female'
|
|
85
|
+
* })
|
|
86
|
+
* .execute()
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
get generated(): GeneratedPlaceholder;
|
|
65
90
|
/**
|
|
66
91
|
* Starts a transaction. If the callback throws the transaction is rolled back,
|
|
67
92
|
* otherwise it's committed.
|
package/dist/esm/kysely.js
CHANGED
|
@@ -8,6 +8,7 @@ import { INTERNAL_DRIVER_ACQUIRE_CONNECTION, INTERNAL_DRIVER_ENSURE_DESTROY, INT
|
|
|
8
8
|
import { MigrationModule } from './migration/migration.js';
|
|
9
9
|
import { DefaultQueryExecutor, } from './query-executor/query-executor.js';
|
|
10
10
|
import { QueryCreator } from './query-creator.js';
|
|
11
|
+
import { generatedPlaceholder } from './util/generated-placeholder.js';
|
|
11
12
|
/**
|
|
12
13
|
* The main Kysely class.
|
|
13
14
|
*
|
|
@@ -94,6 +95,32 @@ export class Kysely extends QueryCreator {
|
|
|
94
95
|
get dynamic() {
|
|
95
96
|
return new DynamicModule();
|
|
96
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* A value to be used in place of columns that are generated in the database
|
|
100
|
+
* when inserting rows.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* In this example the `Person` table has non-null properties `id` and `created_at`
|
|
104
|
+
* which are both automatically genereted by the database. Since their types are
|
|
105
|
+
* `number` and `string` respectively instead of `number | null` and `string | null`
|
|
106
|
+
* the `values` method requires you to give a value for them. the `generated`
|
|
107
|
+
* placeholder can be used in these cases.
|
|
108
|
+
*
|
|
109
|
+
* ```ts
|
|
110
|
+
* await db.insertInto('person')
|
|
111
|
+
* .values({
|
|
112
|
+
* id: db.generated,
|
|
113
|
+
* created_at: db.generated,
|
|
114
|
+
* first_name: 'Jennifer',
|
|
115
|
+
* last_name: 'Aniston',
|
|
116
|
+
* gender: 'female'
|
|
117
|
+
* })
|
|
118
|
+
* .execute()
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
get generated() {
|
|
122
|
+
return generatedPlaceholder;
|
|
123
|
+
}
|
|
97
124
|
/**
|
|
98
125
|
* Starts a transaction. If the callback throws the transaction is rolled back,
|
|
99
126
|
* otherwise it's committed.
|
|
@@ -109,11 +109,12 @@ export class OperationNodeTransformer {
|
|
|
109
109
|
from: this.transformNode(node.from),
|
|
110
110
|
selections: this.transformNodeList(node.selections),
|
|
111
111
|
distinctOnSelections: this.transformNodeList(node.distinctOnSelections),
|
|
112
|
+
isDistinct: node.isDistinct,
|
|
112
113
|
joins: this.transformNodeList(node.joins),
|
|
113
114
|
groupBy: this.transformNode(node.groupBy),
|
|
114
115
|
orderBy: this.transformNode(node.orderBy),
|
|
115
116
|
where: this.transformNode(node.where),
|
|
116
|
-
|
|
117
|
+
modifiers: node.modifiers,
|
|
117
118
|
limit: this.transformNode(node.limit),
|
|
118
119
|
offset: this.transformNode(node.offset),
|
|
119
120
|
with: this.transformNode(node.with),
|
|
@@ -12,17 +12,18 @@ import { OrderByNode } from './order-by-node.js';
|
|
|
12
12
|
import { SelectionNode } from './selection-node.js';
|
|
13
13
|
import { WhereNode } from './where-node.js';
|
|
14
14
|
import { WithNode } from './with-node.js';
|
|
15
|
-
export declare type SelectModifier = '
|
|
15
|
+
export declare type SelectModifier = 'ForUpdate' | 'ForNoKeyUpdate' | 'ForShare' | 'ForKeyShare' | 'NoWait' | 'SkipLocked';
|
|
16
16
|
export interface SelectQueryNode extends OperationNode {
|
|
17
17
|
readonly kind: 'SelectQueryNode';
|
|
18
18
|
readonly from: FromNode;
|
|
19
19
|
readonly selections?: ReadonlyArray<SelectionNode>;
|
|
20
20
|
readonly distinctOnSelections?: ReadonlyArray<SelectionNode>;
|
|
21
|
+
readonly isDistinct?: boolean;
|
|
21
22
|
readonly joins?: ReadonlyArray<JoinNode>;
|
|
22
23
|
readonly groupBy?: GroupByNode;
|
|
23
24
|
readonly orderBy?: OrderByNode;
|
|
24
25
|
readonly where?: WhereNode;
|
|
25
|
-
readonly
|
|
26
|
+
readonly modifiers?: ReadonlyArray<SelectModifier>;
|
|
26
27
|
readonly limit?: LimitNode;
|
|
27
28
|
readonly offset?: OffsetNode;
|
|
28
29
|
readonly with?: WithNode;
|
|
@@ -42,4 +43,5 @@ export declare const selectQueryNode: Readonly<{
|
|
|
42
43
|
cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
|
|
43
44
|
cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
|
|
44
45
|
cloneWithHaving(selectNode: SelectQueryNode, op: 'and' | 'or', filter: HavingNodeChild): SelectQueryNode;
|
|
46
|
+
cloneWithDistinct(selectNode: SelectQueryNode): SelectQueryNode;
|
|
45
47
|
}>;
|