kysely 0.26.2 → 0.27.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.
Files changed (215) hide show
  1. package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
  2. package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
  3. package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
  4. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
  5. package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
  6. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  7. package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
  8. package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
  9. package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
  10. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
  12. package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
  13. package/dist/cjs/dialect/mssql/mssql-introspector.js +97 -0
  14. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  15. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
  16. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  17. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
  18. package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
  19. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  22. package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
  23. package/dist/cjs/driver/driver.d.ts +1 -1
  24. package/dist/cjs/driver/driver.js +1 -0
  25. package/dist/cjs/driver/runtime-driver.js +5 -1
  26. package/dist/cjs/driver/single-connection-provider.js +7 -8
  27. package/dist/cjs/expression/expression-builder.d.ts +66 -73
  28. package/dist/cjs/expression/expression-builder.js +8 -17
  29. package/dist/cjs/expression/expression-wrapper.d.ts +8 -8
  30. package/dist/cjs/helpers/mssql.d.ts +152 -0
  31. package/dist/cjs/helpers/mssql.js +160 -0
  32. package/dist/cjs/helpers/mysql.d.ts +3 -3
  33. package/dist/cjs/helpers/sqlite.d.ts +3 -3
  34. package/dist/cjs/index.d.ts +8 -2
  35. package/dist/cjs/index.js +6 -0
  36. package/dist/cjs/migration/migrator.js +12 -16
  37. package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
  38. package/dist/cjs/operation-node/add-index-node.js +31 -0
  39. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
  40. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  41. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  42. package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
  43. package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
  44. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  45. package/dist/cjs/operation-node/operation-node-transformer.js +17 -0
  46. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  47. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  48. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  49. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  50. package/dist/cjs/operation-node/operator-node.js +2 -0
  51. package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
  52. package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
  53. package/dist/cjs/parser/binary-operation-parser.js +1 -1
  54. package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
  55. package/dist/cjs/parser/expression-parser.d.ts +2 -2
  56. package/dist/cjs/parser/reference-parser.d.ts +3 -2
  57. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  58. package/dist/cjs/parser/select-parser.d.ts +20 -9
  59. package/dist/cjs/parser/update-set-parser.d.ts +5 -2
  60. package/dist/cjs/parser/update-set-parser.js +13 -3
  61. package/dist/cjs/parser/value-parser.d.ts +2 -2
  62. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +4 -4
  63. package/dist/cjs/query-builder/case-builder.d.ts +5 -4
  64. package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -6
  65. package/dist/cjs/query-builder/function-module.d.ts +98 -27
  66. package/dist/cjs/query-builder/function-module.js +17 -3
  67. package/dist/cjs/query-builder/having-interface.d.ts +3 -5
  68. package/dist/cjs/query-builder/insert-query-builder.d.ts +32 -12
  69. package/dist/cjs/query-builder/insert-query-builder.js +3 -3
  70. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  71. package/dist/cjs/query-builder/insert-result.js +8 -1
  72. package/dist/cjs/query-builder/json-path-builder.d.ts +3 -2
  73. package/dist/cjs/query-builder/json-path-builder.js +6 -3
  74. package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
  75. package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
  76. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  77. package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
  78. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
  79. package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
  80. package/dist/cjs/query-builder/select-query-builder.d.ts +48 -29
  81. package/dist/cjs/query-builder/select-query-builder.js +5 -2
  82. package/dist/cjs/query-builder/update-query-builder.d.ts +25 -7
  83. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  84. package/dist/cjs/query-builder/where-interface.d.ts +3 -3
  85. package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
  86. package/dist/cjs/query-compiler/default-query-compiler.js +65 -12
  87. package/dist/cjs/query-creator.d.ts +5 -3
  88. package/dist/cjs/query-creator.js +0 -47
  89. package/dist/cjs/raw-builder/raw-builder.d.ts +0 -3
  90. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
  91. package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
  92. package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
  93. package/dist/cjs/schema/alter-table-builder.js +59 -2
  94. package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
  95. package/dist/cjs/schema/column-definition-builder.js +27 -0
  96. package/dist/cjs/schema/create-index-builder.d.ts +23 -0
  97. package/dist/cjs/schema/create-index-builder.js +30 -0
  98. package/dist/cjs/schema/create-table-builder.d.ts +28 -2
  99. package/dist/cjs/schema/create-table-builder.js +38 -3
  100. package/dist/cjs/schema/create-view-builder.d.ts +2 -2
  101. package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
  102. package/dist/cjs/schema/unique-constraint-builder.js +24 -0
  103. package/dist/cjs/util/infer-result.d.ts +2 -1
  104. package/dist/cjs/util/log.js +5 -1
  105. package/dist/cjs/util/object-utils.d.ts +1 -1
  106. package/dist/cjs/util/type-utils.d.ts +27 -20
  107. package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
  108. package/dist/esm/dialect/dialect-adapter-base.js +3 -0
  109. package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
  110. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
  111. package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
  112. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  113. package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
  114. package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
  115. package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
  116. package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
  117. package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
  118. package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
  119. package/dist/esm/dialect/mssql/mssql-introspector.js +94 -0
  120. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  121. package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
  122. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  123. package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
  124. package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
  125. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  126. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
  127. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  128. package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
  129. package/dist/esm/driver/driver.d.ts +1 -1
  130. package/dist/esm/driver/driver.js +1 -0
  131. package/dist/esm/driver/runtime-driver.js +5 -1
  132. package/dist/esm/driver/single-connection-provider.js +7 -8
  133. package/dist/esm/expression/expression-builder.d.ts +66 -73
  134. package/dist/esm/expression/expression-builder.js +10 -19
  135. package/dist/esm/expression/expression-wrapper.d.ts +8 -8
  136. package/dist/esm/helpers/mssql.d.ts +152 -0
  137. package/dist/esm/helpers/mssql.js +155 -0
  138. package/dist/esm/helpers/mysql.d.ts +3 -3
  139. package/dist/esm/helpers/sqlite.d.ts +3 -3
  140. package/dist/esm/index.d.ts +8 -2
  141. package/dist/esm/index.js +6 -0
  142. package/dist/esm/migration/migrator.js +12 -16
  143. package/dist/esm/operation-node/add-index-node.d.ts +21 -0
  144. package/dist/esm/operation-node/add-index-node.js +29 -0
  145. package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
  146. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  147. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  148. package/dist/esm/operation-node/create-index-node.d.ts +1 -0
  149. package/dist/esm/operation-node/create-table-node.d.ts +1 -0
  150. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  151. package/dist/esm/operation-node/operation-node-transformer.js +17 -0
  152. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  153. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  154. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  155. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  156. package/dist/esm/operation-node/operator-node.js +2 -0
  157. package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
  158. package/dist/esm/operation-node/unique-constraint-node.js +8 -1
  159. package/dist/esm/parser/binary-operation-parser.js +1 -1
  160. package/dist/esm/parser/coalesce-parser.d.ts +12 -2
  161. package/dist/esm/parser/expression-parser.d.ts +2 -2
  162. package/dist/esm/parser/reference-parser.d.ts +3 -2
  163. package/dist/esm/parser/returning-parser.d.ts +2 -1
  164. package/dist/esm/parser/select-parser.d.ts +20 -9
  165. package/dist/esm/parser/update-set-parser.d.ts +5 -2
  166. package/dist/esm/parser/update-set-parser.js +10 -1
  167. package/dist/esm/parser/value-parser.d.ts +2 -2
  168. package/dist/esm/query-builder/aggregate-function-builder.d.ts +4 -4
  169. package/dist/esm/query-builder/case-builder.d.ts +5 -4
  170. package/dist/esm/query-builder/delete-query-builder.d.ts +8 -6
  171. package/dist/esm/query-builder/function-module.d.ts +98 -27
  172. package/dist/esm/query-builder/function-module.js +17 -3
  173. package/dist/esm/query-builder/having-interface.d.ts +3 -5
  174. package/dist/esm/query-builder/insert-query-builder.d.ts +32 -12
  175. package/dist/esm/query-builder/insert-query-builder.js +4 -4
  176. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  177. package/dist/esm/query-builder/insert-result.js +8 -1
  178. package/dist/esm/query-builder/json-path-builder.d.ts +3 -2
  179. package/dist/esm/query-builder/json-path-builder.js +6 -3
  180. package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
  181. package/dist/esm/query-builder/on-conflict-builder.js +2 -7
  182. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  183. package/dist/esm/query-builder/returning-interface.d.ts +3 -2
  184. package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
  185. package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
  186. package/dist/esm/query-builder/select-query-builder.d.ts +48 -29
  187. package/dist/esm/query-builder/select-query-builder.js +5 -2
  188. package/dist/esm/query-builder/update-query-builder.d.ts +25 -7
  189. package/dist/esm/query-builder/update-query-builder.js +3 -3
  190. package/dist/esm/query-builder/where-interface.d.ts +3 -3
  191. package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
  192. package/dist/esm/query-compiler/default-query-compiler.js +65 -12
  193. package/dist/esm/query-creator.d.ts +5 -3
  194. package/dist/esm/query-creator.js +0 -47
  195. package/dist/esm/raw-builder/raw-builder.d.ts +0 -3
  196. package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
  197. package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
  198. package/dist/esm/schema/alter-table-builder.d.ts +41 -1
  199. package/dist/esm/schema/alter-table-builder.js +59 -2
  200. package/dist/esm/schema/column-definition-builder.d.ts +25 -0
  201. package/dist/esm/schema/column-definition-builder.js +27 -0
  202. package/dist/esm/schema/create-index-builder.d.ts +23 -0
  203. package/dist/esm/schema/create-index-builder.js +30 -0
  204. package/dist/esm/schema/create-table-builder.d.ts +28 -2
  205. package/dist/esm/schema/create-table-builder.js +38 -3
  206. package/dist/esm/schema/create-view-builder.d.ts +2 -2
  207. package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
  208. package/dist/esm/schema/unique-constraint-builder.js +21 -0
  209. package/dist/esm/util/infer-result.d.ts +2 -1
  210. package/dist/esm/util/log.js +5 -1
  211. package/dist/esm/util/object-utils.d.ts +1 -1
  212. package/dist/esm/util/type-utils.d.ts +27 -20
  213. package/helpers/mssql.d.ts +1 -0
  214. package/helpers/mssql.js +1 -0
  215. package/package.json +17 -6
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MssqlDriver = void 0;
4
+ const object_utils_js_1 = require("../../util/object-utils.js");
5
+ const compiled_query_js_1 = require("../../query-compiler/compiled-query.js");
6
+ const stack_trace_utils_js_1 = require("../../util/stack-trace-utils.js");
7
+ const random_string_js_1 = require("../../util/random-string.js");
8
+ const deferred_js_1 = require("../../util/deferred.js");
9
+ const PRIVATE_RELEASE_METHOD = Symbol();
10
+ const PRIVATE_DESTROY_METHOD = Symbol();
11
+ class MssqlDriver {
12
+ #config;
13
+ #pool;
14
+ constructor(config) {
15
+ this.#config = (0, object_utils_js_1.freeze)({ ...config });
16
+ this.#pool = new this.#config.tarn.Pool({
17
+ ...this.#config.tarn.options,
18
+ create: async () => {
19
+ const connection = await this.#config.tedious.connectionFactory();
20
+ await new Promise((resolve, reject) => connection.connect((error) => {
21
+ if (error)
22
+ reject(error);
23
+ else
24
+ resolve(undefined);
25
+ }));
26
+ return new MssqlConnection(connection, this.#config.tedious);
27
+ },
28
+ destroy: async (connection) => {
29
+ await connection[PRIVATE_DESTROY_METHOD]();
30
+ },
31
+ // @ts-ignore `tarn` accepts a function that returns a promise here, but
32
+ // the types are not aligned and it type errors.
33
+ validate: (connection) => connection.validate(),
34
+ });
35
+ }
36
+ async init() {
37
+ // noop
38
+ }
39
+ async acquireConnection() {
40
+ return await this.#pool.acquire().promise;
41
+ }
42
+ async beginTransaction(connection, settings) {
43
+ await connection.beginTransaction(settings);
44
+ }
45
+ async commitTransaction(connection) {
46
+ await connection.commitTransaction();
47
+ }
48
+ async rollbackTransaction(connection) {
49
+ await connection.rollbackTransaction();
50
+ }
51
+ async releaseConnection(connection) {
52
+ await connection[PRIVATE_RELEASE_METHOD]();
53
+ this.#pool.release(connection);
54
+ }
55
+ async destroy() {
56
+ await this.#pool.destroy();
57
+ }
58
+ }
59
+ exports.MssqlDriver = MssqlDriver;
60
+ class MssqlConnection {
61
+ #connection;
62
+ #tedious;
63
+ constructor(connection, tedious) {
64
+ this.#connection = connection;
65
+ this.#tedious = tedious;
66
+ }
67
+ async beginTransaction(settings) {
68
+ const { isolationLevel } = settings;
69
+ await new Promise((resolve, reject) => this.#connection.beginTransaction((error) => {
70
+ if (error)
71
+ reject(error);
72
+ else
73
+ resolve(undefined);
74
+ }, isolationLevel ? (0, random_string_js_1.randomString)(8) : undefined, isolationLevel
75
+ ? this.#getTediousIsolationLevel(isolationLevel)
76
+ : undefined));
77
+ }
78
+ async commitTransaction() {
79
+ await new Promise((resolve, reject) => this.#connection.commitTransaction((error) => {
80
+ if (error)
81
+ reject(error);
82
+ else
83
+ resolve(undefined);
84
+ }));
85
+ }
86
+ async executeQuery(compiledQuery) {
87
+ try {
88
+ const deferred = new deferred_js_1.Deferred();
89
+ const request = new MssqlRequest(this.#tedious, compiledQuery, deferred);
90
+ this.#connection.execSql(request.request);
91
+ const { rowCount, rows } = await deferred.promise;
92
+ return {
93
+ numAffectedRows: rowCount !== undefined ? BigInt(rowCount) : undefined,
94
+ rows,
95
+ };
96
+ }
97
+ catch (err) {
98
+ throw (0, stack_trace_utils_js_1.extendStackTrace)(err, new Error());
99
+ }
100
+ }
101
+ async rollbackTransaction() {
102
+ await new Promise((resolve, reject) => this.#connection.rollbackTransaction((error) => {
103
+ if (error)
104
+ reject(error);
105
+ else
106
+ resolve(undefined);
107
+ }));
108
+ }
109
+ async *streamQuery(compiledQuery, chunkSize) {
110
+ if (!Number.isInteger(chunkSize) || chunkSize <= 0) {
111
+ throw new Error('chunkSize must be a positive integer');
112
+ }
113
+ const request = new MssqlRequest(this.#tedious, compiledQuery);
114
+ this.#connection.execSql(request.request);
115
+ try {
116
+ while (true) {
117
+ const rows = await request.readChunk(chunkSize);
118
+ if (rows.length === 0) {
119
+ break;
120
+ }
121
+ yield { rows };
122
+ if (rows.length < chunkSize) {
123
+ break;
124
+ }
125
+ }
126
+ }
127
+ finally {
128
+ this.#connection.cancel();
129
+ }
130
+ }
131
+ async validate() {
132
+ try {
133
+ const deferred = new deferred_js_1.Deferred();
134
+ const request = new MssqlRequest(this.#tedious, compiled_query_js_1.CompiledQuery.raw('select 1'), deferred);
135
+ this.#connection.execSql(request.request);
136
+ await deferred.promise;
137
+ return true;
138
+ }
139
+ catch {
140
+ return false;
141
+ }
142
+ }
143
+ #getTediousIsolationLevel(isolationLevel) {
144
+ const { ISOLATION_LEVEL } = this.#tedious;
145
+ const mapper = {
146
+ 'read committed': ISOLATION_LEVEL.READ_COMMITTED,
147
+ 'read uncommitted': ISOLATION_LEVEL.READ_UNCOMMITTED,
148
+ 'repeatable read': ISOLATION_LEVEL.REPEATABLE_READ,
149
+ serializable: ISOLATION_LEVEL.SERIALIZABLE,
150
+ snapshot: ISOLATION_LEVEL.SNAPSHOT,
151
+ };
152
+ const tediousIsolationLevel = mapper[isolationLevel];
153
+ if (tediousIsolationLevel === undefined) {
154
+ throw new Error(`Unknown isolation level: ${isolationLevel}`);
155
+ }
156
+ return tediousIsolationLevel;
157
+ }
158
+ [PRIVATE_RELEASE_METHOD]() {
159
+ return new Promise((resolve, reject) => {
160
+ this.#connection.reset((error) => {
161
+ if (error)
162
+ reject(error);
163
+ else
164
+ resolve(undefined);
165
+ });
166
+ });
167
+ }
168
+ [PRIVATE_DESTROY_METHOD]() {
169
+ return new Promise((resolve) => {
170
+ this.#connection.once('end', () => {
171
+ resolve(undefined);
172
+ });
173
+ this.#connection.close();
174
+ });
175
+ }
176
+ }
177
+ class MssqlRequest {
178
+ #request;
179
+ #rows;
180
+ #tedious;
181
+ #completed;
182
+ #error;
183
+ #rowCount;
184
+ constructor(tedious, compiledQuery, onDone) {
185
+ this.#completed = false;
186
+ this.#rows = [];
187
+ this.#tedious = tedious;
188
+ const { parameters, sql } = compiledQuery;
189
+ this.#request = new this.#tedious.Request(sql, (err, rowCount) => {
190
+ if (err) {
191
+ this.#error = err instanceof AggregateError ? err.errors : err;
192
+ onDone?.reject(this.#error);
193
+ }
194
+ else {
195
+ this.#rowCount = rowCount;
196
+ }
197
+ });
198
+ this.#addParametersToRequest(parameters);
199
+ this.#attachListeners(onDone);
200
+ }
201
+ get request() {
202
+ return this.#request;
203
+ }
204
+ readChunk(chunkSize) {
205
+ return new Promise((resolve, reject) => {
206
+ const interval = setInterval(() => {
207
+ if (this.#error) {
208
+ clearInterval(interval);
209
+ reject(this.#error);
210
+ }
211
+ else if (this.#completed || this.#rows.length >= chunkSize) {
212
+ clearInterval(interval);
213
+ resolve(this.#rows.splice(0, chunkSize));
214
+ }
215
+ }, 0);
216
+ });
217
+ }
218
+ #addParametersToRequest(parameters) {
219
+ for (let i = 0; i < parameters.length; i++) {
220
+ const parameter = parameters[i];
221
+ this.#request.addParameter(String(i + 1), this.#getTediousDataType(parameter), parameter);
222
+ }
223
+ }
224
+ #attachListeners(onDone) {
225
+ const rowListener = (columns) => {
226
+ const row = {};
227
+ for (const column of columns) {
228
+ row[column.metadata.colName] = column.value;
229
+ }
230
+ this.#rows.push(row);
231
+ };
232
+ this.#request.on('row', rowListener);
233
+ this.#request.once('requestCompleted', () => {
234
+ this.#completed = true;
235
+ this.#request.off('row', rowListener);
236
+ onDone?.resolve({
237
+ rowCount: this.#rowCount,
238
+ rows: this.#rows,
239
+ });
240
+ });
241
+ }
242
+ #getTediousDataType(value) {
243
+ if ((0, object_utils_js_1.isNull)(value) || (0, object_utils_js_1.isUndefined)(value) || (0, object_utils_js_1.isString)(value)) {
244
+ return this.#tedious.TYPES.NVarChar;
245
+ }
246
+ if ((0, object_utils_js_1.isBigInt)(value) || ((0, object_utils_js_1.isNumber)(value) && value % 1 === 0)) {
247
+ if (value < -2147483648 || value > 2147483647) {
248
+ return this.#tedious.TYPES.BigInt;
249
+ }
250
+ else {
251
+ return this.#tedious.TYPES.Int;
252
+ }
253
+ }
254
+ if ((0, object_utils_js_1.isNumber)(value)) {
255
+ return this.#tedious.TYPES.Float;
256
+ }
257
+ if ((0, object_utils_js_1.isBoolean)(value)) {
258
+ return this.#tedious.TYPES.Bit;
259
+ }
260
+ if ((0, object_utils_js_1.isDate)(value)) {
261
+ return this.#tedious.TYPES.DateTime;
262
+ }
263
+ if ((0, object_utils_js_1.isBuffer)(value)) {
264
+ return this.#tedious.TYPES.VarBinary;
265
+ }
266
+ return this.#tedious.TYPES.NVarChar;
267
+ }
268
+ }
@@ -0,0 +1,20 @@
1
+ import { Kysely } from '../../kysely.js';
2
+ import { DatabaseIntrospector, DatabaseMetadata, DatabaseMetadataOptions, SchemaMetadata, TableMetadata } from '../database-introspector.js';
3
+ export declare class MssqlIntrospector implements DatabaseIntrospector {
4
+ #private;
5
+ constructor(db: Kysely<any>);
6
+ /**
7
+ * Get schema metadata.
8
+ */
9
+ getSchemas(): Promise<SchemaMetadata[]>;
10
+ /**
11
+ * Get tables and views metadata.
12
+ */
13
+ getTables(options?: DatabaseMetadataOptions): Promise<TableMetadata[]>;
14
+ /**
15
+ * Get the database metadata such as table and column names.
16
+ *
17
+ * @deprecated Use getTables() instead.
18
+ */
19
+ getMetadata(options?: DatabaseMetadataOptions): Promise<DatabaseMetadata>;
20
+ }
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MssqlIntrospector = void 0;
4
+ const migrator_js_1 = require("../../migration/migrator.js");
5
+ const object_utils_js_1 = require("../../util/object-utils.js");
6
+ class MssqlIntrospector {
7
+ #db;
8
+ constructor(db) {
9
+ this.#db = db;
10
+ }
11
+ async getSchemas() {
12
+ return await this.#db.selectFrom('sys.schemas').select('name').execute();
13
+ }
14
+ async getTables(options = { withInternalKyselyTables: false }) {
15
+ const rawColumns = await this.#db
16
+ .selectFrom('sys.tables as tables')
17
+ .leftJoin('sys.schemas as table_schemas', 'table_schemas.schema_id', 'tables.schema_id')
18
+ .innerJoin('sys.columns as columns', 'columns.object_id', 'tables.object_id')
19
+ .innerJoin('sys.types as types', 'types.system_type_id', 'columns.system_type_id')
20
+ .leftJoin('sys.schemas as type_schemas', 'type_schemas.schema_id', 'types.schema_id')
21
+ .$if(!options.withInternalKyselyTables, (qb) => qb
22
+ .where('tables.name', '!=', migrator_js_1.DEFAULT_MIGRATION_TABLE)
23
+ .where('tables.name', '!=', migrator_js_1.DEFAULT_MIGRATION_LOCK_TABLE))
24
+ .select([
25
+ 'tables.name as table_name',
26
+ (eb) => eb
27
+ .ref('tables.type')
28
+ .$castTo()
29
+ .as('table_type'),
30
+ 'table_schemas.name as table_schema_name',
31
+ 'columns.default_object_id as column_default_object_id',
32
+ 'columns.generated_always_type_desc as column_generated_always_type',
33
+ 'columns.is_computed as column_is_computed',
34
+ 'columns.is_identity as column_is_identity',
35
+ 'columns.is_nullable as column_is_nullable',
36
+ 'columns.is_rowguidcol as column_is_rowguidcol',
37
+ 'columns.name as column_name',
38
+ 'types.is_nullable as type_is_nullable',
39
+ 'types.name as type_name',
40
+ 'type_schemas.name as type_schema_name',
41
+ ])
42
+ .unionAll(this.#db
43
+ .selectFrom('sys.views as views')
44
+ .leftJoin('sys.schemas as view_schemas', 'view_schemas.schema_id', 'views.schema_id')
45
+ .innerJoin('sys.columns as columns', 'columns.object_id', 'views.object_id')
46
+ .innerJoin('sys.types as types', 'types.system_type_id', 'columns.system_type_id')
47
+ .leftJoin('sys.schemas as type_schemas', 'type_schemas.schema_id', 'types.schema_id')
48
+ .select([
49
+ 'views.name as table_name',
50
+ 'views.type as table_type',
51
+ 'view_schemas.name as table_schema_name',
52
+ 'columns.default_object_id as column_default_object_id',
53
+ 'columns.generated_always_type_desc as column_generated_always_type',
54
+ 'columns.is_computed as column_is_computed',
55
+ 'columns.is_identity as column_is_identity',
56
+ 'columns.is_nullable as column_is_nullable',
57
+ 'columns.is_rowguidcol as column_is_rowguidcol',
58
+ 'columns.name as column_name',
59
+ 'types.is_nullable as type_is_nullable',
60
+ 'types.name as type_name',
61
+ 'type_schemas.name as type_schema_name',
62
+ ]))
63
+ .orderBy('table_schema_name')
64
+ .orderBy('table_name')
65
+ .orderBy('column_name')
66
+ .execute();
67
+ const tableDictionary = {};
68
+ for (const rawColumn of rawColumns) {
69
+ const key = `${rawColumn.table_schema_name}.${rawColumn.table_name}`;
70
+ const table = (tableDictionary[key] ||= (0, object_utils_js_1.freeze)({
71
+ columns: [],
72
+ isView: rawColumn.table_type === 'V ',
73
+ name: rawColumn.table_name,
74
+ schema: rawColumn.table_schema_name ?? undefined,
75
+ }));
76
+ table.columns.push((0, object_utils_js_1.freeze)({
77
+ dataType: rawColumn.type_name,
78
+ dataTypeSchema: rawColumn.type_schema_name ?? undefined,
79
+ hasDefaultValue: rawColumn.column_default_object_id > 0 ||
80
+ rawColumn.column_generated_always_type !== 'NOT_APPLICABLE' ||
81
+ rawColumn.column_is_identity ||
82
+ rawColumn.column_is_computed ||
83
+ rawColumn.column_is_rowguidcol,
84
+ isAutoIncrementing: rawColumn.column_is_identity,
85
+ isNullable: rawColumn.column_is_nullable && rawColumn.type_is_nullable,
86
+ name: rawColumn.column_name,
87
+ }));
88
+ }
89
+ return Object.values(tableDictionary);
90
+ }
91
+ async getMetadata(options) {
92
+ return {
93
+ tables: await this.getTables(options),
94
+ };
95
+ }
96
+ }
97
+ exports.MssqlIntrospector = MssqlIntrospector;
@@ -0,0 +1,11 @@
1
+ import { AddColumnNode } from '../../operation-node/add-column-node.js';
2
+ import { AlterTableColumnAlterationNode } from '../../operation-node/alter-table-node.js';
3
+ import { DropColumnNode } from '../../operation-node/drop-column-node.js';
4
+ import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
5
+ export declare class MssqlQueryCompiler extends DefaultQueryCompiler {
6
+ protected getCurrentParameterPlaceholder(): string;
7
+ protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void;
8
+ protected visitAddColumn(node: AddColumnNode): void;
9
+ protected visitDropColumn(node: DropColumnNode): void;
10
+ protected announcesNewColumnDataType(): boolean;
11
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MssqlQueryCompiler = void 0;
4
+ const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
5
+ class MssqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
6
+ getCurrentParameterPlaceholder() {
7
+ return `@${this.numParameters}`;
8
+ }
9
+ // mssql allows multi-column alterations in a single statement,
10
+ // but you can only use the command keyword/s once.
11
+ // it also doesn't support multiple kinds of commands in the same
12
+ // alter table statement, but we compile that anyway for the sake
13
+ // of WYSIWYG.
14
+ compileColumnAlterations(columnAlterations) {
15
+ const nodesByKind = {};
16
+ for (const columnAlteration of columnAlterations) {
17
+ if (!nodesByKind[columnAlteration.kind]) {
18
+ nodesByKind[columnAlteration.kind] = [];
19
+ }
20
+ nodesByKind[columnAlteration.kind].push(columnAlteration);
21
+ }
22
+ let first = true;
23
+ if (nodesByKind.AddColumnNode) {
24
+ this.append('add ');
25
+ this.compileList(nodesByKind.AddColumnNode);
26
+ first = false;
27
+ }
28
+ // multiple of these are not really supported by mssql,
29
+ // but for the sake of WYSIWYG.
30
+ if (nodesByKind.AlterColumnNode) {
31
+ if (!first)
32
+ this.append(', ');
33
+ this.compileList(nodesByKind.AlterColumnNode);
34
+ }
35
+ if (nodesByKind.DropColumnNode) {
36
+ if (!first)
37
+ this.append(', ');
38
+ this.append('drop column ');
39
+ this.compileList(nodesByKind.DropColumnNode);
40
+ }
41
+ // not really supported by mssql, but for the sake of WYSIWYG.
42
+ if (nodesByKind.ModifyColumnNode) {
43
+ if (!first)
44
+ this.append(', ');
45
+ this.compileList(nodesByKind.ModifyColumnNode);
46
+ }
47
+ // not really supported by mssql, but for the sake of WYSIWYG.
48
+ if (nodesByKind.RenameColumnNode) {
49
+ if (!first)
50
+ this.append(', ');
51
+ this.compileList(nodesByKind.RenameColumnNode);
52
+ }
53
+ }
54
+ visitAddColumn(node) {
55
+ this.visitNode(node.column);
56
+ }
57
+ visitDropColumn(node) {
58
+ this.visitNode(node.column);
59
+ }
60
+ announcesNewColumnDataType() {
61
+ return false;
62
+ }
63
+ }
64
+ exports.MssqlQueryCompiler = MssqlQueryCompiler;
@@ -1,3 +1,4 @@
1
+ import { CreateIndexNode } from '../../operation-node/create-index-node.js';
1
2
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
2
3
  export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
