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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { aliasNode } from '../operation-node/alias-node.js';
|
|
2
2
|
import { parseJoinArgs, } from '../parser/join-parser.js';
|
|
3
3
|
import { parseSelectExpressionOrList, parseSelectAllArgs, } from '../parser/select-parser.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { parseFilter, parseExistExpression, parseReferenceFilter, } from '../parser/filter-parser.js';
|
|
5
|
+
import { parseInsertObjectOrList, } from '../parser/insert-values-parser.js';
|
|
6
6
|
import { parseColumnName, parseReferenceExpression, parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
|
|
7
7
|
import { orderByItemNode, } from '../operation-node/order-by-item-node.js';
|
|
8
8
|
import { selectQueryNode, } from '../operation-node/select-query-node.js';
|
|
@@ -42,7 +42,7 @@ export class QueryBuilder {
|
|
|
42
42
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
43
43
|
return new QueryBuilder({
|
|
44
44
|
executor: this.#executor,
|
|
45
|
-
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'and',
|
|
45
|
+
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'and', parseFilter('Where', args)),
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
@@ -72,7 +72,8 @@ export class QueryBuilder {
|
|
|
72
72
|
* Usage in a subquery:
|
|
73
73
|
*
|
|
74
74
|
* ```ts
|
|
75
|
-
* db
|
|
75
|
+
* const persons = await db
|
|
76
|
+
* .selectFrom('person')
|
|
76
77
|
* .selectAll('person')
|
|
77
78
|
* .select((qb) => qb
|
|
78
79
|
* .subQuery('pet')
|
|
@@ -81,6 +82,7 @@ export class QueryBuilder {
|
|
|
81
82
|
* .limit(1)
|
|
82
83
|
* .as('pet_name')
|
|
83
84
|
* )
|
|
85
|
+
* .execute()
|
|
84
86
|
* ```
|
|
85
87
|
*
|
|
86
88
|
* The generated SQL (postgresql):
|
|
@@ -90,21 +92,22 @@ export class QueryBuilder {
|
|
|
90
92
|
* select "name"
|
|
91
93
|
* from "pet"
|
|
92
94
|
* where "pet"."owner_id" = "person"."id"
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
+
* limit $1
|
|
96
|
+
* ) as "pet_name"
|
|
97
|
+
* from "person"
|
|
95
98
|
*/
|
|
96
99
|
whereRef(lhs, op, rhs) {
|
|
97
100
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
98
101
|
return new QueryBuilder({
|
|
99
102
|
executor: this.#executor,
|
|
100
|
-
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'and',
|
|
103
|
+
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'and', parseReferenceFilter(lhs, op, rhs)),
|
|
101
104
|
});
|
|
102
105
|
}
|
|
103
106
|
orWhere(...args) {
|
|
104
107
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
105
108
|
return new QueryBuilder({
|
|
106
109
|
executor: this.#executor,
|
|
107
|
-
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'or',
|
|
110
|
+
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'or', parseFilter('Where', args)),
|
|
108
111
|
});
|
|
109
112
|
}
|
|
110
113
|
/**
|
|
@@ -117,7 +120,7 @@ export class QueryBuilder {
|
|
|
117
120
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
118
121
|
return new QueryBuilder({
|
|
119
122
|
executor: this.#executor,
|
|
120
|
-
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'or',
|
|
123
|
+
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'or', parseReferenceFilter(lhs, op, rhs)),
|
|
121
124
|
});
|
|
122
125
|
}
|
|
123
126
|
/**
|
|
@@ -129,7 +132,8 @@ export class QueryBuilder {
|
|
|
129
132
|
* The query below selets all persons that own a pet named Catto:
|
|
130
133
|
*
|
|
131
134
|
* ```ts
|
|
132
|
-
* db
|
|
135
|
+
* const persons = await db
|
|
136
|
+
* .selectFrom('person')
|
|
133
137
|
* .selectAll()
|
|
134
138
|
* .whereExists((qb) => qb
|
|
135
139
|
* .subQuery('pet')
|
|
@@ -137,6 +141,7 @@ export class QueryBuilder {
|
|
|
137
141
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
138
142
|
* .where('pet.name', '=', 'Catto')
|
|
139
143
|
* )
|
|
144
|
+
* .execute()
|
|
140
145
|
* ```
|
|
141
146
|
*
|
|
142
147
|
* The generated SQL (postgresql):
|
|
@@ -181,7 +186,7 @@ export class QueryBuilder {
|
|
|
181
186
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
182
187
|
return new QueryBuilder({
|
|
183
188
|
executor: this.#executor,
|
|
184
|
-
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'and',
|
|
189
|
+
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'and', parseExistExpression('exists', arg)),
|
|
185
190
|
});
|
|
186
191
|
}
|
|
187
192
|
/**
|
|
@@ -191,7 +196,7 @@ export class QueryBuilder {
|
|
|
191
196
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
192
197
|
return new QueryBuilder({
|
|
193
198
|
executor: this.#executor,
|
|
194
|
-
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'and',
|
|
199
|
+
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'and', parseExistExpression('not exists', arg)),
|
|
195
200
|
});
|
|
196
201
|
}
|
|
197
202
|
/**
|
|
@@ -201,7 +206,7 @@ export class QueryBuilder {
|
|
|
201
206
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
202
207
|
return new QueryBuilder({
|
|
203
208
|
executor: this.#executor,
|
|
204
|
-
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'or',
|
|
209
|
+
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'or', parseExistExpression('exists', arg)),
|
|
205
210
|
});
|
|
206
211
|
}
|
|
207
212
|
/**
|
|
@@ -211,14 +216,14 @@ export class QueryBuilder {
|
|
|
211
216
|
ensureCanHaveWhereClause(this.#queryNode);
|
|
212
217
|
return new QueryBuilder({
|
|
213
218
|
executor: this.#executor,
|
|
214
|
-
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'or',
|
|
219
|
+
queryNode: queryNode.cloneWithWhere(this.#queryNode, 'or', parseExistExpression('not exists', arg)),
|
|
215
220
|
});
|
|
216
221
|
}
|
|
217
222
|
having(...args) {
|
|
218
223
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
219
224
|
return new QueryBuilder({
|
|
220
225
|
executor: this.#executor,
|
|
221
|
-
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'and',
|
|
226
|
+
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'and', parseFilter('Having', args)),
|
|
222
227
|
});
|
|
223
228
|
}
|
|
224
229
|
/**
|
|
@@ -229,14 +234,14 @@ export class QueryBuilder {
|
|
|
229
234
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
230
235
|
return new QueryBuilder({
|
|
231
236
|
executor: this.#executor,
|
|
232
|
-
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'and',
|
|
237
|
+
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'and', parseReferenceFilter(lhs, op, rhs)),
|
|
233
238
|
});
|
|
234
239
|
}
|
|
235
240
|
orHaving(...args) {
|
|
236
241
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
237
242
|
return new QueryBuilder({
|
|
238
243
|
executor: this.#executor,
|
|
239
|
-
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'or',
|
|
244
|
+
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'or', parseFilter('Having', args)),
|
|
240
245
|
});
|
|
241
246
|
}
|
|
242
247
|
/**
|
|
@@ -247,7 +252,7 @@ export class QueryBuilder {
|
|
|
247
252
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
248
253
|
return new QueryBuilder({
|
|
249
254
|
executor: this.#executor,
|
|
250
|
-
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'or',
|
|
255
|
+
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'or', parseReferenceFilter(lhs, op, rhs)),
|
|
251
256
|
});
|
|
252
257
|
}
|
|
253
258
|
/**
|
|
@@ -258,7 +263,7 @@ export class QueryBuilder {
|
|
|
258
263
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
259
264
|
return new QueryBuilder({
|
|
260
265
|
executor: this.#executor,
|
|
261
|
-
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'and',
|
|
266
|
+
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'and', parseExistExpression('exists', arg)),
|
|
262
267
|
});
|
|
263
268
|
}
|
|
264
269
|
/**
|
|
@@ -269,7 +274,7 @@ export class QueryBuilder {
|
|
|
269
274
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
270
275
|
return new QueryBuilder({
|
|
271
276
|
executor: this.#executor,
|
|
272
|
-
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'and',
|
|
277
|
+
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'and', parseExistExpression('not exists', arg)),
|
|
273
278
|
});
|
|
274
279
|
}
|
|
275
280
|
/**
|
|
@@ -280,7 +285,7 @@ export class QueryBuilder {
|
|
|
280
285
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
281
286
|
return new QueryBuilder({
|
|
282
287
|
executor: this.#executor,
|
|
283
|
-
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'or',
|
|
288
|
+
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'or', parseExistExpression('exists', arg)),
|
|
284
289
|
});
|
|
285
290
|
}
|
|
286
291
|
/**
|
|
@@ -291,7 +296,7 @@ export class QueryBuilder {
|
|
|
291
296
|
ensureCanHaveHavingClause(this.#queryNode);
|
|
292
297
|
return new QueryBuilder({
|
|
293
298
|
executor: this.#executor,
|
|
294
|
-
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'or',
|
|
299
|
+
queryNode: selectQueryNode.cloneWithHaving(this.#queryNode, 'or', parseExistExpression('not exists', arg)),
|
|
295
300
|
});
|
|
296
301
|
}
|
|
297
302
|
select(selection) {
|
|
@@ -309,13 +314,27 @@ export class QueryBuilder {
|
|
|
309
314
|
});
|
|
310
315
|
}
|
|
311
316
|
/**
|
|
317
|
+
* Makes the selection distinct.
|
|
312
318
|
*
|
|
319
|
+
* @example
|
|
320
|
+
* ```ts
|
|
321
|
+
* await db.selectFrom('person')
|
|
322
|
+
* .select('first_name')
|
|
323
|
+
* .distinct()
|
|
324
|
+
* .execute()
|
|
325
|
+
* ```
|
|
326
|
+
*
|
|
327
|
+
* The generated SQL (postgresql):
|
|
328
|
+
*
|
|
329
|
+
* ```sql
|
|
330
|
+
* select distinct "first_name" from "person"
|
|
331
|
+
* ```
|
|
313
332
|
*/
|
|
314
333
|
distinct() {
|
|
315
334
|
ensureCanHaveSelectClause(this.#queryNode);
|
|
316
335
|
return new QueryBuilder({
|
|
317
336
|
executor: this.#executor,
|
|
318
|
-
queryNode: selectQueryNode.
|
|
337
|
+
queryNode: selectQueryNode.cloneWithDistinct(this.#queryNode),
|
|
319
338
|
});
|
|
320
339
|
}
|
|
321
340
|
/**
|
|
@@ -417,7 +436,7 @@ export class QueryBuilder {
|
|
|
417
436
|
ensureCanHaveInsertValues(this.#queryNode);
|
|
418
437
|
return new QueryBuilder({
|
|
419
438
|
executor: this.#executor,
|
|
420
|
-
queryNode: insertQueryNode.cloneWithColumnsAndValues(this.#queryNode, ...
|
|
439
|
+
queryNode: insertQueryNode.cloneWithColumnsAndValues(this.#queryNode, ...parseInsertObjectOrList(args)),
|
|
421
440
|
});
|
|
422
441
|
}
|
|
423
442
|
onConflictDoNothing(columns) {
|
|
@@ -435,7 +454,7 @@ export class QueryBuilder {
|
|
|
435
454
|
});
|
|
436
455
|
}
|
|
437
456
|
/**
|
|
438
|
-
* Sets the values to update for an
|
|
457
|
+
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
439
458
|
*
|
|
440
459
|
* This method takes an object whose keys are column names and values are
|
|
441
460
|
* values to update. In addition to the column's type, the values can be `raw`
|
|
@@ -466,7 +485,7 @@ export class QueryBuilder {
|
|
|
466
485
|
* ```
|
|
467
486
|
*
|
|
468
487
|
* @example
|
|
469
|
-
* On postgresql you
|
|
488
|
+
* On postgresql you ca chain `returning` to the query to get
|
|
470
489
|
* the updated rows' columns (or any other expression) as the
|
|
471
490
|
* return value:
|
|
472
491
|
*
|
|
@@ -479,7 +498,7 @@ export class QueryBuilder {
|
|
|
479
498
|
* })
|
|
480
499
|
* .where('id', '=', 1)
|
|
481
500
|
* .returning('id')
|
|
482
|
-
* .
|
|
501
|
+
* .executeTakeFirstOrThrow()
|
|
483
502
|
*
|
|
484
503
|
* row.id
|
|
485
504
|
* ```
|
|
@@ -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;
|
|
@@ -35,8 +35,8 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
35
35
|
this.compileDistinctOn(node.distinctOnSelections);
|
|
36
36
|
this.append(' ');
|
|
37
37
|
}
|
|
38
|
-
if (node.
|
|
39
|
-
this.append(
|
|
38
|
+
if (node.isDistinct) {
|
|
39
|
+
this.append('distinct');
|
|
40
40
|
this.append(' ');
|
|
41
41
|
}
|
|
42
42
|
if (node.selections) {
|
|
@@ -72,9 +72,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
72
72
|
this.append(' ');
|
|
73
73
|
this.visitNode(node.offset);
|
|
74
74
|
}
|
|
75
|
-
if (node.
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
if (node.modifiers) {
|
|
76
|
+
node.modifiers.forEach((modifier) => {
|
|
77
|
+
this.append(' ');
|
|
78
|
+
this.append(SELECT_MODIFIER_SQL[modifier]);
|
|
79
|
+
});
|
|
78
80
|
}
|
|
79
81
|
if (isSubQuery) {
|
|
80
82
|
this.append(')');
|
|
@@ -622,7 +624,6 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
622
624
|
}
|
|
623
625
|
}
|
|
624
626
|
const SELECT_MODIFIER_SQL = {
|
|
625
|
-
Distinct: 'distinct',
|
|
626
627
|
ForKeyShare: 'for key share',
|
|
627
628
|
ForNoKeyUpdate: 'for no key update',
|
|
628
629
|
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
|
* })
|
|
@@ -40,6 +40,7 @@ export class QueryCreator {
|
|
|
40
40
|
* const maybePrimaryKey: number | undefined = await db
|
|
41
41
|
* .insertInto('person')
|
|
42
42
|
* .values({
|
|
43
|
+
* id: db.generated,
|
|
43
44
|
* first_name: 'Jennifer',
|
|
44
45
|
* last_name: 'Aniston'
|
|
45
46
|
* })
|
|
@@ -53,6 +54,7 @@ export class QueryCreator {
|
|
|
53
54
|
* const { id } = await db
|
|
54
55
|
* .insertInto('person')
|
|
55
56
|
* .values({
|
|
57
|
+
* id: db.generated,
|
|
56
58
|
* first_name: 'Jennifer',
|
|
57
59
|
* last_name: 'Aniston'
|
|
58
60
|
* })
|
|
@@ -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
|
}
|
|
@@ -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>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kysely",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.9",
|
|
4
4
|
"description": "Type safe SQL query builder",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"build": "npm run clean && npm run build:esm && npm run build:cjs && ./module-fixup.sh",
|
|
25
25
|
"build:esm": "tsc -p tsconfig.json",
|
|
26
26
|
"build:cjs": "tsc -p tsconfig-cjs.json",
|
|
27
|
-
"docs:build": "typedoc --excludePrivate --excludeInternal src/index.ts && npm run docs:postprocess",
|
|
27
|
+
"docs:build": "typedoc --excludePrivate --excludeInternal --customCss ./docs-theme.css src/index.ts && npm run docs:postprocess",
|
|
28
28
|
"docs:postprocess": "node post-process-docs.js",
|
|
29
29
|
"prepublish": "npm run build"
|
|
30
30
|
},
|