kysely 0.27.3 → 0.27.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/.renovaterc.json +3 -0
  2. package/CONTRIBUTING.md +2 -2
  3. package/README.md +7 -7
  4. package/deno.check.d.ts +86 -0
  5. package/deno.check.json +21 -0
  6. package/dist/cjs/dialect/dialect-adapter-base.d.ts +13 -3
  7. package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
  8. package/dist/cjs/dialect/dialect-adapter.d.ts +16 -2
  9. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +12 -7
  10. package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
  11. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +83 -55
  12. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
  13. package/dist/cjs/dialect/mssql/mssql-driver.js +114 -48
  14. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
  15. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  16. package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
  17. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
  18. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  19. package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
  20. package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  22. package/dist/cjs/driver/database-connection.d.ts +3 -1
  23. package/dist/cjs/driver/dummy-driver.d.ts +13 -12
  24. package/dist/cjs/driver/dummy-driver.js +13 -12
  25. package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
  26. package/dist/cjs/dynamic/dynamic.d.ts +7 -7
  27. package/dist/cjs/dynamic/dynamic.js +7 -7
  28. package/dist/cjs/expression/expression-builder.d.ts +153 -62
  29. package/dist/cjs/expression/expression-builder.js +2 -3
  30. package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
  31. package/dist/cjs/expression/expression.d.ts +40 -5
  32. package/dist/cjs/expression/expression.js +2 -3
  33. package/dist/cjs/helpers/mssql.d.ts +74 -14
  34. package/dist/cjs/helpers/mssql.js +77 -18
  35. package/dist/cjs/helpers/mysql.d.ts +17 -13
  36. package/dist/cjs/helpers/mysql.js +20 -17
  37. package/dist/cjs/helpers/postgres.d.ts +11 -8
  38. package/dist/cjs/helpers/postgres.js +14 -12
  39. package/dist/cjs/helpers/sqlite.d.ts +41 -16
  40. package/dist/cjs/helpers/sqlite.js +44 -20
  41. package/dist/cjs/index.d.ts +28 -21
  42. package/dist/cjs/index.js +28 -21
  43. package/dist/cjs/kysely.d.ts +100 -42
  44. package/dist/cjs/kysely.js +63 -39
  45. package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
  46. package/dist/cjs/migration/file-migration-provider.js +2 -2
  47. package/dist/cjs/migration/migrator.d.ts +82 -14
  48. package/dist/cjs/migration/migrator.js +82 -14
  49. package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
  50. package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
  51. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/case-node.d.ts +1 -1
  53. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  54. package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
  55. package/dist/cjs/operation-node/data-type-node.js +17 -3
  56. package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
  57. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
  58. package/dist/cjs/operation-node/having-node.d.ts +1 -1
  59. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  60. package/dist/cjs/operation-node/merge-query-node.d.ts +3 -0
  61. package/dist/cjs/operation-node/on-node.d.ts +1 -1
  62. package/dist/cjs/operation-node/operation-node-source.js +1 -2
  63. package/dist/cjs/operation-node/operation-node-transformer.d.ts +11 -3
  64. package/dist/cjs/operation-node/operation-node-transformer.js +26 -3
  65. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  66. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  67. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  68. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  69. package/dist/cjs/operation-node/operator-node.js +8 -6
  70. package/dist/cjs/operation-node/output-node.d.ts +13 -0
  71. package/dist/cjs/operation-node/output-node.js +26 -0
  72. package/dist/cjs/operation-node/query-node.d.ts +15 -6
  73. package/dist/cjs/operation-node/query-node.js +17 -0
  74. package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
  75. package/dist/cjs/operation-node/select-query-node.js +6 -8
  76. package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
  77. package/dist/cjs/operation-node/where-node.d.ts +1 -1
  78. package/dist/cjs/parser/binary-operation-parser.js +5 -6
  79. package/dist/cjs/parser/data-type-parser.js +1 -2
  80. package/dist/cjs/parser/default-value-parser.js +1 -2
  81. package/dist/cjs/parser/expression-parser.js +3 -4
  82. package/dist/cjs/parser/fetch-parser.js +1 -2
  83. package/dist/cjs/parser/group-by-parser.js +1 -2
  84. package/dist/cjs/parser/identifier-parser.js +1 -2
  85. package/dist/cjs/parser/insert-values-parser.js +1 -2
  86. package/dist/cjs/parser/join-parser.js +1 -2
  87. package/dist/cjs/parser/merge-parser.js +2 -3
  88. package/dist/cjs/parser/on-commit-action-parse.js +1 -2
  89. package/dist/cjs/parser/on-modify-action-parser.js +1 -2
  90. package/dist/cjs/parser/order-by-parser.js +3 -4
  91. package/dist/cjs/parser/parse-utils.js +4 -5
  92. package/dist/cjs/parser/partition-by-parser.js +1 -2
  93. package/dist/cjs/parser/reference-parser.js +8 -9
  94. package/dist/cjs/parser/returning-parser.d.ts +4 -3
  95. package/dist/cjs/parser/select-parser.js +2 -3
  96. package/dist/cjs/parser/set-operation-parser.js +1 -2
  97. package/dist/cjs/parser/table-parser.js +4 -5
  98. package/dist/cjs/parser/top-parser.js +1 -2
  99. package/dist/cjs/parser/unary-operation-parser.js +3 -4
  100. package/dist/cjs/parser/update-set-parser.js +2 -3
  101. package/dist/cjs/parser/value-parser.js +4 -5
  102. package/dist/cjs/parser/with-parser.js +1 -2
  103. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +54 -27
  104. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +26 -21
  105. package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
  106. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  107. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  108. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  109. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  110. package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
  111. package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
  112. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
  113. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
  114. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  115. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
  116. package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
  117. package/dist/cjs/query-builder/delete-query-builder.d.ts +219 -43
  118. package/dist/cjs/query-builder/delete-query-builder.js +95 -31
  119. package/dist/cjs/query-builder/function-module.d.ts +40 -93
  120. package/dist/cjs/query-builder/function-module.js +1 -2
  121. package/dist/cjs/query-builder/insert-query-builder.d.ts +326 -67
  122. package/dist/cjs/query-builder/insert-query-builder.js +212 -61
  123. package/dist/cjs/query-builder/insert-result.d.ts +10 -5
  124. package/dist/cjs/query-builder/insert-result.js +10 -5
  125. package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
  126. package/dist/cjs/query-builder/json-path-builder.js +8 -5
  127. package/dist/cjs/query-builder/merge-query-builder.d.ts +312 -10
  128. package/dist/cjs/query-builder/merge-query-builder.js +98 -7
  129. package/dist/cjs/query-builder/no-result-error.js +2 -2
  130. package/dist/cjs/query-builder/on-conflict-builder.d.ts +53 -20
  131. package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
  132. package/dist/cjs/query-builder/output-interface.d.ts +138 -0
  133. package/dist/cjs/query-builder/output-interface.js +2 -0
  134. package/dist/cjs/query-builder/returning-interface.d.ts +7 -5
  135. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
  136. package/dist/cjs/query-builder/select-query-builder.d.ts +370 -73
  137. package/dist/cjs/query-builder/select-query-builder.js +14 -9
  138. package/dist/cjs/query-builder/update-query-builder.d.ts +225 -31
  139. package/dist/cjs/query-builder/update-query-builder.js +96 -17
  140. package/dist/cjs/query-builder/update-result.d.ts +9 -0
  141. package/dist/cjs/query-builder/update-result.js +9 -0
  142. package/dist/cjs/query-builder/where-interface.d.ts +6 -2
  143. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  144. package/dist/cjs/query-compiler/default-query-compiler.js +45 -1
  145. package/dist/cjs/query-creator.d.ts +122 -21
  146. package/dist/cjs/query-creator.js +56 -3
  147. package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
  148. package/dist/cjs/raw-builder/raw-builder.js +1 -2
  149. package/dist/cjs/raw-builder/sql.d.ts +31 -12
  150. package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
  151. package/dist/cjs/schema/alter-column-builder.js +20 -3
  152. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +44 -10
  153. package/dist/cjs/schema/alter-table-add-index-builder.js +27 -10
  154. package/dist/cjs/schema/alter-table-builder.js +1 -2
  155. package/dist/cjs/schema/column-definition-builder.d.ts +286 -24
  156. package/dist/cjs/schema/column-definition-builder.js +288 -24
  157. package/dist/cjs/schema/create-table-builder.d.ts +86 -33
  158. package/dist/cjs/schema/create-table-builder.js +86 -33
  159. package/dist/cjs/util/assert.js +2 -3
  160. package/dist/cjs/util/column-type.d.ts +5 -9
  161. package/dist/cjs/util/compilable.js +1 -2
  162. package/dist/cjs/util/json-object-args.js +1 -2
  163. package/dist/cjs/util/log-once.js +1 -2
  164. package/dist/cjs/util/object-utils.js +38 -26
  165. package/dist/cjs/util/performance-now.js +1 -2
  166. package/dist/cjs/util/prevent-await.js +1 -2
  167. package/dist/cjs/util/query-id.js +1 -2
  168. package/dist/cjs/util/random-string.js +1 -2
  169. package/dist/cjs/util/require-all-props.d.ts +4 -2
  170. package/dist/cjs/util/require-all-props.js +5 -4
  171. package/dist/cjs/util/stack-trace-utils.js +1 -2
  172. package/dist/cjs/util/streamable.d.ts +1 -1
  173. package/dist/cjs/util/type-utils.d.ts +4 -2
  174. package/dist/esm/dialect/dialect-adapter-base.d.ts +13 -3
  175. package/dist/esm/dialect/dialect-adapter-base.js +4 -1
  176. package/dist/esm/dialect/dialect-adapter.d.ts +16 -2
  177. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +12 -7
  178. package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
  179. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +83 -55
  180. package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
  181. package/dist/esm/dialect/mssql/mssql-driver.js +114 -48
  182. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
  183. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  184. package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
  185. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
  186. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  187. package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
  188. package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
  189. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  190. package/dist/esm/driver/database-connection.d.ts +3 -1
  191. package/dist/esm/driver/dummy-driver.d.ts +13 -12
  192. package/dist/esm/driver/dummy-driver.js +13 -12
  193. package/dist/esm/dynamic/dynamic.d.ts +7 -7
  194. package/dist/esm/dynamic/dynamic.js +7 -7
  195. package/dist/esm/expression/expression-builder.d.ts +153 -62
  196. package/dist/esm/expression/expression-wrapper.d.ts +92 -23
  197. package/dist/esm/expression/expression.d.ts +40 -5
  198. package/dist/esm/helpers/mssql.d.ts +74 -14
  199. package/dist/esm/helpers/mssql.js +74 -14
  200. package/dist/esm/helpers/mysql.d.ts +17 -13
  201. package/dist/esm/helpers/mysql.js +17 -13
  202. package/dist/esm/helpers/postgres.d.ts +11 -8
  203. package/dist/esm/helpers/postgres.js +11 -8
  204. package/dist/esm/helpers/sqlite.d.ts +41 -16
  205. package/dist/esm/helpers/sqlite.js +41 -16
  206. package/dist/esm/index.d.ts +28 -21
  207. package/dist/esm/index.js +28 -21
  208. package/dist/esm/kysely.d.ts +100 -42
  209. package/dist/esm/kysely.js +61 -37
  210. package/dist/esm/migration/file-migration-provider.d.ts +2 -2
  211. package/dist/esm/migration/file-migration-provider.js +2 -2
  212. package/dist/esm/migration/migrator.d.ts +82 -14
  213. package/dist/esm/migration/migrator.js +82 -14
  214. package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
  215. package/dist/esm/operation-node/aggregate-function-node.js +9 -0
  216. package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
  217. package/dist/esm/operation-node/case-node.d.ts +1 -1
  218. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  219. package/dist/esm/operation-node/data-type-node.d.ts +2 -2
  220. package/dist/esm/operation-node/data-type-node.js +15 -1
  221. package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
  222. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
  223. package/dist/esm/operation-node/having-node.d.ts +1 -1
  224. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  225. package/dist/esm/operation-node/merge-query-node.d.ts +3 -0
  226. package/dist/esm/operation-node/on-node.d.ts +1 -1
  227. package/dist/esm/operation-node/operation-node-transformer.d.ts +11 -3
  228. package/dist/esm/operation-node/operation-node-transformer.js +26 -3
  229. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  230. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  231. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  232. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  233. package/dist/esm/operation-node/operator-node.js +2 -0
  234. package/dist/esm/operation-node/output-node.d.ts +13 -0
  235. package/dist/esm/operation-node/output-node.js +24 -0
  236. package/dist/esm/operation-node/query-node.d.ts +15 -6
  237. package/dist/esm/operation-node/query-node.js +17 -0
  238. package/dist/esm/operation-node/select-query-node.d.ts +1 -1
  239. package/dist/esm/operation-node/select-query-node.js +6 -8
  240. package/dist/esm/operation-node/update-query-node.d.ts +3 -0
  241. package/dist/esm/operation-node/where-node.d.ts +1 -1
  242. package/dist/esm/parser/returning-parser.d.ts +4 -3
  243. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +54 -27
  244. package/dist/esm/plugin/camel-case/camel-case-plugin.js +26 -21
  245. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  246. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  247. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  248. package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  249. package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
  250. package/dist/esm/plugin/noop-plugin.d.ts +28 -6
  251. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
  252. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
  253. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  254. package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
  255. package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
  256. package/dist/esm/query-builder/delete-query-builder.d.ts +219 -43
  257. package/dist/esm/query-builder/delete-query-builder.js +95 -31
  258. package/dist/esm/query-builder/function-module.d.ts +40 -93
  259. package/dist/esm/query-builder/insert-query-builder.d.ts +326 -67
  260. package/dist/esm/query-builder/insert-query-builder.js +212 -61
  261. package/dist/esm/query-builder/insert-result.d.ts +10 -5
  262. package/dist/esm/query-builder/insert-result.js +10 -5
  263. package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
  264. package/dist/esm/query-builder/json-path-builder.js +8 -5
  265. package/dist/esm/query-builder/merge-query-builder.d.ts +312 -10
  266. package/dist/esm/query-builder/merge-query-builder.js +98 -7
  267. package/dist/esm/query-builder/on-conflict-builder.d.ts +53 -20
  268. package/dist/esm/query-builder/on-conflict-builder.js +41 -16
  269. package/dist/esm/query-builder/output-interface.d.ts +138 -0
  270. package/dist/esm/query-builder/output-interface.js +2 -0
  271. package/dist/esm/query-builder/returning-interface.d.ts +7 -5
  272. package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
  273. package/dist/esm/query-builder/select-query-builder.d.ts +370 -73
  274. package/dist/esm/query-builder/select-query-builder.js +13 -7
  275. package/dist/esm/query-builder/update-query-builder.d.ts +225 -31
  276. package/dist/esm/query-builder/update-query-builder.js +96 -17
  277. package/dist/esm/query-builder/update-result.d.ts +9 -0
  278. package/dist/esm/query-builder/update-result.js +9 -0
  279. package/dist/esm/query-builder/where-interface.d.ts +6 -2
  280. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  281. package/dist/esm/query-compiler/default-query-compiler.js +45 -1
  282. package/dist/esm/query-creator.d.ts +122 -21
  283. package/dist/esm/query-creator.js +56 -3
  284. package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
  285. package/dist/esm/raw-builder/sql.d.ts +31 -12
  286. package/dist/esm/schema/alter-column-builder.d.ts +17 -3
  287. package/dist/esm/schema/alter-column-builder.js +20 -3
  288. package/dist/esm/schema/alter-table-add-index-builder.d.ts +44 -10
  289. package/dist/esm/schema/alter-table-add-index-builder.js +27 -10
  290. package/dist/esm/schema/alter-table-builder.js +1 -2
  291. package/dist/esm/schema/column-definition-builder.d.ts +286 -24
  292. package/dist/esm/schema/column-definition-builder.js +288 -24
  293. package/dist/esm/schema/create-table-builder.d.ts +86 -33
  294. package/dist/esm/schema/create-table-builder.js +86 -33
  295. package/dist/esm/util/column-type.d.ts +5 -9
  296. package/dist/esm/util/object-utils.js +18 -5
  297. package/dist/esm/util/require-all-props.d.ts +4 -2
  298. package/dist/esm/util/require-all-props.js +4 -2
  299. package/dist/esm/util/streamable.d.ts +1 -1
  300. package/dist/esm/util/type-utils.d.ts +4 -2
  301. package/package.json +30 -24
