kysely 0.9.1 → 0.9.5
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/dist/cjs/dialect/mysql/mysql-dialect.d.ts +11 -0
- package/dist/cjs/dialect/mysql/mysql-dialect.js +7 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +13 -1
- package/dist/cjs/dialect/postgres/postgres-dialect.js +10 -0
- package/dist/cjs/dialect/postgres/postgres-driver.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-query-compiler.js +1 -1
- package/dist/cjs/driver/runtime-driver.d.ts +3 -2
- package/dist/cjs/driver/runtime-driver.js +57 -4
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/kysely.d.ts +31 -9
- package/dist/cjs/kysely.js +25 -9
- package/dist/cjs/migration/migration.d.ts +32 -0
- 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-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +9 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +61 -59
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -316
- package/dist/cjs/operation-node/operation-node.d.ts +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 +5 -1
- package/dist/cjs/operation-node/select-query-node.js +18 -2
- package/dist/cjs/operation-node/union-node.d.ts +16 -0
- package/dist/cjs/operation-node/union-node.js +19 -0
- 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/insert-values-parser.d.ts +1 -1
- package/dist/cjs/parser/join-parser.d.ts +4 -4
- 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/union-parser.d.ts +5 -0
- package/dist/cjs/parser/union-parser.js +13 -0
- package/dist/cjs/parser/value-parser.d.ts +1 -1
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +5 -116
- package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +8 -0
- package/dist/cjs/plugin/camel-case/camel-case-transformer.js +19 -0
- package/dist/cjs/plugin/camel-case/camel-case.d.ts +15 -0
- package/dist/cjs/plugin/camel-case/camel-case.js +109 -0
- package/dist/cjs/plugin/kysely-plugin.d.ts +1 -1
- package/dist/cjs/query-builder/join-builder.js +8 -8
- package/dist/cjs/query-builder/query-builder.d.ts +65 -1
- package/dist/cjs/query-builder/query-builder.js +103 -22
- package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +7 -2
- package/dist/cjs/query-compiler/default-query-compiler.js +20 -3
- package/dist/cjs/query-executor/default-query-executor.d.ts +1 -0
- package/dist/cjs/query-executor/default-query-executor.js +6 -0
- package/dist/cjs/query-executor/noop-query-executor.d.ts +1 -0
- package/dist/cjs/query-executor/noop-query-executor.js +3 -0
- package/dist/cjs/query-executor/query-executor.d.ts +9 -4
- package/dist/cjs/util/log.d.ts +19 -0
- package/dist/cjs/util/log.js +37 -0
- package/dist/cjs/util/object-utils.d.ts +11 -11
- package/dist/cjs/util/object-utils.js +1 -1
- package/dist/cjs/util/random-string.js +6 -3
- package/dist/cjs/util/type-utils.d.ts +4 -4
- package/dist/esm/dialect/mysql/mysql-dialect.d.ts +11 -0
- package/dist/esm/dialect/mysql/mysql-dialect.js +7 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +3 -3
- package/dist/esm/dialect/postgres/postgres-dialect.d.ts +13 -1
- package/dist/esm/dialect/postgres/postgres-dialect.js +10 -0
- package/dist/esm/dialect/postgres/postgres-driver.js +2 -2
- package/dist/esm/dialect/postgres/postgres-query-compiler.js +1 -1
- package/dist/esm/driver/runtime-driver.d.ts +3 -2
- package/dist/esm/driver/runtime-driver.js +57 -4
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/kysely.d.ts +31 -9
- package/dist/esm/kysely.js +25 -9
- package/dist/esm/migration/migration.d.ts +32 -0
- 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-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +9 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +61 -59
- package/dist/esm/operation-node/operation-node-visitor.js +1 -316
- package/dist/esm/operation-node/operation-node.d.ts +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 +5 -1
- package/dist/esm/operation-node/select-query-node.js +18 -2
- package/dist/esm/operation-node/union-node.d.ts +16 -0
- package/dist/esm/operation-node/union-node.js +16 -0
- 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/insert-values-parser.d.ts +1 -1
- package/dist/esm/parser/join-parser.d.ts +4 -4
- 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/union-parser.d.ts +5 -0
- package/dist/esm/parser/union-parser.js +9 -0
- package/dist/esm/parser/value-parser.d.ts +1 -1
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +4 -115
- package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +8 -0
- package/dist/esm/plugin/camel-case/camel-case-transformer.js +15 -0
- package/dist/esm/plugin/camel-case/camel-case.d.ts +15 -0
- package/dist/esm/plugin/camel-case/camel-case.js +104 -0
- package/dist/esm/plugin/kysely-plugin.d.ts +1 -1
- package/dist/esm/query-builder/join-builder.js +8 -8
- package/dist/esm/query-builder/query-builder.d.ts +65 -1
- package/dist/esm/query-builder/query-builder.js +104 -23
- package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +7 -2
- package/dist/esm/query-compiler/default-query-compiler.js +20 -3
- package/dist/esm/query-executor/default-query-executor.d.ts +1 -0
- package/dist/esm/query-executor/default-query-executor.js +6 -0
- package/dist/esm/query-executor/noop-query-executor.d.ts +1 -0
- package/dist/esm/query-executor/noop-query-executor.js +3 -0
- package/dist/esm/query-executor/query-executor.d.ts +9 -4
- package/dist/esm/util/log.d.ts +19 -0
- package/dist/esm/util/log.js +33 -0
- package/dist/esm/util/object-utils.d.ts +11 -11
- package/dist/esm/util/object-utils.js +1 -1
- package/dist/esm/util/random-string.js +6 -3
- package/dist/esm/util/type-utils.d.ts +4 -4
- package/package.json +1 -1
|
@@ -8,6 +8,16 @@ import { Dialect } from '../dialect.js';
|
|
|
8
8
|
import { DatabaseIntrospector } from '../../introspection/database-introspector.js';
|
|
9
9
|
import { DialectAdapter } from '../dialect-adapter.js';
|
|
10
10
|
import { DatabaseConnection } from '../../driver/database-connection.js';
|
|
11
|
+
/**
|
|
12
|
+
* PostgreSQL dialect that uses the [pg](https://node-postgres.com/) library.
|
|
13
|
+
*
|
|
14
|
+
* The {@link PostgresDialectConfig | configuration} passed to the constructor
|
|
15
|
+
* is given as-is to the pg library's [Pool](https://node-postgres.com/api/pool)
|
|
16
|
+
* constructor. See the following two links for more documentation:
|
|
17
|
+
*
|
|
18
|
+
* https://node-postgres.com/api/pool
|
|
19
|
+
* https://node-postgres.com/api/client
|
|
20
|
+
*/
|
|
11
21
|
export declare class PostgresDialect implements Dialect {
|
|
12
22
|
#private;
|
|
13
23
|
constructor(config: PostgresDialectConfig);
|
|
@@ -19,7 +29,7 @@ export declare class PostgresDialect implements Dialect {
|
|
|
19
29
|
/**
|
|
20
30
|
* Config for the postgres dialect.
|
|
21
31
|
*
|
|
22
|
-
* This interface is equal to `pg` library's
|
|
32
|
+
* This interface is equal to `pg` library's `Pool` config:
|
|
23
33
|
*
|
|
24
34
|
* https://node-postgres.com/api/pool
|
|
25
35
|
* https://node-postgres.com/api/client
|
|
@@ -105,6 +115,8 @@ export interface PostgresDialectConfig {
|
|
|
105
115
|
application_name?: string;
|
|
106
116
|
/**
|
|
107
117
|
* Called once for each created connection.
|
|
118
|
+
*
|
|
119
|
+
* This is a Kysely specific feature and does not come from the `pg` module.
|
|
108
120
|
*/
|
|
109
121
|
onCreateConnection?: (connection: DatabaseConnection) => Promise<void>;
|
|
110
122
|
keepAlive?: boolean;
|
|
@@ -2,6 +2,16 @@ import { PostgresDriver } from './postgres-driver.js';
|
|
|
2
2
|
import { PostgresIntrospector } from './postgres-introspector.js';
|
|
3
3
|
import { PostgresQueryCompiler } from './postgres-query-compiler.js';
|
|
4
4
|
import { PostgresAdapter } from './postgres-adapter.js';
|
|
5
|
+
/**
|
|
6
|
+
* PostgreSQL dialect that uses the [pg](https://node-postgres.com/) library.
|
|
7
|
+
*
|
|
8
|
+
* The {@link PostgresDialectConfig | configuration} passed to the constructor
|
|
9
|
+
* is given as-is to the pg library's [Pool](https://node-postgres.com/api/pool)
|
|
10
|
+
* constructor. See the following two links for more documentation:
|
|
11
|
+
*
|
|
12
|
+
* https://node-postgres.com/api/pool
|
|
13
|
+
* https://node-postgres.com/api/client
|
|
14
|
+
*/
|
|
5
15
|
export class PostgresDialect {
|
|
6
16
|
#config;
|
|
7
17
|
constructor(config) {
|
|
@@ -13,10 +13,10 @@ export class PostgresDriver {
|
|
|
13
13
|
// installed. As you can see, there IS an import from `pg` at the
|
|
14
14
|
// top level too, but that's only for types. It doesn't get compiled
|
|
15
15
|
// into javascript. You can check the built javascript code.
|
|
16
|
-
const
|
|
16
|
+
const PoolConstructor = await importPgPool();
|
|
17
17
|
// Use the `pg` module's own pool. All drivers should use the
|
|
18
18
|
// pool provided by the database library if possible.
|
|
19
|
-
this.#pool = new
|
|
19
|
+
this.#pool = new PoolConstructor(this.#config);
|
|
20
20
|
}
|
|
21
21
|
async acquireConnection() {
|
|
22
22
|
const client = await this.#pool.connect();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Log } from '../util/log.js';
|
|
1
2
|
import { DatabaseConnection } from './database-connection.js';
|
|
2
3
|
import { Driver, TransactionSettings } from './driver.js';
|
|
3
4
|
/**
|
|
@@ -7,10 +8,10 @@ import { Driver, TransactionSettings } from './driver.js';
|
|
|
7
8
|
*/
|
|
8
9
|
export declare class RuntimeDriver implements Driver {
|
|
9
10
|
#private;
|
|
10
|
-
constructor(driver: Driver);
|
|
11
|
+
constructor(driver: Driver, log: Log);
|
|
11
12
|
init(): Promise<void>;
|
|
12
13
|
acquireConnection(): Promise<DatabaseConnection>;
|
|
13
|
-
releaseConnection(
|
|
14
|
+
releaseConnection(runtimeConnection: DatabaseConnection): Promise<void>;
|
|
14
15
|
beginTransaction(connection: DatabaseConnection, settings: TransactionSettings): Promise<void>;
|
|
15
16
|
commitTransaction(connection: DatabaseConnection): Promise<void>;
|
|
16
17
|
rollbackTransaction(connection: DatabaseConnection): Promise<void>;
|
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export class RuntimeDriver {
|
|
7
7
|
#driver;
|
|
8
|
+
#log;
|
|
8
9
|
#initPromise;
|
|
9
10
|
#destroyPromise;
|
|
10
|
-
|
|
11
|
+
#connections = new WeakMap();
|
|
12
|
+
constructor(driver, log) {
|
|
11
13
|
this.#driver = driver;
|
|
14
|
+
this.#log = log;
|
|
12
15
|
}
|
|
13
16
|
async init() {
|
|
14
17
|
if (!this.#initPromise) {
|
|
@@ -21,10 +24,18 @@ export class RuntimeDriver {
|
|
|
21
24
|
}
|
|
22
25
|
async acquireConnection() {
|
|
23
26
|
await this.init();
|
|
24
|
-
|
|
27
|
+
const connection = await this.#driver.acquireConnection();
|
|
28
|
+
let runtimeConnection = this.#connections.get(connection);
|
|
29
|
+
if (!runtimeConnection) {
|
|
30
|
+
runtimeConnection = new RuntimeConnection(connection, this.#log);
|
|
31
|
+
this.#connections.set(connection, runtimeConnection);
|
|
32
|
+
}
|
|
33
|
+
return runtimeConnection;
|
|
25
34
|
}
|
|
26
|
-
releaseConnection(
|
|
27
|
-
|
|
35
|
+
async releaseConnection(runtimeConnection) {
|
|
36
|
+
if (runtimeConnection instanceof RuntimeConnection) {
|
|
37
|
+
await this.#driver.releaseConnection(runtimeConnection.connection);
|
|
38
|
+
}
|
|
28
39
|
}
|
|
29
40
|
beginTransaction(connection, settings) {
|
|
30
41
|
return this.#driver.beginTransaction(connection, settings);
|
|
@@ -49,3 +60,45 @@ export class RuntimeDriver {
|
|
|
49
60
|
await this.#destroyPromise;
|
|
50
61
|
}
|
|
51
62
|
}
|
|
63
|
+
class RuntimeConnection {
|
|
64
|
+
#connection;
|
|
65
|
+
#log;
|
|
66
|
+
get connection() {
|
|
67
|
+
return this.#connection;
|
|
68
|
+
}
|
|
69
|
+
constructor(connection, log) {
|
|
70
|
+
this.#connection = connection;
|
|
71
|
+
this.#log = log;
|
|
72
|
+
}
|
|
73
|
+
async executeQuery(compiledQuery) {
|
|
74
|
+
const startTime = process.hrtime.bigint();
|
|
75
|
+
try {
|
|
76
|
+
return await this.#connection.executeQuery(compiledQuery);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
this.#logError(error);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
this.#logQuery(compiledQuery, startTime);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
#logError(error) {
|
|
87
|
+
this.#log.error(() => ({
|
|
88
|
+
level: 'error',
|
|
89
|
+
error,
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
92
|
+
#logQuery(compiledQuery, startTime) {
|
|
93
|
+
this.#log.query(() => ({
|
|
94
|
+
level: 'query',
|
|
95
|
+
sql: compiledQuery.sql,
|
|
96
|
+
queryDurationMillis: this.#calculateDurationMillis(startTime),
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
#calculateDurationMillis(startTime) {
|
|
100
|
+
const endTime = process.hrtime.bigint();
|
|
101
|
+
const durationNanos = Number(endTime - startTime);
|
|
102
|
+
return durationNanos / 1_000_000;
|
|
103
|
+
}
|
|
104
|
+
}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -110,7 +110,7 @@ export * from './operation-node/operation-node-source.js';
|
|
|
110
110
|
export * from './operation-node/order-by-node.js';
|
|
111
111
|
export * from './introspection/database-introspector.js';
|
|
112
112
|
export * from './util/compilable.js';
|
|
113
|
-
export { AnyColumn, UnknownRow
|
|
113
|
+
export { AnyColumn, UnknownRow, AnyQueryBuilder } from './util/type-utils.js';
|
|
114
114
|
export { SelectExpression, SelectExpressionOrList, } from './parser/select-parser.js';
|
|
115
115
|
export { ReferenceExpression, ReferenceExpressionOrList, } from './parser/reference-parser.js';
|
|
116
116
|
export { ValueExpression, ValueExpressionOrList, } from './parser/value-parser.js';
|
|
@@ -120,3 +120,4 @@ export { JoinReferenceExpression, JoinCallbackExpression, } from './parser/join-
|
|
|
120
120
|
export { InsertObject } from './parser/insert-values-parser.js';
|
|
121
121
|
export { MutationObject } from './parser/update-set-parser.js';
|
|
122
122
|
export { OrderByExpression, OrderByDirectionExpression, } from './parser/order-by-parser.js';
|
|
123
|
+
export { UnionExpression } from './parser/union-parser.js';
|
package/dist/esm/kysely.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { DatabaseIntrospector } from './introspection/database-introspector.js';
|
|
|
10
10
|
import { Driver, IsolationLevel } from './driver/driver.js';
|
|
11
11
|
import { ParseContext } from './parser/parse-context.js';
|
|
12
12
|
import { FunctionBuilder } from './query-builder/function-builder.js';
|
|
13
|
+
import { LogLevel } from './util/log.js';
|
|
13
14
|
/**
|
|
14
15
|
* The main Kysely class.
|
|
15
16
|
*
|
|
@@ -127,15 +128,20 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
|
|
|
127
128
|
*/
|
|
128
129
|
get fn(): FunctionBuilder<DB, keyof DB>;
|
|
129
130
|
/**
|
|
130
|
-
*
|
|
131
|
-
* otherwise it's committed.
|
|
131
|
+
* Creates a {@link TransactionBuilder} that can be used to run queries inside a transaction.
|
|
132
132
|
*
|
|
133
|
-
* @
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
133
|
+
* The returned {@link TransactionBuilder} can be used to configure the transaction. The
|
|
134
|
+
* {@link TransactionBuilder.execute} method can then be called to run the transaction.
|
|
135
|
+
* {@link TransactionBuilder.execute} takes a function that is run inside the
|
|
136
|
+
* transaction. If the function throws, the transaction is rolled back. Otherwise
|
|
137
|
+
* the transaction is committed.
|
|
138
|
+
*
|
|
139
|
+
* The callback function passed to the {@link TransactionBuilder.execute | execute}
|
|
140
|
+
* method gets the transaction object as its only argument. The transaction is
|
|
141
|
+
* of type {@link Transaction} which inherits {@link Kysely}. Any query
|
|
142
|
+
* started through the transaction object is executed inside the transaction.
|
|
138
143
|
*
|
|
144
|
+
* @example
|
|
139
145
|
* ```ts
|
|
140
146
|
* const catto = await db.transaction().execute(async (trx) => {
|
|
141
147
|
* const jennifer = await trx.insertInto('person')
|
|
@@ -188,6 +194,10 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
|
|
|
188
194
|
* ```
|
|
189
195
|
*/
|
|
190
196
|
connection(): ConnectionBuilder<DB>;
|
|
197
|
+
/**
|
|
198
|
+
* Returns a copy of this Kysely instance with the given plugin installed.
|
|
199
|
+
*/
|
|
200
|
+
withPlugin(plugin: KyselyPlugin): Kysely<DB>;
|
|
191
201
|
/**
|
|
192
202
|
* Returns a copy of this Kysely instance without any plugins.
|
|
193
203
|
*/
|
|
@@ -220,8 +230,20 @@ export interface KyselyProps {
|
|
|
220
230
|
}
|
|
221
231
|
export declare function isKyselyProps(obj: unknown): obj is KyselyProps;
|
|
222
232
|
export interface KyselyConfig {
|
|
223
|
-
dialect: Dialect;
|
|
224
|
-
plugins?: KyselyPlugin[];
|
|
233
|
+
readonly dialect: Dialect;
|
|
234
|
+
readonly plugins?: KyselyPlugin[];
|
|
235
|
+
/**
|
|
236
|
+
* A list of log levels to log.
|
|
237
|
+
*
|
|
238
|
+
* Currently there's only two levels: `query` and `error`.
|
|
239
|
+
* This will be expanded based on user feedback later.
|
|
240
|
+
*
|
|
241
|
+
* Log levels:
|
|
242
|
+
*
|
|
243
|
+
* - query: Log each query's SQL and duration using console.log
|
|
244
|
+
* - error: Log all query errors using console.error
|
|
245
|
+
*/
|
|
246
|
+
readonly log?: ReadonlyArray<LogLevel>;
|
|
225
247
|
}
|
|
226
248
|
export declare class ConnectionBuilder<DB> {
|
|
227
249
|
#private;
|
package/dist/esm/kysely.js
CHANGED
|
@@ -12,6 +12,7 @@ import { TRANSACTION_ISOLATION_LEVELS, } from './driver/driver.js';
|
|
|
12
12
|
import { preventAwait } from './util/prevent-await.js';
|
|
13
13
|
import { DefaultParseContext } from './parser/parse-context.js';
|
|
14
14
|
import { FunctionBuilder } from './query-builder/function-builder.js';
|
|
15
|
+
import { Log } from './util/log.js';
|
|
15
16
|
/**
|
|
16
17
|
* The main Kysely class.
|
|
17
18
|
*
|
|
@@ -57,15 +58,16 @@ export class Kysely extends QueryCreator {
|
|
|
57
58
|
constructor(args) {
|
|
58
59
|
if (isKyselyProps(args)) {
|
|
59
60
|
super({ executor: args.executor, parseContext: args.parseContext });
|
|
60
|
-
this.#props = freeze(args);
|
|
61
|
+
this.#props = freeze({ ...args });
|
|
61
62
|
}
|
|
62
63
|
else {
|
|
63
64
|
const dialect = args.dialect;
|
|
64
65
|
const driver = dialect.createDriver();
|
|
65
66
|
const compiler = dialect.createQueryCompiler();
|
|
66
67
|
const adapter = dialect.createAdapter();
|
|
68
|
+
const log = new Log(args.log ?? []);
|
|
67
69
|
const parseContext = new DefaultParseContext(adapter);
|
|
68
|
-
const runtimeDriver = new RuntimeDriver(driver);
|
|
70
|
+
const runtimeDriver = new RuntimeDriver(driver, log);
|
|
69
71
|
const connectionProvider = new DefaultConnectionProvider(runtimeDriver);
|
|
70
72
|
const executor = new DefaultQueryExecutor(compiler, connectionProvider, args.plugins ?? []);
|
|
71
73
|
super({ executor, parseContext });
|
|
@@ -163,15 +165,20 @@ export class Kysely extends QueryCreator {
|
|
|
163
165
|
return new FunctionBuilder({ executor: this.#props.executor });
|
|
164
166
|
}
|
|
165
167
|
/**
|
|
166
|
-
*
|
|
167
|
-
* otherwise it's committed.
|
|
168
|
+
* Creates a {@link TransactionBuilder} that can be used to run queries inside a transaction.
|
|
168
169
|
*
|
|
169
|
-
* @
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
170
|
+
* The returned {@link TransactionBuilder} can be used to configure the transaction. The
|
|
171
|
+
* {@link TransactionBuilder.execute} method can then be called to run the transaction.
|
|
172
|
+
* {@link TransactionBuilder.execute} takes a function that is run inside the
|
|
173
|
+
* transaction. If the function throws, the transaction is rolled back. Otherwise
|
|
174
|
+
* the transaction is committed.
|
|
175
|
+
*
|
|
176
|
+
* The callback function passed to the {@link TransactionBuilder.execute | execute}
|
|
177
|
+
* method gets the transaction object as its only argument. The transaction is
|
|
178
|
+
* of type {@link Transaction} which inherits {@link Kysely}. Any query
|
|
179
|
+
* started through the transaction object is executed inside the transaction.
|
|
174
180
|
*
|
|
181
|
+
* @example
|
|
175
182
|
* ```ts
|
|
176
183
|
* const catto = await db.transaction().execute(async (trx) => {
|
|
177
184
|
* const jennifer = await trx.insertInto('person')
|
|
@@ -228,6 +235,15 @@ export class Kysely extends QueryCreator {
|
|
|
228
235
|
connection() {
|
|
229
236
|
return new ConnectionBuilder({ ...this.#props });
|
|
230
237
|
}
|
|
238
|
+
/**
|
|
239
|
+
* Returns a copy of this Kysely instance with the given plugin installed.
|
|
240
|
+
*/
|
|
241
|
+
withPlugin(plugin) {
|
|
242
|
+
return new Kysely({
|
|
243
|
+
...this.#props,
|
|
244
|
+
executor: this.#props.executor.withPlugin(plugin),
|
|
245
|
+
});
|
|
246
|
+
}
|
|
231
247
|
/**
|
|
232
248
|
* Returns a copy of this Kysely instance without any plugins.
|
|
233
249
|
*/
|
|
@@ -24,6 +24,38 @@ export declare class MigrationModule {
|
|
|
24
24
|
* path.join(__dirname, 'migrations')
|
|
25
25
|
* )
|
|
26
26
|
* ```
|
|
27
|
+
*
|
|
28
|
+
* In the next example, we use a record of migration objects instead of file folder path.
|
|
29
|
+
* The keys in the object are migration names that can be anything you want. The order of
|
|
30
|
+
* the migrations is determined based on the alphabetical order of the keys in the record.
|
|
31
|
+
* This can be useful if you are using a bundler like webpack or esbuild.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* await db.migration.migrateToLatest({
|
|
36
|
+
* migration1: {
|
|
37
|
+
* async up(db: Kysely<any>): Promise<void> {
|
|
38
|
+
* ...
|
|
39
|
+
* },
|
|
40
|
+
*
|
|
41
|
+
* async down(db: Kysely<any>): Promise<void> {
|
|
42
|
+
* ...
|
|
43
|
+
* }
|
|
44
|
+
* },
|
|
45
|
+
*
|
|
46
|
+
* migration2: {
|
|
47
|
+
* async up(db: Kysely<any>): Promise<void> {
|
|
48
|
+
* ...
|
|
49
|
+
* },
|
|
50
|
+
*
|
|
51
|
+
* async down(db: Kysely<any>): Promise<void> {
|
|
52
|
+
* ...
|
|
53
|
+
* }
|
|
54
|
+
* },
|
|
55
|
+
*
|
|
56
|
+
* ...
|
|
57
|
+
* })
|
|
58
|
+
* ```
|
|
27
59
|
*/
|
|
28
60
|
migrateToLatest(migrationsFolderPath: string): Promise<void>;
|
|
29
61
|
migrateToLatest(allMigrations: Record<string, Migration>): Promise<void>;
|
|
@@ -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
|
}>;
|
|
@@ -24,14 +24,16 @@ export const JoinNode = freeze({
|
|
|
24
24
|
on,
|
|
25
25
|
});
|
|
26
26
|
},
|
|
27
|
-
cloneWithOn(joinNode,
|
|
27
|
+
cloneWithOn(joinNode, on) {
|
|
28
28
|
return freeze({
|
|
29
29
|
...joinNode,
|
|
30
|
-
on: joinNode.on
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
on: joinNode.on ? AndNode.create(joinNode.on, on) : on,
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
cloneWithOrOn(joinNode, on) {
|
|
34
|
+
return freeze({
|
|
35
|
+
...joinNode,
|
|
36
|
+
on: joinNode.on ? OrNode.create(joinNode.on, on) : on,
|
|
35
37
|
});
|
|
36
38
|
},
|
|
37
39
|
});
|
|
@@ -57,6 +57,7 @@ import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
|
|
|
57
57
|
import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
58
58
|
import { ModifyColumnNode } from './modify-column-node.js';
|
|
59
59
|
import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
60
|
+
import { UnionNode } from './union-node.js';
|
|
60
61
|
/**
|
|
61
62
|
* Transforms an operation node tree into another one.
|
|
62
63
|
*
|
|
@@ -129,6 +130,7 @@ export declare class OperationNodeTransformer {
|
|
|
129
130
|
protected transformPrimaryKeyConstraint(node: PrimaryKeyConstraintNode): PrimaryKeyConstraintNode;
|
|
130
131
|
protected transformUniqueConstraint(node: UniqueConstraintNode): UniqueConstraintNode;
|
|
131
132
|
protected transformForeignKeyConstraint(node: ForeignKeyConstraintNode): ForeignKeyConstraintNode;
|
|
133
|
+
protected transformUnion(node: UnionNode): UnionNode;
|
|
132
134
|
protected transformReferences(node: ReferencesNode): ReferencesNode;
|
|
133
135
|
protected transformCheckConstraint(node: CheckConstraintNode): CheckConstraintNode;
|
|
134
136
|
protected transformWith(node: WithNode): WithNode;
|
|
@@ -89,6 +89,7 @@ export class OperationNodeTransformer {
|
|
|
89
89
|
AddConstraintNode: this.transformAddConstraint.bind(this),
|
|
90
90
|
DropConstraintNode: this.transformDropConstraint.bind(this),
|
|
91
91
|
ForeignKeyConstraintNode: this.transformForeignKeyConstraint.bind(this),
|
|
92
|
+
UnionNode: this.transformUnion.bind(this),
|
|
92
93
|
};
|
|
93
94
|
transformNode = (node) => {
|
|
94
95
|
if (!node) {
|
|
@@ -121,6 +122,7 @@ export class OperationNodeTransformer {
|
|
|
121
122
|
offset: this.transformNode(node.offset),
|
|
122
123
|
with: this.transformNode(node.with),
|
|
123
124
|
having: this.transformNode(node.having),
|
|
125
|
+
union: this.transformNodeList(node.union),
|
|
124
126
|
};
|
|
125
127
|
}
|
|
126
128
|
transformSelection(node) {
|
|
@@ -400,6 +402,13 @@ export class OperationNodeTransformer {
|
|
|
400
402
|
onUpdate: node.onUpdate,
|
|
401
403
|
};
|
|
402
404
|
}
|
|
405
|
+
transformUnion(node) {
|
|
406
|
+
return {
|
|
407
|
+
kind: 'UnionNode',
|
|
408
|
+
union: this.transformNode(node.union),
|
|
409
|
+
all: node.all,
|
|
410
|
+
};
|
|
411
|
+
}
|
|
403
412
|
transformReferences(node) {
|
|
404
413
|
return {
|
|
405
414
|
kind: 'ReferencesNode',
|
|
@@ -57,66 +57,68 @@ import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
|
|
|
57
57
|
import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
58
58
|
import { ModifyColumnNode } from './modify-column-node.js';
|
|
59
59
|
import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
60
|
-
|
|
60
|
+
import { UnionNode } from './union-node.js';
|
|
61
|
+
export declare abstract class OperationNodeVisitor {
|
|
61
62
|
#private;
|
|
62
63
|
protected readonly nodeStack: OperationNode[];
|
|
63
64
|
protected readonly visitNode: (node: OperationNode) => void;
|
|
64
|
-
protected visitSelectQuery(node: SelectQueryNode): void;
|
|
65
|
-
protected visitSelection(node: SelectionNode): void;
|
|
66
|
-
protected visitColumn(node: ColumnNode): void;
|
|
67
|
-
protected visitAlias(node: AliasNode): void;
|
|
68
|
-
protected visitTable(node: TableNode): void;
|
|
69
|
-
protected visitFrom(node: FromNode): void;
|
|
70
|
-
protected visitReference(node: ReferenceNode): void;
|
|
71
|
-
protected visitFilter(node: FilterNode): void;
|
|
72
|
-
protected visitAnd(node: AndNode): void;
|
|
73
|
-
protected visitOr(node: OrNode): void;
|
|
74
|
-
protected visitValueList(node: ValueListNode): void;
|
|
75
|
-
protected visitParens(node: ParensNode): void;
|
|
76
|
-
protected visitJoin(node: JoinNode): void;
|
|
77
|
-
protected visitRaw(node: RawNode): void;
|
|
78
|
-
protected visitWhere(node: WhereNode): void;
|
|
79
|
-
protected visitInsertQuery(node: InsertQueryNode): void;
|
|
80
|
-
protected visitDeleteQuery(node: DeleteQueryNode): void;
|
|
81
|
-
protected visitReturning(node: ReturningNode): void;
|
|
82
|
-
protected visitCreateTable(node: CreateTableNode): void;
|
|
83
|
-
protected visitAddColumn(node: AddColumnNode): void;
|
|
84
|
-
protected visitColumnDefinition(node: ColumnDefinitionNode): void;
|
|
85
|
-
protected visitDropTable(node: DropTableNode): void;
|
|
86
|
-
protected visitOrderBy(node: OrderByNode): void;
|
|
87
|
-
protected visitOrderByItem(node: OrderByItemNode): void;
|
|
88
|
-
protected visitGroupBy(node: GroupByNode): void;
|
|
89
|
-
protected visitGroupByItem(node: GroupByItemNode): void;
|
|
90
|
-
protected visitUpdateQuery(node: UpdateQueryNode): void;
|
|
91
|
-
protected visitColumnUpdate(node: ColumnUpdateNode): void;
|
|
92
|
-
protected visitLimit(node: LimitNode): void;
|
|
93
|
-
protected visitOffset(node: OffsetNode): void;
|
|
94
|
-
protected visitOnConflict(node: OnConflictNode): void;
|
|
95
|
-
protected visitOnDuplicateKey(node: OnDuplicateKeyNode): void;
|
|
96
|
-
protected visitCreateIndex(node: CreateIndexNode): void;
|
|
97
|
-
protected
|
|
98
|
-
protected
|
|
99
|
-
protected visitPrimaryKeyConstraint(node: PrimaryKeyConstraintNode): void;
|
|
100
|
-
protected visitUniqueConstraint(node: UniqueConstraintNode): void;
|
|
101
|
-
protected visitReferences(node: ReferencesNode): void;
|
|
102
|
-
protected visitCheckConstraint(node: CheckConstraintNode): void;
|
|
103
|
-
protected visitWith(node: WithNode): void;
|
|
104
|
-
protected visitCommonTableExpression(node: CommonTableExpressionNode): void;
|
|
105
|
-
protected visitHaving(node: HavingNode): void;
|
|
106
|
-
protected visitCreateSchema(node: CreateSchemaNode): void;
|
|
107
|
-
protected visitDropSchema(node: DropSchemaNode): void;
|
|
108
|
-
protected visitAlterTable(node: AlterTableNode): void;
|
|
109
|
-
protected visitDropColumn(node: DropColumnNode): void;
|
|
110
|
-
protected visitRenameColumn(node: RenameColumnNode): void;
|
|
111
|
-
protected visitAlterColumn(node: AlterColumnNode): void;
|
|
112
|
-
protected visitModifyColumn(node: ModifyColumnNode): void;
|
|
113
|
-
protected visitAddConstraint(node: AddConstraintNode): void;
|
|
114
|
-
protected visitDropConstraint(node: DropConstraintNode): void;
|
|
115
|
-
protected visitForeignKeyConstraint(node: ForeignKeyConstraintNode): void;
|
|
116
|
-
protected
|
|
117
|
-
protected
|
|
118
|
-
protected
|
|
119
|
-
protected
|
|
120
|
-
protected
|
|
121
|
-
protected
|
|
65
|
+
protected abstract visitSelectQuery(node: SelectQueryNode): void;
|
|
66
|
+
protected abstract visitSelection(node: SelectionNode): void;
|
|
67
|
+
protected abstract visitColumn(node: ColumnNode): void;
|
|
68
|
+
protected abstract visitAlias(node: AliasNode): void;
|
|
69
|
+
protected abstract visitTable(node: TableNode): void;
|
|
70
|
+
protected abstract visitFrom(node: FromNode): void;
|
|
71
|
+
protected abstract visitReference(node: ReferenceNode): void;
|
|
72
|
+
protected abstract visitFilter(node: FilterNode): void;
|
|
73
|
+
protected abstract visitAnd(node: AndNode): void;
|
|
74
|
+
protected abstract visitOr(node: OrNode): void;
|
|
75
|
+
protected abstract visitValueList(node: ValueListNode): void;
|
|
76
|
+
protected abstract visitParens(node: ParensNode): void;
|
|
77
|
+
protected abstract visitJoin(node: JoinNode): void;
|
|
78
|
+
protected abstract visitRaw(node: RawNode): void;
|
|
79
|
+
protected abstract visitWhere(node: WhereNode): void;
|
|
80
|
+
protected abstract visitInsertQuery(node: InsertQueryNode): void;
|
|
81
|
+
protected abstract visitDeleteQuery(node: DeleteQueryNode): void;
|
|
82
|
+
protected abstract visitReturning(node: ReturningNode): void;
|
|
83
|
+
protected abstract visitCreateTable(node: CreateTableNode): void;
|
|
84
|
+
protected abstract visitAddColumn(node: AddColumnNode): void;
|
|
85
|
+
protected abstract visitColumnDefinition(node: ColumnDefinitionNode): void;
|
|
86
|
+
protected abstract visitDropTable(node: DropTableNode): void;
|
|
87
|
+
protected abstract visitOrderBy(node: OrderByNode): void;
|
|
88
|
+
protected abstract visitOrderByItem(node: OrderByItemNode): void;
|
|
89
|
+
protected abstract visitGroupBy(node: GroupByNode): void;
|
|
90
|
+
protected abstract visitGroupByItem(node: GroupByItemNode): void;
|
|
91
|
+
protected abstract visitUpdateQuery(node: UpdateQueryNode): void;
|
|
92
|
+
protected abstract visitColumnUpdate(node: ColumnUpdateNode): void;
|
|
93
|
+
protected abstract visitLimit(node: LimitNode): void;
|
|
94
|
+
protected abstract visitOffset(node: OffsetNode): void;
|
|
95
|
+
protected abstract visitOnConflict(node: OnConflictNode): void;
|
|
96
|
+
protected abstract visitOnDuplicateKey(node: OnDuplicateKeyNode): void;
|
|
97
|
+
protected abstract visitCreateIndex(node: CreateIndexNode): void;
|
|
98
|
+
protected abstract visitDropIndex(node: DropIndexNode): void;
|
|
99
|
+
protected abstract visitList(node: ListNode): void;
|
|
100
|
+
protected abstract visitPrimaryKeyConstraint(node: PrimaryKeyConstraintNode): void;
|
|
101
|
+
protected abstract visitUniqueConstraint(node: UniqueConstraintNode): void;
|
|
102
|
+
protected abstract visitReferences(node: ReferencesNode): void;
|
|
103
|
+
protected abstract visitCheckConstraint(node: CheckConstraintNode): void;
|
|
104
|
+
protected abstract visitWith(node: WithNode): void;
|
|
105
|
+
protected abstract visitCommonTableExpression(node: CommonTableExpressionNode): void;
|
|
106
|
+
protected abstract visitHaving(node: HavingNode): void;
|
|
107
|
+
protected abstract visitCreateSchema(node: CreateSchemaNode): void;
|
|
108
|
+
protected abstract visitDropSchema(node: DropSchemaNode): void;
|
|
109
|
+
protected abstract visitAlterTable(node: AlterTableNode): void;
|
|
110
|
+
protected abstract visitDropColumn(node: DropColumnNode): void;
|
|
111
|
+
protected abstract visitRenameColumn(node: RenameColumnNode): void;
|
|
112
|
+
protected abstract visitAlterColumn(node: AlterColumnNode): void;
|
|
113
|
+
protected abstract visitModifyColumn(node: ModifyColumnNode): void;
|
|
114
|
+
protected abstract visitAddConstraint(node: AddConstraintNode): void;
|
|
115
|
+
protected abstract visitDropConstraint(node: DropConstraintNode): void;
|
|
116
|
+
protected abstract visitForeignKeyConstraint(node: ForeignKeyConstraintNode): void;
|
|
117
|
+
protected abstract visitUnion(node: UnionNode): void;
|
|
118
|
+
protected abstract visitDataType(node: DataTypeNode): void;
|
|
119
|
+
protected abstract visitSelectAll(_: SelectAllNode): void;
|
|
120
|
+
protected abstract visitIdentifier(_: IdentifierNode): void;
|
|
121
|
+
protected abstract visitValue(_: ValueNode): void;
|
|
122
|
+
protected abstract visitPrimitiveValueList(_: PrimitiveValueListNode): void;
|
|
123
|
+
protected abstract visitOperator(node: OperatorNode): void;
|
|
122
124
|
}
|