kysely 0.16.8 → 0.17.0
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 +23 -11
- package/dist/cjs/dialect/mysql/mysql-adapter.js +3 -4
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-adapter.js +3 -2
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -1
- package/dist/cjs/index-nodeless.d.ts +2 -0
- package/dist/cjs/index-nodeless.js +2 -0
- package/dist/cjs/kysely.d.ts +3 -6
- package/dist/cjs/kysely.js +9 -14
- package/dist/cjs/migration/migrator.d.ts +22 -0
- package/dist/cjs/migration/migrator.js +27 -5
- package/dist/cjs/operation-node/delete-query-node.d.ts +7 -0
- package/dist/cjs/operation-node/delete-query-node.js +15 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +1 -1
- package/dist/cjs/operation-node/raw-node.d.ts +4 -2
- package/dist/cjs/operation-node/raw-node.js +8 -2
- package/dist/cjs/parser/complex-expression-parser.d.ts +5 -5
- package/dist/cjs/parser/complex-expression-parser.js +5 -4
- package/dist/cjs/parser/filter-parser.d.ts +9 -9
- package/dist/cjs/parser/filter-parser.js +31 -30
- package/dist/cjs/parser/group-by-parser.d.ts +1 -2
- package/dist/cjs/parser/group-by-parser.js +2 -2
- package/dist/cjs/parser/insert-values-parser.d.ts +1 -2
- package/dist/cjs/parser/insert-values-parser.js +6 -6
- package/dist/cjs/parser/join-parser.d.ts +1 -2
- package/dist/cjs/parser/join-parser.js +8 -7
- package/dist/cjs/parser/order-by-parser.d.ts +1 -2
- package/dist/cjs/parser/order-by-parser.js +4 -4
- package/dist/cjs/parser/parse-utils.d.ts +10 -0
- package/dist/cjs/parser/parse-utils.js +38 -0
- package/dist/cjs/parser/reference-parser.d.ts +2 -3
- package/dist/cjs/parser/reference-parser.js +5 -5
- package/dist/cjs/parser/select-parser.d.ts +1 -2
- package/dist/cjs/parser/select-parser.js +5 -5
- package/dist/cjs/parser/table-parser.d.ts +2 -3
- package/dist/cjs/parser/table-parser.js +5 -5
- package/dist/cjs/parser/update-set-parser.d.ts +1 -2
- package/dist/cjs/parser/update-set-parser.js +2 -2
- package/dist/cjs/parser/value-parser.d.ts +3 -4
- package/dist/cjs/parser/value-parser.js +7 -7
- package/dist/cjs/parser/with-parser.d.ts +1 -2
- package/dist/cjs/parser/with-parser.js +3 -2
- package/dist/cjs/query-builder/delete-query-builder.d.ts +77 -20
- package/dist/cjs/query-builder/delete-query-builder.js +81 -14
- package/dist/cjs/query-builder/expression-builder.d.ts +4 -13
- package/dist/cjs/query-builder/expression-builder.js +12 -21
- package/dist/cjs/query-builder/function-builder.d.ts +2 -6
- package/dist/cjs/query-builder/function-builder.js +5 -8
- package/dist/cjs/query-builder/insert-query-builder.d.ts +11 -9
- package/dist/cjs/query-builder/insert-query-builder.js +8 -7
- package/dist/cjs/query-builder/join-builder.d.ts +0 -2
- package/dist/cjs/query-builder/join-builder.js +8 -8
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +24 -20
- package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
- package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
- package/dist/cjs/query-builder/select-query-builder.d.ts +43 -32
- package/dist/cjs/query-builder/select-query-builder.js +28 -26
- package/dist/cjs/query-builder/update-query-builder.d.ts +29 -25
- package/dist/cjs/query-builder/update-query-builder.js +22 -20
- package/dist/cjs/query-builder/where-interface.d.ts +20 -16
- package/dist/cjs/query-compiler/default-query-compiler.js +16 -7
- package/dist/cjs/query-creator.d.ts +24 -138
- package/dist/cjs/query-creator.js +19 -145
- package/dist/cjs/query-executor/default-query-executor.d.ts +8 -1
- package/dist/cjs/query-executor/default-query-executor.js +13 -13
- package/dist/cjs/query-executor/noop-query-executor.d.ts +8 -0
- package/dist/cjs/query-executor/noop-query-executor.js +8 -1
- package/dist/cjs/query-executor/query-executor-provider.d.ts +8 -0
- package/dist/cjs/query-executor/query-executor-provider.js +2 -0
- package/dist/cjs/query-executor/query-executor.d.ts +7 -0
- package/dist/cjs/raw-builder/raw-builder.d.ts +42 -11
- package/dist/cjs/raw-builder/raw-builder.js +55 -56
- package/dist/cjs/raw-builder/sql.d.ts +323 -0
- package/dist/cjs/raw-builder/sql.js +153 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +20 -8
- package/dist/cjs/schema/alter-table-builder.js +3 -3
- package/dist/cjs/schema/column-definition-builder.d.ts +20 -8
- package/dist/cjs/schema/create-index-builder.d.ts +3 -1
- package/dist/cjs/schema/create-index-builder.js +3 -1
- package/dist/cjs/schema/create-table-builder.d.ts +6 -2
- package/dist/cjs/schema/create-table-builder.js +8 -4
- package/dist/cjs/schema/create-view-builder.d.ts +3 -3
- package/dist/cjs/schema/create-view-builder.js +3 -3
- package/dist/cjs/util/query-id.js +10 -4
- package/dist/cjs/util/random-string.js +65 -2
- package/dist/esm/dialect/mysql/mysql-adapter.js +3 -4
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -1
- package/dist/esm/dialect/postgres/postgres-adapter.js +3 -2
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -1
- package/dist/esm/index-nodeless.d.ts +2 -0
- package/dist/esm/index-nodeless.js +2 -0
- package/dist/esm/kysely.d.ts +3 -6
- package/dist/esm/kysely.js +9 -14
- package/dist/esm/migration/migrator.d.ts +22 -0
- package/dist/esm/migration/migrator.js +27 -5
- package/dist/esm/operation-node/delete-query-node.d.ts +7 -0
- package/dist/esm/operation-node/delete-query-node.js +15 -0
- package/dist/esm/operation-node/operation-node-transformer.js +1 -1
- package/dist/esm/operation-node/raw-node.d.ts +4 -2
- package/dist/esm/operation-node/raw-node.js +8 -2
- package/dist/esm/parser/complex-expression-parser.d.ts +5 -5
- package/dist/esm/parser/complex-expression-parser.js +5 -4
- package/dist/esm/parser/filter-parser.d.ts +9 -9
- package/dist/esm/parser/filter-parser.js +31 -30
- package/dist/esm/parser/group-by-parser.d.ts +1 -2
- package/dist/esm/parser/group-by-parser.js +2 -2
- package/dist/esm/parser/insert-values-parser.d.ts +1 -2
- package/dist/esm/parser/insert-values-parser.js +6 -6
- package/dist/esm/parser/join-parser.d.ts +1 -2
- package/dist/esm/parser/join-parser.js +8 -7
- package/dist/esm/parser/order-by-parser.d.ts +1 -2
- package/dist/esm/parser/order-by-parser.js +4 -4
- package/dist/esm/parser/parse-utils.d.ts +10 -0
- package/dist/esm/parser/parse-utils.js +32 -0
- package/dist/esm/parser/reference-parser.d.ts +2 -3
- package/dist/esm/parser/reference-parser.js +5 -5
- package/dist/esm/parser/select-parser.d.ts +1 -2
- package/dist/esm/parser/select-parser.js +5 -5
- package/dist/esm/parser/table-parser.d.ts +2 -3
- package/dist/esm/parser/table-parser.js +5 -5
- package/dist/esm/parser/update-set-parser.d.ts +1 -2
- package/dist/esm/parser/update-set-parser.js +2 -2
- package/dist/esm/parser/value-parser.d.ts +3 -4
- package/dist/esm/parser/value-parser.js +7 -7
- package/dist/esm/parser/with-parser.d.ts +1 -2
- package/dist/esm/parser/with-parser.js +3 -2
- package/dist/esm/query-builder/delete-query-builder.d.ts +77 -20
- package/dist/esm/query-builder/delete-query-builder.js +81 -14
- package/dist/esm/query-builder/expression-builder.d.ts +4 -13
- package/dist/esm/query-builder/expression-builder.js +12 -21
- package/dist/esm/query-builder/function-builder.d.ts +2 -6
- package/dist/esm/query-builder/function-builder.js +5 -8
- package/dist/esm/query-builder/insert-query-builder.d.ts +11 -9
- package/dist/esm/query-builder/insert-query-builder.js +8 -7
- package/dist/esm/query-builder/join-builder.d.ts +0 -2
- package/dist/esm/query-builder/join-builder.js +8 -8
- package/dist/esm/query-builder/on-conflict-builder.d.ts +24 -20
- package/dist/esm/query-builder/on-conflict-builder.js +17 -17
- package/dist/esm/query-builder/returning-interface.d.ts +2 -2
- package/dist/esm/query-builder/select-query-builder.d.ts +43 -32
- package/dist/esm/query-builder/select-query-builder.js +28 -26
- package/dist/esm/query-builder/update-query-builder.d.ts +29 -25
- package/dist/esm/query-builder/update-query-builder.js +22 -20
- package/dist/esm/query-builder/where-interface.d.ts +20 -16
- package/dist/esm/query-compiler/default-query-compiler.js +16 -7
- package/dist/esm/query-creator.d.ts +24 -138
- package/dist/esm/query-creator.js +19 -145
- package/dist/esm/query-executor/default-query-executor.d.ts +8 -1
- package/dist/esm/query-executor/default-query-executor.js +13 -13
- package/dist/esm/query-executor/noop-query-executor.d.ts +8 -0
- package/dist/esm/query-executor/noop-query-executor.js +7 -0
- package/dist/esm/query-executor/query-executor-provider.d.ts +8 -0
- package/dist/esm/query-executor/query-executor-provider.js +2 -0
- package/dist/esm/query-executor/query-executor.d.ts +7 -0
- package/dist/esm/raw-builder/raw-builder.d.ts +42 -11
- package/dist/esm/raw-builder/raw-builder.js +56 -57
- package/dist/esm/raw-builder/sql.d.ts +323 -0
- package/dist/esm/raw-builder/sql.js +151 -0
- package/dist/esm/schema/alter-table-builder.d.ts +20 -8
- package/dist/esm/schema/alter-table-builder.js +3 -3
- package/dist/esm/schema/column-definition-builder.d.ts +20 -8
- package/dist/esm/schema/create-index-builder.d.ts +3 -1
- package/dist/esm/schema/create-index-builder.js +3 -1
- package/dist/esm/schema/create-table-builder.d.ts +6 -2
- package/dist/esm/schema/create-table-builder.js +8 -4
- package/dist/esm/schema/create-view-builder.d.ts +3 -3
- package/dist/esm/schema/create-view-builder.js +3 -3
- package/dist/esm/util/query-id.js +10 -4
- package/dist/esm/util/random-string.js +65 -2
- package/package.json +13 -13
- package/dist/cjs/parser/parse-context.d.ts +0 -55
- package/dist/cjs/parser/parse-context.js +0 -50
- package/dist/cjs/util/private-symbols.d.ts +0 -5
- package/dist/cjs/util/private-symbols.js +0 -8
- package/dist/esm/parser/parse-context.d.ts +0 -55
- package/dist/esm/parser/parse-context.js +0 -47
- package/dist/esm/util/private-symbols.d.ts +0 -5
- package/dist/esm/util/private-symbols.js +0 -6
|
@@ -34,10 +34,12 @@ export declare class CreateIndexBuilder implements OperationNodeSource, Compilab
|
|
|
34
34
|
* ### Examples
|
|
35
35
|
*
|
|
36
36
|
* ```ts
|
|
37
|
+
* import { sql } from 'kysely'
|
|
38
|
+
*
|
|
37
39
|
* await db.schema
|
|
38
40
|
* .createIndex('person_first_name_index')
|
|
39
41
|
* .on('person')
|
|
40
|
-
* .expression(
|
|
42
|
+
* .expression(sql`first_name COLLATE "fi_FI"`)
|
|
41
43
|
* .execute()
|
|
42
44
|
* ```
|
|
43
45
|
*/
|
|
@@ -67,10 +67,12 @@ class CreateIndexBuilder {
|
|
|
67
67
|
* ### Examples
|
|
68
68
|
*
|
|
69
69
|
* ```ts
|
|
70
|
+
* import { sql } from 'kysely'
|
|
71
|
+
*
|
|
70
72
|
* await db.schema
|
|
71
73
|
* .createIndex('person_first_name_index')
|
|
72
74
|
* .on('person')
|
|
73
|
-
* .expression(
|
|
75
|
+
* .expression(sql`first_name COLLATE "fi_FI"`)
|
|
74
76
|
* .execute()
|
|
75
77
|
* ```
|
|
76
78
|
*/
|
|
@@ -39,13 +39,15 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
|
|
|
39
39
|
* ### Examples
|
|
40
40
|
*
|
|
41
41
|
* ```ts
|
|
42
|
+
* import { sql } from 'kysely'
|
|
43
|
+
*
|
|
42
44
|
* await db.schema
|
|
43
45
|
* .createTable('person')
|
|
44
46
|
* .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey()),
|
|
45
47
|
* .addColumn('first_name', 'varchar(50)', (col) => col.notNull())
|
|
46
48
|
* .addColumn('last_name', 'varchar(255)')
|
|
47
49
|
* .addColumn('bank_balance', 'numeric(8, 2)')
|
|
48
|
-
* .addColumn('data',
|
|
50
|
+
* .addColumn('data', sql`customtype`)
|
|
49
51
|
* .addColumn('parent_id', 'integer', (col) =>
|
|
50
52
|
* col.references('person.id').onDelete('cascade'))
|
|
51
53
|
* )
|
|
@@ -111,7 +113,9 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
|
|
|
111
113
|
* ### Examples
|
|
112
114
|
*
|
|
113
115
|
* ```ts
|
|
114
|
-
*
|
|
116
|
+
* import { sql } from 'kysely'
|
|
117
|
+
*
|
|
118
|
+
* addCheckConstraint('check_legs', sql`number_of_legs < 5`)
|
|
115
119
|
* ```
|
|
116
120
|
*/
|
|
117
121
|
addCheckConstraint(constraintName: string, checkExpression: AnyRawBuilder): CreateTableBuilder<TB, C>;
|
|
@@ -8,12 +8,12 @@ const column_definition_builder_js_1 = require("./column-definition-builder.js")
|
|
|
8
8
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
9
9
|
const foreign_key_constraint_node_js_1 = require("../operation-node/foreign-key-constraint-node.js");
|
|
10
10
|
const column_node_js_1 = require("../operation-node/column-node.js");
|
|
11
|
-
const table_node_js_1 = require("../operation-node/table-node.js");
|
|
12
11
|
const foreign_key_constraint_builder_js_1 = require("./foreign-key-constraint-builder.js");
|
|
13
12
|
const data_type_parser_js_1 = require("../parser/data-type-parser.js");
|
|
14
13
|
const primary_constraint_node_js_1 = require("../operation-node/primary-constraint-node.js");
|
|
15
14
|
const unique_constraint_node_js_1 = require("../operation-node/unique-constraint-node.js");
|
|
16
15
|
const check_constraint_node_js_1 = require("../operation-node/check-constraint-node.js");
|
|
16
|
+
const table_parser_js_1 = require("../parser/table-parser.js");
|
|
17
17
|
/**
|
|
18
18
|
* This builder can be used to create a `create table` query.
|
|
19
19
|
*/
|
|
@@ -68,13 +68,15 @@ class CreateTableBuilder {
|
|
|
68
68
|
* ### Examples
|
|
69
69
|
*
|
|
70
70
|
* ```ts
|
|
71
|
+
* import { sql } from 'kysely'
|
|
72
|
+
*
|
|
71
73
|
* await db.schema
|
|
72
74
|
* .createTable('person')
|
|
73
75
|
* .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey()),
|
|
74
76
|
* .addColumn('first_name', 'varchar(50)', (col) => col.notNull())
|
|
75
77
|
* .addColumn('last_name', 'varchar(255)')
|
|
76
78
|
* .addColumn('bank_balance', 'numeric(8, 2)')
|
|
77
|
-
* .addColumn('data',
|
|
79
|
+
* .addColumn('data', sql`customtype`)
|
|
78
80
|
* .addColumn('parent_id', 'integer', (col) =>
|
|
79
81
|
* col.references('person.id').onDelete('cascade'))
|
|
80
82
|
* )
|
|
@@ -156,7 +158,9 @@ class CreateTableBuilder {
|
|
|
156
158
|
* ### Examples
|
|
157
159
|
*
|
|
158
160
|
* ```ts
|
|
159
|
-
*
|
|
161
|
+
* import { sql } from 'kysely'
|
|
162
|
+
*
|
|
163
|
+
* addCheckConstraint('check_legs', sql`number_of_legs < 5`)
|
|
160
164
|
* ```
|
|
161
165
|
*/
|
|
162
166
|
addCheckConstraint(constraintName, checkExpression) {
|
|
@@ -195,7 +199,7 @@ class CreateTableBuilder {
|
|
|
195
199
|
* ```
|
|
196
200
|
*/
|
|
197
201
|
addForeignKeyConstraint(constraintName, columns, targetTable, targetColumns, build = object_utils_js_1.noop) {
|
|
198
|
-
const builder = build(new foreign_key_constraint_builder_js_1.ForeignKeyConstraintBuilder(foreign_key_constraint_node_js_1.ForeignKeyConstraintNode.create(columns.map(column_node_js_1.ColumnNode.create),
|
|
202
|
+
const builder = build(new foreign_key_constraint_builder_js_1.ForeignKeyConstraintBuilder(foreign_key_constraint_node_js_1.ForeignKeyConstraintNode.create(columns.map(column_node_js_1.ColumnNode.create), (0, table_parser_js_1.parseTable)(targetTable), targetColumns.map(column_node_js_1.ColumnNode.create), constraintName)));
|
|
199
203
|
return new CreateTableBuilder({
|
|
200
204
|
...this.#props,
|
|
201
205
|
createTableNode: create_table_node_js_1.CreateTableNode.cloneWithConstraint(this.#props.createTableNode, builder.toOperationNode()),
|
|
@@ -26,9 +26,9 @@ export declare class CreateViewBuilder implements OperationNodeSource, Compilabl
|
|
|
26
26
|
*
|
|
27
27
|
* WARNING!
|
|
28
28
|
* Some dialects don't support parameterized queries in DDL statements and therefore
|
|
29
|
-
* the query or
|
|
30
|
-
* opening an SQL injection vulnerability. DO NOT pass unchecked user input
|
|
31
|
-
* the query or
|
|
29
|
+
* the query or raw {@link sql } expression passed here is interpolated into a single
|
|
30
|
+
* string opening an SQL injection vulnerability. DO NOT pass unchecked user input
|
|
31
|
+
* into the query or raw expression passed to this method!
|
|
32
32
|
*/
|
|
33
33
|
as(query: AnySelectQueryBuilder | AnyRawBuilder): CreateViewBuilder;
|
|
34
34
|
toOperationNode(): CreateViewNode;
|
|
@@ -64,9 +64,9 @@ class CreateViewBuilder {
|
|
|
64
64
|
*
|
|
65
65
|
* WARNING!
|
|
66
66
|
* Some dialects don't support parameterized queries in DDL statements and therefore
|
|
67
|
-
* the query or
|
|
68
|
-
* opening an SQL injection vulnerability. DO NOT pass unchecked user input
|
|
69
|
-
* the query or
|
|
67
|
+
* the query or raw {@link sql } expression passed here is interpolated into a single
|
|
68
|
+
* string opening an SQL injection vulnerability. DO NOT pass unchecked user input
|
|
69
|
+
* into the query or raw expression passed to this method!
|
|
70
70
|
*/
|
|
71
71
|
as(query) {
|
|
72
72
|
const queryNode = query
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createQueryId = void 0;
|
|
4
|
-
const object_utils_js_1 = require("./object-utils.js");
|
|
5
4
|
const random_string_js_1 = require("./random-string.js");
|
|
6
5
|
function createQueryId() {
|
|
7
|
-
return (
|
|
8
|
-
queryId: (0, random_string_js_1.randomString)(8),
|
|
9
|
-
});
|
|
6
|
+
return new LazyQueryId();
|
|
10
7
|
}
|
|
11
8
|
exports.createQueryId = createQueryId;
|
|
9
|
+
class LazyQueryId {
|
|
10
|
+
#queryId;
|
|
11
|
+
get queryId() {
|
|
12
|
+
if (this.#queryId === undefined) {
|
|
13
|
+
this.#queryId = (0, random_string_js_1.randomString)(8);
|
|
14
|
+
}
|
|
15
|
+
return this.#queryId;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1,7 +1,70 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.randomString = void 0;
|
|
4
|
-
const CHARS =
|
|
4
|
+
const CHARS = [
|
|
5
|
+
'A',
|
|
6
|
+
'B',
|
|
7
|
+
'C',
|
|
8
|
+
'D',
|
|
9
|
+
'E',
|
|
10
|
+
'F',
|
|
11
|
+
'G',
|
|
12
|
+
'H',
|
|
13
|
+
'I',
|
|
14
|
+
'J',
|
|
15
|
+
'K',
|
|
16
|
+
'L',
|
|
17
|
+
'M',
|
|
18
|
+
'N',
|
|
19
|
+
'O',
|
|
20
|
+
'P',
|
|
21
|
+
'Q',
|
|
22
|
+
'R',
|
|
23
|
+
'S',
|
|
24
|
+
'T',
|
|
25
|
+
'U',
|
|
26
|
+
'V',
|
|
27
|
+
'W',
|
|
28
|
+
'X',
|
|
29
|
+
'Y',
|
|
30
|
+
'Z',
|
|
31
|
+
'a',
|
|
32
|
+
'b',
|
|
33
|
+
'c',
|
|
34
|
+
'd',
|
|
35
|
+
'e',
|
|
36
|
+
'f',
|
|
37
|
+
'g',
|
|
38
|
+
'h',
|
|
39
|
+
'i',
|
|
40
|
+
'j',
|
|
41
|
+
'k',
|
|
42
|
+
'l',
|
|
43
|
+
'm',
|
|
44
|
+
'n',
|
|
45
|
+
'o',
|
|
46
|
+
'p',
|
|
47
|
+
'q',
|
|
48
|
+
'r',
|
|
49
|
+
's',
|
|
50
|
+
't',
|
|
51
|
+
'u',
|
|
52
|
+
'v',
|
|
53
|
+
'w',
|
|
54
|
+
'x',
|
|
55
|
+
'y',
|
|
56
|
+
'z',
|
|
57
|
+
'0',
|
|
58
|
+
'1',
|
|
59
|
+
'2',
|
|
60
|
+
'3',
|
|
61
|
+
'4',
|
|
62
|
+
'5',
|
|
63
|
+
'6',
|
|
64
|
+
'7',
|
|
65
|
+
'8',
|
|
66
|
+
'9',
|
|
67
|
+
];
|
|
5
68
|
function randomString(length) {
|
|
6
69
|
let chars = '';
|
|
7
70
|
for (let i = 0; i < length; ++i) {
|
|
@@ -11,5 +74,5 @@ function randomString(length) {
|
|
|
11
74
|
}
|
|
12
75
|
exports.randomString = randomString;
|
|
13
76
|
function randomChar() {
|
|
14
|
-
return CHARS[
|
|
77
|
+
return CHARS[~~(Math.random() * CHARS.length)];
|
|
15
78
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="./mysql-adapter.d.ts" />
|
|
2
|
+
import { sql } from '../../raw-builder/sql.js';
|
|
2
3
|
import { DialectAdapterBase } from '../dialect-adapter-base.js';
|
|
3
4
|
const LOCK_ID = 'ea586330-2c93-47c8-908d-981d9d270f9d';
|
|
4
5
|
const LOCK_TIMEOUT_SECONDS = 60 * 60;
|
|
@@ -16,11 +17,9 @@ export class MysqlAdapter extends DialectAdapterBase {
|
|
|
16
17
|
// is released using `release_lock`. This way we know that the lock is either
|
|
17
18
|
// released by us after successfull or failed migrations OR it's released by
|
|
18
19
|
// MySQL if the process gets killed for some reason.
|
|
19
|
-
await db
|
|
20
|
-
.raw(`select get_lock('${LOCK_ID}', ${LOCK_TIMEOUT_SECONDS})`)
|
|
21
|
-
.execute();
|
|
20
|
+
await sql `select get_lock(${sql.literal(LOCK_ID)}, ${sql.literal(LOCK_TIMEOUT_SECONDS)})`.execute(db);
|
|
22
21
|
}
|
|
23
22
|
async releaseMigrationLock(db) {
|
|
24
|
-
await
|
|
23
|
+
await sql `select release_lock(${sql.literal(LOCK_ID)})`.execute(db);
|
|
25
24
|
}
|
|
26
25
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="./mysql-introspector.d.ts" />
|
|
2
2
|
import { MIGRATION_LOCK_TABLE, MIGRATION_TABLE, } from '../../migration/migrator.js';
|
|
3
3
|
import { freeze } from '../../util/object-utils.js';
|
|
4
|
+
import { sql } from '../../raw-builder/sql.js';
|
|
4
5
|
export class MysqlIntrospector {
|
|
5
6
|
#db;
|
|
6
7
|
constructor(db) {
|
|
@@ -10,7 +11,7 @@ export class MysqlIntrospector {
|
|
|
10
11
|
let query = this.#db
|
|
11
12
|
.selectFrom('information_schema.columns')
|
|
12
13
|
.selectAll()
|
|
13
|
-
.where('table_schema', '=',
|
|
14
|
+
.where('table_schema', '=', sql `database()`)
|
|
14
15
|
.castTo();
|
|
15
16
|
if (!options.withInternalKyselyTables) {
|
|
16
17
|
query = query
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/// <reference types="./postgres-adapter.d.ts" />
|
|
2
|
+
import { sql } from '../../raw-builder/sql.js';
|
|
2
3
|
import { DialectAdapterBase } from '../dialect-adapter-base.js';
|
|
3
4
|
// Random id for our transaction lock.
|
|
4
|
-
const LOCK_ID =
|
|
5
|
+
const LOCK_ID = 3853314791062309107n;
|
|
5
6
|
export class PostgresAdapter extends DialectAdapterBase {
|
|
6
7
|
get supportsTransactionalDdl() {
|
|
7
8
|
return true;
|
|
@@ -11,7 +12,7 @@ export class PostgresAdapter extends DialectAdapterBase {
|
|
|
11
12
|
}
|
|
12
13
|
async acquireMigrationLock(db) {
|
|
13
14
|
// Acquire a transaction level advisory lock.
|
|
14
|
-
await
|
|
15
|
+
await sql `select pg_advisory_xact_lock(${sql.literal(LOCK_ID)})`.execute(db);
|
|
15
16
|
}
|
|
16
17
|
async releaseMigrationLock() {
|
|
17
18
|
// Nothing to do here. `pg_advisory_xact_lock` is automatically released at the
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="./sqlite-introspector.d.ts" />
|
|
2
2
|
import { MIGRATION_LOCK_TABLE, MIGRATION_TABLE, } from '../../migration/migrator.js';
|
|
3
|
+
import { sql } from '../../raw-builder/sql.js';
|
|
3
4
|
export class SqliteIntrospector {
|
|
4
5
|
#db;
|
|
5
6
|
constructor(db) {
|
|
@@ -25,7 +26,7 @@ export class SqliteIntrospector {
|
|
|
25
26
|
async #getTableMetadata(table) {
|
|
26
27
|
const db = this.#db;
|
|
27
28
|
const columns = await db
|
|
28
|
-
.selectFrom(
|
|
29
|
+
.selectFrom(sql `PRAGMA_TABLE_INFO(${table})`.as('table_info'))
|
|
29
30
|
.select(['name', 'type', 'notnull'])
|
|
30
31
|
.castTo()
|
|
31
32
|
.execute();
|
|
@@ -17,9 +17,11 @@ export * from './query-builder/delete-result.js';
|
|
|
17
17
|
export * from './query-builder/update-result.js';
|
|
18
18
|
export * from './query-builder/on-conflict-builder.js';
|
|
19
19
|
export * from './raw-builder/raw-builder.js';
|
|
20
|
+
export * from './raw-builder/sql.js';
|
|
20
21
|
export * from './query-executor/query-executor.js';
|
|
21
22
|
export * from './query-executor/default-query-executor.js';
|
|
22
23
|
export * from './query-executor/noop-query-executor.js';
|
|
24
|
+
export * from './query-executor/query-executor-provider.js';
|
|
23
25
|
export * from './query-compiler/default-query-compiler.js';
|
|
24
26
|
export * from './query-compiler/compiled-query.js';
|
|
25
27
|
export * from './schema/schema.js';
|
|
@@ -18,9 +18,11 @@ export * from './query-builder/delete-result.js';
|
|
|
18
18
|
export * from './query-builder/update-result.js';
|
|
19
19
|
export * from './query-builder/on-conflict-builder.js';
|
|
20
20
|
export * from './raw-builder/raw-builder.js';
|
|
21
|
+
export * from './raw-builder/sql.js';
|
|
21
22
|
export * from './query-executor/query-executor.js';
|
|
22
23
|
export * from './query-executor/default-query-executor.js';
|
|
23
24
|
export * from './query-executor/noop-query-executor.js';
|
|
25
|
+
export * from './query-executor/query-executor-provider.js';
|
|
24
26
|
export * from './query-compiler/default-query-compiler.js';
|
|
25
27
|
export * from './query-compiler/compiled-query.js';
|
|
26
28
|
export * from './schema/schema.js';
|
package/dist/esm/kysely.d.ts
CHANGED
|
@@ -6,11 +6,9 @@ import { QueryCreator } from './query-creator.js';
|
|
|
6
6
|
import { KyselyPlugin } from './plugin/kysely-plugin.js';
|
|
7
7
|
import { DatabaseIntrospector } from './dialect/database-introspector.js';
|
|
8
8
|
import { Driver, IsolationLevel } from './driver/driver.js';
|
|
9
|
-
import { ParseContext } from './parser/parse-context.js';
|
|
10
9
|
import { FunctionBuilder } from './query-builder/function-builder.js';
|
|
11
10
|
import { LogConfig } from './util/log.js';
|
|
12
|
-
import {
|
|
13
|
-
import { DialectAdapter } from './dialect/dialect-adapter.js';
|
|
11
|
+
import { QueryExecutorProvider } from './query-executor/query-executor-provider.js';
|
|
14
12
|
/**
|
|
15
13
|
* The main Kysely class.
|
|
16
14
|
*
|
|
@@ -54,7 +52,7 @@ import { DialectAdapter } from './dialect/dialect-adapter.js';
|
|
|
54
52
|
* in the database and values must be interfaces that describe the rows in those
|
|
55
53
|
* tables. See the examples above.
|
|
56
54
|
*/
|
|
57
|
-
export declare class Kysely<DB> extends QueryCreator<DB> {
|
|
55
|
+
export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecutorProvider {
|
|
58
56
|
#private;
|
|
59
57
|
constructor(args: KyselyConfig);
|
|
60
58
|
constructor(args: KyselyProps);
|
|
@@ -226,7 +224,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
|
|
|
226
224
|
* @internal
|
|
227
225
|
* @private
|
|
228
226
|
*/
|
|
229
|
-
|
|
227
|
+
getExecutor(): QueryExecutor;
|
|
230
228
|
}
|
|
231
229
|
export declare class Transaction<DB> extends Kysely<DB> {
|
|
232
230
|
#private;
|
|
@@ -357,7 +355,6 @@ export interface KyselyProps {
|
|
|
357
355
|
readonly driver: Driver;
|
|
358
356
|
readonly executor: QueryExecutor;
|
|
359
357
|
readonly dialect: Dialect;
|
|
360
|
-
readonly parseContext: ParseContext;
|
|
361
358
|
}
|
|
362
359
|
export declare function isKyselyProps(obj: unknown): obj is KyselyProps;
|
|
363
360
|
export interface KyselyConfig {
|
package/dist/esm/kysely.js
CHANGED
|
@@ -9,10 +9,8 @@ import { RuntimeDriver } from './driver/runtime-driver.js';
|
|
|
9
9
|
import { SingleConnectionProvider } from './driver/single-connection-provider.js';
|
|
10
10
|
import { TRANSACTION_ISOLATION_LEVELS, } from './driver/driver.js';
|
|
11
11
|
import { preventAwait } from './util/prevent-await.js';
|
|
12
|
-
import { DefaultParseContext } from './parser/parse-context.js';
|
|
13
12
|
import { FunctionBuilder } from './query-builder/function-builder.js';
|
|
14
13
|
import { Log } from './util/log.js';
|
|
15
|
-
import { PRIVATE_ADAPTER } from './util/private-symbols.js';
|
|
16
14
|
/**
|
|
17
15
|
* The main Kysely class.
|
|
18
16
|
*
|
|
@@ -62,7 +60,7 @@ export class Kysely extends QueryCreator {
|
|
|
62
60
|
let superProps;
|
|
63
61
|
let props;
|
|
64
62
|
if (isKyselyProps(args)) {
|
|
65
|
-
superProps = { executor: args.executor
|
|
63
|
+
superProps = { executor: args.executor };
|
|
66
64
|
props = { ...args };
|
|
67
65
|
}
|
|
68
66
|
else {
|
|
@@ -71,17 +69,15 @@ export class Kysely extends QueryCreator {
|
|
|
71
69
|
const compiler = dialect.createQueryCompiler();
|
|
72
70
|
const adapter = dialect.createAdapter();
|
|
73
71
|
const log = new Log(args.log ?? []);
|
|
74
|
-
const parseContext = new DefaultParseContext(adapter);
|
|
75
72
|
const runtimeDriver = new RuntimeDriver(driver, log);
|
|
76
73
|
const connectionProvider = new DefaultConnectionProvider(runtimeDriver);
|
|
77
|
-
const executor = new DefaultQueryExecutor(compiler, connectionProvider, args.plugins ?? []);
|
|
78
|
-
superProps = { executor
|
|
74
|
+
const executor = new DefaultQueryExecutor(compiler, adapter, connectionProvider, args.plugins ?? []);
|
|
75
|
+
superProps = { executor };
|
|
79
76
|
props = {
|
|
80
77
|
config: args,
|
|
81
78
|
executor,
|
|
82
79
|
dialect,
|
|
83
80
|
driver: runtimeDriver,
|
|
84
|
-
parseContext,
|
|
85
81
|
};
|
|
86
82
|
}
|
|
87
83
|
super(superProps);
|
|
@@ -137,7 +133,7 @@ export class Kysely extends QueryCreator {
|
|
|
137
133
|
* ```
|
|
138
134
|
*/
|
|
139
135
|
get fn() {
|
|
140
|
-
return new FunctionBuilder(
|
|
136
|
+
return new FunctionBuilder();
|
|
141
137
|
}
|
|
142
138
|
/**
|
|
143
139
|
* Creates a {@link TransactionBuilder} that can be used to run queries inside a transaction.
|
|
@@ -283,8 +279,8 @@ export class Kysely extends QueryCreator {
|
|
|
283
279
|
* @internal
|
|
284
280
|
* @private
|
|
285
281
|
*/
|
|
286
|
-
|
|
287
|
-
return this.#props.
|
|
282
|
+
getExecutor() {
|
|
283
|
+
return this.#props.executor;
|
|
288
284
|
}
|
|
289
285
|
}
|
|
290
286
|
export class Transaction extends Kysely {
|
|
@@ -329,8 +325,7 @@ export function isKyselyProps(obj) {
|
|
|
329
325
|
isObject(obj.config) &&
|
|
330
326
|
isObject(obj.driver) &&
|
|
331
327
|
isObject(obj.executor) &&
|
|
332
|
-
isObject(obj.dialect)
|
|
333
|
-
isObject(obj.parseContext));
|
|
328
|
+
isObject(obj.dialect));
|
|
334
329
|
}
|
|
335
330
|
export class ConnectionBuilder {
|
|
336
331
|
#props;
|
|
@@ -340,12 +335,12 @@ export class ConnectionBuilder {
|
|
|
340
335
|
async execute(callback) {
|
|
341
336
|
const connection = await this.#props.driver.acquireConnection();
|
|
342
337
|
const connectionProvider = new SingleConnectionProvider(connection);
|
|
343
|
-
const
|
|
338
|
+
const db = new Kysely({
|
|
344
339
|
...this.#props,
|
|
345
340
|
executor: this.#props.executor.withConnectionProvider(connectionProvider),
|
|
346
341
|
});
|
|
347
342
|
try {
|
|
348
|
-
return await callback(
|
|
343
|
+
return await callback(db);
|
|
349
344
|
}
|
|
350
345
|
finally {
|
|
351
346
|
await this.#props.driver.releaseConnection(connection);
|
|
@@ -36,6 +36,12 @@ export interface Migration {
|
|
|
36
36
|
export declare class Migrator {
|
|
37
37
|
#private;
|
|
38
38
|
constructor(props: MigratorProps);
|
|
39
|
+
/**
|
|
40
|
+
* Returns a {@link MigrationInfo} object for each migration.
|
|
41
|
+
*
|
|
42
|
+
* The returned array is sorted by migration name.
|
|
43
|
+
*/
|
|
44
|
+
getMigrations(): Promise<ReadonlyArray<MigrationInfo>>;
|
|
39
45
|
/**
|
|
40
46
|
* Runs all migrations that have not yet been run.
|
|
41
47
|
*
|
|
@@ -219,3 +225,19 @@ export interface MigrationProvider {
|
|
|
219
225
|
export interface NoMigrations {
|
|
220
226
|
readonly __noMigrations__: true;
|
|
221
227
|
}
|
|
228
|
+
export interface MigrationInfo {
|
|
229
|
+
/**
|
|
230
|
+
* Name of the migration.
|
|
231
|
+
*/
|
|
232
|
+
name: string;
|
|
233
|
+
/**
|
|
234
|
+
* The actual migration.
|
|
235
|
+
*/
|
|
236
|
+
migration: Migration;
|
|
237
|
+
/**
|
|
238
|
+
* When was the migration executed.
|
|
239
|
+
*
|
|
240
|
+
* If this is undefined, the migration hasn't been executed yet.
|
|
241
|
+
*/
|
|
242
|
+
executedAt?: Date;
|
|
243
|
+
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/// <reference types="./migrator.d.ts" />
|
|
2
2
|
import { freeze, getLast } from '../util/object-utils.js';
|
|
3
|
-
import { PRIVATE_ADAPTER } from '../util/private-symbols.js';
|
|
4
3
|
export const MIGRATION_TABLE = 'kysely_migration';
|
|
5
4
|
export const MIGRATION_LOCK_TABLE = 'kysely_migration_lock';
|
|
6
5
|
export const MIGRATION_LOCK_ID = 'migration_lock';
|
|
@@ -30,6 +29,28 @@ export class Migrator {
|
|
|
30
29
|
constructor(props) {
|
|
31
30
|
this.#props = freeze(props);
|
|
32
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns a {@link MigrationInfo} object for each migration.
|
|
34
|
+
*
|
|
35
|
+
* The returned array is sorted by migration name.
|
|
36
|
+
*/
|
|
37
|
+
async getMigrations() {
|
|
38
|
+
const executedMigrations = (await this.#doesTableExists(MIGRATION_TABLE))
|
|
39
|
+
? await this.#props.db
|
|
40
|
+
.selectFrom(MIGRATION_TABLE)
|
|
41
|
+
.select(['name', 'timestamp'])
|
|
42
|
+
.execute()
|
|
43
|
+
: [];
|
|
44
|
+
const migrations = await this.#resolveMigrations();
|
|
45
|
+
return migrations.map(({ name, ...migration }) => {
|
|
46
|
+
const executed = executedMigrations.find((it) => it.name === name);
|
|
47
|
+
return {
|
|
48
|
+
name,
|
|
49
|
+
migration,
|
|
50
|
+
executedAt: executed ? new Date(executed.timestamp) : undefined,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
33
54
|
/**
|
|
34
55
|
* Runs all migrations that have not yet been run.
|
|
35
56
|
*
|
|
@@ -213,7 +234,7 @@ export class Migrator {
|
|
|
213
234
|
try {
|
|
214
235
|
await this.#props.db
|
|
215
236
|
.insertInto(MIGRATION_LOCK_TABLE)
|
|
216
|
-
.values({ id: MIGRATION_LOCK_ID })
|
|
237
|
+
.values({ id: MIGRATION_LOCK_ID, is_locked: 0 })
|
|
217
238
|
.execute();
|
|
218
239
|
}
|
|
219
240
|
catch (error) {
|
|
@@ -238,9 +259,10 @@ export class Migrator {
|
|
|
238
259
|
return !!lockRow;
|
|
239
260
|
}
|
|
240
261
|
async #runMigrations(getTargetMigrationIndex) {
|
|
262
|
+
const adapter = this.#props.db.getExecutor().adapter;
|
|
241
263
|
const run = async (db) => {
|
|
242
264
|
try {
|
|
243
|
-
await
|
|
265
|
+
await adapter.acquireMigrationLock(db);
|
|
244
266
|
const state = await this.#getState(db);
|
|
245
267
|
if (state.migrations.length === 0) {
|
|
246
268
|
return { results: [] };
|
|
@@ -258,10 +280,10 @@ export class Migrator {
|
|
|
258
280
|
return { results: [] };
|
|
259
281
|
}
|
|
260
282
|
finally {
|
|
261
|
-
await
|
|
283
|
+
await adapter.releaseMigrationLock(db);
|
|
262
284
|
}
|
|
263
285
|
};
|
|
264
|
-
if (
|
|
286
|
+
if (adapter.supportsTransactionalDdl) {
|
|
265
287
|
return this.#props.db.transaction().execute(run);
|
|
266
288
|
}
|
|
267
289
|
else {
|
|
@@ -5,6 +5,9 @@ import { TableExpressionNode } from './operation-node-utils.js';
|
|
|
5
5
|
import { ReturningNode } from './returning-node.js';
|
|
6
6
|
import { WhereNode } from './where-node.js';
|
|
7
7
|
import { WithNode } from './with-node.js';
|
|
8
|
+
import { LimitNode } from './limit-node.js';
|
|
9
|
+
import { OrderByNode } from './order-by-node.js';
|
|
10
|
+
import { OrderByItemNode } from './order-by-item-node.js';
|
|
8
11
|
export interface DeleteQueryNode extends OperationNode {
|
|
9
12
|
readonly kind: 'DeleteQueryNode';
|
|
10
13
|
readonly from: FromNode;
|
|
@@ -12,6 +15,8 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
12
15
|
readonly where?: WhereNode;
|
|
13
16
|
readonly returning?: ReturningNode;
|
|
14
17
|
readonly with?: WithNode;
|
|
18
|
+
readonly orderBy?: OrderByNode;
|
|
19
|
+
readonly limit?: LimitNode;
|
|
15
20
|
}
|
|
16
21
|
/**
|
|
17
22
|
* @internal
|
|
@@ -19,4 +24,6 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
19
24
|
export declare const DeleteQueryNode: Readonly<{
|
|
20
25
|
is(node: OperationNode): node is DeleteQueryNode;
|
|
21
26
|
create(fromItem: TableExpressionNode, withNode?: WithNode | undefined): DeleteQueryNode;
|
|
27
|
+
cloneWithOrderByItem(deleteNode: DeleteQueryNode, item: OrderByItemNode): DeleteQueryNode;
|
|
28
|
+
cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
|
|
22
29
|
}>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="./delete-query-node.d.ts" />
|
|
2
2
|
import { freeze } from '../util/object-utils.js';
|
|
3
3
|
import { FromNode } from './from-node.js';
|
|
4
|
+
import { OrderByNode } from './order-by-node.js';
|
|
4
5
|
/**
|
|
5
6
|
* @internal
|
|
6
7
|
*/
|
|
@@ -15,4 +16,18 @@ export const DeleteQueryNode = freeze({
|
|
|
15
16
|
...(withNode && { with: withNode }),
|
|
16
17
|
});
|
|
17
18
|
},
|
|
19
|
+
cloneWithOrderByItem(deleteNode, item) {
|
|
20
|
+
return freeze({
|
|
21
|
+
...deleteNode,
|
|
22
|
+
orderBy: deleteNode.orderBy
|
|
23
|
+
? OrderByNode.cloneWithItem(deleteNode.orderBy, item)
|
|
24
|
+
: OrderByNode.create(item),
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
cloneWithLimit(deleteNode, limit) {
|
|
28
|
+
return freeze({
|
|
29
|
+
...deleteNode,
|
|
30
|
+
limit,
|
|
31
|
+
});
|
|
32
|
+
},
|
|
18
33
|
});
|
|
@@ -218,7 +218,7 @@ export class OperationNodeTransformer {
|
|
|
218
218
|
return {
|
|
219
219
|
kind: 'RawNode',
|
|
220
220
|
sqlFragments: freeze([...node.sqlFragments]),
|
|
221
|
-
|
|
221
|
+
parameters: this.transformNodeList(node.parameters),
|
|
222
222
|
};
|
|
223
223
|
}
|
|
224
224
|
transformWhere(node) {
|
|
@@ -2,13 +2,15 @@ import { OperationNode } from './operation-node.js';
|
|
|
2
2
|
export interface RawNode extends OperationNode {
|
|
3
3
|
readonly kind: 'RawNode';
|
|
4
4
|
readonly sqlFragments: ReadonlyArray<string>;
|
|
5
|
-
readonly
|
|
5
|
+
readonly parameters: ReadonlyArray<OperationNode>;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* @internal
|
|
9
9
|
*/
|
|
10
10
|
export declare const RawNode: Readonly<{
|
|
11
11
|
is(node: OperationNode): node is RawNode;
|
|
12
|
-
create(sqlFragments: ReadonlyArray<string>,
|
|
12
|
+
create(sqlFragments: ReadonlyArray<string>, parameters: ReadonlyArray<OperationNode>): RawNode;
|
|
13
13
|
createWithSql(sql: string): RawNode;
|
|
14
|
+
createWithChild(child: OperationNode): RawNode;
|
|
15
|
+
createWithChildren(children: ReadonlyArray<OperationNode>): RawNode;
|
|
14
16
|
}>;
|