kysely 0.16.8 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +23 -11
- package/dist/cjs/dialect/mysql/mysql-adapter.js +3 -4
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-adapter.js +3 -2
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -1
- package/dist/cjs/index-nodeless.d.ts +2 -0
- package/dist/cjs/index-nodeless.js +2 -0
- package/dist/cjs/kysely.d.ts +3 -6
- package/dist/cjs/kysely.js +9 -14
- package/dist/cjs/migration/migrator.d.ts +22 -0
- package/dist/cjs/migration/migrator.js +27 -5
- package/dist/cjs/operation-node/delete-query-node.d.ts +7 -0
- package/dist/cjs/operation-node/delete-query-node.js +15 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +1 -1
- package/dist/cjs/operation-node/raw-node.d.ts +4 -2
- package/dist/cjs/operation-node/raw-node.js +8 -2
- package/dist/cjs/parser/complex-expression-parser.d.ts +5 -5
- package/dist/cjs/parser/complex-expression-parser.js +5 -4
- package/dist/cjs/parser/filter-parser.d.ts +9 -9
- package/dist/cjs/parser/filter-parser.js +31 -30
- package/dist/cjs/parser/group-by-parser.d.ts +1 -2
- package/dist/cjs/parser/group-by-parser.js +2 -2
- package/dist/cjs/parser/insert-values-parser.d.ts +1 -2
- package/dist/cjs/parser/insert-values-parser.js +6 -6
- package/dist/cjs/parser/join-parser.d.ts +1 -2
- package/dist/cjs/parser/join-parser.js +8 -7
- package/dist/cjs/parser/order-by-parser.d.ts +1 -2
- package/dist/cjs/parser/order-by-parser.js +4 -4
- package/dist/cjs/parser/parse-utils.d.ts +10 -0
- package/dist/cjs/parser/parse-utils.js +38 -0
- package/dist/cjs/parser/reference-parser.d.ts +2 -3
- package/dist/cjs/parser/reference-parser.js +5 -5
- package/dist/cjs/parser/select-parser.d.ts +1 -2
- package/dist/cjs/parser/select-parser.js +5 -5
- package/dist/cjs/parser/table-parser.d.ts +2 -3
- package/dist/cjs/parser/table-parser.js +5 -5
- package/dist/cjs/parser/update-set-parser.d.ts +1 -2
- package/dist/cjs/parser/update-set-parser.js +2 -2
- package/dist/cjs/parser/value-parser.d.ts +3 -4
- package/dist/cjs/parser/value-parser.js +7 -7
- package/dist/cjs/parser/with-parser.d.ts +1 -2
- package/dist/cjs/parser/with-parser.js +3 -2
- package/dist/cjs/query-builder/delete-query-builder.d.ts +77 -20
- package/dist/cjs/query-builder/delete-query-builder.js +81 -14
- package/dist/cjs/query-builder/expression-builder.d.ts +4 -13
- package/dist/cjs/query-builder/expression-builder.js +12 -21
- package/dist/cjs/query-builder/function-builder.d.ts +2 -6
- package/dist/cjs/query-builder/function-builder.js +5 -8
- package/dist/cjs/query-builder/insert-query-builder.d.ts +11 -9
- package/dist/cjs/query-builder/insert-query-builder.js +8 -7
- package/dist/cjs/query-builder/join-builder.d.ts +0 -2
- package/dist/cjs/query-builder/join-builder.js +8 -8
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +24 -20
- package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
- package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
- package/dist/cjs/query-builder/select-query-builder.d.ts +43 -32
- package/dist/cjs/query-builder/select-query-builder.js +28 -26
- package/dist/cjs/query-builder/update-query-builder.d.ts +29 -25
- package/dist/cjs/query-builder/update-query-builder.js +22 -20
- package/dist/cjs/query-builder/where-interface.d.ts +20 -16
- package/dist/cjs/query-compiler/default-query-compiler.js +16 -7
- package/dist/cjs/query-creator.d.ts +24 -138
- package/dist/cjs/query-creator.js +19 -145
- package/dist/cjs/query-executor/default-query-executor.d.ts +8 -1
- package/dist/cjs/query-executor/default-query-executor.js +13 -13
- package/dist/cjs/query-executor/noop-query-executor.d.ts +8 -0
- package/dist/cjs/query-executor/noop-query-executor.js +8 -1
- package/dist/cjs/query-executor/query-executor-provider.d.ts +8 -0
- package/dist/cjs/query-executor/query-executor-provider.js +2 -0
- package/dist/cjs/query-executor/query-executor.d.ts +7 -0
- package/dist/cjs/raw-builder/raw-builder.d.ts +42 -11
- package/dist/cjs/raw-builder/raw-builder.js +55 -56
- package/dist/cjs/raw-builder/sql.d.ts +323 -0
- package/dist/cjs/raw-builder/sql.js +153 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +20 -8
- package/dist/cjs/schema/alter-table-builder.js +3 -3
- package/dist/cjs/schema/column-definition-builder.d.ts +20 -8
- package/dist/cjs/schema/create-index-builder.d.ts +3 -1
- package/dist/cjs/schema/create-index-builder.js +3 -1
- package/dist/cjs/schema/create-table-builder.d.ts +6 -2
- package/dist/cjs/schema/create-table-builder.js +8 -4
- package/dist/cjs/schema/create-view-builder.d.ts +3 -3
- package/dist/cjs/schema/create-view-builder.js +3 -3
- package/dist/cjs/util/query-id.js +10 -4
- package/dist/cjs/util/random-string.js +65 -2
- package/dist/esm/dialect/mysql/mysql-adapter.js +3 -4
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -1
- package/dist/esm/dialect/postgres/postgres-adapter.js +3 -2
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -1
- package/dist/esm/index-nodeless.d.ts +2 -0
- package/dist/esm/index-nodeless.js +2 -0
- package/dist/esm/kysely.d.ts +3 -6
- package/dist/esm/kysely.js +9 -14
- package/dist/esm/migration/migrator.d.ts +22 -0
- package/dist/esm/migration/migrator.js +27 -5
- package/dist/esm/operation-node/delete-query-node.d.ts +7 -0
- package/dist/esm/operation-node/delete-query-node.js +15 -0
- package/dist/esm/operation-node/operation-node-transformer.js +1 -1
- package/dist/esm/operation-node/raw-node.d.ts +4 -2
- package/dist/esm/operation-node/raw-node.js +8 -2
- package/dist/esm/parser/complex-expression-parser.d.ts +5 -5
- package/dist/esm/parser/complex-expression-parser.js +5 -4
- package/dist/esm/parser/filter-parser.d.ts +9 -9
- package/dist/esm/parser/filter-parser.js +31 -30
- package/dist/esm/parser/group-by-parser.d.ts +1 -2
- package/dist/esm/parser/group-by-parser.js +2 -2
- package/dist/esm/parser/insert-values-parser.d.ts +1 -2
- package/dist/esm/parser/insert-values-parser.js +6 -6
- package/dist/esm/parser/join-parser.d.ts +1 -2
- package/dist/esm/parser/join-parser.js +8 -7
- package/dist/esm/parser/order-by-parser.d.ts +1 -2
- package/dist/esm/parser/order-by-parser.js +4 -4
- package/dist/esm/parser/parse-utils.d.ts +10 -0
- package/dist/esm/parser/parse-utils.js +32 -0
- package/dist/esm/parser/reference-parser.d.ts +2 -3
- package/dist/esm/parser/reference-parser.js +5 -5
- package/dist/esm/parser/select-parser.d.ts +1 -2
- package/dist/esm/parser/select-parser.js +5 -5
- package/dist/esm/parser/table-parser.d.ts +2 -3
- package/dist/esm/parser/table-parser.js +5 -5
- package/dist/esm/parser/update-set-parser.d.ts +1 -2
- package/dist/esm/parser/update-set-parser.js +2 -2
- package/dist/esm/parser/value-parser.d.ts +3 -4
- package/dist/esm/parser/value-parser.js +7 -7
- package/dist/esm/parser/with-parser.d.ts +1 -2
- package/dist/esm/parser/with-parser.js +3 -2
- package/dist/esm/query-builder/delete-query-builder.d.ts +77 -20
- package/dist/esm/query-builder/delete-query-builder.js +81 -14
- package/dist/esm/query-builder/expression-builder.d.ts +4 -13
- package/dist/esm/query-builder/expression-builder.js +12 -21
- package/dist/esm/query-builder/function-builder.d.ts +2 -6
- package/dist/esm/query-builder/function-builder.js +5 -8
- package/dist/esm/query-builder/insert-query-builder.d.ts +11 -9
- package/dist/esm/query-builder/insert-query-builder.js +8 -7
- package/dist/esm/query-builder/join-builder.d.ts +0 -2
- package/dist/esm/query-builder/join-builder.js +8 -8
- package/dist/esm/query-builder/on-conflict-builder.d.ts +24 -20
- package/dist/esm/query-builder/on-conflict-builder.js +17 -17
- package/dist/esm/query-builder/returning-interface.d.ts +2 -2
- package/dist/esm/query-builder/select-query-builder.d.ts +43 -32
- package/dist/esm/query-builder/select-query-builder.js +28 -26
- package/dist/esm/query-builder/update-query-builder.d.ts +29 -25
- package/dist/esm/query-builder/update-query-builder.js +22 -20
- package/dist/esm/query-builder/where-interface.d.ts +20 -16
- package/dist/esm/query-compiler/default-query-compiler.js +16 -7
- package/dist/esm/query-creator.d.ts +24 -138
- package/dist/esm/query-creator.js +19 -145
- package/dist/esm/query-executor/default-query-executor.d.ts +8 -1
- package/dist/esm/query-executor/default-query-executor.js +13 -13
- package/dist/esm/query-executor/noop-query-executor.d.ts +8 -0
- package/dist/esm/query-executor/noop-query-executor.js +7 -0
- package/dist/esm/query-executor/query-executor-provider.d.ts +8 -0
- package/dist/esm/query-executor/query-executor-provider.js +2 -0
- package/dist/esm/query-executor/query-executor.d.ts +7 -0
- package/dist/esm/raw-builder/raw-builder.d.ts +42 -11
- package/dist/esm/raw-builder/raw-builder.js +56 -57
- package/dist/esm/raw-builder/sql.d.ts +323 -0
- package/dist/esm/raw-builder/sql.js +151 -0
- package/dist/esm/schema/alter-table-builder.d.ts +20 -8
- package/dist/esm/schema/alter-table-builder.js +3 -3
- package/dist/esm/schema/column-definition-builder.d.ts +20 -8
- package/dist/esm/schema/create-index-builder.d.ts +3 -1
- package/dist/esm/schema/create-index-builder.js +3 -1
- package/dist/esm/schema/create-table-builder.d.ts +6 -2
- package/dist/esm/schema/create-table-builder.js +8 -4
- package/dist/esm/schema/create-view-builder.d.ts +3 -3
- package/dist/esm/schema/create-view-builder.js +3 -3
- package/dist/esm/util/query-id.js +10 -4
- package/dist/esm/util/random-string.js +65 -2
- package/package.json +13 -13
- package/dist/cjs/parser/parse-context.d.ts +0 -55
- package/dist/cjs/parser/parse-context.js +0 -50
- package/dist/cjs/util/private-symbols.d.ts +0 -5
- package/dist/cjs/util/private-symbols.js +0 -8
- package/dist/esm/parser/parse-context.d.ts +0 -55
- package/dist/esm/parser/parse-context.js +0 -47
- package/dist/esm/util/private-symbols.d.ts +0 -5
- package/dist/esm/util/private-symbols.js +0 -6
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 Sami Koskimäki
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -20,8 +20,8 @@ much anything you can think of. Typescript is always there for you offering comp
|
|
|
20
20
|
you build a valid query.
|
|
21
21
|
|
|
22
22
|
Of course there are cases where things cannot be typed at compile time, and Kysely offers escape
|
|
23
|
-
hatches for these situations. See the [
|
|
24
|
-
for more info.
|
|
23
|
+
hatches for these situations. See the [sql template tag](https://koskimas.github.io/kysely/modules.html#sql)
|
|
24
|
+
and the [DynamicModule](https://koskimas.github.io/kysely/classes/DynamicModule.html#ref) for more info.
|
|
25
25
|
|
|
26
26
|
If you start using Kysely and can't find something you'd want to use, please open an issue or join our
|
|
27
27
|
[discord server](https://discord.gg/C9aJ49mCra).
|
|
@@ -204,14 +204,24 @@ export async function down(db: Kysely<any>): Promise<void> {
|
|
|
204
204
|
```
|
|
205
205
|
|
|
206
206
|
The `up` function is called when you update your database schema to next version and `down`
|
|
207
|
-
when you go back to previous version. The only argument
|
|
208
|
-
`Kysely<any>`. It
|
|
209
|
-
should never depend on the current code of your app because they need to work even
|
|
210
|
-
changes
|
|
207
|
+
when you go back to previous version. The only argument for the functions is an instance of
|
|
208
|
+
`Kysely<any>`. It's important to use `Kysely<any>` and not `Kysely<YourDatabase>`. Migrations
|
|
209
|
+
should never depend on the current code of your app because they need to work even when the app
|
|
210
|
+
changes. Migrations need to be "frozen in time".
|
|
211
211
|
|
|
212
212
|
The migrations can use the [Kysely.schema](https://koskimas.github.io/kysely/classes/SchemaModule.html)
|
|
213
213
|
module to modify the schema. Migrations can also run normal queries to modify data.
|
|
214
214
|
|
|
215
|
+
Execution order of the migrations is the alpabetical order of their names. An excellent way to name your
|
|
216
|
+
migrations is to prefix them with an ISO 8601 date string. A date prefix works well in large teams
|
|
217
|
+
where multiple team members may add migrations at the same time in parallel commits without knowing
|
|
218
|
+
about the other migrations.
|
|
219
|
+
|
|
220
|
+
You don't need to store your migrations as separate files if you don't want to. You can easily
|
|
221
|
+
implement your own [MigrationProvider](https://koskimas.github.io/kysely/interfaces/MigrationProvider.html)
|
|
222
|
+
and give it to the [Migrator](https://koskimas.github.io/kysely/classes/Migrator.html) class
|
|
223
|
+
when you instantiate one.
|
|
224
|
+
|
|
215
225
|
### PostgreSQL migration example
|
|
216
226
|
|
|
217
227
|
```ts
|
|
@@ -295,9 +305,9 @@ const migrator = new Migrator(migratorConfig);
|
|
|
295
305
|
await migrator.migrateToLatest(pathToMigrationsFolder)
|
|
296
306
|
```
|
|
297
307
|
|
|
298
|
-
to run all migrations that have not yet been run.
|
|
299
|
-
|
|
300
|
-
documentation for more info.
|
|
308
|
+
to run all migrations that have not yet been run. See the
|
|
309
|
+
[Migrator](https://koskimas.github.io/kysely/classes/Migrator.html)
|
|
310
|
+
class's documentation for more info.
|
|
301
311
|
|
|
302
312
|
Kysely doesn't have a CLI for running migrations and probably never will. This is because Kysely's
|
|
303
313
|
migrations are also written in typescript. To run the migrations, you need to first build the
|
|
@@ -352,9 +362,11 @@ async function migrateToLatest() {
|
|
|
352
362
|
migrateToLatest()
|
|
353
363
|
```
|
|
354
364
|
|
|
355
|
-
The migration methods use a lock on the database level
|
|
365
|
+
The migration methods use a lock on the database level and parallel calls are executed serially.
|
|
356
366
|
This means that you can safely call `migrateToLatest` and other migration methods from multiple
|
|
357
|
-
server instances simultaneously and the migrations are guaranteed to only be executed once.
|
|
367
|
+
server instances simultaneously and the migrations are guaranteed to only be executed once. The
|
|
368
|
+
locks are also automatically released if the migration process crashes or the connection to the
|
|
369
|
+
database fails.
|
|
358
370
|
|
|
359
371
|
# Deno
|
|
360
372
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MysqlAdapter = void 0;
|
|
4
|
+
const sql_js_1 = require("../../raw-builder/sql.js");
|
|
4
5
|
const dialect_adapter_base_js_1 = require("../dialect-adapter-base.js");
|
|
5
6
|
const LOCK_ID = 'ea586330-2c93-47c8-908d-981d9d270f9d';
|
|
6
7
|
const LOCK_TIMEOUT_SECONDS = 60 * 60;
|
|
@@ -18,12 +19,10 @@ class MysqlAdapter extends dialect_adapter_base_js_1.DialectAdapterBase {
|
|
|
18
19
|
// is released using `release_lock`. This way we know that the lock is either
|
|
19
20
|
// released by us after successfull or failed migrations OR it's released by
|
|
20
21
|
// MySQL if the process gets killed for some reason.
|
|
21
|
-
await db
|
|
22
|
-
.raw(`select get_lock('${LOCK_ID}', ${LOCK_TIMEOUT_SECONDS})`)
|
|
23
|
-
.execute();
|
|
22
|
+
await (0, sql_js_1.sql) `select get_lock(${sql_js_1.sql.literal(LOCK_ID)}, ${sql_js_1.sql.literal(LOCK_TIMEOUT_SECONDS)})`.execute(db);
|
|
24
23
|
}
|
|
25
24
|
async releaseMigrationLock(db) {
|
|
26
|
-
await
|
|
25
|
+
await (0, sql_js_1.sql) `select release_lock(${sql_js_1.sql.literal(LOCK_ID)})`.execute(db);
|
|
27
26
|
}
|
|
28
27
|
}
|
|
29
28
|
exports.MysqlAdapter = MysqlAdapter;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MysqlIntrospector = void 0;
|
|
4
4
|
const migrator_js_1 = require("../../migration/migrator.js");
|
|
5
5
|
const object_utils_js_1 = require("../../util/object-utils.js");
|
|
6
|
+
const sql_js_1 = require("../../raw-builder/sql.js");
|
|
6
7
|
class MysqlIntrospector {
|
|
7
8
|
#db;
|
|
8
9
|
constructor(db) {
|
|
@@ -12,7 +13,7 @@ class MysqlIntrospector {
|
|
|
12
13
|
let query = this.#db
|
|
13
14
|
.selectFrom('information_schema.columns')
|
|
14
15
|
.selectAll()
|
|
15
|
-
.where('table_schema', '=',
|
|
16
|
+
.where('table_schema', '=', (0, sql_js_1.sql) `database()`)
|
|
16
17
|
.castTo();
|
|
17
18
|
if (!options.withInternalKyselyTables) {
|
|
18
19
|
query = query
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PostgresAdapter = void 0;
|
|
4
|
+
const sql_js_1 = require("../../raw-builder/sql.js");
|
|
4
5
|
const dialect_adapter_base_js_1 = require("../dialect-adapter-base.js");
|
|
5
6
|
// Random id for our transaction lock.
|
|
6
|
-
const LOCK_ID =
|
|
7
|
+
const LOCK_ID = 3853314791062309107n;
|
|
7
8
|
class PostgresAdapter extends dialect_adapter_base_js_1.DialectAdapterBase {
|
|
8
9
|
get supportsTransactionalDdl() {
|
|
9
10
|
return true;
|
|
@@ -13,7 +14,7 @@ class PostgresAdapter extends dialect_adapter_base_js_1.DialectAdapterBase {
|
|
|
13
14
|
}
|
|
14
15
|
async acquireMigrationLock(db) {
|
|
15
16
|
// Acquire a transaction level advisory lock.
|
|
16
|
-
await
|
|
17
|
+
await (0, sql_js_1.sql) `select pg_advisory_xact_lock(${sql_js_1.sql.literal(LOCK_ID)})`.execute(db);
|
|
17
18
|
}
|
|
18
19
|
async releaseMigrationLock() {
|
|
19
20
|
// Nothing to do here. `pg_advisory_xact_lock` is automatically released at the
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SqliteIntrospector = void 0;
|
|
4
4
|
const migrator_js_1 = require("../../migration/migrator.js");
|
|
5
|
+
const sql_js_1 = require("../../raw-builder/sql.js");
|
|
5
6
|
class SqliteIntrospector {
|
|
6
7
|
#db;
|
|
7
8
|
constructor(db) {
|
|
@@ -27,7 +28,7 @@ class SqliteIntrospector {
|
|
|
27
28
|
async #getTableMetadata(table) {
|
|
28
29
|
const db = this.#db;
|
|
29
30
|
const columns = await db
|
|
30
|
-
.selectFrom(
|
|
31
|
+
.selectFrom((0, sql_js_1.sql) `PRAGMA_TABLE_INFO(${table})`.as('table_info'))
|
|
31
32
|
.select(['name', 'type', 'notnull'])
|
|
32
33
|
.castTo()
|
|
33
34
|
.execute();
|
|
@@ -17,9 +17,11 @@ export * from './query-builder/delete-result.js';
|
|
|
17
17
|
export * from './query-builder/update-result.js';
|
|
18
18
|
export * from './query-builder/on-conflict-builder.js';
|
|
19
19
|
export * from './raw-builder/raw-builder.js';
|
|
20
|
+
export * from './raw-builder/sql.js';
|
|
20
21
|
export * from './query-executor/query-executor.js';
|
|
21
22
|
export * from './query-executor/default-query-executor.js';
|
|
22
23
|
export * from './query-executor/noop-query-executor.js';
|
|
24
|
+
export * from './query-executor/query-executor-provider.js';
|
|
23
25
|
export * from './query-compiler/default-query-compiler.js';
|
|
24
26
|
export * from './query-compiler/compiled-query.js';
|
|
25
27
|
export * from './schema/schema.js';
|
|
@@ -29,9 +29,11 @@ __exportStar(require("./query-builder/delete-result.js"), exports);
|
|
|
29
29
|
__exportStar(require("./query-builder/update-result.js"), exports);
|
|
30
30
|
__exportStar(require("./query-builder/on-conflict-builder.js"), exports);
|
|
31
31
|
__exportStar(require("./raw-builder/raw-builder.js"), exports);
|
|
32
|
+
__exportStar(require("./raw-builder/sql.js"), exports);
|
|
32
33
|
__exportStar(require("./query-executor/query-executor.js"), exports);
|
|
33
34
|
__exportStar(require("./query-executor/default-query-executor.js"), exports);
|
|
34
35
|
__exportStar(require("./query-executor/noop-query-executor.js"), exports);
|
|
36
|
+
__exportStar(require("./query-executor/query-executor-provider.js"), exports);
|
|
35
37
|
__exportStar(require("./query-compiler/default-query-compiler.js"), exports);
|
|
36
38
|
__exportStar(require("./query-compiler/compiled-query.js"), exports);
|
|
37
39
|
__exportStar(require("./schema/schema.js"), exports);
|
package/dist/cjs/kysely.d.ts
CHANGED
|
@@ -6,11 +6,9 @@ import { QueryCreator } from './query-creator.js';
|
|
|
6
6
|
import { KyselyPlugin } from './plugin/kysely-plugin.js';
|
|
7
7
|
import { DatabaseIntrospector } from './dialect/database-introspector.js';
|
|
8
8
|
import { Driver, IsolationLevel } from './driver/driver.js';
|
|
9
|
-
import { ParseContext } from './parser/parse-context.js';
|
|
10
9
|
import { FunctionBuilder } from './query-builder/function-builder.js';
|
|
11
10
|
import { LogConfig } from './util/log.js';
|
|
12
|
-
import {
|
|
13
|
-
import { DialectAdapter } from './dialect/dialect-adapter.js';
|
|
11
|
+
import { QueryExecutorProvider } from './query-executor/query-executor-provider.js';
|
|
14
12
|
/**
|
|
15
13
|
* The main Kysely class.
|
|
16
14
|
*
|
|
@@ -54,7 +52,7 @@ import { DialectAdapter } from './dialect/dialect-adapter.js';
|
|
|
54
52
|
* in the database and values must be interfaces that describe the rows in those
|
|
55
53
|
* tables. See the examples above.
|
|
56
54
|
*/
|
|
57
|
-
export declare class Kysely<DB> extends QueryCreator<DB> {
|
|
55
|
+
export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecutorProvider {
|
|
58
56
|
#private;
|
|
59
57
|
constructor(args: KyselyConfig);
|
|
60
58
|
constructor(args: KyselyProps);
|
|
@@ -226,7 +224,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
|
|
|
226
224
|
* @internal
|
|
227
225
|
* @private
|
|
228
226
|
*/
|
|
229
|
-
|
|
227
|
+
getExecutor(): QueryExecutor;
|
|
230
228
|
}
|
|
231
229
|
export declare class Transaction<DB> extends Kysely<DB> {
|
|
232
230
|
#private;
|
|
@@ -357,7 +355,6 @@ export interface KyselyProps {
|
|
|
357
355
|
readonly driver: Driver;
|
|
358
356
|
readonly executor: QueryExecutor;
|
|
359
357
|
readonly dialect: Dialect;
|
|
360
|
-
readonly parseContext: ParseContext;
|
|
361
358
|
}
|
|
362
359
|
export declare function isKyselyProps(obj: unknown): obj is KyselyProps;
|
|
363
360
|
export interface KyselyConfig {
|
package/dist/cjs/kysely.js
CHANGED
|
@@ -11,10 +11,8 @@ const runtime_driver_js_1 = require("./driver/runtime-driver.js");
|
|
|
11
11
|
const single_connection_provider_js_1 = require("./driver/single-connection-provider.js");
|
|
12
12
|
const driver_js_1 = require("./driver/driver.js");
|
|
13
13
|
const prevent_await_js_1 = require("./util/prevent-await.js");
|
|
14
|
-
const parse_context_js_1 = require("./parser/parse-context.js");
|
|
15
14
|
const function_builder_js_1 = require("./query-builder/function-builder.js");
|
|
16
15
|
const log_js_1 = require("./util/log.js");
|
|
17
|
-
const private_symbols_js_1 = require("./util/private-symbols.js");
|
|
18
16
|
/**
|
|
19
17
|
* The main Kysely class.
|
|
20
18
|
*
|
|
@@ -64,7 +62,7 @@ class Kysely extends query_creator_js_1.QueryCreator {
|
|
|
64
62
|
let superProps;
|
|
65
63
|
let props;
|
|
66
64
|
if (isKyselyProps(args)) {
|
|
67
|
-
superProps = { executor: args.executor
|
|
65
|
+
superProps = { executor: args.executor };
|
|
68
66
|
props = { ...args };
|
|
69
67
|
}
|
|
70
68
|
else {
|
|
@@ -73,17 +71,15 @@ class Kysely extends query_creator_js_1.QueryCreator {
|
|
|
73
71
|
const compiler = dialect.createQueryCompiler();
|
|
74
72
|
const adapter = dialect.createAdapter();
|
|
75
73
|
const log = new log_js_1.Log(args.log ?? []);
|
|
76
|
-
const parseContext = new parse_context_js_1.DefaultParseContext(adapter);
|
|
77
74
|
const runtimeDriver = new runtime_driver_js_1.RuntimeDriver(driver, log);
|
|
78
75
|
const connectionProvider = new default_connection_provider_js_1.DefaultConnectionProvider(runtimeDriver);
|
|
79
|
-
const executor = new default_query_executor_js_1.DefaultQueryExecutor(compiler, connectionProvider, args.plugins ?? []);
|
|
80
|
-
superProps = { executor
|
|
76
|
+
const executor = new default_query_executor_js_1.DefaultQueryExecutor(compiler, adapter, connectionProvider, args.plugins ?? []);
|
|
77
|
+
superProps = { executor };
|
|
81
78
|
props = {
|
|
82
79
|
config: args,
|
|
83
80
|
executor,
|
|
84
81
|
dialect,
|
|
85
82
|
driver: runtimeDriver,
|
|
86
|
-
parseContext,
|
|
87
83
|
};
|
|
88
84
|
}
|
|
89
85
|
super(superProps);
|
|
@@ -139,7 +135,7 @@ class Kysely extends query_creator_js_1.QueryCreator {
|
|
|
139
135
|
* ```
|
|
140
136
|
*/
|
|
141
137
|
get fn() {
|
|
142
|
-
return new function_builder_js_1.FunctionBuilder(
|
|
138
|
+
return new function_builder_js_1.FunctionBuilder();
|
|
143
139
|
}
|
|
144
140
|
/**
|
|
145
141
|
* Creates a {@link TransactionBuilder} that can be used to run queries inside a transaction.
|
|
@@ -285,8 +281,8 @@ class Kysely extends query_creator_js_1.QueryCreator {
|
|
|
285
281
|
* @internal
|
|
286
282
|
* @private
|
|
287
283
|
*/
|
|
288
|
-
|
|
289
|
-
return this.#props.
|
|
284
|
+
getExecutor() {
|
|
285
|
+
return this.#props.executor;
|
|
290
286
|
}
|
|
291
287
|
}
|
|
292
288
|
exports.Kysely = Kysely;
|
|
@@ -333,8 +329,7 @@ function isKyselyProps(obj) {
|
|
|
333
329
|
(0, object_utils_js_1.isObject)(obj.config) &&
|
|
334
330
|
(0, object_utils_js_1.isObject)(obj.driver) &&
|
|
335
331
|
(0, object_utils_js_1.isObject)(obj.executor) &&
|
|
336
|
-
(0, object_utils_js_1.isObject)(obj.dialect)
|
|
337
|
-
(0, object_utils_js_1.isObject)(obj.parseContext));
|
|
332
|
+
(0, object_utils_js_1.isObject)(obj.dialect));
|
|
338
333
|
}
|
|
339
334
|
exports.isKyselyProps = isKyselyProps;
|
|
340
335
|
class ConnectionBuilder {
|
|
@@ -345,12 +340,12 @@ class ConnectionBuilder {
|
|
|
345
340
|
async execute(callback) {
|
|
346
341
|
const connection = await this.#props.driver.acquireConnection();
|
|
347
342
|
const connectionProvider = new single_connection_provider_js_1.SingleConnectionProvider(connection);
|
|
348
|
-
const
|
|
343
|
+
const db = new Kysely({
|
|
349
344
|
...this.#props,
|
|
350
345
|
executor: this.#props.executor.withConnectionProvider(connectionProvider),
|
|
351
346
|
});
|
|
352
347
|
try {
|
|
353
|
-
return await callback(
|
|
348
|
+
return await callback(db);
|
|
354
349
|
}
|
|
355
350
|
finally {
|
|
356
351
|
await this.#props.driver.releaseConnection(connection);
|
|
@@ -36,6 +36,12 @@ export interface Migration {
|
|
|
36
36
|
export declare class Migrator {
|
|
37
37
|
#private;
|
|
38
38
|
constructor(props: MigratorProps);
|
|
39
|
+
/**
|
|
40
|
+
* Returns a {@link MigrationInfo} object for each migration.
|
|
41
|
+
*
|
|
42
|
+
* The returned array is sorted by migration name.
|
|
43
|
+
*/
|
|
44
|
+
getMigrations(): Promise<ReadonlyArray<MigrationInfo>>;
|
|
39
45
|
/**
|
|
40
46
|
* Runs all migrations that have not yet been run.
|
|
41
47
|
*
|
|
@@ -219,3 +225,19 @@ export interface MigrationProvider {
|
|
|
219
225
|
export interface NoMigrations {
|
|
220
226
|
readonly __noMigrations__: true;
|
|
221
227
|
}
|
|
228
|
+
export interface MigrationInfo {
|
|
229
|
+
/**
|
|
230
|
+
* Name of the migration.
|
|
231
|
+
*/
|
|
232
|
+
name: string;
|
|
233
|
+
/**
|
|
234
|
+
* The actual migration.
|
|
235
|
+
*/
|
|
236
|
+
migration: Migration;
|
|
237
|
+
/**
|
|
238
|
+
* When was the migration executed.
|
|
239
|
+
*
|
|
240
|
+
* If this is undefined, the migration hasn't been executed yet.
|
|
241
|
+
*/
|
|
242
|
+
executedAt?: Date;
|
|
243
|
+
}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Migrator = exports.NO_MIGRATIONS = exports.MIGRATION_LOCK_ID = exports.MIGRATION_LOCK_TABLE = exports.MIGRATION_TABLE = void 0;
|
|
4
4
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
-
const private_symbols_js_1 = require("../util/private-symbols.js");
|
|
6
5
|
exports.MIGRATION_TABLE = 'kysely_migration';
|
|
7
6
|
exports.MIGRATION_LOCK_TABLE = 'kysely_migration_lock';
|
|
8
7
|
exports.MIGRATION_LOCK_ID = 'migration_lock';
|
|
@@ -32,6 +31,28 @@ class Migrator {
|
|
|
32
31
|
constructor(props) {
|
|
33
32
|
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
34
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Returns a {@link MigrationInfo} object for each migration.
|
|
36
|
+
*
|
|
37
|
+
* The returned array is sorted by migration name.
|
|
38
|
+
*/
|
|
39
|
+
async getMigrations() {
|
|
40
|
+
const executedMigrations = (await this.#doesTableExists(exports.MIGRATION_TABLE))
|
|
41
|
+
? await this.#props.db
|
|
42
|
+
.selectFrom(exports.MIGRATION_TABLE)
|
|
43
|
+
.select(['name', 'timestamp'])
|
|
44
|
+
.execute()
|
|
45
|
+
: [];
|
|
46
|
+
const migrations = await this.#resolveMigrations();
|
|
47
|
+
return migrations.map(({ name, ...migration }) => {
|
|
48
|
+
const executed = executedMigrations.find((it) => it.name === name);
|
|
49
|
+
return {
|
|
50
|
+
name,
|
|
51
|
+
migration,
|
|
52
|
+
executedAt: executed ? new Date(executed.timestamp) : undefined,
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
}
|
|
35
56
|
/**
|
|
36
57
|
* Runs all migrations that have not yet been run.
|
|
37
58
|
*
|
|
@@ -215,7 +236,7 @@ class Migrator {
|
|
|
215
236
|
try {
|
|
216
237
|
await this.#props.db
|
|
217
238
|
.insertInto(exports.MIGRATION_LOCK_TABLE)
|
|
218
|
-
.values({ id: exports.MIGRATION_LOCK_ID })
|
|
239
|
+
.values({ id: exports.MIGRATION_LOCK_ID, is_locked: 0 })
|
|
219
240
|
.execute();
|
|
220
241
|
}
|
|
221
242
|
catch (error) {
|
|
@@ -240,9 +261,10 @@ class Migrator {
|
|
|
240
261
|
return !!lockRow;
|
|
241
262
|
}
|
|
242
263
|
async #runMigrations(getTargetMigrationIndex) {
|
|
264
|
+
const adapter = this.#props.db.getExecutor().adapter;
|
|
243
265
|
const run = async (db) => {
|
|
244
266
|
try {
|
|
245
|
-
await
|
|
267
|
+
await adapter.acquireMigrationLock(db);
|
|
246
268
|
const state = await this.#getState(db);
|
|
247
269
|
if (state.migrations.length === 0) {
|
|
248
270
|
return { results: [] };
|
|
@@ -260,10 +282,10 @@ class Migrator {
|
|
|
260
282
|
return { results: [] };
|
|
261
283
|
}
|
|
262
284
|
finally {
|
|
263
|
-
await
|
|
285
|
+
await adapter.releaseMigrationLock(db);
|
|
264
286
|
}
|
|
265
287
|
};
|
|
266
|
-
if (
|
|
288
|
+
if (adapter.supportsTransactionalDdl) {
|
|
267
289
|
return this.#props.db.transaction().execute(run);
|
|
268
290
|
}
|
|
269
291
|
else {
|
|
@@ -5,6 +5,9 @@ import { TableExpressionNode } from './operation-node-utils.js';
|
|
|
5
5
|
import { ReturningNode } from './returning-node.js';
|
|
6
6
|
import { WhereNode } from './where-node.js';
|
|
7
7
|
import { WithNode } from './with-node.js';
|
|
8
|
+
import { LimitNode } from './limit-node.js';
|
|
9
|
+
import { OrderByNode } from './order-by-node.js';
|
|
10
|
+
import { OrderByItemNode } from './order-by-item-node.js';
|
|
8
11
|
export interface DeleteQueryNode extends OperationNode {
|
|
9
12
|
readonly kind: 'DeleteQueryNode';
|
|
10
13
|
readonly from: FromNode;
|
|
@@ -12,6 +15,8 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
12
15
|
readonly where?: WhereNode;
|
|
13
16
|
readonly returning?: ReturningNode;
|
|
14
17
|
readonly with?: WithNode;
|
|
18
|
+
readonly orderBy?: OrderByNode;
|
|
19
|
+
readonly limit?: LimitNode;
|
|
15
20
|
}
|
|
16
21
|
/**
|
|
17
22
|
* @internal
|
|
@@ -19,4 +24,6 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
19
24
|
export declare const DeleteQueryNode: Readonly<{
|
|
20
25
|
is(node: OperationNode): node is DeleteQueryNode;
|
|
21
26
|
create(fromItem: TableExpressionNode, withNode?: WithNode | undefined): DeleteQueryNode;
|
|
27
|
+
cloneWithOrderByItem(deleteNode: DeleteQueryNode, item: OrderByItemNode): DeleteQueryNode;
|
|
28
|
+
cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
|
|
22
29
|
}>;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DeleteQueryNode = void 0;
|
|
4
4
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
5
|
const from_node_js_1 = require("./from-node.js");
|
|
6
|
+
const order_by_node_js_1 = require("./order-by-node.js");
|
|
6
7
|
/**
|
|
7
8
|
* @internal
|
|
8
9
|
*/
|
|
@@ -17,4 +18,18 @@ exports.DeleteQueryNode = (0, object_utils_js_1.freeze)({
|
|
|
17
18
|
...(withNode && { with: withNode }),
|
|
18
19
|
});
|
|
19
20
|
},
|
|
21
|
+
cloneWithOrderByItem(deleteNode, item) {
|
|
22
|
+
return (0, object_utils_js_1.freeze)({
|
|
23
|
+
...deleteNode,
|
|
24
|
+
orderBy: deleteNode.orderBy
|
|
25
|
+
? order_by_node_js_1.OrderByNode.cloneWithItem(deleteNode.orderBy, item)
|
|
26
|
+
: order_by_node_js_1.OrderByNode.create(item),
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
cloneWithLimit(deleteNode, limit) {
|
|
30
|
+
return (0, object_utils_js_1.freeze)({
|
|
31
|
+
...deleteNode,
|
|
32
|
+
limit,
|
|
33
|
+
});
|
|
34
|
+
},
|
|
20
35
|
});
|
|
@@ -220,7 +220,7 @@ class OperationNodeTransformer {
|
|
|
220
220
|
return {
|
|
221
221
|
kind: 'RawNode',
|
|
222
222
|
sqlFragments: (0, object_utils_js_1.freeze)([...node.sqlFragments]),
|
|
223
|
-
|
|
223
|
+
parameters: this.transformNodeList(node.parameters),
|
|
224
224
|
};
|
|
225
225
|
}
|
|
226
226
|
transformWhere(node) {
|
|
@@ -2,13 +2,15 @@ import { OperationNode } from './operation-node.js';
|
|
|
2
2
|
export interface RawNode extends OperationNode {
|
|
3
3
|
readonly kind: 'RawNode';
|
|
4
4
|
readonly sqlFragments: ReadonlyArray<string>;
|
|
5
|
-
readonly
|
|
5
|
+
readonly parameters: ReadonlyArray<OperationNode>;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* @internal
|
|
9
9
|
*/
|
|
10
10
|
export declare const RawNode: Readonly<{
|
|
11
11
|
is(node: OperationNode): node is RawNode;
|
|
12
|
-
create(sqlFragments: ReadonlyArray<string>,
|
|
12
|
+
create(sqlFragments: ReadonlyArray<string>, parameters: ReadonlyArray<OperationNode>): RawNode;
|
|
13
13
|
createWithSql(sql: string): RawNode;
|
|
14
|
+
createWithChild(child: OperationNode): RawNode;
|
|
15
|
+
createWithChildren(children: ReadonlyArray<OperationNode>): RawNode;
|
|
14
16
|
}>;
|
|
@@ -9,14 +9,20 @@ exports.RawNode = (0, object_utils_js_1.freeze)({
|
|
|
9
9
|
is(node) {
|
|
10
10
|
return node.kind === 'RawNode';
|
|
11
11
|
},
|
|
12
|
-
create(sqlFragments,
|
|
12
|
+
create(sqlFragments, parameters) {
|
|
13
13
|
return (0, object_utils_js_1.freeze)({
|
|
14
14
|
kind: 'RawNode',
|
|
15
15
|
sqlFragments: (0, object_utils_js_1.freeze)(sqlFragments),
|
|
16
|
-
|
|
16
|
+
parameters: (0, object_utils_js_1.freeze)(parameters),
|
|
17
17
|
});
|
|
18
18
|
},
|
|
19
19
|
createWithSql(sql) {
|
|
20
20
|
return exports.RawNode.create([sql], []);
|
|
21
21
|
},
|
|
22
|
+
createWithChild(child) {
|
|
23
|
+
return exports.RawNode.create(['', ''], [child]);
|
|
24
|
+
},
|
|
25
|
+
createWithChildren(children) {
|
|
26
|
+
return exports.RawNode.create(new Array(children.length + 1).fill(''), children);
|
|
27
|
+
},
|
|
22
28
|
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { RawBuilder } from '../index-nodeless.js';
|
|
1
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
3
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
3
4
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
4
|
-
import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnySelectQueryBuilder,
|
|
5
|
-
|
|
6
|
-
export declare type ComplexExpression<DB, TB extends keyof DB> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
|
|
5
|
+
import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnySelectQueryBuilder, SelectQueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
|
|
6
|
+
export declare type ComplexExpression<DB, TB extends keyof DB, V = any> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | RawBuilder<V> | RawBuilderFactory<DB, TB>;
|
|
7
7
|
export declare type AliasedComplexExpression<DB, TB extends keyof DB> = AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB>;
|
|
8
|
-
export declare function parseComplexExpression(
|
|
9
|
-
export declare function parseAliasedComplexExpression(
|
|
8
|
+
export declare function parseComplexExpression(exp: ComplexExpression<any, any>): SelectQueryNode | RawNode;
|
|
9
|
+
export declare function parseAliasedComplexExpression(exp: AliasedComplexExpression<any, any>): AliasNode;
|
|
10
10
|
export declare function isComplexExpression(obj: unknown): obj is ComplexExpression<any, any>;
|
|
@@ -3,22 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.isComplexExpression = exports.parseAliasedComplexExpression = exports.parseComplexExpression = void 0;
|
|
4
4
|
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
5
5
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
6
|
-
|
|
6
|
+
const parse_utils_js_1 = require("./parse-utils.js");
|
|
7
|
+
function parseComplexExpression(exp) {
|
|
7
8
|
if ((0, operation_node_source_js_1.isOperationNodeSource)(exp)) {
|
|
8
9
|
return exp.toOperationNode();
|
|
9
10
|
}
|
|
10
11
|
else if ((0, object_utils_js_1.isFunction)(exp)) {
|
|
11
|
-
return exp(
|
|
12
|
+
return exp((0, parse_utils_js_1.createExpressionBuilder)()).toOperationNode();
|
|
12
13
|
}
|
|
13
14
|
throw new Error(`invalid expression: ${JSON.stringify(exp)}`);
|
|
14
15
|
}
|
|
15
16
|
exports.parseComplexExpression = parseComplexExpression;
|
|
16
|
-
function parseAliasedComplexExpression(
|
|
17
|
+
function parseAliasedComplexExpression(exp) {
|
|
17
18
|
if ((0, operation_node_source_js_1.isOperationNodeSource)(exp)) {
|
|
18
19
|
return exp.toOperationNode();
|
|
19
20
|
}
|
|
20
21
|
else if ((0, object_utils_js_1.isFunction)(exp)) {
|
|
21
|
-
return exp(
|
|
22
|
+
return exp((0, parse_utils_js_1.createExpressionBuilder)()).toOperationNode();
|
|
22
23
|
}
|
|
23
24
|
throw new Error(`invalid aliased expression: ${JSON.stringify(exp)}`);
|
|
24
25
|
}
|
|
@@ -4,21 +4,21 @@ import { Operator } from '../operation-node/operator-node.js';
|
|
|
4
4
|
import { ExtractTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js';
|
|
5
5
|
import { ValueExpression, ValueExpressionOrList } from './value-parser.js';
|
|
6
6
|
import { FilterExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
7
|
-
import { ParseContext } from './parse-context.js';
|
|
8
7
|
import { WhereInterface } from '../query-builder/where-interface.js';
|
|
9
8
|
import { HavingInterface } from '../query-builder/having-interface.js';
|
|
9
|
+
import { ComplexExpression } from './complex-expression-parser.js';
|
|
10
10
|
export declare type FilterValueExpression<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
11
11
|
export declare type FilterValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpressionOrList<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
12
|
-
export declare type ExistsExpression<DB, TB extends keyof DB> =
|
|
12
|
+
export declare type ExistsExpression<DB, TB extends keyof DB> = ComplexExpression<DB, TB, any>;
|
|
13
13
|
export declare type WhereGrouper<DB, TB extends keyof DB> = (qb: WhereInterface<DB, TB>) => WhereInterface<DB, TB>;
|
|
14
14
|
export declare type HavingGrouper<DB, TB extends keyof DB> = (qb: HavingInterface<DB, TB>) => HavingInterface<DB, TB>;
|
|
15
15
|
export declare type FilterOperator = Operator | AnyRawBuilder;
|
|
16
16
|
declare type FilterType = 'where' | 'having' | 'on';
|
|
17
|
-
export declare function parseWhereFilter(
|
|
18
|
-
export declare function parseHavingFilter(
|
|
19
|
-
export declare function parseOnFilter(
|
|
20
|
-
export declare function parseReferenceFilter(
|
|
21
|
-
export declare function parseExistFilter(
|
|
22
|
-
export declare function parseNotExistFilter(
|
|
23
|
-
export declare function parseFilter(
|
|
17
|
+
export declare function parseWhereFilter(args: any[]): FilterExpressionNode;
|
|
18
|
+
export declare function parseHavingFilter(args: any[]): FilterExpressionNode;
|
|
19
|
+
export declare function parseOnFilter(args: any[]): FilterExpressionNode;
|
|
20
|
+
export declare function parseReferenceFilter(lhs: ReferenceExpression<any, any>, op: FilterOperator, rhs: ReferenceExpression<any, any>): FilterNode;
|
|
21
|
+
export declare function parseExistFilter(arg: ExistsExpression<any, any>): FilterNode;
|
|
22
|
+
export declare function parseNotExistFilter(arg: ExistsExpression<any, any>): FilterNode;
|
|
23
|
+
export declare function parseFilter(type: FilterType, args: any[]): FilterExpressionNode;
|
|
24
24
|
export {};
|