kysely 0.16.11 → 0.17.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 +2 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +3 -4
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +19 -0
- 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/driver/connection-provider.d.ts +1 -1
- package/dist/cjs/driver/default-connection-provider.d.ts +1 -1
- package/dist/cjs/driver/default-connection-provider.js +2 -2
- package/dist/cjs/driver/dummy-driver.d.ts +8 -0
- package/dist/cjs/driver/dummy-driver.js +8 -0
- package/dist/cjs/driver/single-connection-provider.d.ts +1 -1
- package/dist/cjs/driver/single-connection-provider.js +2 -2
- 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 +30 -41
- package/dist/cjs/migration/migrator.js +4 -4
- 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/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
- package/dist/cjs/query-builder/delete-query-builder.d.ts +34 -23
- package/dist/cjs/query-builder/delete-query-builder.js +15 -15
- 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 +12 -8
- 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 +46 -28
- package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
- package/dist/cjs/query-builder/returning-interface.d.ts +3 -1
- package/dist/cjs/query-builder/select-query-builder.d.ts +52 -33
- package/dist/cjs/query-builder/select-query-builder.js +28 -26
- package/dist/cjs/query-builder/update-query-builder.d.ts +41 -28
- package/dist/cjs/query-builder/update-query-builder.js +22 -20
- package/dist/cjs/query-builder/where-interface.d.ts +31 -20
- package/dist/cjs/query-compiler/default-query-compiler.js +1 -1
- package/dist/cjs/query-creator.d.ts +10 -129
- package/dist/cjs/query-creator.js +5 -136
- package/dist/cjs/query-executor/default-query-executor.d.ts +21 -7
- package/dist/cjs/query-executor/default-query-executor.js +17 -19
- package/dist/cjs/query-executor/noop-query-executor.d.ts +20 -6
- package/dist/cjs/query-executor/noop-query-executor.js +11 -4
- package/dist/cjs/query-executor/query-executor-base.d.ts +62 -0
- package/dist/cjs/query-executor/query-executor-base.js +46 -0
- 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 +20 -13
- package/dist/cjs/query-executor/query-executor.js +0 -57
- 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 +331 -0
- package/dist/cjs/raw-builder/sql.js +161 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +42 -8
- package/dist/cjs/schema/alter-table-builder.js +20 -0
- package/dist/cjs/schema/column-definition-builder.d.ts +22 -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 +7 -3
- package/dist/cjs/schema/create-table-builder.js +7 -3
- 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/cjs/util/type-utils.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-adapter.js +3 -4
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +19 -0
- 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/driver/connection-provider.d.ts +1 -1
- package/dist/esm/driver/default-connection-provider.d.ts +1 -1
- package/dist/esm/driver/default-connection-provider.js +2 -2
- package/dist/esm/driver/dummy-driver.d.ts +8 -0
- package/dist/esm/driver/dummy-driver.js +8 -0
- package/dist/esm/driver/single-connection-provider.d.ts +1 -1
- package/dist/esm/driver/single-connection-provider.js +2 -2
- 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 +30 -41
- package/dist/esm/migration/migrator.js +4 -4
- 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/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
- package/dist/esm/query-builder/delete-query-builder.d.ts +34 -23
- package/dist/esm/query-builder/delete-query-builder.js +15 -15
- 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 +12 -8
- 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 +46 -28
- package/dist/esm/query-builder/on-conflict-builder.js +17 -17
- package/dist/esm/query-builder/returning-interface.d.ts +3 -1
- package/dist/esm/query-builder/select-query-builder.d.ts +52 -33
- package/dist/esm/query-builder/select-query-builder.js +28 -26
- package/dist/esm/query-builder/update-query-builder.d.ts +41 -28
- package/dist/esm/query-builder/update-query-builder.js +22 -20
- package/dist/esm/query-builder/where-interface.d.ts +31 -20
- package/dist/esm/query-compiler/default-query-compiler.js +1 -1
- package/dist/esm/query-creator.d.ts +10 -129
- package/dist/esm/query-creator.js +5 -136
- package/dist/esm/query-executor/default-query-executor.d.ts +21 -7
- package/dist/esm/query-executor/default-query-executor.js +17 -19
- package/dist/esm/query-executor/noop-query-executor.d.ts +20 -6
- package/dist/esm/query-executor/noop-query-executor.js +10 -3
- package/dist/esm/query-executor/query-executor-base.d.ts +62 -0
- package/dist/esm/query-executor/query-executor-base.js +43 -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 +20 -13
- package/dist/esm/query-executor/query-executor.js +1 -55
- 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 +331 -0
- package/dist/esm/raw-builder/sql.js +159 -0
- package/dist/esm/schema/alter-table-builder.d.ts +42 -8
- package/dist/esm/schema/alter-table-builder.js +20 -0
- package/dist/esm/schema/column-definition-builder.d.ts +22 -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 +7 -3
- package/dist/esm/schema/create-table-builder.js +7 -3
- 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/dist/esm/util/type-utils.d.ts +1 -1
- package/package.json +14 -14
- 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/dist/esm/kysely.js
CHANGED
|
@@ -9,10 +9,8 @@ import { RuntimeDriver } from './driver/runtime-driver.js';
|
|
|
9
9
|
import { SingleConnectionProvider } from './driver/single-connection-provider.js';
|
|
10
10
|
import { TRANSACTION_ISOLATION_LEVELS, } from './driver/driver.js';
|
|
11
11
|
import { preventAwait } from './util/prevent-await.js';
|
|
12
|
-
import { DefaultParseContext } from './parser/parse-context.js';
|
|
13
12
|
import { FunctionBuilder } from './query-builder/function-builder.js';
|
|
14
13
|
import { Log } from './util/log.js';
|
|
15
|
-
import { PRIVATE_ADAPTER } from './util/private-symbols.js';
|
|
16
14
|
/**
|
|
17
15
|
* The main Kysely class.
|
|
18
16
|
*
|
|
@@ -62,7 +60,7 @@ export class Kysely extends QueryCreator {
|
|
|
62
60
|
let superProps;
|
|
63
61
|
let props;
|
|
64
62
|
if (isKyselyProps(args)) {
|
|
65
|
-
superProps = { executor: args.executor
|
|
63
|
+
superProps = { executor: args.executor };
|
|
66
64
|
props = { ...args };
|
|
67
65
|
}
|
|
68
66
|
else {
|
|
@@ -71,17 +69,15 @@ export class Kysely extends QueryCreator {
|
|
|
71
69
|
const compiler = dialect.createQueryCompiler();
|
|
72
70
|
const adapter = dialect.createAdapter();
|
|
73
71
|
const log = new Log(args.log ?? []);
|
|
74
|
-
const parseContext = new DefaultParseContext(adapter);
|
|
75
72
|
const runtimeDriver = new RuntimeDriver(driver, log);
|
|
76
73
|
const connectionProvider = new DefaultConnectionProvider(runtimeDriver);
|
|
77
|
-
const executor = new DefaultQueryExecutor(compiler, connectionProvider, args.plugins ?? []);
|
|
78
|
-
superProps = { executor
|
|
74
|
+
const executor = new DefaultQueryExecutor(compiler, adapter, connectionProvider, args.plugins ?? []);
|
|
75
|
+
superProps = { executor };
|
|
79
76
|
props = {
|
|
80
77
|
config: args,
|
|
81
78
|
executor,
|
|
82
79
|
dialect,
|
|
83
80
|
driver: runtimeDriver,
|
|
84
|
-
parseContext,
|
|
85
81
|
};
|
|
86
82
|
}
|
|
87
83
|
super(superProps);
|
|
@@ -137,7 +133,7 @@ export class Kysely extends QueryCreator {
|
|
|
137
133
|
* ```
|
|
138
134
|
*/
|
|
139
135
|
get fn() {
|
|
140
|
-
return new FunctionBuilder(
|
|
136
|
+
return new FunctionBuilder();
|
|
141
137
|
}
|
|
142
138
|
/**
|
|
143
139
|
* Creates a {@link TransactionBuilder} that can be used to run queries inside a transaction.
|
|
@@ -283,8 +279,8 @@ export class Kysely extends QueryCreator {
|
|
|
283
279
|
* @internal
|
|
284
280
|
* @private
|
|
285
281
|
*/
|
|
286
|
-
|
|
287
|
-
return this.#props.
|
|
282
|
+
getExecutor() {
|
|
283
|
+
return this.#props.executor;
|
|
288
284
|
}
|
|
289
285
|
}
|
|
290
286
|
export class Transaction extends Kysely {
|
|
@@ -329,8 +325,7 @@ export function isKyselyProps(obj) {
|
|
|
329
325
|
isObject(obj.config) &&
|
|
330
326
|
isObject(obj.driver) &&
|
|
331
327
|
isObject(obj.executor) &&
|
|
332
|
-
isObject(obj.dialect)
|
|
333
|
-
isObject(obj.parseContext));
|
|
328
|
+
isObject(obj.dialect));
|
|
334
329
|
}
|
|
335
330
|
export class ConnectionBuilder {
|
|
336
331
|
#props;
|
|
@@ -338,18 +333,14 @@ export class ConnectionBuilder {
|
|
|
338
333
|
this.#props = freeze(props);
|
|
339
334
|
}
|
|
340
335
|
async execute(callback) {
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
try {
|
|
336
|
+
return this.#props.executor.provideConnection(async (connection) => {
|
|
337
|
+
const executor = this.#props.executor.withConnectionProvider(new SingleConnectionProvider(connection));
|
|
338
|
+
const db = new Kysely({
|
|
339
|
+
...this.#props,
|
|
340
|
+
executor,
|
|
341
|
+
});
|
|
348
342
|
return await callback(db);
|
|
349
|
-
}
|
|
350
|
-
finally {
|
|
351
|
-
await this.#props.driver.releaseConnection(connection);
|
|
352
|
-
}
|
|
343
|
+
});
|
|
353
344
|
}
|
|
354
345
|
}
|
|
355
346
|
preventAwait(ConnectionBuilder, "don't await ConnectionBuilder instances directly. To execute the query you need to call the `execute` method");
|
|
@@ -368,25 +359,23 @@ export class TransactionBuilder {
|
|
|
368
359
|
const { isolationLevel, ...kyselyProps } = this.#props;
|
|
369
360
|
const settings = { isolationLevel };
|
|
370
361
|
validateTransactionSettings(settings);
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
362
|
+
return this.#props.executor.provideConnection(async (connection) => {
|
|
363
|
+
const executor = this.#props.executor.withConnectionProvider(new SingleConnectionProvider(connection));
|
|
364
|
+
const transaction = new Transaction({
|
|
365
|
+
...kyselyProps,
|
|
366
|
+
executor,
|
|
367
|
+
});
|
|
368
|
+
try {
|
|
369
|
+
await this.#props.driver.beginTransaction(connection, settings);
|
|
370
|
+
const result = await callback(transaction);
|
|
371
|
+
await this.#props.driver.commitTransaction(connection);
|
|
372
|
+
return result;
|
|
373
|
+
}
|
|
374
|
+
catch (error) {
|
|
375
|
+
await this.#props.driver.rollbackTransaction(connection);
|
|
376
|
+
throw error;
|
|
377
|
+
}
|
|
376
378
|
});
|
|
377
|
-
try {
|
|
378
|
-
await this.#props.driver.beginTransaction(connection, settings);
|
|
379
|
-
const result = await callback(transaction);
|
|
380
|
-
await this.#props.driver.commitTransaction(connection);
|
|
381
|
-
return result;
|
|
382
|
-
}
|
|
383
|
-
catch (error) {
|
|
384
|
-
await this.#props.driver.rollbackTransaction(connection);
|
|
385
|
-
throw error;
|
|
386
|
-
}
|
|
387
|
-
finally {
|
|
388
|
-
await this.#props.driver.releaseConnection(connection);
|
|
389
|
-
}
|
|
390
379
|
}
|
|
391
380
|
}
|
|
392
381
|
preventAwait(TransactionBuilder, "don't await TransactionBuilder instances directly. To execute the transaction you need to call the `execute` method");
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/// <reference types="./migrator.d.ts" />
|
|
2
2
|
import { freeze, getLast } from '../util/object-utils.js';
|
|
3
|
-
import { PRIVATE_ADAPTER } from '../util/private-symbols.js';
|
|
4
3
|
export const MIGRATION_TABLE = 'kysely_migration';
|
|
5
4
|
export const MIGRATION_LOCK_TABLE = 'kysely_migration_lock';
|
|
6
5
|
export const MIGRATION_LOCK_ID = 'migration_lock';
|
|
@@ -260,9 +259,10 @@ export class Migrator {
|
|
|
260
259
|
return !!lockRow;
|
|
261
260
|
}
|
|
262
261
|
async #runMigrations(getTargetMigrationIndex) {
|
|
262
|
+
const adapter = this.#props.db.getExecutor().adapter;
|
|
263
263
|
const run = async (db) => {
|
|
264
264
|
try {
|
|
265
|
-
await
|
|
265
|
+
await adapter.acquireMigrationLock(db);
|
|
266
266
|
const state = await this.#getState(db);
|
|
267
267
|
if (state.migrations.length === 0) {
|
|
268
268
|
return { results: [] };
|
|
@@ -280,10 +280,10 @@ export class Migrator {
|
|
|
280
280
|
return { results: [] };
|
|
281
281
|
}
|
|
282
282
|
finally {
|
|
283
|
-
await
|
|
283
|
+
await adapter.releaseMigrationLock(db);
|
|
284
284
|
}
|
|
285
285
|
};
|
|
286
|
-
if (
|
|
286
|
+
if (adapter.supportsTransactionalDdl) {
|
|
287
287
|
return this.#props.db.transaction().execute(run);
|
|
288
288
|
}
|
|
289
289
|
else {
|
|
@@ -218,7 +218,7 @@ export class OperationNodeTransformer {
|
|
|
218
218
|
return {
|
|
219
219
|
kind: 'RawNode',
|
|
220
220
|
sqlFragments: freeze([...node.sqlFragments]),
|
|
221
|
-
|
|
221
|
+
parameters: this.transformNodeList(node.parameters),
|
|
222
222
|
};
|
|
223
223
|
}
|
|
224
224
|
transformWhere(node) {
|
|
@@ -2,13 +2,15 @@ import { OperationNode } from './operation-node.js';
|
|
|
2
2
|
export interface RawNode extends OperationNode {
|
|
3
3
|
readonly kind: 'RawNode';
|
|
4
4
|
readonly sqlFragments: ReadonlyArray<string>;
|
|
5
|
-
readonly
|
|
5
|
+
readonly parameters: ReadonlyArray<OperationNode>;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* @internal
|
|
9
9
|
*/
|
|
10
10
|
export declare const RawNode: Readonly<{
|
|
11
11
|
is(node: OperationNode): node is RawNode;
|
|
12
|
-
create(sqlFragments: ReadonlyArray<string>,
|
|
12
|
+
create(sqlFragments: ReadonlyArray<string>, parameters: ReadonlyArray<OperationNode>): RawNode;
|
|
13
13
|
createWithSql(sql: string): RawNode;
|
|
14
|
+
createWithChild(child: OperationNode): RawNode;
|
|
15
|
+
createWithChildren(children: ReadonlyArray<OperationNode>): RawNode;
|
|
14
16
|
}>;
|
|
@@ -7,14 +7,20 @@ export const RawNode = freeze({
|
|
|
7
7
|
is(node) {
|
|
8
8
|
return node.kind === 'RawNode';
|
|
9
9
|
},
|
|
10
|
-
create(sqlFragments,
|
|
10
|
+
create(sqlFragments, parameters) {
|
|
11
11
|
return freeze({
|
|
12
12
|
kind: 'RawNode',
|
|
13
13
|
sqlFragments: freeze(sqlFragments),
|
|
14
|
-
|
|
14
|
+
parameters: freeze(parameters),
|
|
15
15
|
});
|
|
16
16
|
},
|
|
17
17
|
createWithSql(sql) {
|
|
18
18
|
return RawNode.create([sql], []);
|
|
19
19
|
},
|
|
20
|
+
createWithChild(child) {
|
|
21
|
+
return RawNode.create(['', ''], [child]);
|
|
22
|
+
},
|
|
23
|
+
createWithChildren(children) {
|
|
24
|
+
return RawNode.create(new Array(children.length + 1).fill(''), children);
|
|
25
|
+
},
|
|
20
26
|
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
2
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
3
3
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
export declare type ComplexExpression<DB, TB extends keyof DB> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> |
|
|
4
|
+
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
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>;
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
/// <reference types="./complex-expression-parser.d.ts" />
|
|
2
2
|
import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
3
3
|
import { isFunction } from '../util/object-utils.js';
|
|
4
|
-
|
|
4
|
+
import { createExpressionBuilder } from './parse-utils.js';
|
|
5
|
+
export function parseComplexExpression(exp) {
|
|
5
6
|
if (isOperationNodeSource(exp)) {
|
|
6
7
|
return exp.toOperationNode();
|
|
7
8
|
}
|
|
8
9
|
else if (isFunction(exp)) {
|
|
9
|
-
return exp(
|
|
10
|
+
return exp(createExpressionBuilder()).toOperationNode();
|
|
10
11
|
}
|
|
11
12
|
throw new Error(`invalid expression: ${JSON.stringify(exp)}`);
|
|
12
13
|
}
|
|
13
|
-
export function parseAliasedComplexExpression(
|
|
14
|
+
export function parseAliasedComplexExpression(exp) {
|
|
14
15
|
if (isOperationNodeSource(exp)) {
|
|
15
16
|
return exp.toOperationNode();
|
|
16
17
|
}
|
|
17
18
|
else if (isFunction(exp)) {
|
|
18
|
-
return exp(
|
|
19
|
+
return exp(createExpressionBuilder()).toOperationNode();
|
|
19
20
|
}
|
|
20
21
|
throw new Error(`invalid aliased expression: ${JSON.stringify(exp)}`);
|
|
21
22
|
}
|
|
@@ -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 {};
|
|
@@ -8,41 +8,42 @@ import { ParensNode } from '../operation-node/parens-node.js';
|
|
|
8
8
|
import { parseReferenceExpression, } from './reference-parser.js';
|
|
9
9
|
import { parseValueExpressionOrList, } from './value-parser.js';
|
|
10
10
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
import { createJoinBuilder, createSelectQueryBuilder } from './parse-utils.js';
|
|
12
|
+
export function parseWhereFilter(args) {
|
|
13
|
+
return parseFilter('where', args);
|
|
13
14
|
}
|
|
14
|
-
export function parseHavingFilter(
|
|
15
|
-
return parseFilter(
|
|
15
|
+
export function parseHavingFilter(args) {
|
|
16
|
+
return parseFilter('having', args);
|
|
16
17
|
}
|
|
17
|
-
export function parseOnFilter(
|
|
18
|
-
return parseFilter(
|
|
18
|
+
export function parseOnFilter(args) {
|
|
19
|
+
return parseFilter('on', args);
|
|
19
20
|
}
|
|
20
|
-
export function parseReferenceFilter(
|
|
21
|
-
return FilterNode.create(parseReferenceExpression(
|
|
21
|
+
export function parseReferenceFilter(lhs, op, rhs) {
|
|
22
|
+
return FilterNode.create(parseReferenceExpression(lhs), parseFilterOperator(op), parseReferenceExpression(rhs));
|
|
22
23
|
}
|
|
23
|
-
export function parseExistFilter(
|
|
24
|
-
return parseExistExpression(
|
|
24
|
+
export function parseExistFilter(arg) {
|
|
25
|
+
return parseExistExpression('exists', arg);
|
|
25
26
|
}
|
|
26
|
-
export function parseNotExistFilter(
|
|
27
|
-
return parseExistExpression(
|
|
27
|
+
export function parseNotExistFilter(arg) {
|
|
28
|
+
return parseExistExpression('not exists', arg);
|
|
28
29
|
}
|
|
29
|
-
export function parseFilter(
|
|
30
|
+
export function parseFilter(type, args) {
|
|
30
31
|
if (args.length === 3) {
|
|
31
|
-
return parseThreeArgFilter(
|
|
32
|
+
return parseThreeArgFilter(args[0], args[1], args[2]);
|
|
32
33
|
}
|
|
33
34
|
else if (args.length === 1) {
|
|
34
|
-
return parseOneArgFilter(
|
|
35
|
+
return parseOneArgFilter(type, args[0]);
|
|
35
36
|
}
|
|
36
37
|
throw createFilterError(type, args);
|
|
37
38
|
}
|
|
38
|
-
function parseThreeArgFilter(
|
|
39
|
+
function parseThreeArgFilter(left, op, right) {
|
|
39
40
|
if ((op === 'is' || op === 'is not') && (isNull(right) || isBoolean(right))) {
|
|
40
|
-
return parseIsFilter(
|
|
41
|
+
return parseIsFilter(left, op, right);
|
|
41
42
|
}
|
|
42
|
-
return FilterNode.create(parseReferenceExpression(
|
|
43
|
+
return FilterNode.create(parseReferenceExpression(left), parseFilterOperator(op), parseValueExpressionOrList(right));
|
|
43
44
|
}
|
|
44
|
-
function parseIsFilter(
|
|
45
|
-
return FilterNode.create(parseReferenceExpression(
|
|
45
|
+
function parseIsFilter(left, op, right) {
|
|
46
|
+
return FilterNode.create(parseReferenceExpression(left), parseFilterOperator(op), ValueNode.createImmediate(right));
|
|
46
47
|
}
|
|
47
48
|
function parseFilterOperator(op) {
|
|
48
49
|
if (isString(op) && OPERATORS.includes(op)) {
|
|
@@ -53,12 +54,12 @@ function parseFilterOperator(op) {
|
|
|
53
54
|
}
|
|
54
55
|
throw new Error(`invalid comparison operator ${JSON.stringify(op)} passed to a filter method`);
|
|
55
56
|
}
|
|
56
|
-
function parseExistExpression(
|
|
57
|
-
return FilterNode.create(undefined, OperatorNode.create(type), parseValueExpressionOrList(
|
|
57
|
+
function parseExistExpression(type, arg) {
|
|
58
|
+
return FilterNode.create(undefined, OperatorNode.create(type), parseValueExpressionOrList(arg));
|
|
58
59
|
}
|
|
59
|
-
function parseOneArgFilter(
|
|
60
|
+
function parseOneArgFilter(type, arg) {
|
|
60
61
|
if (isFunction(arg)) {
|
|
61
|
-
return GROUP_PARSERS[type](
|
|
62
|
+
return GROUP_PARSERS[type](arg);
|
|
62
63
|
}
|
|
63
64
|
else if (isOperationNodeSource(arg)) {
|
|
64
65
|
const node = arg.toOperationNode();
|
|
@@ -72,24 +73,24 @@ function createFilterError(type, args) {
|
|
|
72
73
|
return new Error(`invalid arguments passed to a '${type}' method: ${JSON.stringify(args)}`);
|
|
73
74
|
}
|
|
74
75
|
const GROUP_PARSERS = freeze({
|
|
75
|
-
where(
|
|
76
|
-
const query = callback(
|
|
76
|
+
where(callback) {
|
|
77
|
+
const query = callback(createSelectQueryBuilder());
|
|
77
78
|
const queryNode = query.toOperationNode();
|
|
78
79
|
if (!queryNode.where) {
|
|
79
80
|
throw new Error('no `where` methods called insided a group callback');
|
|
80
81
|
}
|
|
81
82
|
return ParensNode.create(queryNode.where.where);
|
|
82
83
|
},
|
|
83
|
-
having(
|
|
84
|
-
const query = callback(
|
|
84
|
+
having(callback) {
|
|
85
|
+
const query = callback(createSelectQueryBuilder());
|
|
85
86
|
const queryNode = query.toOperationNode();
|
|
86
87
|
if (!queryNode.having) {
|
|
87
88
|
throw new Error('no `having` methods called insided a group callback');
|
|
88
89
|
}
|
|
89
90
|
return ParensNode.create(queryNode.having.having);
|
|
90
91
|
},
|
|
91
|
-
on(
|
|
92
|
-
const joinBuilder = callback(
|
|
92
|
+
on(callback) {
|
|
93
|
+
const joinBuilder = callback(createJoinBuilder('InnerJoin', 'table'));
|
|
93
94
|
const joinNode = joinBuilder.toOperationNode();
|
|
94
95
|
if (!joinNode.on) {
|
|
95
96
|
throw new Error('no `on` methods called insided a group callback');
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
|
|
2
|
-
import { ParseContext } from './parse-context.js';
|
|
3
2
|
import { ReferenceExpressionOrList } from './reference-parser.js';
|
|
4
|
-
export declare function parseGroupBy(
|
|
3
|
+
export declare function parseGroupBy(orderBy: ReferenceExpressionOrList<any, any>): GroupByItemNode[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="./group-by-parser.d.ts" />
|
|
2
2
|
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
|
|
3
3
|
import { parseReferenceExpressionOrList, } from './reference-parser.js';
|
|
4
|
-
export function parseGroupBy(
|
|
5
|
-
return parseReferenceExpressionOrList(
|
|
4
|
+
export function parseGroupBy(orderBy) {
|
|
5
|
+
return parseReferenceExpressionOrList(orderBy).map(GroupByItemNode.create);
|
|
6
6
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
2
|
-
import { ParseContext } from './parse-context.js';
|
|
3
2
|
import { ValueExpression } from './value-parser.js';
|
|
4
3
|
import { ValuesNode } from '../operation-node/values-node.js';
|
|
5
4
|
import { NonNullableInsertKeys, NullableInsertKeys, InsertType } from '../util/column-type.js';
|
|
@@ -9,4 +8,4 @@ export declare type InsertObject<DB, TB extends keyof DB> = {
|
|
|
9
8
|
[C in NullableInsertKeys<DB[TB]>]?: ValueExpression<DB, TB, InsertType<DB[TB][C]>>;
|
|
10
9
|
};
|
|
11
10
|
export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | ReadonlyArray<InsertObject<DB, TB>>;
|
|
12
|
-
export declare function parseInsertObjectOrList(
|
|
11
|
+
export declare function parseInsertObjectOrList(args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ValuesNode];
|
|
@@ -6,14 +6,14 @@ import { freeze } from '../util/object-utils.js';
|
|
|
6
6
|
import { parseValueExpression } from './value-parser.js';
|
|
7
7
|
import { ValuesNode } from '../operation-node/values-node.js';
|
|
8
8
|
import { isComplexExpression } from './complex-expression-parser.js';
|
|
9
|
-
export function parseInsertObjectOrList(
|
|
10
|
-
return parseInsertColumnsAndValues(
|
|
9
|
+
export function parseInsertObjectOrList(args) {
|
|
10
|
+
return parseInsertColumnsAndValues(Array.isArray(args) ? args : [args]);
|
|
11
11
|
}
|
|
12
|
-
function parseInsertColumnsAndValues(
|
|
12
|
+
function parseInsertColumnsAndValues(rows) {
|
|
13
13
|
const columns = parseColumnNamesAndIndexes(rows);
|
|
14
14
|
return [
|
|
15
15
|
freeze([...columns.keys()].map(ColumnNode.create)),
|
|
16
|
-
ValuesNode.create(rows.map((row) => parseRowValues(
|
|
16
|
+
ValuesNode.create(rows.map((row) => parseRowValues(row, columns))),
|
|
17
17
|
];
|
|
18
18
|
}
|
|
19
19
|
function parseColumnNamesAndIndexes(rows) {
|
|
@@ -28,7 +28,7 @@ function parseColumnNamesAndIndexes(rows) {
|
|
|
28
28
|
}
|
|
29
29
|
return columns;
|
|
30
30
|
}
|
|
31
|
-
function parseRowValues(
|
|
31
|
+
function parseRowValues(row, columns) {
|
|
32
32
|
const rowColumns = Object.keys(row);
|
|
33
33
|
const rowValues = new Array(columns.size).fill(null);
|
|
34
34
|
for (const col of rowColumns) {
|
|
@@ -39,7 +39,7 @@ function parseRowValues(ctx, row, columns) {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
if (rowValues.some(isComplexExpression)) {
|
|
42
|
-
return ValueListNode.create(rowValues.map((it) => parseValueExpression(
|
|
42
|
+
return ValueListNode.create(rowValues.map((it) => parseValueExpression(it)));
|
|
43
43
|
}
|
|
44
44
|
return PrimitiveValueListNode.create(rowValues);
|
|
45
45
|
}
|
|
@@ -2,10 +2,9 @@ import { JoinNode, JoinType } from '../operation-node/join-node.js';
|
|
|
2
2
|
import { AnyColumn, AnyColumnWithTable } from '../util/type-utils.js';
|
|
3
3
|
import { TableExpressionDatabase, TableExpressionTables } from './table-parser.js';
|
|
4
4
|
import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
5
|
-
import { ParseContext } from './parse-context.js';
|
|
6
5
|
export declare type JoinReferenceExpression<DB, TB extends keyof DB, TE> = AnyJoinColumn<DB, TB, TE> | AnyJoinColumnWithTable<DB, TB, TE>;
|
|
7
6
|
export declare type JoinCallbackExpression<DB, TB extends keyof DB, TE> = (join: JoinBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>) => JoinBuilder<any, any>;
|
|
8
7
|
declare type AnyJoinColumn<DB, TB extends keyof DB, TE> = AnyColumn<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
|
|
9
8
|
declare type AnyJoinColumnWithTable<DB, TB extends keyof DB, TE> = AnyColumnWithTable<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
|
|
10
|
-
export declare function parseJoin(
|
|
9
|
+
export declare function parseJoin(joinType: JoinType, args: any[]): JoinNode;
|
|
11
10
|
export {};
|
|
@@ -2,21 +2,22 @@
|
|
|
2
2
|
import { JoinNode } from '../operation-node/join-node.js';
|
|
3
3
|
import { parseTableExpression, } from './table-parser.js';
|
|
4
4
|
import { parseReferenceFilter } from './filter-parser.js';
|
|
5
|
-
|
|
5
|
+
import { createJoinBuilder } from './parse-utils.js';
|
|
6
|
+
export function parseJoin(joinType, args) {
|
|
6
7
|
if (args.length === 3) {
|
|
7
|
-
return parseSingleOnJoin(
|
|
8
|
+
return parseSingleOnJoin(joinType, args[0], args[1], args[2]);
|
|
8
9
|
}
|
|
9
10
|
else if (args.length === 2) {
|
|
10
|
-
return parseCallbackJoin(
|
|
11
|
+
return parseCallbackJoin(joinType, args[0], args[1]);
|
|
11
12
|
}
|
|
12
13
|
else {
|
|
13
14
|
throw new Error('not implemented');
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
|
-
function parseCallbackJoin(
|
|
17
|
-
const joinBuilder = callback(
|
|
17
|
+
function parseCallbackJoin(joinType, from, callback) {
|
|
18
|
+
const joinBuilder = callback(createJoinBuilder(joinType, from));
|
|
18
19
|
return joinBuilder.toOperationNode();
|
|
19
20
|
}
|
|
20
|
-
function parseSingleOnJoin(
|
|
21
|
-
return JoinNode.createWithOn(joinType, parseTableExpression(
|
|
21
|
+
function parseSingleOnJoin(joinType, from, lhsColumn, rhsColumn) {
|
|
22
|
+
return JoinNode.createWithOn(joinType, parseTableExpression(from), parseReferenceFilter(lhsColumn, '=', rhsColumn));
|
|
22
23
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
|
|
2
2
|
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
3
|
-
import { ParseContext } from './parse-context.js';
|
|
4
3
|
import { ReferenceExpression } from './reference-parser.js';
|
|
5
4
|
export declare type OrderByDirection = 'asc' | 'desc';
|
|
6
5
|
export declare type OrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | (keyof O & string);
|
|
7
6
|
export declare type OrderByDirectionExpression = OrderByDirection | AnyRawBuilder;
|
|
8
|
-
export declare function parseOrderBy(
|
|
7
|
+
export declare function parseOrderBy(orderBy: OrderByExpression<any, any, any>, direction?: OrderByDirectionExpression): OrderByItemNode;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
|
|
3
3
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
4
4
|
import { parseReferenceExpression, } from './reference-parser.js';
|
|
5
|
-
export function parseOrderBy(
|
|
6
|
-
return OrderByItemNode.create(parseOrderByExpression(
|
|
5
|
+
export function parseOrderBy(orderBy, direction) {
|
|
6
|
+
return OrderByItemNode.create(parseOrderByExpression(orderBy), parseOrderByDirectionExpression(direction));
|
|
7
7
|
}
|
|
8
|
-
function parseOrderByExpression(
|
|
9
|
-
return parseReferenceExpression(
|
|
8
|
+
function parseOrderByExpression(expr) {
|
|
9
|
+
return parseReferenceExpression(expr);
|
|
10
10
|
}
|
|
11
11
|
function parseOrderByDirectionExpression(expr) {
|
|
12
12
|
if (!expr) {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { JoinType } from '../operation-node/join-node.js';
|
|
2
|
+
import { ExpressionBuilder } from '../query-builder/expression-builder.js';
|
|
3
|
+
import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
4
|
+
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
5
|
+
import { QueryCreator } from '../query-creator.js';
|
|
6
|
+
import { TableExpression } from './table-parser.js';
|
|
7
|
+
export declare function createSelectQueryBuilder(): SelectQueryBuilder<any, any, any>;
|
|
8
|
+
export declare function createExpressionBuilder(): ExpressionBuilder<any, any>;
|
|
9
|
+
export declare function createQueryCreator(): QueryCreator<any>;
|
|
10
|
+
export declare function createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/// <reference types="./parse-utils.d.ts" />
|
|
2
|
+
import { JoinNode } from '../operation-node/join-node.js';
|
|
3
|
+
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
4
|
+
import { ExpressionBuilder } from '../query-builder/expression-builder.js';
|
|
5
|
+
import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
6
|
+
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
7
|
+
import { QueryCreator } from '../query-creator.js';
|
|
8
|
+
import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
|
|
9
|
+
import { createQueryId } from '../util/query-id.js';
|
|
10
|
+
import { parseTableExpression, parseTableExpressionOrList, } from './table-parser.js';
|
|
11
|
+
export function createSelectQueryBuilder() {
|
|
12
|
+
return new SelectQueryBuilder({
|
|
13
|
+
queryId: createQueryId(),
|
|
14
|
+
executor: NOOP_QUERY_EXECUTOR,
|
|
15
|
+
queryNode: SelectQueryNode.create(parseTableExpressionOrList([])),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export function createExpressionBuilder() {
|
|
19
|
+
return new ExpressionBuilder({
|
|
20
|
+
executor: NOOP_QUERY_EXECUTOR,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function createQueryCreator() {
|
|
24
|
+
return new QueryCreator({
|
|
25
|
+
executor: NOOP_QUERY_EXECUTOR,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export function createJoinBuilder(joinType, table) {
|
|
29
|
+
return new JoinBuilder({
|
|
30
|
+
joinNode: JoinNode.create(joinType, parseTableExpression(table)),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
@@ -5,7 +5,6 @@ import { ReferenceNode } from '../operation-node/reference-node.js';
|
|
|
5
5
|
import { AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
|
|
6
6
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
7
7
|
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
8
|
-
import { ParseContext } from './parse-context.js';
|
|
9
8
|
import { ComplexExpression } from './complex-expression-parser.js';
|
|
10
9
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
11
10
|
import { SelectType } from '../util/column-type.js';
|
|
@@ -14,8 +13,8 @@ export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = Referen
|
|
|
14
13
|
export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
|
|
15
14
|
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : unknown;
|
|
16
15
|
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : unknown;
|
|
17
|
-
export declare function parseReferenceExpressionOrList(
|
|
18
|
-
export declare function parseReferenceExpression(
|
|
16
|
+
export declare function parseReferenceExpressionOrList(arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
|
|
17
|
+
export declare function parseReferenceExpression(exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
|
|
19
18
|
export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
|
|
20
19
|
export declare function parseAliasedStringReference(ref: string): ColumnNode | ReferenceNode | AliasNode;
|
|
21
20
|
export declare function parseColumnName(column: AnyColumn<any, any>): ColumnNode;
|