-
Notifications
You must be signed in to change notification settings - Fork 280
/
default-query-executor.ts
90 lines (79 loc) · 2.3 KB
/
default-query-executor.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import { ConnectionProvider } from '../driver/connection-provider.js'
import { DatabaseConnection } from '../driver/database-connection.js'
import { CompiledQuery } from '../query-compiler/compiled-query.js'
import {
RootOperationNode,
QueryCompiler,
} from '../query-compiler/query-compiler.js'
import { KyselyPlugin } from '../plugin/kysely-plugin.js'
import { QueryExecutorBase } from './query-executor-base.js'
import { DialectAdapter } from '../dialect/dialect-adapter.js'
export class DefaultQueryExecutor extends QueryExecutorBase {
#compiler: QueryCompiler
#adapter: DialectAdapter
#connectionProvider: ConnectionProvider
constructor(
compiler: QueryCompiler,
adapter: DialectAdapter,
connectionProvider: ConnectionProvider,
plugins: KyselyPlugin[] = []
) {
super(plugins)
this.#compiler = compiler
this.#adapter = adapter
this.#connectionProvider = connectionProvider
}
get adapter(): DialectAdapter {
return this.#adapter
}
compileQuery(node: RootOperationNode): CompiledQuery {
return this.#compiler.compileQuery(node)
}
provideConnection<T>(
consumer: (connection: DatabaseConnection) => Promise<T>
): Promise<T> {
return this.#connectionProvider.provideConnection(consumer)
}
withPlugins(plugins: ReadonlyArray<KyselyPlugin>): DefaultQueryExecutor {
return new DefaultQueryExecutor(
this.#compiler,
this.#adapter,
this.#connectionProvider,
[...this.plugins, ...plugins]
)
}
withPlugin(plugin: KyselyPlugin): DefaultQueryExecutor {
return new DefaultQueryExecutor(
this.#compiler,
this.#adapter,
this.#connectionProvider,
[...this.plugins, plugin]
)
}
withPluginAtFront(plugin: KyselyPlugin): DefaultQueryExecutor {
return new DefaultQueryExecutor(
this.#compiler,
this.#adapter,
this.#connectionProvider,
[plugin, ...this.plugins]
)
}
withConnectionProvider(
connectionProvider: ConnectionProvider
): DefaultQueryExecutor {
return new DefaultQueryExecutor(
this.#compiler,
this.#adapter,
connectionProvider,
[...this.plugins]
)
}
withoutPlugins(): DefaultQueryExecutor {
return new DefaultQueryExecutor(
this.#compiler,
this.#adapter,
this.#connectionProvider,
[]
)
}
}