kysely 0.8.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -8
- package/dist/cjs/dialect/mysql/mysql-driver.js +7 -7
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -2
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -29
- package/dist/cjs/dialect/postgres/postgres-driver.js +5 -5
- package/dist/cjs/operation-node/create-schema-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-schema-node.js +2 -2
- package/dist/cjs/operation-node/create-table-node.d.ts +1 -5
- package/dist/cjs/operation-node/create-table-node.js +1 -31
- package/dist/cjs/operation-node/join-node.d.ts +2 -1
- package/dist/cjs/operation-node/join-node.js +8 -6
- package/dist/cjs/operation-node/operation-node-source.d.ts +1 -1
- package/dist/cjs/operation-node/operation-node-transformer.js +2 -1
- package/dist/cjs/operation-node/primitive-value-list-node.js +1 -1
- package/dist/cjs/operation-node/query-node.d.ts +4 -3
- package/dist/cjs/operation-node/query-node.js +10 -2
- package/dist/cjs/operation-node/select-query-node.d.ts +2 -1
- package/dist/cjs/operation-node/select-query-node.js +10 -2
- package/dist/cjs/parser/group-by-parser.d.ts +4 -0
- package/dist/cjs/parser/group-by-parser.js +9 -0
- package/dist/cjs/parser/join-parser.d.ts +6 -3
- package/dist/cjs/parser/order-by-parser.d.ts +2 -4
- package/dist/cjs/parser/order-by-parser.js +6 -3
- package/dist/cjs/parser/reference-parser.d.ts +1 -1
- package/dist/cjs/parser/reference-parser.js +1 -1
- package/dist/cjs/parser/table-parser.d.ts +8 -8
- package/dist/cjs/query-builder/function-builder.d.ts +6 -6
- package/dist/cjs/query-builder/function-builder.js +7 -7
- package/dist/cjs/query-builder/join-builder.js +8 -8
- package/dist/cjs/query-builder/query-builder.js +20 -22
- package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +4 -3
- package/dist/cjs/query-compiler/default-query-compiler.js +23 -29
- package/dist/cjs/query-creator.d.ts +14 -11
- package/dist/cjs/query-creator.js +14 -11
- package/dist/cjs/raw-builder/raw-builder.d.ts +1 -1
- package/dist/cjs/raw-builder/raw-builder.js +6 -6
- package/dist/cjs/schema/alter-table-builder.d.ts +3 -0
- package/dist/cjs/schema/alter-table-builder.js +3 -0
- package/dist/cjs/schema/column-definition-builder.d.ts +14 -5
- package/dist/cjs/schema/create-schema-builder.js +1 -1
- package/dist/cjs/schema/create-table-builder.d.ts +55 -10
- package/dist/cjs/schema/create-table-builder.js +59 -17
- package/dist/cjs/schema/schema.d.ts +37 -2
- package/dist/cjs/schema/schema.js +36 -1
- package/dist/cjs/util/object-utils.d.ts +12 -11
- package/dist/cjs/util/object-utils.js +6 -2
- package/dist/esm/dialect/mysql/mysql-driver.js +8 -8
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -2
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -29
- package/dist/esm/dialect/postgres/postgres-driver.js +5 -5
- package/dist/esm/operation-node/create-schema-node.d.ts +1 -1
- package/dist/esm/operation-node/create-schema-node.js +2 -2
- package/dist/esm/operation-node/create-table-node.d.ts +1 -5
- package/dist/esm/operation-node/create-table-node.js +1 -31
- package/dist/esm/operation-node/join-node.d.ts +2 -1
- package/dist/esm/operation-node/join-node.js +8 -6
- package/dist/esm/operation-node/operation-node-source.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.js +2 -1
- package/dist/esm/operation-node/primitive-value-list-node.js +1 -1
- package/dist/esm/operation-node/query-node.d.ts +4 -3
- package/dist/esm/operation-node/query-node.js +10 -2
- package/dist/esm/operation-node/select-query-node.d.ts +2 -1
- package/dist/esm/operation-node/select-query-node.js +10 -2
- package/dist/esm/parser/group-by-parser.d.ts +4 -0
- package/dist/esm/parser/group-by-parser.js +5 -0
- package/dist/esm/parser/join-parser.d.ts +6 -3
- package/dist/esm/parser/order-by-parser.d.ts +2 -4
- package/dist/esm/parser/order-by-parser.js +6 -2
- package/dist/esm/parser/reference-parser.d.ts +1 -1
- package/dist/esm/parser/reference-parser.js +2 -2
- package/dist/esm/parser/table-parser.d.ts +8 -8
- package/dist/esm/query-builder/function-builder.d.ts +6 -6
- package/dist/esm/query-builder/function-builder.js +7 -7
- package/dist/esm/query-builder/join-builder.js +8 -8
- package/dist/esm/query-builder/query-builder.js +21 -23
- package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +4 -3
- package/dist/esm/query-compiler/default-query-compiler.js +23 -29
- package/dist/esm/query-creator.d.ts +14 -11
- package/dist/esm/query-creator.js +14 -11
- package/dist/esm/raw-builder/raw-builder.d.ts +1 -1
- package/dist/esm/raw-builder/raw-builder.js +6 -6
- package/dist/esm/schema/alter-table-builder.d.ts +3 -0
- package/dist/esm/schema/alter-table-builder.js +3 -0
- package/dist/esm/schema/column-definition-builder.d.ts +14 -5
- package/dist/esm/schema/create-schema-builder.js +1 -1
- package/dist/esm/schema/create-table-builder.d.ts +55 -10
- package/dist/esm/schema/create-table-builder.js +60 -18
- package/dist/esm/schema/schema.d.ts +37 -2
- package/dist/esm/schema/schema.js +36 -1
- package/dist/esm/util/object-utils.d.ts +12 -11
- package/dist/esm/util/object-utils.js +4 -1
- package/package.json +1 -1
|
@@ -2,12 +2,18 @@ import { ColumnDefinitionNode } from '../operation-node/column-definition-node.j
|
|
|
2
2
|
import { CreateTableNode } from '../operation-node/create-table-node.js';
|
|
3
3
|
import { preventAwait } from '../util/prevent-await.js';
|
|
4
4
|
import { ColumnDefinitionBuilder } from './column-definition-builder.js';
|
|
5
|
-
import { freeze } from '../util/object-utils.js';
|
|
5
|
+
import { freeze, noop } from '../util/object-utils.js';
|
|
6
6
|
import { ForeignKeyConstraintNode } from '../operation-node/foreign-key-constraint-node.js';
|
|
7
7
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
8
8
|
import { TableNode } from '../operation-node/table-node.js';
|
|
9
9
|
import { ForeignKeyConstraintBuilder } from './foreign-key-constraint-builder.js';
|
|
10
10
|
import { parseDataTypeExpression, } from '../parser/data-type-parser.js';
|
|
11
|
+
import { PrimaryConstraintNode } from '../operation-node/primary-constraint-node.js';
|
|
12
|
+
import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js';
|
|
13
|
+
import { CheckConstraintNode } from '../operation-node/check-constraint-node.js';
|
|
14
|
+
/**
|
|
15
|
+
* This builder can be used to create a `create table` query.
|
|
16
|
+
*/
|
|
11
17
|
export class CreateTableBuilder {
|
|
12
18
|
#props;
|
|
13
19
|
constructor(props) {
|
|
@@ -31,18 +37,45 @@ export class CreateTableBuilder {
|
|
|
31
37
|
* ```ts
|
|
32
38
|
* await db.schema
|
|
33
39
|
* .createTable('person')
|
|
34
|
-
* .addColumn('
|
|
40
|
+
* .addColumn('id', 'integer', (col) => col.increments().primaryKey()),
|
|
35
41
|
* .addColumn('first_name', 'varchar(50), (col) => col.notNull())
|
|
36
|
-
* .addColumn('
|
|
37
|
-
* .addColumn('numeric(8, 2)'
|
|
42
|
+
* .addColumn('last_name', 'varchar')
|
|
43
|
+
* .addColumn('bank_balance', 'numeric(8, 2)')
|
|
38
44
|
* .addColumn('data', db.raw('customtype'))
|
|
45
|
+
* .addColumn('parent_id', 'integer', (col) =>
|
|
46
|
+
* col.references('person.id').onDelete('cascade'))
|
|
47
|
+
* )
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* With this method, it's once again good to remember that Kysely just builds the query
|
|
51
|
+
* that's as close to the structure of your builder method calls as possible, and doesn't
|
|
52
|
+
* provide the same API for all databses. For example, some databases like older MySQL
|
|
53
|
+
* don't support `references` statement in the column definition. Instead foreign key
|
|
54
|
+
* constraints need to be defined in at the level of the `create table` query. See
|
|
55
|
+
* the next example:
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* .addColumn('parent_id', 'integer')
|
|
60
|
+
* .addForeignKeyConstraint(
|
|
61
|
+
* 'person_parent_id_fk', ['parent_id'], 'person', ['id'],
|
|
62
|
+
* (cb) => cb.onDelete('cascade')
|
|
63
|
+
* )
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* Another good example is that PostgreSQL doesn't support the `auto_increment`
|
|
67
|
+
* keyword and you need to define an autoincrementing column for example using
|
|
68
|
+
* `serial`:
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* await db.schema
|
|
73
|
+
* .createTable('person')
|
|
74
|
+
* .addColumn('id', 'serial', (col) => col.primaryKey()),
|
|
39
75
|
* ```
|
|
40
76
|
*/
|
|
41
|
-
addColumn(columnName, dataType, build) {
|
|
42
|
-
|
|
43
|
-
if (build) {
|
|
44
|
-
columnBuilder = build(columnBuilder);
|
|
45
|
-
}
|
|
77
|
+
addColumn(columnName, dataType, build = noop) {
|
|
78
|
+
const columnBuilder = build(new ColumnDefinitionBuilder(ColumnDefinitionNode.create(columnName, parseDataTypeExpression(dataType))));
|
|
46
79
|
return new CreateTableBuilder({
|
|
47
80
|
...this.#props,
|
|
48
81
|
createTableNode: CreateTableNode.cloneWithColumn(this.#props.createTableNode, columnBuilder.toOperationNode()),
|
|
@@ -51,6 +84,9 @@ export class CreateTableBuilder {
|
|
|
51
84
|
/**
|
|
52
85
|
* Adds a primary key constraint for one or more columns.
|
|
53
86
|
*
|
|
87
|
+
* The constraint name can be anything you want, but it must be unique
|
|
88
|
+
* across the whole database.
|
|
89
|
+
*
|
|
54
90
|
* @example
|
|
55
91
|
* ```ts
|
|
56
92
|
* addPrimaryKeyConstraint('primary_key', ['first_name', 'last_name'])
|
|
@@ -59,12 +95,15 @@ export class CreateTableBuilder {
|
|
|
59
95
|
addPrimaryKeyConstraint(constraintName, columns) {
|
|
60
96
|
return new CreateTableBuilder({
|
|
61
97
|
...this.#props,
|
|
62
|
-
createTableNode: CreateTableNode.
|
|
98
|
+
createTableNode: CreateTableNode.cloneWithConstraint(this.#props.createTableNode, PrimaryConstraintNode.create(columns, constraintName)),
|
|
63
99
|
});
|
|
64
100
|
}
|
|
65
101
|
/**
|
|
66
102
|
* Adds a unique constraint for one or more columns.
|
|
67
103
|
*
|
|
104
|
+
* The constraint name can be anything you want, but it must be unique
|
|
105
|
+
* across the whole database.
|
|
106
|
+
*
|
|
68
107
|
* @example
|
|
69
108
|
* ```ts
|
|
70
109
|
* addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'])
|
|
@@ -73,12 +112,15 @@ export class CreateTableBuilder {
|
|
|
73
112
|
addUniqueConstraint(constraintName, columns) {
|
|
74
113
|
return new CreateTableBuilder({
|
|
75
114
|
...this.#props,
|
|
76
|
-
createTableNode: CreateTableNode.
|
|
115
|
+
createTableNode: CreateTableNode.cloneWithConstraint(this.#props.createTableNode, UniqueConstraintNode.create(columns, constraintName)),
|
|
77
116
|
});
|
|
78
117
|
}
|
|
79
118
|
/**
|
|
80
119
|
* Adds a check constraint.
|
|
81
120
|
*
|
|
121
|
+
* The constraint name can be anything you want, but it must be unique
|
|
122
|
+
* across the whole database.
|
|
123
|
+
*
|
|
82
124
|
* @example
|
|
83
125
|
* ```ts
|
|
84
126
|
* addCheckConstraint('check_legs', 'number_of_legs < 5')
|
|
@@ -87,12 +129,15 @@ export class CreateTableBuilder {
|
|
|
87
129
|
addCheckConstraint(constraintName, checkExpression) {
|
|
88
130
|
return new CreateTableBuilder({
|
|
89
131
|
...this.#props,
|
|
90
|
-
createTableNode: CreateTableNode.
|
|
132
|
+
createTableNode: CreateTableNode.cloneWithConstraint(this.#props.createTableNode, CheckConstraintNode.create(checkExpression, constraintName)),
|
|
91
133
|
});
|
|
92
134
|
}
|
|
93
135
|
/**
|
|
94
136
|
* Adds a foreign key constraint.
|
|
95
137
|
*
|
|
138
|
+
* The constraint name can be anything you want, but it must be unique
|
|
139
|
+
* across the whole database.
|
|
140
|
+
*
|
|
96
141
|
* @example
|
|
97
142
|
* ```ts
|
|
98
143
|
* addForeignKeyConstraint(
|
|
@@ -114,14 +159,11 @@ export class CreateTableBuilder {
|
|
|
114
159
|
* )
|
|
115
160
|
* ```
|
|
116
161
|
*/
|
|
117
|
-
addForeignKeyConstraint(constraintName, columns, targetTable, targetColumns, build) {
|
|
118
|
-
|
|
119
|
-
if (build) {
|
|
120
|
-
builder = build(builder);
|
|
121
|
-
}
|
|
162
|
+
addForeignKeyConstraint(constraintName, columns, targetTable, targetColumns, build = noop) {
|
|
163
|
+
const builder = build(new ForeignKeyConstraintBuilder(ForeignKeyConstraintNode.create(columns.map(ColumnNode.create), TableNode.create(targetTable), targetColumns.map(ColumnNode.create), constraintName)));
|
|
122
164
|
return new CreateTableBuilder({
|
|
123
165
|
...this.#props,
|
|
124
|
-
createTableNode: CreateTableNode.
|
|
166
|
+
createTableNode: CreateTableNode.cloneWithConstraint(this.#props.createTableNode, builder.toOperationNode()),
|
|
125
167
|
});
|
|
126
168
|
}
|
|
127
169
|
toOperationNode() {
|
|
@@ -22,14 +22,49 @@ export declare class SchemaModule {
|
|
|
22
22
|
* ```ts
|
|
23
23
|
* await db.schema
|
|
24
24
|
* .createTable('person')
|
|
25
|
-
* .addColumn('id', '
|
|
25
|
+
* .addColumn('id', 'integer', col => col.primaryKey().increments())
|
|
26
26
|
* .addColumn('first_name', 'varchar', col => col.notNull())
|
|
27
27
|
* .addColumn('last_name', 'varchar', col => col.notNull())
|
|
28
28
|
* .addColumn('gender', 'varchar')
|
|
29
29
|
* .execute()
|
|
30
30
|
* ```
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* This example creates a table with a foreign key. Not all database
|
|
34
|
+
* engines support column-level foreign key constraint definitions.
|
|
35
|
+
* For example if you are using MySQL 5.X see the next example after
|
|
36
|
+
* this one.
|
|
37
|
+
*
|
|
38
|
+
* ```ts
|
|
39
|
+
* await db.schema
|
|
40
|
+
* .createTable('pet')
|
|
41
|
+
* .addColumn('id', 'integer', col => col.primaryKey().increments())
|
|
42
|
+
* .addColumn('owner_id', 'integer', col => col
|
|
43
|
+
* .references('person.id')
|
|
44
|
+
* .onDelete('cascade')
|
|
45
|
+
* )
|
|
46
|
+
* .execute()
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* This example adds a foreign key constraint for a columns just
|
|
51
|
+
* like the previous example, but using a table-level statement.
|
|
52
|
+
* On MySQL 5.X you need to define foreign key constraints like
|
|
53
|
+
* this:
|
|
54
|
+
*
|
|
55
|
+
* ```ts
|
|
56
|
+
* await db.schema
|
|
57
|
+
* .createTable('pet')
|
|
58
|
+
* .addColumn('id', 'integer', col => col.primaryKey().increments())
|
|
59
|
+
* .addColumn('owner_id', 'integer')
|
|
60
|
+
* .addForeignKeyConstraint(
|
|
61
|
+
* 'pet_owner_id_foreign', ['owner_id'], 'person', ['id'],
|
|
62
|
+
* (constraint) => constraint.onDelete('cascade')
|
|
63
|
+
* )
|
|
64
|
+
* .execute()
|
|
65
|
+
* ```
|
|
31
66
|
*/
|
|
32
|
-
createTable(table:
|
|
67
|
+
createTable<TB extends string>(table: TB): CreateTableBuilder<TB, never>;
|
|
33
68
|
/**
|
|
34
69
|
* Drop a table.
|
|
35
70
|
*
|
|
@@ -33,12 +33,47 @@ export class SchemaModule {
|
|
|
33
33
|
* ```ts
|
|
34
34
|
* await db.schema
|
|
35
35
|
* .createTable('person')
|
|
36
|
-
* .addColumn('id', '
|
|
36
|
+
* .addColumn('id', 'integer', col => col.primaryKey().increments())
|
|
37
37
|
* .addColumn('first_name', 'varchar', col => col.notNull())
|
|
38
38
|
* .addColumn('last_name', 'varchar', col => col.notNull())
|
|
39
39
|
* .addColumn('gender', 'varchar')
|
|
40
40
|
* .execute()
|
|
41
41
|
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* This example creates a table with a foreign key. Not all database
|
|
45
|
+
* engines support column-level foreign key constraint definitions.
|
|
46
|
+
* For example if you are using MySQL 5.X see the next example after
|
|
47
|
+
* this one.
|
|
48
|
+
*
|
|
49
|
+
* ```ts
|
|
50
|
+
* await db.schema
|
|
51
|
+
* .createTable('pet')
|
|
52
|
+
* .addColumn('id', 'integer', col => col.primaryKey().increments())
|
|
53
|
+
* .addColumn('owner_id', 'integer', col => col
|
|
54
|
+
* .references('person.id')
|
|
55
|
+
* .onDelete('cascade')
|
|
56
|
+
* )
|
|
57
|
+
* .execute()
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* This example adds a foreign key constraint for a columns just
|
|
62
|
+
* like the previous example, but using a table-level statement.
|
|
63
|
+
* On MySQL 5.X you need to define foreign key constraints like
|
|
64
|
+
* this:
|
|
65
|
+
*
|
|
66
|
+
* ```ts
|
|
67
|
+
* await db.schema
|
|
68
|
+
* .createTable('pet')
|
|
69
|
+
* .addColumn('id', 'integer', col => col.primaryKey().increments())
|
|
70
|
+
* .addColumn('owner_id', 'integer')
|
|
71
|
+
* .addForeignKeyConstraint(
|
|
72
|
+
* 'pet_owner_id_foreign', ['owner_id'], 'person', ['id'],
|
|
73
|
+
* (constraint) => constraint.onDelete('cascade')
|
|
74
|
+
* )
|
|
75
|
+
* .execute()
|
|
76
|
+
* ```
|
|
42
77
|
*/
|
|
43
78
|
createTable(table) {
|
|
44
79
|
return new CreateTableBuilder({
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
export declare type PrimitiveValue = string | number | boolean | null | Date | Buffer | BigInt;
|
|
3
|
-
export declare function isEmpty(obj: ArrayLike<
|
|
4
|
-
export declare function isString(obj:
|
|
5
|
-
export declare function isNumber(obj:
|
|
6
|
-
export declare function isBoolean(obj:
|
|
7
|
-
export declare function isNull(obj:
|
|
8
|
-
export declare function isDate(obj:
|
|
9
|
-
export declare function isBuffer(obj:
|
|
10
|
-
export declare function isBigInt(obj:
|
|
11
|
-
export declare function isPrimitive(obj:
|
|
12
|
-
export declare function isFunction(obj:
|
|
13
|
-
export declare function isObject(obj:
|
|
3
|
+
export declare function isEmpty(obj: ArrayLike<unknown> | string | object | Buffer): boolean;
|
|
4
|
+
export declare function isString(obj: unknown): obj is string;
|
|
5
|
+
export declare function isNumber(obj: unknown): obj is number;
|
|
6
|
+
export declare function isBoolean(obj: unknown): obj is boolean;
|
|
7
|
+
export declare function isNull(obj: unknown): obj is null;
|
|
8
|
+
export declare function isDate(obj: unknown): obj is Date;
|
|
9
|
+
export declare function isBuffer(obj: unknown): obj is Buffer;
|
|
10
|
+
export declare function isBigInt(obj: unknown): obj is BigInt;
|
|
11
|
+
export declare function isPrimitive(obj: unknown): obj is PrimitiveValue;
|
|
12
|
+
export declare function isFunction(obj: unknown): obj is Function;
|
|
13
|
+
export declare function isObject(obj: unknown): obj is Record<string, unknown>;
|
|
14
14
|
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
18
|
export declare function isReadonlyArray(arg: unknown): arg is ReadonlyArray<unknown>;
|
|
19
|
+
export declare function noop<T>(obj: T): T;
|
|
@@ -41,7 +41,7 @@ export function isFunction(obj) {
|
|
|
41
41
|
return typeof obj === 'function';
|
|
42
42
|
}
|
|
43
43
|
export function isObject(obj) {
|
|
44
|
-
return
|
|
44
|
+
return typeof obj === 'object' && obj !== null;
|
|
45
45
|
}
|
|
46
46
|
export function getLast(arr) {
|
|
47
47
|
return arr[arr.length - 1];
|
|
@@ -68,3 +68,6 @@ export function asReadonlyArray(arg) {
|
|
|
68
68
|
export function isReadonlyArray(arg) {
|
|
69
69
|
return Array.isArray(arg);
|
|
70
70
|
}
|
|
71
|
+
export function noop(obj) {
|
|
72
|
+
return obj;
|
|
73
|
+
}
|