3
4
  protected getCurrentParameterPlaceholder(): string;
@@ -8,4 +9,5 @@ export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
8
9
  protected getLeftIdentifierWrapper(): string;
9
10
  protected getRightIdentifierWrapper(): string;
10
11
  protected sanitizeIdentifier(identifier: string): string;
12
+ protected visitCreateIndex(node: CreateIndexNode): void;
11
13
  }
@@ -28,5 +28,33 @@ class MysqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompile
28
28
  sanitizeIdentifier(identifier) {
29
29
  return identifier.replace(ID_WRAP_REGEX, '``');
30
30
  }
31
+ visitCreateIndex(node) {
32
+ this.append('create ');
33
+ if (node.unique) {
34
+ this.append('unique ');
35
+ }
36
+ this.append('index ');
37
+ if (node.ifNotExists) {
38
+ this.append('if not exists ');
39
+ }
40
+ this.visitNode(node.name);
41
+ if (node.using) {
42
+ this.append(' using ');
43
+ this.visitNode(node.using);
44
+ }
45
+ if (node.table) {
46
+ this.append(' on ');
47
+ this.visitNode(node.table);
48
+ }
49
+ if (node.columns) {
50
+ this.append(' (');
51
+ this.compileList(node.columns);
52
+ this.append(')');
53
+ }
54
+ if (node.where) {
55
+ this.append(' ');
56
+ this.visitNode(node.where);
57
+ }
58
+ }
31
59
  }