@@ -13,24 +13,22 @@ class MssqlDriver {
13
13
  #pool;
14
14
  constructor(config) {
15
15
  this.#config = (0, object_utils_js_1.freeze)({ ...config });
16
- this.#pool = new this.#config.tarn.Pool({
17
- ...this.#config.tarn.options,
16
+ const { tarn, tedious } = this.#config;
17
+ const { validateConnections, ...poolOptions } = tarn.options;
18
+ this.#pool = new tarn.Pool({
19
+ ...poolOptions,
18
20
  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);
21
+ const connection = await tedious.connectionFactory();
22
+ return await new MssqlConnection(connection, tedious).connect();
27
23
  },
28
24
  destroy: async (connection) => {
29
25
  await connection[PRIVATE_DESTROY_METHOD]();
30
26
  },
31
27
  // @ts-ignore `tarn` accepts a function that returns a promise here, but
32
28
  // the types are not aligned and it type errors.
33
- validate: (connection) => connection.validate(),
29
+ validate: validateConnections === false
30
+ ? undefined
31
+ : (connection) => connection.validate(),
34
32
  });
35
33
  }
36
34
  async init() {
@@ -63,6 +61,10 @@ class MssqlConnection {
63
61
  constructor(connection, tedious) {
64
62
  this.#connection = connection;
65
63
  this.#tedious = tedious;
64
+ this.#connection.on('error', console.error);
65
+ this.#connection.once('end', () => {
66
+ this.#connection.off('error', console.error);
67
+ });
66
68
  }
