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
package/README.md
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
# [Kysely](https://koskimas.github.io/kysely/index.html)
|
|
5
5
|
|
|
6
6
|
A type-safe and autocompletion-friendly typescript SQL query builder for node.js. Inspired by
|
|
7
|
-
[knex](http://knexjs.org/).
|
|
7
|
+
[knex](http://knexjs.org/). [Here's](https://www.jakso.me/blog/kysely-a-type-safe-sql-query-builder-for-typescript)
|
|
8
|
+
an introductory blog post for you.
|
|
8
9
|
|
|
9
10
|

|
|
10
11
|
|
|
@@ -25,9 +26,8 @@ type-safety! See the [DynamicModule](https://koskimas.github.io/kysely/classes/D
|
|
|
25
26
|
for more info.
|
|
26
27
|
|
|
27
28
|
Kysely is still young and some useful features are propably not yet implemented. If you start
|
|
28
|
-
using Kysely and can't find something you'd want to use, please open an issue
|
|
29
|
-
|
|
30
|
-
[Here](https://www.jakso.me/blog/kysely-a-type-safe-sql-query-builder-for-typescript)'s an introductory blog post about Kysely.
|
|
29
|
+
using Kysely and can't find something you'd want to use, please open an issue or join our
|
|
30
|
+
[discord server](https://discord.gg/C9aJ49mCra).
|
|
31
31
|
|
|
32
32
|
# Table of contents
|
|
33
33
|
|
|
@@ -114,8 +114,6 @@ async function demo() {
|
|
|
114
114
|
|
|
115
115
|
# Query examples
|
|
116
116
|
|
|
117
|
-
The [API documentation](https://koskimas.github.io/kysely/index.html) is full of examples.
|
|
118
|
-
|
|
119
117
|
## Select queries
|
|
120
118
|
|
|
121
119
|
You can find examples of select queries in the documentation of the
|
|
@@ -165,13 +163,15 @@ changes completely. Migrations need to be "frozen in time".
|
|
|
165
163
|
The migrations can use the [Kysely.schema](https://koskimas.github.io/kysely/classes/SchemaModule.html)
|
|
166
164
|
module to modify the schema. Migrations can also run normal queries to modify the data.
|
|
167
165
|
|
|
166
|
+
### PostgreSQL migration example
|
|
167
|
+
|
|
168
168
|
```ts
|
|
169
169
|
import { Kysely } from 'kysely'
|
|
170
170
|
|
|
171
171
|
export async function up(db: Kysely<any>): Promise<void> {
|
|
172
172
|
await db.schema
|
|
173
173
|
.createTable('person')
|
|
174
|
-
.addColumn('id', '
|
|
174
|
+
.addColumn('id', 'serial', (col) => col.primaryKey())
|
|
175
175
|
.addColumn('first_name', 'varchar')
|
|
176
176
|
.addColumn('last_name', 'varchar')
|
|
177
177
|
.addColumn('gender', 'varchar(50)')
|
|
@@ -179,7 +179,7 @@ export async function up(db: Kysely<any>): Promise<void> {
|
|
|
179
179
|
|
|
180
180
|
await db.schema
|
|
181
181
|
.createTable('pet')
|
|
182
|
-
.addColumn('id', '
|
|
182
|
+
.addColumn('id', 'serial', (col) => col.primaryKey())
|
|
183
183
|
.addColumn('name', 'varchar', (col) => col.notNull().unique())
|
|
184
184
|
.addColumn('owner_id', 'integer', (col) =>
|
|
185
185
|
col.references('person.id').onDelete('cascade')
|
|
@@ -200,6 +200,45 @@ export async function down(db: Kysely<any>): Promise<void> {
|
|
|
200
200
|
}
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
+
### MySQL migration example
|
|
204
|
+
|
|
205
|
+
```ts
|
|
206
|
+
import { Kysely } from 'kysely'
|
|
207
|
+
|
|
208
|
+
export async function up(db: Kysely<any>): Promise<void> {
|
|
209
|
+
await db.schema
|
|
210
|
+
.createTable('person')
|
|
211
|
+
.addColumn('id', 'integer', (col) => col.increments().primaryKey())
|
|
212
|
+
.addColumn('first_name', 'varchar')
|
|
213
|
+
.addColumn('last_name', 'varchar')
|
|
214
|
+
.addColumn('gender', 'varchar(50)')
|
|
215
|
+
.execute()
|
|
216
|
+
|
|
217
|
+
await db.schema
|
|
218
|
+
.createTable('pet')
|
|
219
|
+
.addColumn('id', 'integer', (col) => col.increments().primaryKey())
|
|
220
|
+
.addColumn('name', 'varchar', (col) => col.notNull().unique())
|
|
221
|
+
.addColumn('owner_id', 'integer')
|
|
222
|
+
.addColumn('species', 'varchar')
|
|
223
|
+
.addForeignKeyConstraint(
|
|
224
|
+
'pet_owner_id_fk', ['owner_id'], 'person', ['id'],
|
|
225
|
+
(cb) => cb.onDelete('cascade')
|
|
226
|
+
)
|
|
227
|
+
.execute()
|
|
228
|
+
|
|
229
|
+
await db.schema
|
|
230
|
+
.createIndex('pet_owner_id_index')
|
|
231
|
+
.on('pet')
|
|
232
|
+
.column('owner_id')
|
|
233
|
+
.execute()
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export async function down(db: Kysely<any>): Promise<void> {
|
|
237
|
+
await db.schema.dropTable('pet').execute()
|
|
238
|
+
await db.schema.dropTable('person').execute()
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
203
242
|
You can then use
|
|
204
243
|
|
|
205
244
|
```ts
|
|
@@ -53,16 +53,16 @@ class MysqlDriver {
|
|
|
53
53
|
// On mysql this sets the isolation level of the next transaction.
|
|
54
54
|
await connection.executeQuery({
|
|
55
55
|
sql: `set transaction isolation level ${settings.isolationLevel}`,
|
|
56
|
-
|
|
56
|
+
parameters: [],
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
await connection.executeQuery({ sql: 'begin',
|
|
59
|
+
await connection.executeQuery({ sql: 'begin', parameters: [] });
|
|
60
60
|
}
|
|
61
61
|
async commitTransaction(connection) {
|
|
62
|
-
await connection.executeQuery({ sql: 'commit',
|
|
62
|
+
await connection.executeQuery({ sql: 'commit', parameters: [] });
|
|
63
63
|
}
|
|
64
64
|
async rollbackTransaction(connection) {
|
|
65
|
-
await connection.executeQuery({ sql: 'rollback',
|
|
65
|
+
await connection.executeQuery({ sql: 'rollback', parameters: [] });
|
|
66
66
|
}
|
|
67
67
|
async releaseConnection(connection) {
|
|
68
68
|
const mysqlConnection = connection;
|
|
@@ -107,13 +107,13 @@ class MysqlConnection {
|
|
|
107
107
|
async executeQuery(compiledQuery) {
|
|
108
108
|
const result = await this.#executeQuery(compiledQuery);
|
|
109
109
|
if ((0, object_utils_js_1.isObject)(result) && 'insertId' in result && 'affectedRows' in result) {
|
|
110
|
-
if (result.insertId) {
|
|
110
|
+
if ((0, object_utils_js_1.isNumber)(result.insertId) && result.insertId > 0) {
|
|
111
111
|
return {
|
|
112
112
|
insertedPrimaryKey: result.insertId,
|
|
113
113
|
rows: [],
|
|
114
114
|
};
|
|
115
115
|
}
|
|
116
|
-
else {
|
|
116
|
+
else if ((0, object_utils_js_1.isNumber)(result.affectedRows)) {
|
|
117
117
|
return {
|
|
118
118
|
numUpdatedOrDeletedRows: result.affectedRows,
|
|
119
119
|
rows: [],
|
|
@@ -131,7 +131,7 @@ class MysqlConnection {
|
|
|
131
131
|
}
|
|
132
132
|
#executeQuery(compiledQuery) {
|
|
133
133
|
return new Promise((resolve, reject) => {
|
|
134
|
-
this.#rawConnection.query(compiledQuery.sql, compiledQuery.
|
|
134
|
+
this.#rawConnection.query(compiledQuery.sql, compiledQuery.parameters, (err, result) => {
|
|
135
135
|
if (err) {
|
|
136
136
|
reject(err);
|
|
137
137
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { ColumnDefinitionNode } from '../../operation-node/column-definition-node.js';
|
|
2
1
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
3
2
|
export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
|
|
4
|
-
protected visitColumnDefinition(node: ColumnDefinitionNode): void;
|
|
5
3
|
protected visitReturning(): void;
|
|
6
4
|
protected getSql(): string;
|
|
7
5
|
protected getCurrentParameterPlaceholder(): string;
|
|
@@ -3,35 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MysqlQueryCompiler = void 0;
|
|
4
4
|
const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
|
|
5
5
|
class MysqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
|
|
6
|
-
visitColumnDefinition(node) {
|
|
7
|
-
this.visitNode(node.column);
|
|
8
|
-
this.append(' ');
|
|
9
|
-
this.visitNode(node.dataType);
|
|
10
|
-
if (node.defaultTo) {
|
|
11
|
-
this.append(' default ');
|
|
12
|
-
this.visitNode(node.defaultTo);
|
|
13
|
-
}
|
|
14
|
-
if (!node.isNullable || node.isAutoIncrementing) {
|
|
15
|
-
this.append(' not null');
|
|
16
|
-
}
|
|
17
|
-
if (node.isAutoIncrementing) {
|
|
18
|
-
this.append(' auto_increment');
|
|
19
|
-
}
|
|
20
|
-
if (node.isUnique) {
|
|
21
|
-
this.append(' unique');
|
|
22
|
-
}
|
|
23
|
-
if (node.isPrimaryKey) {
|
|
24
|
-
this.append(' primary key');
|
|
25
|
-
}
|
|
26
|
-
if (node.references) {
|
|
27
|
-
this.append(' ');
|
|
28
|
-
this.visitNode(node.references);
|
|
29
|
-
}
|
|
30
|
-
if (node.check) {
|
|
31
|
-
this.append(' ');
|
|
32
|
-
this.visitNode(node.check);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
6
|
visitReturning() {
|
|
36
7
|
// Do nothing.
|
|
37
8
|
}
|
|
@@ -40,18 +40,18 @@ class PostgresDriver {
|
|
|
40
40
|
if (settings.isolationLevel) {
|
|
41
41
|
await connection.executeQuery({
|
|
42
42
|
sql: `start transaction isolation level ${settings.isolationLevel}`,
|
|
43
|
-
|
|
43
|
+
parameters: [],
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
47
|
-
await connection.executeQuery({ sql: 'begin',
|
|
47
|
+
await connection.executeQuery({ sql: 'begin', parameters: [] });
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
async commitTransaction(connection) {
|
|
51
|
-
await connection.executeQuery({ sql: 'commit',
|
|
51
|
+
await connection.executeQuery({ sql: 'commit', parameters: [] });
|
|
52
52
|
}
|
|
53
53
|
async rollbackTransaction(connection) {
|
|
54
|
-
await connection.executeQuery({ sql: 'rollback',
|
|
54
|
+
await connection.executeQuery({ sql: 'rollback', parameters: [] });
|
|
55
55
|
}
|
|
56
56
|
async releaseConnection(connection) {
|
|
57
57
|
const pgConnection = connection;
|
|
@@ -90,7 +90,7 @@ class PostgresConnection {
|
|
|
90
90
|
}
|
|
91
91
|
async executeQuery(compiledQuery) {
|
|
92
92
|
const result = await this.#client.query(compiledQuery.sql, [
|
|
93
|
-
...compiledQuery.
|
|
93
|
+
...compiledQuery.parameters,
|
|
94
94
|
]);
|
|
95
95
|
if (result.command === 'UPDATE' || result.command === 'DELETE') {
|
|
96
96
|
return {
|
|
@@ -13,5 +13,5 @@ export interface CreateSchemaNode extends OperationNode {
|
|
|
13
13
|
export declare const CreateSchemaNode: Readonly<{
|
|
14
14
|
is(node: OperationNode): node is CreateSchemaNode;
|
|
15
15
|
create(schema: string, params?: CreateSchemaNodeParams | undefined): CreateSchemaNode;
|
|
16
|
-
|
|
16
|
+
cloneWith(createSchema: CreateSchemaNode, params: CreateSchemaNodeParams): CreateSchemaNode;
|
|
17
17
|
}>;
|
|
@@ -17,10 +17,10 @@ exports.CreateSchemaNode = (0, object_utils_js_1.freeze)({
|
|
|
17
17
|
...params,
|
|
18
18
|
});
|
|
19
19
|
},
|
|
20
|
-
|
|
20
|
+
cloneWith(createSchema, params) {
|
|
21
21
|
return (0, object_utils_js_1.freeze)({
|
|
22
22
|
...createSchema,
|
|
23
|
-
|
|
23
|
+
...params,
|
|
24
24
|
});
|
|
25
25
|
},
|
|
26
26
|
});
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
2
|
import { TableNode } from './table-node.js';
|
|
3
|
-
import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
|
|
4
3
|
import { ConstraintNode } from './constraint-node.js';
|
|
5
4
|
import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
6
5
|
export declare type CreateTableNodeModifier = 'IfNotExists';
|
|
@@ -19,8 +18,5 @@ export declare const CreateTableNode: Readonly<{
|
|
|
19
18
|
create(table: TableNode): CreateTableNode;
|
|
20
19
|
cloneWithColumn(createTable: CreateTableNode, column: ColumnDefinitionNode): CreateTableNode;
|
|
21
20
|
cloneWithModifier(createTable: CreateTableNode, modifier: CreateTableNodeModifier): CreateTableNode;
|
|
22
|
-
|
|
23
|
-
cloneWithUniqueConstraint(createTable: CreateTableNode, constraintName: string, columns: string[]): CreateTableNode;
|
|
24
|
-
cloneWithCheckConstraint(createTable: CreateTableNode, constraintName: string, sql: string): CreateTableNode;
|
|
25
|
-
cloneWithForeignKeyConstraint(createTable: CreateTableNode, constraint: ForeignKeyConstraintNode): CreateTableNode;
|
|
21
|
+
cloneWithConstraint(createTable: CreateTableNode, constraint: ConstraintNode): CreateTableNode;
|
|
26
22
|
}>;
|
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CreateTableNode = void 0;
|
|
4
4
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
-
const check_constraint_node_js_1 = require("./check-constraint-node.js");
|
|
6
|
-
const primary_constraint_node_js_1 = require("./primary-constraint-node.js");
|
|
7
|
-
const unique_constraint_node_js_1 = require("./unique-constraint-node.js");
|
|
8
5
|
/**
|
|
9
6
|
* @internal
|
|
10
7
|
*/
|
|
@@ -31,34 +28,7 @@ exports.CreateTableNode = (0, object_utils_js_1.freeze)({
|
|
|
31
28
|
modifier,
|
|
32
29
|
});
|
|
33
30
|
},
|
|
34
|
-
|
|
35
|
-
const constraint = primary_constraint_node_js_1.PrimaryConstraintNode.create(columns, constraintName);
|
|
36
|
-
return (0, object_utils_js_1.freeze)({
|
|
37
|
-
...createTable,
|
|
38
|
-
constraints: createTable.constraints
|
|
39
|
-
? (0, object_utils_js_1.freeze)([...createTable.constraints, constraint])
|
|
40
|
-
: (0, object_utils_js_1.freeze)([constraint]),
|
|
41
|
-
});
|
|
42
|
-
},
|
|
43
|
-
cloneWithUniqueConstraint(createTable, constraintName, columns) {
|
|
44
|
-
const constraint = unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName);
|
|
45
|
-
return (0, object_utils_js_1.freeze)({
|
|
46
|
-
...createTable,
|
|
47
|
-
constraints: createTable.constraints
|
|
48
|
-
? (0, object_utils_js_1.freeze)([...createTable.constraints, constraint])
|
|
49
|
-
: (0, object_utils_js_1.freeze)([constraint]),
|
|
50
|
-
});
|
|
51
|
-
},
|
|
52
|
-
cloneWithCheckConstraint(createTable, constraintName, sql) {
|
|
53
|
-
const constraint = check_constraint_node_js_1.CheckConstraintNode.create(sql, constraintName);
|
|
54
|
-
return (0, object_utils_js_1.freeze)({
|
|
55
|
-
...createTable,
|
|
56
|
-
constraints: createTable.constraints
|
|
57
|
-
? (0, object_utils_js_1.freeze)([...createTable.constraints, constraint])
|
|
58
|
-
: (0, object_utils_js_1.freeze)([constraint]),
|
|
59
|
-
});
|
|
60
|
-
},
|
|
61
|
-
cloneWithForeignKeyConstraint(createTable, constraint) {
|
|
31
|
+
cloneWithConstraint(createTable, constraint) {
|
|
62
32
|
return (0, object_utils_js_1.freeze)({
|
|
63
33
|
...createTable,
|
|
64
34
|
constraints: createTable.constraints
|
|
@@ -21,5 +21,6 @@ export declare const JoinNode: Readonly<{
|
|
|
21
21
|
is(node: OperationNode): node is JoinNode;
|
|
22
22
|
create(joinType: JoinType, table: JoinTableNode): JoinNode;
|
|
23
23
|
createWithOn(joinType: JoinType, table: JoinTableNode, on: JoinNodeOnNode): JoinNode;
|
|
24
|
-
cloneWithOn(joinNode: JoinNode,
|
|
24
|
+
cloneWithOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode;
|
|
25
|
+
cloneWithOrOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode;
|
|
25
26
|
}>;
|
|
@@ -27,14 +27,16 @@ exports.JoinNode = (0, object_utils_js_1.freeze)({
|
|
|
27
27
|
on,
|
|
28
28
|
});
|
|
29
29
|
},
|
|
30
|
-
cloneWithOn(joinNode,
|
|
30
|
+
cloneWithOn(joinNode, on) {
|
|
31
31
|
return (0, object_utils_js_1.freeze)({
|
|
32
32
|
...joinNode,
|
|
33
|
-
on: joinNode.on
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
on: joinNode.on ? and_node_js_1.AndNode.create(joinNode.on, on) : on,
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
cloneWithOrOn(joinNode, on) {
|
|
37
|
+
return (0, object_utils_js_1.freeze)({
|
|
38
|
+
...joinNode,
|
|
39
|
+
on: joinNode.on ? or_node_js_1.OrNode.create(joinNode.on, on) : on,
|
|
38
40
|
});
|
|
39
41
|
},
|
|
40
42
|
});
|
|
@@ -2,4 +2,4 @@ import { OperationNode } from './operation-node.js';
|
|
|
2
2
|
export interface OperationNodeSource {
|
|
3
3
|
toOperationNode(): OperationNode;
|
|
4
4
|
}
|
|
5
|
-
export declare function isOperationNodeSource(obj:
|
|
5
|
+
export declare function isOperationNodeSource(obj: unknown): obj is OperationNodeSource;
|
|
@@ -456,11 +456,12 @@ class OperationNodeTransformer {
|
|
|
456
456
|
kind: 'AlterTableNode',
|
|
457
457
|
table: this.transformNode(node.table),
|
|
458
458
|
renameTo: this.transformNode(node.renameTo),
|
|
459
|
-
renameColumn: this.transformNode(node.renameColumn),
|
|
460
459
|
setSchema: this.transformNode(node.setSchema),
|
|
460
|
+
renameColumn: this.transformNode(node.renameColumn),
|
|
461
461
|
addColumn: this.transformNode(node.addColumn),
|
|
462
462
|
dropColumn: this.transformNode(node.dropColumn),
|
|
463
463
|
alterColumn: this.transformNode(node.alterColumn),
|
|
464
|
+
modifyColumn: this.transformNode(node.modifyColumn),
|
|
464
465
|
addConstraint: this.transformNode(node.addConstraint),
|
|
465
466
|
dropConstraint: this.transformNode(node.dropConstraint),
|
|
466
467
|
};
|
|
@@ -12,7 +12,7 @@ exports.PrimitiveValueListNode = (0, object_utils_js_1.freeze)({
|
|
|
12
12
|
create(values) {
|
|
13
13
|
return (0, object_utils_js_1.freeze)({
|
|
14
14
|
kind: 'PrimitiveValueListNode',
|
|
15
|
-
values: (0, object_utils_js_1.freeze)(values),
|
|
15
|
+
values: (0, object_utils_js_1.freeze)([...values]),
|
|
16
16
|
});
|
|
17
17
|
},
|
|
18
18
|
});
|
|
@@ -16,7 +16,8 @@ export declare const QueryNode: Readonly<{
|
|
|
16
16
|
is(node: OperationNode): node is QueryNode;
|
|
17
17
|
isMutating(node: OperationNode): node is MutatingQueryNode;
|
|
18
18
|
isFilterable(node: OperationNode): node is FilterableQueryNode;
|
|
19
|
-
cloneWithWhere<T extends FilterableQueryNode>(node: T,
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
cloneWithWhere<T extends FilterableQueryNode>(node: T, filter: WhereChildNode): T;
|
|
20
|
+
cloneWithOrWhere<T_1 extends FilterableQueryNode>(node: T_1, filter: WhereChildNode): T_1;
|
|
21
|
+
cloneWithJoin<T_2 extends FilterableQueryNode>(node: T_2, join: JoinNode): T_2;
|
|
22
|
+
cloneWithReturning<T_3 extends MutatingQueryNode>(node: T_3, selections: ReadonlyArray<SelectionNode>): T_3;
|
|
22
23
|
}>;
|
|
@@ -28,11 +28,19 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
|
|
|
28
28
|
delete_query_node_js_1.DeleteQueryNode.is(node) ||
|
|
29
29
|
update_query_node_js_1.UpdateQueryNode.is(node));
|
|
30
30
|
},
|
|
31
|
-
cloneWithWhere(node,
|
|
31
|
+
cloneWithWhere(node, filter) {
|
|
32
32
|
return (0, object_utils_js_1.freeze)({
|
|
33
33
|
...node,
|
|
34
34
|
where: node.where
|
|
35
|
-
? where_node_js_1.WhereNode.cloneWithFilter(node.where,
|
|
35
|
+
? where_node_js_1.WhereNode.cloneWithFilter(node.where, 'And', filter)
|
|
36
|
+
: where_node_js_1.WhereNode.create(filter),
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
cloneWithOrWhere(node, filter) {
|
|
40
|
+
return (0, object_utils_js_1.freeze)({
|
|
41
|
+
...node,
|
|
42
|
+
where: node.where
|
|
43
|
+
? where_node_js_1.WhereNode.cloneWithFilter(node.where, 'Or', filter)
|
|
36
44
|
: where_node_js_1.WhereNode.create(filter),
|
|
37
45
|
});
|
|
38
46
|
},
|
|
@@ -42,6 +42,7 @@ export declare const SelectQueryNode: Readonly<{
|
|
|
42
42
|
cloneWithGroupByItems(selectNode: SelectQueryNode, items: ReadonlyArray<GroupByItemNode>): SelectQueryNode;
|
|
43
43
|
cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
|
|
44
44
|
cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
|
|
45
|
-
cloneWithHaving(selectNode: SelectQueryNode,
|
|
45
|
+
cloneWithHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
|
|
46
|
+
cloneWithOrHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
|
|
46
47
|
cloneWithDistinct(selectNode: SelectQueryNode): SelectQueryNode;
|
|
47
48
|
}>;
|
|
@@ -72,11 +72,19 @@ exports.SelectQueryNode = (0, object_utils_js_1.freeze)({
|
|
|
72
72
|
offset,
|
|
73
73
|
});
|
|
74
74
|
},
|
|
75
|
-
cloneWithHaving(selectNode,
|
|
75
|
+
cloneWithHaving(selectNode, filter) {
|
|
76
76
|
return (0, object_utils_js_1.freeze)({
|
|
77
77
|
...selectNode,
|
|
78
78
|
having: selectNode.having
|
|
79
|
-
? having_node_js_1.HavingNode.cloneWithFilter(selectNode.having,
|
|
79
|
+
? having_node_js_1.HavingNode.cloneWithFilter(selectNode.having, 'And', filter)
|
|
80
|
+
: having_node_js_1.HavingNode.create(filter),
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
cloneWithOrHaving(selectNode, filter) {
|
|
84
|
+
return (0, object_utils_js_1.freeze)({
|
|
85
|
+
...selectNode,
|
|
86
|
+
having: selectNode.having
|
|
87
|
+
? having_node_js_1.HavingNode.cloneWithFilter(selectNode.having, 'Or', filter)
|
|
80
88
|
: having_node_js_1.HavingNode.create(filter),
|
|
81
89
|
});
|
|
82
90
|
},
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
|
|
2
|
+
import { ParseContext } from './parse-context.js';
|
|
3
|
+
import { ReferenceExpressionOrList } from './reference-parser.js';
|
|
4
|
+
export declare function parseGroupBy(ctx: ParseContext, orderBy: ReferenceExpressionOrList<any, any>): GroupByItemNode[];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseGroupBy = void 0;
|
|
4
|
+
const group_by_item_node_js_1 = require("../operation-node/group-by-item-node.js");
|
|
5
|
+
const reference_parser_js_1 = require("./reference-parser.js");
|
|
6
|
+
function parseGroupBy(ctx, orderBy) {
|
|
7
|
+
return (0, reference_parser_js_1.parseReferenceExpressionOrList)(ctx, orderBy).map(group_by_item_node_js_1.GroupByItemNode.create);
|
|
8
|
+
}
|
|
9
|
+
exports.parseGroupBy = parseGroupBy;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { JoinNode, JoinType } from '../operation-node/join-node.js';
|
|
2
2
|
import { AnyColumn, AnyColumnWithTable } from '../util/type-utils.js';
|
|
3
|
-
import { ExtractAliasFromTableExpression,
|
|
3
|
+
import { ExtractAliasFromTableExpression, TableExpressionDatabase } from './table-parser.js';
|
|
4
4
|
import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
5
5
|
import { ParseContext } from './parse-context.js';
|
|
6
|
-
export declare type JoinReferenceExpression<DB, TB extends keyof DB, F> =
|
|
7
|
-
export declare type JoinCallbackExpression<DB, TB extends keyof DB, F> = (join: JoinBuilder<
|
|
6
|
+
export declare type JoinReferenceExpression<DB, TB extends keyof DB, F> = AnyJoinColumn<DB, TB, F> | AnyJoinColumnWithTable<DB, TB, F>;
|
|
7
|
+
export declare type JoinCallbackExpression<DB, TB extends keyof DB, F> = (join: JoinBuilder<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>) => JoinBuilder<any, any>;
|
|
8
|
+
declare type AnyJoinColumn<DB, TB extends keyof DB, F> = AnyColumn<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
|
|
9
|
+
declare type AnyJoinColumnWithTable<DB, TB extends keyof DB, F> = AnyColumnWithTable<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
|
|
8
10
|
export declare function parseJoin(ctx: ParseContext, joinType: JoinType, args: any[]): JoinNode;
|
|
11
|
+
export {};
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { RawNode } from '../operation-node/raw-node.js';
|
|
1
|
+
import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
|
|
3
2
|
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
4
3
|
import { ParseContext } from './parse-context.js';
|
|
5
4
|
import { ReferenceExpression } from './reference-parser.js';
|
|
6
5
|
export declare type OrderByDirection = 'asc' | 'desc';
|
|
7
6
|
export declare type OrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | keyof O;
|
|
8
7
|
export declare type OrderByDirectionExpression = OrderByDirection | AnyRawBuilder;
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function parseOrderByDirectionExpression(expr?: OrderByDirectionExpression): RawNode | undefined;
|
|
8
|
+
export declare function parseOrderBy(ctx: ParseContext, orderBy: OrderByExpression<any, any, any>, direction?: OrderByDirectionExpression): OrderByItemNode;
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.parseOrderBy = void 0;
|
|
4
|
+
const order_by_item_node_js_1 = require("../operation-node/order-by-item-node.js");
|
|
4
5
|
const raw_node_js_1 = require("../operation-node/raw-node.js");
|
|
5
6
|
const reference_parser_js_1 = require("./reference-parser.js");
|
|
7
|
+
function parseOrderBy(ctx, orderBy, direction) {
|
|
8
|
+
return order_by_item_node_js_1.OrderByItemNode.create(parseOrderByExpression(ctx, orderBy), parseOrderByDirectionExpression(direction));
|
|
9
|
+
}
|
|
10
|
+
exports.parseOrderBy = parseOrderBy;
|
|
6
11
|
function parseOrderByExpression(ctx, expr) {
|
|
7
12
|
return (0, reference_parser_js_1.parseReferenceExpression)(ctx, expr);
|
|
8
13
|
}
|
|
9
|
-
exports.parseOrderByExpression = parseOrderByExpression;
|
|
10
14
|
function parseOrderByDirectionExpression(expr) {
|
|
11
15
|
if (!expr) {
|
|
12
16
|
return undefined;
|
|
@@ -18,4 +22,3 @@ function parseOrderByDirectionExpression(expr) {
|
|
|
18
22
|
return expr.toOperationNode();
|
|
19
23
|
}
|
|
20
24
|
}
|
|
21
|
-
exports.parseOrderByDirectionExpression = parseOrderByDirectionExpression;
|
|
@@ -9,7 +9,7 @@ import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
|
9
9
|
import { QueryBuilder } from '../query-builder/query-builder.js';
|
|
10
10
|
import { ParseContext } from './parse-context.js';
|
|
11
11
|
export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
|
|
12
|
-
export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReferenceExpression<DB, TB
|
|
12
|
+
export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
|
|
13
13
|
export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
|
|
14
14
|
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends QueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => QueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
|
|
15
15
|
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, S extends string, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : S extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : S extends keyof R ? R[S] : PrimitiveValue;
|
|
@@ -9,7 +9,7 @@ const table_node_js_1 = require("../operation-node/table-node.js");
|
|
|
9
9
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
10
10
|
const query_node_js_1 = require("../operation-node/query-node.js");
|
|
11
11
|
function parseReferenceExpressionOrList(ctx, arg) {
|
|
12
|
-
if (
|
|
12
|
+
if ((0, object_utils_js_1.isReadonlyArray)(arg)) {
|
|
13
13
|
return arg.map((it) => parseReferenceExpression(ctx, it));
|
|
14
14
|
}
|
|
15
15
|
else {
|
|
@@ -7,20 +7,20 @@ import { ParseContext } from './parse-context.js';
|
|
|
7
7
|
export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB>;
|
|
8
8
|
export declare type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
|
|
9
9
|
export declare type TableReference<DB> = AnyAliasedTable<DB, any, any> | AnyTable<DB> | AnyAliasedRawBuilder;
|
|
10
|
-
export declare type QueryBuilderWithTable<DB, TB extends keyof DB, O, TE> = QueryBuilder<
|
|
11
|
-
export declare type
|
|
10
|
+
export declare type QueryBuilderWithTable<DB, TB extends keyof DB, O, TE> = QueryBuilder<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
11
|
+
export declare type TableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
12
12
|
[C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
|
|
13
13
|
};
|
|
14
|
-
export declare type QueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<
|
|
15
|
-
export declare type
|
|
14
|
+
export declare type QueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
15
|
+
export declare type LeftJoinTableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
16
16
|
[C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? DB[C] : never;
|
|
17
17
|
};
|
|
18
|
-
export declare type QueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<
|
|
19
|
-
export declare type
|
|
18
|
+
export declare type QueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
19
|
+
export declare type RightJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
20
20
|
[C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
|
|
21
21
|
};
|
|
22
|
-
export declare type QueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<
|
|
23
|
-
export declare type
|
|
22
|
+
export declare type QueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
23
|
+
export declare type FullJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
24
24
|
[C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
|
|
25
25
|
};
|
|
26
26
|
export declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends AliasedRawBuilder<any, infer RA> ? RA : TE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : never;
|
|
@@ -66,9 +66,9 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
|
|
|
66
66
|
* Calls the `sum` function for the column given as the argument.
|
|
67
67
|
*
|
|
68
68
|
* If this is used in a `select` statement the type of the selected expression
|
|
69
|
-
* will be `number | string` by default. This is because Kysely can't
|
|
70
|
-
* type the db driver outputs. Sometimes the output can be larger than
|
|
71
|
-
* largest javascript number and a string is returned instead. Most drivers
|
|
69
|
+
* will be `number | string | BigInt` by default. This is because Kysely can't
|
|
70
|
+
* know the type the db driver outputs. Sometimes the output can be larger than
|
|
71
|
+
* the largest javascript number and a string is returned instead. Most drivers
|
|
72
72
|
* allow you to configure the output type of large numbers and Kysely can't
|
|
73
73
|
* know if you've done so.
|
|
74
74
|
*
|
|
@@ -88,9 +88,9 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
|
|
|
88
88
|
* Calls the `count` function for the column given as the argument.
|
|
89
89
|
*
|
|
90
90
|
* If this is used in a `select` statement the type of the selected expression
|
|
91
|
-
* will be `number | string` by default. This is because Kysely can't
|
|
92
|
-
* type the db driver outputs. Sometimes the output can be larger than
|
|
93
|
-
* largest javascript number and a string is returned instead. Most drivers
|
|
91
|
+
* will be `number | string | BigInt` by default. This is because Kysely can't
|
|
92
|
+
* know the type the db driver outputs. Sometimes the output can be larger than
|
|
93
|
+
* the largest javascript number and a string is returned instead. Most drivers
|
|
94
94
|
* allow you to configure the output type of large numbers and Kysely can't
|
|
95
95
|
* know if you've done so.
|
|
96
96
|
*
|