32
60
  exports.MysqlQueryCompiler = MysqlQueryCompiler;
@@ -28,7 +28,7 @@ class PostgresDriver {
28
28
  // The driver must take care of calling `onCreateConnection` when a new
29
29
  // connection is created. The `pg` module doesn't provide an async hook
30
30
  // for the connection creation. We need to call the method explicitly.
31
- if (this.#config?.onCreateConnection) {
31
+ if (this.#config.onCreateConnection) {
32
32
  await this.#config.onCreateConnection(connection);
33
33
  }
34
34
  }
@@ -1,7 +1,7 @@
1
1
  import { Kysely } from '../../kysely.js';
2
2
  import { DialectAdapterBase } from '../dialect-adapter-base.js';
3
3
  import { MigrationLockOptions } from '../dialect-adapter.js';
4
- export declare class SqliteAdapter implements DialectAdapterBase {
4
+ export declare class SqliteAdapter extends DialectAdapterBase {
5
5
  /**
6
6
  * Whether or not this dialect supports transactional DDL.
7
7
  *
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SqliteAdapter = void 0;
4
- class SqliteAdapter {
4
+ const dialect_adapter_base_js_1 = require("../dialect-adapter-base.js");
5
+ class SqliteAdapter extends dialect_adapter_base_js_1.DialectAdapterBase {
5
6
  get supportsTransactionalDdl() {
6
7
  return false;
7
8
  }
@@ -37,4 +37,5 @@ export interface SqliteStatement {
37
37
  changes: number | bigint;
38
38
  lastInsertRowid: number | bigint;
39
39
  };
40
+ iterate(parameters: ReadonlyArray<unknown>): IterableIterator<unknown>;
40
41
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SqliteDriver = void 0;
4
+ const select_query_node_js_1 = require("../../operation-node/select-query-node.js");
4
5
  const compiled_query_js_1 = require("../../query-compiler/compiled-query.js");
5
6
  const object_utils_js_1 = require("../../util/object-utils.js");
6
7
  class SqliteDriver {
@@ -70,8 +71,20 @@ class SqliteConnection {
70
71
  });
71
72
  }
72
73
  }
73
- async *streamQuery() {
74
- throw new Error("Sqlite driver doesn't support streaming");
74
+ async *streamQuery(compiledQuery, _chunkSize) {
75
+ const { sql, parameters, query } = compiledQuery;
76
+ const stmt = this.#db.prepare(sql);
77
+ if (select_query_node_js_1.SelectQueryNode.is(query)) {
78
+ const iter = stmt.iterate(parameters);
79
+ for (const row of iter) {
80
+ yield {
81
+ rows: [row],
82
+ };
83
+ }
84
+ }
85
+ else {
86
+ throw new Error('Sqlite driver only supports streaming of select queries');
87
+ }
75
88
  }
76
89
  }
77
90
  class ConnectionMutex {
@@ -40,5 +40,5 @@ export interface Driver {
40
40
  export interface TransactionSettings {
41
41
  readonly isolationLevel?: IsolationLevel;
42
42
  }
43
- export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable"];
43
+ export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable", "snapshot"];
44
44
  export type IsolationLevel = ArrayItemType<typeof TRANSACTION_ISOLATION_LEVELS>;
@@ -6,4 +6,5 @@ exports.TRANSACTION_ISOLATION_LEVELS = [
6
6
  'read committed',
7
7
  'repeatable read',
8
8
  'serializable',
9
+ 'snapshot',
9
10
  ];
@@ -86,16 +86,20 @@ class RuntimeDriver {
86
86
  #addLogging(connection) {
87
87
  const executeQuery = connection.executeQuery;
88
88
  connection.executeQuery = async (compiledQuery) => {
89
+ let caughtError;
89
90
  const startTime = (0, performance_now_js_1.performanceNow)();
90
91
  try {
91
92
  return await executeQuery.call(connection, compiledQuery);
92
93
  }
93
94
  catch (error) {
95
+ caughtError = error;
94
96
  await this.#logError(error, compiledQuery, startTime);
95
97
  throw error;
96
98
  }
97
99
  finally {
98
- await this.#logQuery(compiledQuery, startTime);
100
+ if (!caughtError) {
101
+ await this.#logQuery(compiledQuery, startTime);
102
+ }
99
103
  }
100
104
  };
101
105
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SingleConnectionProvider = void 0;
4
+ const ignoreError = () => { };
4
5
  class SingleConnectionProvider {
5
6
  #connection;
6
7
  #runningPromise;
@@ -9,17 +10,15 @@ class SingleConnectionProvider {
9
10
  }
10
11
  async provideConnection(consumer) {
11
12
  while (this.#runningPromise) {
12
- await this.#runningPromise;
13
+ await this.#runningPromise.catch(ignoreError);
13
14
  }
14
- const promise = this.#run(consumer);
15
- this.#runningPromise = promise
16
- .then(() => {
17
- this.#runningPromise = undefined;
18
- })
19
- .catch(() => {
15
+ // `#runningPromise` must be set to undefined before it's
16
+ // resolved or rejected. Otherwise the while loop above
17
+ // will misbehave.
18
+ this.#runningPromise = this.#run(consumer).finally(() => {
20
19
  this.#runningPromise = undefined;
21
20
  });
22
- return promise;
21
+ return this.#runningPromise;
23
22
  }
24
23
  // Run the runner in an async function to make sure it doesn't
25
24
  // throw synchronous errors.