67
69
  async beginTransaction(settings) {
68
70
  const { isolationLevel } = settings;
@@ -83,10 +85,28 @@ class MssqlConnection {
83
85
  resolve(undefined);
84
86
  }));
85
87
  }
88
+ async connect() {
89
+ await new Promise((resolve, reject) => {
90
+ this.#connection.connect((error) => {
91
+ if (error) {
92
+ console.error(error);
93
+ reject(error);
94
+ }
95
+ else {
96
+ resolve(undefined);
97
+ }
98
+ });
99
+ });
100
+ return this;
101
+ }
86
102
  async executeQuery(compiledQuery) {
87
103
  try {
88
104
  const deferred = new deferred_js_1.Deferred();
89
- const request = new MssqlRequest(this.#tedious, compiledQuery, deferred);
105
+ const request = new MssqlRequest({
106
+ compiledQuery,
107
+ tedious: this.#tedious,
108
+ onDone: deferred,
109
+ });
90
110
  this.#connection.execSql(request.request);
91
111
  const { rowCount, rows } = await deferred.promise;
92
112
  return {
@@ -110,11 +130,15 @@ class MssqlConnection {
110
130
  if (!Number.isInteger(chunkSize) || chunkSize <= 0) {
111
131
  throw new Error('chunkSize must be a positive integer');
112
132
  }
113
- const request = new MssqlRequest(this.#tedious, compiledQuery);
133
+ const request = new MssqlRequest({
134
+ compiledQuery,
135
+ streamChunkSize: chunkSize,
136
+ tedious: this.#tedious,
137
+ });
114
138
  this.#connection.execSql(request.request);
115
139
  try {
116
140
  while (true) {
117
- const rows = await request.readChunk(chunkSize);
141
+ const rows = await request.readChunk();
118
142
  if (rows.length === 0) {
119
143
  break;
120
144
  }
@@ -125,13 +149,17 @@ class MssqlConnection {
125
149
  }
126
150
  }
127
151
  finally {
128
- this.#connection.cancel();
152
+ await this.#cancelRequest(request);
129
153
  }
130
154
  }
131
155
  async validate() {
132
156
  try {
133
157
  const deferred = new deferred_js_1.Deferred();
134
- const request = new MssqlRequest(this.#tedious, compiled_query_js_1.CompiledQuery.raw('select 1'), deferred);
158
+ const request = new MssqlRequest({
159
+ compiledQuery: compiled_query_js_1.CompiledQuery.raw('select 1'),
160
+ onDone: deferred,
161
+ tedious: this.#tedious,
162
+ });
135
163
  this.#connection.execSql(request.request);
136
164
  await deferred.promise;
137
165
  return true;
@@ -155,16 +183,29 @@ class MssqlConnection {
155
183
  }
156
184
  return tediousIsolationLevel;
157
185
  }
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
- });
186
+ #cancelRequest(request) {
187
+ return new Promise((resolve) => {
188
+ request.request.once('requestCompleted', resolve);
189
+ const wasCanceled = this.#connection.cancel();
190
+ if (!wasCanceled) {
191
+ request.request.off('requestCompleted', resolve);
192
+ resolve(undefined);
193
+ }
166
194
  });
167
195
  }
196
+ async [PRIVATE_RELEASE_METHOD]() {
197
+ // TODO: flip this to `if (!this.#tedious.resetConnectionOnRelease) {}` in a future PR.
198
+ if (this.#tedious.resetConnectionOnRelease !== false) {
199
+ await new Promise((resolve, reject) => {
200
+ this.#connection.reset((error) => {
201
+ if (error)
202
+ reject(error);
203
+ else
204
+ resolve(undefined);
205
+ });
206
+ });
207
+ }
208
+ }
168
209
  [PRIVATE_DESTROY_METHOD]() {
169
210
  return new Promise((resolve) => {
170
211
  this.#connection.once('end', () => {
@@ -177,42 +218,62 @@ class MssqlConnection {
177
218
  class MssqlRequest {
178
219
  #request;
179
220
  #rows;
221
+ #streamChunkSize;
222
+ #subscribers;
180
223
  #tedious;
181
- #completed;
182
224
  #error;
183
225
  #rowCount;
184
- constructor(tedious, compiledQuery, onDone) {
185
- this.#completed = false;
226
+ constructor(props) {
227
+ const { compiledQuery, onDone, streamChunkSize, tedious } = props;
186
228
  this.#rows = [];
229
+ this.#streamChunkSize = streamChunkSize;
230
+ this.#subscribers = {};
187
231
  this.#tedious = tedious;
188
- const { parameters, sql } = compiledQuery;
189
- this.#request = new this.#tedious.Request(sql, (err, rowCount) => {
232
+ if (onDone) {
233
+ const subscriptionKey = 'onDone';
234
+ this.#subscribers[subscriptionKey] = (event, error) => {
235
+ if (event === 'chunkReady') {
236
+ return;
237
+ }
238
+ delete this.#subscribers[subscriptionKey];
239
+ if (event === 'error') {
240
+ onDone.reject(error);
241
+ }
242
+ else {
243
+ onDone.resolve({
244
+ rowCount: this.#rowCount,
245
+ rows: this.#rows,
246
+ });
247
+ }
248
+ };
249
+ }
250
+ this.#request = new this.#tedious.Request(compiledQuery.sql, (err, rowCount) => {
190
251
  if (err) {
191
- this.#error = err instanceof AggregateError ? err.errors : err;
192
- onDone?.reject(this.#error);
252
+ Object.values(this.#subscribers).forEach((subscriber) => subscriber('error', err instanceof AggregateError ? err.errors : err));
193
253
  }
194
254
  else {
195
255
  this.#rowCount = rowCount;
196
256
  }
197
257
  });
198
- this.#addParametersToRequest(parameters);
199
- this.#attachListeners(onDone);
258
+ this.#addParametersToRequest(compiledQuery.parameters);
259
+ this.#attachListeners();
200
260
  }
201
261
  get request() {
202
262
  return this.#request;
203
263
  }
204
- readChunk(chunkSize) {
264
+ readChunk() {
265
+ const subscriptionKey = this.readChunk.name;
205
266
  return new Promise((resolve, reject) => {
206
- const interval = setInterval(() => {
207
- if (this.#error) {
208
- clearInterval(interval);
209
- reject(this.#error);
267
+ this.#subscribers[subscriptionKey] = (event, error) => {
268
+ delete this.#subscribers[subscriptionKey];
269
+ if (event === 'error') {
270
+ reject(error);
210
271
  }
211
- else if (this.#completed || this.#rows.length >= chunkSize) {
212
- clearInterval(interval);
213
- resolve(this.#rows.splice(0, chunkSize));
272
+ else {
273
+ resolve(this.#rows.splice(0, this.#streamChunkSize));
214
274
  }
215
- }, 0);
275
+ };
276
+ this.#request.resume();
216
277
  });
217
278
  }
218
279
  #addParametersToRequest(parameters) {
@@ -221,22 +282,27 @@ class MssqlRequest {
221
282
  this.#request.addParameter(String(i + 1), this.#getTediousDataType(parameter), parameter);
222
283
  }
223
284
  }
224
- #attachListeners(onDone) {
285
+ #attachListeners() {
286
+ const pauseAndEmitChunkReady = this.#streamChunkSize
287
+ ? () => {
288
+ if (this.#streamChunkSize <= this.#rows.length) {
289
+ this.#request.pause();
290
+ Object.values(this.#subscribers).forEach((subscriber) => subscriber('chunkReady'));
291
+ }
292
+ }
293
+ : () => { };
225
294
  const rowListener = (columns) => {
226
295
  const row = {};
227
296
  for (const column of columns) {
228
297
  row[column.metadata.colName] = column.value;
229
298
  }
230
299
  this.#rows.push(row);
300
+ pauseAndEmitChunkReady();
231
301
  };
232
302
  this.#request.on('row', rowListener);
233
303
  this.#request.once('requestCompleted', () => {
234
- this.#completed = true;
304
+ Object.values(this.#subscribers).forEach((subscriber) => subscriber('completed'));
235
305
  this.#request.off('row', rowListener);
236
- onDone?.resolve({
237
- rowCount: this.#rowCount,
238
- rows: this.#rows,
239
- });
240
306
  });
241
307
  }
242
308
  #getTediousDataType(value) {
@@ -33,8 +33,13 @@ export declare class MysqlAdapter extends DialectAdapterBase {
33
33
  * have explicit locks but supports `FOR UPDATE` row locks and transactional DDL:
34
34
  *
35
35
  * ```ts
36
- * {
37
- * async acquireMigrationLock(db, options): Promise<void> {
36
+ * import { DialectAdapterBase, type MigrationLockOptions, Kysely } from 'kysely'
37
+ *
38
+ * export class MyAdapter extends DialectAdapterBase {
39
+ * override async acquireMigrationLock(
40
+ * db: Kysely<any>,
41
+ * options: MigrationLockOptions
42
+ * ): Promise<void> {
38
43
  * const queryDb = options.lockTableSchema
39
44
  * ? db.withSchema(options.lockTableSchema)
40
45
  * : db
@@ -50,6 +55,10 @@ export declare class MysqlAdapter extends DialectAdapterBase {
50
55
  * .forUpdate()
51
56
  * .execute()
52
57
  * }
58
+ *
59
+ * override async releaseMigrationLock() {
60
+ * // noop
61
+ * }
53
62
  * }
54
63
  * ```
55
64
  *
@@ -17,6 +17,10 @@ export interface MysqlDialectConfig {
17
17
  * Called once for each created connection.
18
18
  */
19
19
  onCreateConnection?: (connection: DatabaseConnection) => Promise<void>;
20
+ /**
21
+ * Called every time a connection is acquired from the connection pool.
22
+ */
23
+ onReserveConnection?: (connection: DatabaseConnection) => Promise<void>;
20
24
  }
21
25
  /**
22
26
  * This interface is the subset of mysql2 driver's `Pool` class that
@@ -30,6 +30,9 @@ class MysqlDriver {
30
30
  await this.#config.onCreateConnection(connection);
31
31
  }
32
32
  }
33
+ if (this.#config?.onReserveConnection) {
34
+ await this.#config.onReserveConnection(connection);
35
+ }
33
36
  return connection;
34
37
  }
35
38
  async #acquireConnection() {
@@ -33,8 +33,13 @@ export declare class PostgresAdapter extends DialectAdapterBase {
33
33
  * have explicit locks but supports `FOR UPDATE` row locks and transactional DDL:
34
34
  *
35
35
  * ```ts
36
- * {
37
- * async acquireMigrationLock(db, options): Promise<void> {
36
+ * import { DialectAdapterBase, type MigrationLockOptions, Kysely } from 'kysely'
37
+ *
38
+ * export class MyAdapter extends DialectAdapterBase {
39
+ * override async acquireMigrationLock(
40
+ * db: Kysely<any>,
41
+ * options: MigrationLockOptions
42
+ * ): Promise<void> {
38
43
  * const queryDb = options.lockTableSchema
39
44
  * ? db.withSchema(options.lockTableSchema)
40
45
  * : db
@@ -50,6 +55,10 @@ export declare class PostgresAdapter extends DialectAdapterBase {
50
55
  * .forUpdate()
51
56
  * .execute()
52
57
  * }
58
+ *
59
+ * override async releaseMigrationLock() {
60
+ * // noop
61
+ * }
53
62
  * }
54
63
  * ```
55
64
  *
@@ -13,13 +13,16 @@ export interface PostgresDialectConfig {
13
13
  pool: PostgresPool | (() => Promise<PostgresPool>);
14
14
  /**
15
15
  * https://github.com/brianc/node-postgres/tree/master/packages/pg-cursor
16
+ *
16
17
  * ```ts
18
+ * import { PostgresDialect } from 'kysely'
19
+ * import { Pool } from 'pg'
17
20
  * import Cursor from 'pg-cursor'
18
- * // or
19
- * import * as Cursor from 'pg-cursor'
21
+ * // or import * as Cursor from 'pg-cursor'
20
22
  *
21
23
  * new PostgresDialect({
22
- * cursor: Cursor
24
+ * cursor: Cursor,
25
+ * pool: new Pool('postgres://localhost:5432/mydb')
23
26
  * })
24
27
  * ```
25
28
  */
@@ -28,6 +31,10 @@ export interface PostgresDialectConfig {
28
31
  * Called once for each created connection.
29
32
  */
30
33
  onCreateConnection?: (connection: DatabaseConnection) => Promise<void>;
34
+ /**
35
+ * Called every time a connection is acquired from the pool.
36
+ */
37
+ onReserveConnection?: (connection: DatabaseConnection) => Promise<void>;
31
38
  }
32
39
  /**
33
40
  * This interface is the subset of pg driver's `Pool` class that
@@ -32,6 +32,9 @@ class PostgresDriver {
32
32
  await this.#config.onCreateConnection(connection);
33
33
  }
34
34
  }
35
+ if (this.#config.onReserveConnection) {
36
+ await this.#config.onReserveConnection(connection);
37
+ }
35
38
  return connection;
36
39
  }
37
40
  async beginTransaction(connection, settings) {
@@ -51,7 +51,11 @@ class PostgresIntrospector {
51
51
  .as('auto_incrementing'),
52
52
  ])
53
53
  // r == normal table
54
- .where((eb) => eb.or([eb('c.relkind', '=', 'r'), eb('c.relkind', '=', 'v')]))
54
+ .where((eb) => eb.or([
55
+ eb('c.relkind', '=', 'r'),
56
+ eb('c.relkind', '=', 'v'),
57
+ eb('c.relkind', '=', 'p'),
58
+ ]))
55
59
  .where('ns.nspname', '!~', '^pg_')
56
60
  .where('ns.nspname', '!=', 'information_schema')
57
61
  // No system columns
@@ -33,8 +33,13 @@ export declare class SqliteAdapter extends DialectAdapterBase {
33
33
  * have explicit locks but supports `FOR UPDATE` row locks and transactional DDL:
34
34
  *
35
35
  * ```ts
36
- * {
37
- * async acquireMigrationLock(db, options): Promise<void> {
36
+ * import { DialectAdapterBase, type MigrationLockOptions, Kysely } from 'kysely'
37
+ *
38
+ * export class MyAdapter extends DialectAdapterBase {
39
+ * override async acquireMigrationLock(
40
+ * db: Kysely<any>,
41
+ * options: MigrationLockOptions
42
+ * ): Promise<void> {
38
43
  * const queryDb = options.lockTableSchema
39
44
  * ? db.withSchema(options.lockTableSchema)
40
45
  * : db
@@ -50,6 +55,10 @@ export declare class SqliteAdapter extends DialectAdapterBase {
50
55
  * .forUpdate()
51
56
  * .execute()
52
57
  * }
58
+ *
59
+ * override async releaseMigrationLock() {
60
+ * // noop
61
+ * }
53
62
  * }
54
63
  * ```
55
64
  *
@@ -21,7 +21,9 @@ export interface QueryResult<O> {
21
21
  /**
22
22
  * This is defined for update queries and contains the number of rows
23
23
  * the query changed.
24
- * This is optional and only provided by some drivers like node-mysql2.
24
+ *
25
+ * This is **optional** and only provided in dialects such as MySQL.
26
+ * You would probably use {@link numAffectedRows} in most cases.
25
27
  */
26
28
  readonly numChangedRows?: bigint;
27
29
  /**
@@ -10,20 +10,21 @@ import { Driver } from './driver.js';
10
10
  * This example creates a Kysely instance for building postgres queries:
11
11
  *
12
12
  * ```ts
13
+ * import {
14
+ * DummyDriver,
15
+ * Kysely,
16
+ * PostgresAdapter,
17
+ * PostgresIntrospector,
18
+ * PostgresQueryCompiler
19
+ * } from 'kysely'
20
+ * import type { Database } from 'type-editor' // imaginary module
21
+ *
13
22
  * const db = new Kysely<Database>({
14
23
  * dialect: {
15
- * createAdapter() {
16
- * return new PostgresAdapter()
17
- * },
18
- * createDriver() {
19
- * return new DummyDriver()
20
- * },
21
- * createIntrospector(db: Kysely<any>) {
22
- * return new PostgresIntrospector(db)
23
- * },
24
- * createQueryCompiler() {
25
- * return new PostgresQueryCompiler()
26
- * },
24
+ * createAdapter: () => new PostgresAdapter(),
25
+ * createDriver: () => new DummyDriver(),
26
+ * createIntrospector: (db: Kysely<any>) => new PostgresIntrospector(db),
27
+ * createQueryCompiler: () => new PostgresQueryCompiler(),
27
28
  * },
28
29
  * })
29
30
  * ```
@@ -11,20 +11,21 @@ exports.DummyDriver = void 0;
11
11
  * This example creates a Kysely instance for building postgres queries:
12
12
  *
13
13
  * ```ts
14
+ * import {
15
+ * DummyDriver,
16
+ * Kysely,
17
+ * PostgresAdapter,
18
+ * PostgresIntrospector,
19
+ * PostgresQueryCompiler
20
+ * } from 'kysely'
21
+ * import type { Database } from 'type-editor' // imaginary module
22
+ *
14
23
  * const db = new Kysely<Database>({
15
24
  * dialect: {
16
- * createAdapter() {
17
- * return new PostgresAdapter()
18
- * },
19
- * createDriver() {
20
- * return new DummyDriver()
21
- * },
22
- * createIntrospector(db: Kysely<any>) {
23
- * return new PostgresIntrospector(db)
24
- * },
25
- * createQueryCompiler() {
26
- * return new PostgresQueryCompiler()
27
- * },
25
+ * createAdapter: () => new PostgresAdapter(),
26
+ * createDriver: () => new DummyDriver(),
27
+ * createIntrospector: (db: Kysely<any>) => new PostgresIntrospector(db),
28
+ * createQueryCompiler: () => new PostgresQueryCompiler(),
28
29
  * },
29
30
  * })
30
31
  * ```
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isDynamicReferenceBuilder = exports.DynamicReferenceBuilder = void 0;
3
+ exports.DynamicReferenceBuilder = void 0;
4
+ exports.isDynamicReferenceBuilder = isDynamicReferenceBuilder;
4
5
  const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
5
6
  const reference_parser_js_1 = require("../parser/reference-parser.js");
6
7
  const object_utils_js_1 = require("../util/object-utils.js");
@@ -33,4 +34,3 @@ function isDynamicReferenceBuilder(obj) {
33
34
  (0, operation_node_source_js_1.isOperationNodeSource)(obj) &&
34
35
  (0, object_utils_js_1.isString)(obj.dynamicReference));
35
36
  }
36
- exports.isDynamicReferenceBuilder = isDynamicReferenceBuilder;
@@ -5,7 +5,7 @@ export declare class DynamicModule {
5
5
  *
6
6
  * Kysely is built in a way that by default you can't refer to tables or columns
7
7
  * that are not actually visible in the current query and context. This is all
8
- * done by typescript at compile time, which means that you need to know the
8
+ * done by TypeScript at compile time, which means that you need to know the
9
9
  * columns and tables at compile time. This is not always the case of course.
10
10
  *
11
11
  * This method is meant to be used in those cases where the column names
@@ -61,11 +61,11 @@ export declare class DynamicModule {
61
61
  * const { ref } = db.dynamic
62
62
  *
63
63
  * // Some column name provided by the user. Value not known at compile time.
64
- * const columnFromUserInput = req.query.select;
64
+ * const columnFromUserInput: PossibleColumns = 'birthdate';
65
65
  *
66
66
  * // A type that lists all possible values `columnFromUserInput` can have.
67
67
  * // You can use `keyof Person` if any column of an interface is allowed.
68
- * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
68
+ * type PossibleColumns = 'last_name' | 'first_name' | 'birthdate'
69
69
  *
70
70
  * const [person] = await db.selectFrom('person')
71
71
  * .select([
@@ -77,12 +77,12 @@ export declare class DynamicModule {
77
77
  * // The resulting type contains all `PossibleColumns` as optional fields
78
78
  * // because we cannot know which field was actually selected before
79
79
  * // running the code.
80
- * const lastName: string | undefined = person.last_name
81
- * const firstName: string | undefined = person.first_name
82
- * const birthDate: string | undefined = person.birth_date
80
+ * const lastName: string | null | undefined = person?.last_name
81
+ * const firstName: string | undefined = person?.first_name
82
+ * const birthDate: Date | null | undefined = person?.birthdate
83
83
  *
84
84
  * // The result type also contains the compile time selection `id`.
85
- * person.id
85
+ * person?.id
86
86
  * ```
87
87
  */
88
88
  ref<R extends string = never>(reference: string): DynamicReferenceBuilder<R>;
@@ -8,7 +8,7 @@ class DynamicModule {
8
8
  *
9
9
  * Kysely is built in a way that by default you can't refer to tables or columns
10
10
  * that are not actually visible in the current query and context. This is all
11
- * done by typescript at compile time, which means that you need to know the
11
+ * done by TypeScript at compile time, which means that you need to know the
12
12
  * columns and tables at compile time. This is not always the case of course.
13
13
  *
14
14
  * This method is meant to be used in those cases where the column names
@@ -64,11 +64,11 @@ class DynamicModule {
64
64
  * const { ref } = db.dynamic
65
65
  *
66
66
  * // Some column name provided by the user. Value not known at compile time.
67
- * const columnFromUserInput = req.query.select;
67
+ * const columnFromUserInput: PossibleColumns = 'birthdate';
68
68
  *
69
69
  * // A type that lists all possible values `columnFromUserInput` can have.
70
70
  * // You can use `keyof Person` if any column of an interface is allowed.
71
- * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
71
+ * type PossibleColumns = 'last_name' | 'first_name' | 'birthdate'
72
72
  *
73
73
  * const [person] = await db.selectFrom('person')
74
74
  * .select([
@@ -80,12 +80,12 @@ class DynamicModule {
80
80
  * // The resulting type contains all `PossibleColumns` as optional fields
81
81
  * // because we cannot know which field was actually selected before
82
82
  * // running the code.
83
- * const lastName: string | undefined = person.last_name
84
- * const firstName: string | undefined = person.first_name
85
- * const birthDate: string | undefined = person.birth_date
83
+ * const lastName: string | null | undefined = person?.last_name
84
+ * const firstName: string | undefined = person?.first_name
85
+ * const birthDate: Date | null | undefined = person?.birthdate
86
86
  *
87
87
  * // The result type also contains the compile time selection `id`.
88
- * person.id
88
+ * person?.id
89
89
  * ```
90
90
  */
91
91
  ref(reference) {