kysely 0.27.5 → 0.28.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 (371) hide show
  1. package/CODE_OF_CONDUCT.md +183 -0
  2. package/FUNDING.md +25 -0
  3. package/README.md +182 -3
  4. package/deno.check.d.ts +7 -0
  5. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  6. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +6 -3
  7. package/dist/cjs/dialect/mssql/mssql-driver.js +33 -19
  8. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  9. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +11 -0
  10. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +4 -0
  11. package/dist/cjs/dialect/mysql/mysql-driver.js +27 -12
  12. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +4 -0
  13. package/dist/cjs/dialect/postgres/postgres-driver.js +28 -18
  14. package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -17
  15. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +4 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-driver.js +19 -13
  17. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +66 -44
  18. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  19. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  20. package/dist/cjs/driver/database-connection.d.ts +0 -4
  21. package/dist/cjs/driver/driver.d.ts +17 -0
  22. package/dist/cjs/driver/driver.js +13 -1
  23. package/dist/cjs/driver/dummy-driver.d.ts +3 -0
  24. package/dist/cjs/driver/dummy-driver.js +9 -0
  25. package/dist/cjs/driver/runtime-driver.d.ts +4 -0
  26. package/dist/cjs/driver/runtime-driver.js +43 -3
  27. package/dist/cjs/expression/expression-builder.d.ts +9 -10
  28. package/dist/cjs/helpers/postgres.d.ts +48 -0
  29. package/dist/cjs/helpers/postgres.js +50 -0
  30. package/dist/cjs/index.d.ts +13 -2
  31. package/dist/cjs/index.js +13 -2
  32. package/dist/cjs/kysely.d.ts +339 -2
  33. package/dist/cjs/kysely.js +465 -11
  34. package/dist/cjs/migration/migrator.d.ts +16 -1
  35. package/dist/cjs/migration/migrator.js +14 -4
  36. package/dist/cjs/operation-node/aggregate-function-node.d.ts +2 -1
  37. package/dist/cjs/operation-node/aggregate-function-node.js +4 -3
  38. package/dist/cjs/operation-node/alter-table-node.d.ts +3 -1
  39. package/dist/cjs/operation-node/collate-node.d.ts +13 -0
  40. package/dist/cjs/operation-node/collate-node.js +19 -0
  41. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  42. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  43. package/dist/cjs/operation-node/create-type-node.js +1 -1
  44. package/dist/cjs/operation-node/delete-query-node.d.ts +8 -2
  45. package/dist/cjs/operation-node/delete-query-node.js +11 -15
  46. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -0
  47. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  48. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  49. package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.d.ts +106 -97
  51. package/dist/cjs/operation-node/operation-node-transformer.js +352 -312
  52. package/dist/cjs/operation-node/operation-node-visitor.d.ts +9 -1
  53. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  54. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  55. package/dist/cjs/operation-node/or-action-node.d.ts +12 -0
  56. package/dist/cjs/operation-node/or-action-node.js +18 -0
  57. package/dist/cjs/operation-node/order-by-item-node.d.ts +5 -0
  58. package/dist/cjs/operation-node/order-by-item-node.js +6 -0
  59. package/dist/cjs/operation-node/primary-key-constraint-node.d.ts +29 -0
  60. package/dist/cjs/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  61. package/dist/cjs/operation-node/query-node.d.ts +7 -0
  62. package/dist/cjs/operation-node/query-node.js +15 -0
  63. package/dist/cjs/operation-node/refresh-materialized-view-node.d.ts +17 -0
  64. package/dist/cjs/operation-node/refresh-materialized-view-node.js +25 -0
  65. package/dist/cjs/operation-node/rename-constraint-node.d.ts +14 -0
  66. package/dist/cjs/operation-node/rename-constraint-node.js +20 -0
  67. package/dist/cjs/operation-node/select-query-node.d.ts +8 -2
  68. package/dist/cjs/operation-node/select-query-node.js +11 -15
  69. package/dist/cjs/operation-node/unique-constraint-node.d.ts +2 -0
  70. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  71. package/dist/cjs/operation-node/update-query-node.js +5 -2
  72. package/dist/cjs/parser/collate-parser.d.ts +1 -0
  73. package/dist/cjs/parser/collate-parser.js +2 -0
  74. package/dist/cjs/parser/delete-from-parser.d.ts +5 -0
  75. package/dist/cjs/parser/delete-from-parser.js +2 -0
  76. package/dist/cjs/parser/insert-values-parser.js +3 -1
  77. package/dist/cjs/parser/join-parser.d.ts +1 -1
  78. package/dist/cjs/parser/join-parser.js +7 -1
  79. package/dist/cjs/parser/merge-into-parser.d.ts +5 -0
  80. package/dist/cjs/parser/merge-into-parser.js +2 -0
  81. package/dist/cjs/parser/order-by-parser.d.ts +18 -5
  82. package/dist/cjs/parser/order-by-parser.js +24 -14
  83. package/dist/cjs/parser/savepoint-parser.d.ts +4 -0
  84. package/dist/cjs/parser/savepoint-parser.js +11 -0
  85. package/dist/cjs/parser/select-from-parser.d.ts +4 -0
  86. package/dist/cjs/parser/select-from-parser.js +2 -0
  87. package/dist/cjs/parser/table-parser.d.ts +2 -5
  88. package/dist/cjs/parser/update-parser.d.ts +5 -0
  89. package/dist/cjs/parser/update-parser.js +2 -0
  90. package/dist/cjs/parser/update-set-parser.d.ts +7 -4
  91. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  92. package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  93. package/dist/cjs/plugin/camel-case/camel-case-transformer.js +2 -2
  94. package/dist/cjs/plugin/camel-case/camel-case.js +4 -1
  95. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  96. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  97. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  98. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  99. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +162 -0
  100. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  101. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +29 -0
  102. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  103. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.js +66 -0
  104. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.js +1 -1
  105. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  106. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.js +6 -4
  107. package/dist/cjs/plugin/with-schema/with-schema-plugin.js +1 -1
  108. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +8 -3
  109. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +45 -14
  110. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +83 -5
  111. package/dist/cjs/query-builder/aggregate-function-builder.js +15 -27
  112. package/dist/cjs/query-builder/cte-builder.js +0 -2
  113. package/dist/cjs/query-builder/delete-query-builder.d.ts +36 -47
  114. package/dist/cjs/query-builder/delete-query-builder.js +12 -78
  115. package/dist/cjs/query-builder/function-module.d.ts +31 -4
  116. package/dist/cjs/query-builder/insert-query-builder.d.ts +161 -6
  117. package/dist/cjs/query-builder/insert-query-builder.js +197 -10
  118. package/dist/cjs/query-builder/join-builder.js +0 -2
  119. package/dist/cjs/query-builder/merge-query-builder.d.ts +145 -3
  120. package/dist/cjs/query-builder/merge-query-builder.js +28 -7
  121. package/dist/cjs/query-builder/on-conflict-builder.js +0 -4
  122. package/dist/cjs/query-builder/order-by-interface.d.ts +176 -0
  123. package/dist/cjs/query-builder/order-by-interface.js +2 -0
  124. package/dist/cjs/query-builder/order-by-item-builder.d.ts +43 -0
  125. package/dist/cjs/query-builder/order-by-item-builder.js +75 -0
  126. package/dist/cjs/query-builder/over-builder.d.ts +43 -6
  127. package/dist/cjs/query-builder/over-builder.js +8 -25
  128. package/dist/cjs/query-builder/returning-interface.d.ts +20 -3
  129. package/dist/cjs/query-builder/select-query-builder.d.ts +279 -98
  130. package/dist/cjs/query-builder/select-query-builder.js +26 -26
  131. package/dist/cjs/query-builder/update-query-builder.d.ts +88 -9
  132. package/dist/cjs/query-builder/update-query-builder.js +17 -15
  133. package/dist/cjs/query-compiler/compiled-query.d.ts +2 -0
  134. package/dist/cjs/query-compiler/compiled-query.js +2 -0
  135. package/dist/cjs/query-compiler/default-query-compiler.d.ts +17 -2
  136. package/dist/cjs/query-compiler/default-query-compiler.js +97 -2
  137. package/dist/cjs/query-compiler/query-compiler.d.ts +4 -2
  138. package/dist/cjs/query-creator.d.ts +23 -25
  139. package/dist/cjs/query-creator.js +280 -8
  140. package/dist/cjs/query-executor/default-query-executor.d.ts +2 -1
  141. package/dist/cjs/query-executor/default-query-executor.js +2 -2
  142. package/dist/cjs/query-executor/query-executor-base.js +7 -25
  143. package/dist/cjs/raw-builder/raw-builder.js +0 -3
  144. package/dist/cjs/raw-builder/sql.d.ts +4 -4
  145. package/dist/cjs/raw-builder/sql.js +1 -1
  146. package/dist/cjs/schema/alter-column-builder.js +0 -3
  147. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  148. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  149. package/dist/cjs/schema/alter-table-add-index-builder.js +0 -2
  150. package/dist/cjs/schema/alter-table-builder.d.ts +7 -3
  151. package/dist/cjs/schema/alter-table-builder.js +21 -10
  152. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +0 -2
  153. package/dist/cjs/schema/alter-table-executor.js +0 -2
  154. package/dist/cjs/schema/check-constraint-builder.d.ts +13 -0
  155. package/dist/cjs/schema/check-constraint-builder.js +20 -0
  156. package/dist/cjs/schema/column-definition-builder.js +0 -2
  157. package/dist/cjs/schema/create-index-builder.js +1 -3
  158. package/dist/cjs/schema/create-schema-builder.js +0 -2
  159. package/dist/cjs/schema/create-table-builder.d.ts +5 -4
  160. package/dist/cjs/schema/create-table-builder.js +9 -7
  161. package/dist/cjs/schema/create-type-builder.d.ts +1 -1
  162. package/dist/cjs/schema/create-type-builder.js +0 -2
  163. package/dist/cjs/schema/create-view-builder.js +0 -2
  164. package/dist/cjs/schema/drop-index-builder.js +0 -2
  165. package/dist/cjs/schema/drop-schema-builder.js +0 -2
  166. package/dist/cjs/schema/drop-table-builder.js +0 -2
  167. package/dist/cjs/schema/drop-type-builder.js +0 -2
  168. package/dist/cjs/schema/drop-view-builder.js +0 -2
  169. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +9 -0
  170. package/dist/cjs/schema/foreign-key-constraint-builder.js +16 -2
  171. package/dist/cjs/schema/primary-key-constraint-builder.d.ts +17 -0
  172. package/dist/cjs/schema/primary-key-constraint-builder.js +37 -0
  173. package/dist/cjs/schema/refresh-materialized-view-builder.d.ts +47 -0
  174. package/dist/cjs/schema/refresh-materialized-view-builder.js +75 -0
  175. package/dist/cjs/schema/schema.d.ts +14 -0
  176. package/dist/cjs/schema/schema.js +21 -0
  177. package/dist/cjs/schema/unique-constraint-builder.d.ts +10 -1
  178. package/dist/cjs/schema/unique-constraint-builder.js +26 -5
  179. package/dist/cjs/util/infer-result.d.ts +1 -1
  180. package/dist/cjs/util/log.d.ts +1 -0
  181. package/dist/cjs/util/log.js +3 -2
  182. package/dist/cjs/util/provide-controlled-connection.d.ts +7 -0
  183. package/dist/cjs/util/provide-controlled-connection.js +24 -0
  184. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  185. package/dist/esm/dialect/mssql/mssql-driver.d.ts +6 -3
  186. package/dist/esm/dialect/mssql/mssql-driver.js +33 -19
  187. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  188. package/dist/esm/dialect/mssql/mssql-query-compiler.js +11 -0
  189. package/dist/esm/dialect/mysql/mysql-driver.d.ts +4 -0
  190. package/dist/esm/dialect/mysql/mysql-driver.js +27 -12
  191. package/dist/esm/dialect/postgres/postgres-driver.d.ts +4 -0
  192. package/dist/esm/dialect/postgres/postgres-driver.js +28 -18
  193. package/dist/esm/dialect/postgres/postgres-introspector.js +7 -17
  194. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +4 -0
  195. package/dist/esm/dialect/sqlite/sqlite-driver.js +19 -13
  196. package/dist/esm/dialect/sqlite/sqlite-introspector.js +66 -44
  197. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  198. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  199. package/dist/esm/driver/database-connection.d.ts +0 -4
  200. package/dist/esm/driver/driver.d.ts +17 -0
  201. package/dist/esm/driver/driver.js +11 -0
  202. package/dist/esm/driver/dummy-driver.d.ts +3 -0
  203. package/dist/esm/driver/dummy-driver.js +9 -0
  204. package/dist/esm/driver/runtime-driver.d.ts +4 -0
  205. package/dist/esm/driver/runtime-driver.js +43 -3
  206. package/dist/esm/expression/expression-builder.d.ts +9 -10
  207. package/dist/esm/helpers/postgres.d.ts +48 -0
  208. package/dist/esm/helpers/postgres.js +49 -0
  209. package/dist/esm/index.d.ts +13 -2
  210. package/dist/esm/index.js +11 -1
  211. package/dist/esm/kysely.d.ts +339 -2
  212. package/dist/esm/kysely.js +461 -10
  213. package/dist/esm/migration/migrator.d.ts +16 -1
  214. package/dist/esm/migration/migrator.js +14 -4
  215. package/dist/esm/operation-node/aggregate-function-node.d.ts +2 -1
  216. package/dist/esm/operation-node/aggregate-function-node.js +4 -3
  217. package/dist/esm/operation-node/alter-table-node.d.ts +3 -1
  218. package/dist/esm/operation-node/collate-node.d.ts +13 -0
  219. package/dist/esm/operation-node/collate-node.js +17 -0
  220. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  221. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  222. package/dist/esm/operation-node/create-type-node.js +1 -1
  223. package/dist/esm/operation-node/delete-query-node.d.ts +8 -2
  224. package/dist/esm/operation-node/delete-query-node.js +11 -15
  225. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -0
  226. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  227. package/dist/esm/operation-node/join-node.d.ts +1 -1
  228. package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
  229. package/dist/esm/operation-node/operation-node-transformer.d.ts +106 -97
  230. package/dist/esm/operation-node/operation-node-transformer.js +352 -312
  231. package/dist/esm/operation-node/operation-node-visitor.d.ts +9 -1
  232. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  233. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  234. package/dist/esm/operation-node/or-action-node.d.ts +12 -0
  235. package/dist/esm/operation-node/or-action-node.js +16 -0
  236. package/dist/esm/operation-node/order-by-item-node.d.ts +5 -0
  237. package/dist/esm/operation-node/order-by-item-node.js +6 -0
  238. package/dist/esm/operation-node/primary-key-constraint-node.d.ts +29 -0
  239. package/dist/esm/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  240. package/dist/esm/operation-node/query-node.d.ts +7 -0
  241. package/dist/esm/operation-node/query-node.js +15 -0
  242. package/dist/esm/operation-node/refresh-materialized-view-node.d.ts +17 -0
  243. package/dist/esm/operation-node/refresh-materialized-view-node.js +23 -0
  244. package/dist/esm/operation-node/rename-constraint-node.d.ts +14 -0
  245. package/dist/esm/operation-node/rename-constraint-node.js +18 -0
  246. package/dist/esm/operation-node/select-query-node.d.ts +8 -2
  247. package/dist/esm/operation-node/select-query-node.js +11 -15
  248. package/dist/esm/operation-node/unique-constraint-node.d.ts +2 -0
  249. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  250. package/dist/esm/operation-node/update-query-node.js +5 -2
  251. package/dist/esm/parser/collate-parser.d.ts +1 -0
  252. package/dist/esm/parser/collate-parser.js +2 -0
  253. package/dist/esm/parser/delete-from-parser.d.ts +5 -0
  254. package/dist/esm/parser/delete-from-parser.js +2 -0
  255. package/dist/esm/parser/insert-values-parser.js +3 -1
  256. package/dist/esm/parser/join-parser.d.ts +1 -1
  257. package/dist/esm/parser/join-parser.js +7 -1
  258. package/dist/esm/parser/merge-into-parser.d.ts +5 -0
  259. package/dist/esm/parser/merge-into-parser.js +2 -0
  260. package/dist/esm/parser/order-by-parser.d.ts +18 -5
  261. package/dist/esm/parser/order-by-parser.js +27 -17
  262. package/dist/esm/parser/savepoint-parser.d.ts +4 -0
  263. package/dist/esm/parser/savepoint-parser.js +9 -0
  264. package/dist/esm/parser/select-from-parser.d.ts +4 -0
  265. package/dist/esm/parser/select-from-parser.js +2 -0
  266. package/dist/esm/parser/table-parser.d.ts +2 -5
  267. package/dist/esm/parser/update-parser.d.ts +5 -0
  268. package/dist/esm/parser/update-parser.js +2 -0
  269. package/dist/esm/parser/update-set-parser.d.ts +7 -4
  270. package/dist/esm/plugin/camel-case/camel-case-plugin.js +1 -1
  271. package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  272. package/dist/esm/plugin/camel-case/camel-case-transformer.js +2 -2
  273. package/dist/esm/plugin/camel-case/camel-case.js +4 -1
  274. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  275. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  276. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  277. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  278. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +159 -0
  279. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  280. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +26 -0
  281. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  282. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.js +63 -0
  283. package/dist/esm/plugin/immediate-value/immediate-value-plugin.js +1 -1
  284. package/dist/esm/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  285. package/dist/esm/plugin/immediate-value/immediate-value-transformer.js +6 -4
  286. package/dist/esm/plugin/with-schema/with-schema-plugin.js +1 -1
  287. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +8 -3
  288. package/dist/esm/plugin/with-schema/with-schema-transformer.js +45 -14
  289. package/dist/esm/query-builder/aggregate-function-builder.d.ts +83 -5
  290. package/dist/esm/query-builder/aggregate-function-builder.js +15 -27
  291. package/dist/esm/query-builder/cte-builder.js +0 -2
  292. package/dist/esm/query-builder/delete-query-builder.d.ts +36 -47
  293. package/dist/esm/query-builder/delete-query-builder.js +12 -78
  294. package/dist/esm/query-builder/function-module.d.ts +31 -4
  295. package/dist/esm/query-builder/insert-query-builder.d.ts +161 -6
  296. package/dist/esm/query-builder/insert-query-builder.js +197 -10
  297. package/dist/esm/query-builder/join-builder.js +0 -2
  298. package/dist/esm/query-builder/merge-query-builder.d.ts +145 -3
  299. package/dist/esm/query-builder/merge-query-builder.js +29 -8
  300. package/dist/esm/query-builder/on-conflict-builder.js +0 -4
  301. package/dist/esm/query-builder/order-by-interface.d.ts +176 -0
  302. package/dist/esm/query-builder/order-by-interface.js +2 -0
  303. package/dist/esm/query-builder/order-by-item-builder.d.ts +43 -0
  304. package/dist/esm/query-builder/order-by-item-builder.js +72 -0
  305. package/dist/esm/query-builder/over-builder.d.ts +43 -6
  306. package/dist/esm/query-builder/over-builder.js +8 -25
  307. package/dist/esm/query-builder/returning-interface.d.ts +20 -3
  308. package/dist/esm/query-builder/select-query-builder.d.ts +279 -98
  309. package/dist/esm/query-builder/select-query-builder.js +26 -26
  310. package/dist/esm/query-builder/update-query-builder.d.ts +88 -9
  311. package/dist/esm/query-builder/update-query-builder.js +17 -15
  312. package/dist/esm/query-compiler/compiled-query.d.ts +2 -0
  313. package/dist/esm/query-compiler/compiled-query.js +2 -0
  314. package/dist/esm/query-compiler/default-query-compiler.d.ts +17 -2
  315. package/dist/esm/query-compiler/default-query-compiler.js +97 -2
  316. package/dist/esm/query-compiler/query-compiler.d.ts +4 -2
  317. package/dist/esm/query-creator.d.ts +23 -25
  318. package/dist/esm/query-creator.js +281 -9
  319. package/dist/esm/query-executor/default-query-executor.d.ts +2 -1
  320. package/dist/esm/query-executor/default-query-executor.js +2 -2
  321. package/dist/esm/query-executor/query-executor-base.js +7 -25
  322. package/dist/esm/raw-builder/raw-builder.js +0 -3
  323. package/dist/esm/raw-builder/sql.d.ts +4 -4
  324. package/dist/esm/raw-builder/sql.js +1 -1
  325. package/dist/esm/schema/alter-column-builder.js +0 -3
  326. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  327. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  328. package/dist/esm/schema/alter-table-add-index-builder.js +0 -2
  329. package/dist/esm/schema/alter-table-builder.d.ts +7 -3
  330. package/dist/esm/schema/alter-table-builder.js +22 -11
  331. package/dist/esm/schema/alter-table-drop-constraint-builder.js +0 -2
  332. package/dist/esm/schema/alter-table-executor.js +0 -2
  333. package/dist/esm/schema/check-constraint-builder.d.ts +13 -0
  334. package/dist/esm/schema/check-constraint-builder.js +17 -0
  335. package/dist/esm/schema/column-definition-builder.js +0 -2
  336. package/dist/esm/schema/create-index-builder.js +1 -3
  337. package/dist/esm/schema/create-schema-builder.js +0 -2
  338. package/dist/esm/schema/create-table-builder.d.ts +5 -4
  339. package/dist/esm/schema/create-table-builder.js +10 -8
  340. package/dist/esm/schema/create-type-builder.d.ts +1 -1
  341. package/dist/esm/schema/create-type-builder.js +0 -2
  342. package/dist/esm/schema/create-view-builder.js +0 -2
  343. package/dist/esm/schema/drop-index-builder.js +0 -2
  344. package/dist/esm/schema/drop-schema-builder.js +0 -2
  345. package/dist/esm/schema/drop-table-builder.js +0 -2
  346. package/dist/esm/schema/drop-type-builder.js +0 -2
  347. package/dist/esm/schema/drop-view-builder.js +0 -2
  348. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +9 -0
  349. package/dist/esm/schema/foreign-key-constraint-builder.js +16 -2
  350. package/dist/esm/schema/primary-key-constraint-builder.d.ts +17 -0
  351. package/dist/esm/schema/primary-key-constraint-builder.js +34 -0
  352. package/dist/esm/schema/refresh-materialized-view-builder.d.ts +47 -0
  353. package/dist/esm/schema/refresh-materialized-view-builder.js +72 -0
  354. package/dist/esm/schema/schema.d.ts +14 -0
  355. package/dist/esm/schema/schema.js +21 -0
  356. package/dist/esm/schema/unique-constraint-builder.d.ts +10 -1
  357. package/dist/esm/schema/unique-constraint-builder.js +26 -5
  358. package/dist/esm/util/infer-result.d.ts +1 -1
  359. package/dist/esm/util/log.d.ts +1 -0
  360. package/dist/esm/util/log.js +3 -2
  361. package/dist/esm/util/provide-controlled-connection.d.ts +7 -0
  362. package/dist/esm/util/provide-controlled-connection.js +22 -0
  363. package/outdated-typescript.d.ts +5 -0
  364. package/package.json +16 -2
  365. package/CONTRIBUTING.md +0 -70
  366. package/dist/cjs/operation-node/primary-constraint-node.d.ts +0 -15
  367. package/dist/cjs/util/prevent-await.d.ts +0 -1
  368. package/dist/cjs/util/prevent-await.js +0 -13
  369. package/dist/esm/operation-node/primary-constraint-node.d.ts +0 -15
  370. package/dist/esm/util/prevent-await.d.ts +0 -1
  371. package/dist/esm/util/prevent-await.js +0 -11
@@ -1,6 +1,8 @@
1
1
  /// <reference types="./postgres-driver.d.ts" />
2
+ import { parseSavepointCommand } from '../../parser/savepoint-parser.js';
2
3
  import { CompiledQuery } from '../../query-compiler/compiled-query.js';
3
4
  import { isFunction, freeze } from '../../util/object-utils.js';
5
+ import { createQueryId } from '../../util/query-id.js';
4
6
  import { extendStackTrace } from '../../util/stack-trace-utils.js';
5
7
  const PRIVATE_RELEASE_METHOD = Symbol();
6
8
  export class PostgresDriver {
@@ -36,8 +38,15 @@ export class PostgresDriver {
36
38
  return connection;
37
39
  }
38
40
  async beginTransaction(connection, settings) {
39
- if (settings.isolationLevel) {
40
- await connection.executeQuery(CompiledQuery.raw(`start transaction isolation level ${settings.isolationLevel}`));
41
+ if (settings.isolationLevel || settings.accessMode) {
42
+ let sql = 'start transaction';
43
+ if (settings.isolationLevel) {
44
+ sql += ` isolation level ${settings.isolationLevel}`;
45
+ }
46
+ if (settings.accessMode) {
47
+ sql += ` ${settings.accessMode}`;
48
+ }
49
+ await connection.executeQuery(CompiledQuery.raw(sql));
41
50
  }
42
51
  else {
43
52
  await connection.executeQuery(CompiledQuery.raw('begin'));
@@ -49,6 +58,15 @@ export class PostgresDriver {
49
58
  async rollbackTransaction(connection) {
50
59
  await connection.executeQuery(CompiledQuery.raw('rollback'));
51
60
  }
61
+ async savepoint(connection, savepointName, compileQuery) {
62
+ await connection.executeQuery(compileQuery(parseSavepointCommand('savepoint', savepointName), createQueryId()));
63
+ }
64
+ async rollbackToSavepoint(connection, savepointName, compileQuery) {
65
+ await connection.executeQuery(compileQuery(parseSavepointCommand('rollback to', savepointName), createQueryId()));
66
+ }
67
+ async releaseSavepoint(connection, savepointName, compileQuery) {
68
+ await connection.executeQuery(compileQuery(parseSavepointCommand('release', savepointName), createQueryId()));
69
+ }
52
70
  async releaseConnection(connection) {
53
71
  connection[PRIVATE_RELEASE_METHOD]();
54
72
  }
@@ -69,23 +87,15 @@ class PostgresConnection {
69
87
  }
70
88
  async executeQuery(compiledQuery) {
71
89
  try {
72
- const result = await this.#client.query(compiledQuery.sql, [
73
- ...compiledQuery.parameters,
74
- ]);
75
- if (result.command === 'INSERT' ||
76
- result.command === 'UPDATE' ||
77
- result.command === 'DELETE' ||
78
- result.command === 'MERGE') {
79
- const numAffectedRows = BigInt(result.rowCount);
80
- return {
81
- // TODO: remove.
82
- numUpdatedOrDeletedRows: numAffectedRows,
83
- numAffectedRows,
84
- rows: result.rows ?? [],
85
- };
86
- }
90
+ const { command, rowCount, rows } = await this.#client.query(compiledQuery.sql, [...compiledQuery.parameters]);
87
91
  return {
88
- rows: result.rows ?? [],
92
+ numAffectedRows: command === 'INSERT' ||
93
+ command === 'UPDATE' ||
94
+ command === 'DELETE' ||
95
+ command === 'MERGE'
96
+ ? BigInt(rowCount)
97
+ : undefined,
98
+ rows: rows ?? [],
89
99
  };
90
100
  }
91
101
  catch (err) {
@@ -37,23 +37,13 @@ export class PostgresIntrospector {
37
37
  'typ.typname as type',
38
38
  'dtns.nspname as type_schema',
39
39
  sql `col_description(a.attrelid, a.attnum)`.as('column_description'),
40
- // Detect if the column is auto incrementing by finding the sequence
41
- // that is created for `serial` and `bigserial` columns.
42
- this.#db
43
- .selectFrom('pg_class')
44
- .select(sql `true`.as('auto_incrementing'))
45
- // Make sure the sequence is in the same schema as the table.
46
- .whereRef('relnamespace', '=', 'c.relnamespace')
47
- .where('relkind', '=', 'S')
48
- .where('relname', '=', sql `c.relname || '_' || a.attname || '_seq'`)
49
- .as('auto_incrementing'),
40
+ sql `pg_get_serial_sequence(ns.nspname || '.' || c.relname, a.attname)`.as('auto_incrementing'),
41
+ ])
42
+ .where('c.relkind', 'in', [
43
+ 'r' /*regular table*/,
44
+ 'v' /*view*/,
45
+ 'p' /*partitioned table*/,
50
46
  ])
51
- // r == normal table
52
- .where((eb) => eb.or([
53
- eb('c.relkind', '=', 'r'),
54
- eb('c.relkind', '=', 'v'),
55
- eb('c.relkind', '=', 'p'),
56
- ]))
57
47
  .where('ns.nspname', '!~', '^pg_')
58
48
  .where('ns.nspname', '!=', 'information_schema')
59
49
  // No system columns
@@ -93,7 +83,7 @@ export class PostgresIntrospector {
93
83
  dataType: it.type,
94
84
  dataTypeSchema: it.type_schema,
95
85
  isNullable: !it.not_null,
96
- isAutoIncrementing: !!it.auto_incrementing,
86
+ isAutoIncrementing: it.auto_incrementing !== null,
97
87
  hasDefaultValue: it.has_default,
98
88
  comment: it.column_description ?? undefined,
99
89
  }));
@@ -1,5 +1,6 @@
1
1
  import { DatabaseConnection } from '../../driver/database-connection.js';
2
2
  import { Driver } from '../../driver/driver.js';
3
+ import { QueryCompiler } from '../../query-compiler/query-compiler.js';
3
4
  import { SqliteDialectConfig } from './sqlite-dialect-config.js';
4
5
  export declare class SqliteDriver implements Driver {
5
6
  #private;
@@ -27,6 +28,9 @@ export declare class SqliteDriver implements Driver {
27
28
  * Rolls back a transaction.
28
29
  */
29
30
  rollbackTransaction(connection: DatabaseConnection): Promise<void>;
31
+ savepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
32
+ rollbackToSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
33
+ releaseSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
30
34
  /**
31
35
  * Releases a connection back to the pool.
32
36
  */
@@ -1,7 +1,9 @@
1
1
  /// <reference types="./sqlite-driver.d.ts" />
2
2
  import { SelectQueryNode } from '../../operation-node/select-query-node.js';
3
+ import { parseSavepointCommand } from '../../parser/savepoint-parser.js';
3
4
  import { CompiledQuery } from '../../query-compiler/compiled-query.js';
4
5
  import { freeze, isFunction } from '../../util/object-utils.js';
6
+ import { createQueryId } from '../../util/query-id.js';
5
7
  export class SqliteDriver {
6
8
  #config;
7
9
  #connectionMutex = new ConnectionMutex();
@@ -34,6 +36,15 @@ export class SqliteDriver {
34
36
  async rollbackTransaction(connection) {
35
37
  await connection.executeQuery(CompiledQuery.raw('rollback'));
36
38
  }
39
+ async savepoint(connection, savepointName, compileQuery) {
40
+ await connection.executeQuery(compileQuery(parseSavepointCommand('savepoint', savepointName), createQueryId()));
41
+ }
42
+ async rollbackToSavepoint(connection, savepointName, compileQuery) {
43
+ await connection.executeQuery(compileQuery(parseSavepointCommand('rollback to', savepointName), createQueryId()));
44
+ }
45
+ async releaseSavepoint(connection, savepointName, compileQuery) {
46
+ await connection.executeQuery(compileQuery(parseSavepointCommand('release', savepointName), createQueryId()));
47
+ }
37
48
  async releaseConnection() {
38
49
  this.#connectionMutex.unlock();
39
50
  }
@@ -54,19 +65,14 @@ class SqliteConnection {
54
65
  rows: stmt.all(parameters),
55
66
  });
56
67
  }
57
- else {
58
- const { changes, lastInsertRowid } = stmt.run(parameters);
59
- const numAffectedRows = changes !== undefined && changes !== null ? BigInt(changes) : undefined;
60
- return Promise.resolve({
61
- // TODO: remove.
62
- numUpdatedOrDeletedRows: numAffectedRows,
63
- numAffectedRows,
64
- insertId: lastInsertRowid !== undefined && lastInsertRowid !== null
65
- ? BigInt(lastInsertRowid)
66
- : undefined,
67
- rows: [],
68
- });
69
- }
68
+ const { changes, lastInsertRowid } = stmt.run(parameters);
69
+ return Promise.resolve({
70
+ numAffectedRows: changes !== undefined && changes !== null ? BigInt(changes) : undefined,
71
+ insertId: lastInsertRowid !== undefined && lastInsertRowid !== null
72
+ ? BigInt(lastInsertRowid)
73
+ : undefined,
74
+ rows: [],
75
+ });
70
76
  }
71
77
  async *streamQuery(compiledQuery, _chunkSize) {
72
78
  const { sql, parameters, query } = compiledQuery;
@@ -11,58 +11,80 @@ export class SqliteIntrospector {
11
11
  return [];
12
12
  }
13
13
  async getTables(options = { withInternalKyselyTables: false }) {
14
- let query = this.#db
14
+ return await this.#getTableMetadata(options);
15
+ }
16
+ async getMetadata(options) {
17
+ return {
18
+ tables: await this.getTables(options),
19
+ };
20
+ }
21
+ #tablesQuery(qb, options) {
22
+ let tablesQuery = qb
15
23
  .selectFrom('sqlite_master')
16
24
  .where('type', 'in', ['table', 'view'])
17
25
  .where('name', 'not like', 'sqlite_%')
18
- .select('name')
19
- .orderBy('name')
20
- .$castTo();
26
+ .select(['name', 'sql', 'type'])
27
+ .orderBy('name');
21
28
  if (!options.withInternalKyselyTables) {
22
- query = query
29
+ tablesQuery = tablesQuery
23
30
  .where('name', '!=', DEFAULT_MIGRATION_TABLE)
24
31
  .where('name', '!=', DEFAULT_MIGRATION_LOCK_TABLE);
25
32
  }
26
- const tables = await query.execute();
27
- return Promise.all(tables.map(({ name }) => this.#getTableMetadata(name)));
33
+ return tablesQuery;
28
34
  }
29
- async getMetadata(options) {
30
- return {
31
- tables: await this.getTables(options),
32
- };
33
- }
34
- async #getTableMetadata(table) {
35
- const db = this.#db;
36
- // Get the SQL that was used to create the table.
37
- const tableDefinition = await db
38
- .selectFrom('sqlite_master')
39
- .where('name', '=', table)
40
- .select(['sql', 'type'])
41
- .$castTo()
42
- .executeTakeFirstOrThrow();
43
- // Try to find the name of the column that has `autoincrement` 🤦
44
- const autoIncrementCol = tableDefinition.sql
45
- ?.split(/[\(\),]/)
46
- ?.find((it) => it.toLowerCase().includes('autoincrement'))
47
- ?.trimStart()
48
- ?.split(/\s+/)?.[0]
49
- ?.replace(/["`]/g, '');
50
- const columns = await db
51
- .selectFrom(sql `pragma_table_info(${table})`.as('table_info'))
52
- .select(['name', 'type', 'notnull', 'dflt_value'])
53
- .orderBy('cid')
35
+ async #getTableMetadata(options) {
36
+ const tablesResult = await this.#tablesQuery(this.#db, options).execute();
37
+ const tableMetadata = await this.#db
38
+ .with('table_list', (qb) => this.#tablesQuery(qb, options))
39
+ .selectFrom([
40
+ 'table_list as tl',
41
+ sql `pragma_table_info(tl.name)`.as('p'),
42
+ ])
43
+ .select([
44
+ 'tl.name as table',
45
+ 'p.cid',
46
+ 'p.name',
47
+ 'p.type',
48
+ 'p.notnull',
49
+ 'p.dflt_value',
50
+ 'p.pk',
51
+ ])
52
+ .orderBy(['tl.name', 'p.cid'])
54
53
  .execute();
55
- return {
56
- name: table,
57
- isView: tableDefinition.type === 'view',
58
- columns: columns.map((col) => ({
59
- name: col.name,
60
- dataType: col.type,
61
- isNullable: !col.notnull,
62
- isAutoIncrementing: col.name === autoIncrementCol,
63
- hasDefaultValue: col.dflt_value != null,
64
- comment: undefined,
65
- })),
66
- };
54
+ const columnsByTable = {};
55
+ for (const row of tableMetadata) {
56
+ columnsByTable[row.table] ??= [];
57
+ columnsByTable[row.table].push(row);
58
+ }
59
+ return tablesResult.map(({ name, sql, type }) => {
60
+ // // Try to find the name of the column that has `autoincrement` 🤦
61
+ let autoIncrementCol = sql
62
+ ?.split(/[\(\),]/)
63
+ ?.find((it) => it.toLowerCase().includes('autoincrement'))
64
+ ?.trimStart()
65
+ ?.split(/\s+/)?.[0]
66
+ ?.replace(/["`]/g, '');
67
+ const columns = columnsByTable[name] ?? [];
68
+ // Otherwise, check for an INTEGER PRIMARY KEY
69
+ // https://www.sqlite.org/autoinc.html
70
+ if (!autoIncrementCol) {
71
+ const pkCols = columns.filter((r) => r.pk > 0);
72
+ if (pkCols.length === 1 && pkCols[0].type.toLowerCase() === 'integer') {
73
+ autoIncrementCol = pkCols[0].name;
74
+ }
75
+ }
76
+ return {
77
+ name: name,
78
+ isView: type === 'view',
79
+ columns: columns.map((col) => ({
80
+ name: col.name,
81
+ dataType: col.type,
82
+ isNullable: !col.notnull,
83
+ isAutoIncrementing: col.name === autoIncrementCol,
84
+ hasDefaultValue: col.dflt_value != null,
85
+ comment: undefined,
86
+ })),
87
+ };
88
+ });
67
89
  }
68
90
  }
@@ -1,6 +1,8 @@
1
1
  import { DefaultInsertValueNode } from '../../operation-node/default-insert-value-node.js';
2
+ import { OrActionNode } from '../../operation-node/or-action-node.js';
2
3
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
3
4
  export declare class SqliteQueryCompiler extends DefaultQueryCompiler {
5
+ protected visitOrAction(node: OrActionNode): void;
4
6
  protected getCurrentParameterPlaceholder(): string;
5
7
  protected getLeftExplainOptionsWrapper(): string;
6
8
  protected getRightExplainOptionsWrapper(): string;
@@ -2,6 +2,10 @@
2
2
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
3
3
  const ID_WRAP_REGEX = /"/g;
4
4
  export class SqliteQueryCompiler extends DefaultQueryCompiler {
5
+ visitOrAction(node) {
6
+ this.append('or ');
7
+ this.append(node.action);
8
+ }
5
9
  getCurrentParameterPlaceholder() {
6
10
  return '?';
7
11
  }
@@ -9,10 +9,6 @@ export interface DatabaseConnection {
9
9
  streamQuery<R>(compiledQuery: CompiledQuery, chunkSize?: number): AsyncIterableIterator<QueryResult<R>>;
10
10
  }
11
11
  export interface QueryResult<O> {
12
- /**
13
- * @deprecated use {@link QueryResult.numAffectedRows} instead.
14
- */
15
- readonly numUpdatedOrDeletedRows?: bigint;
16
12
  /**
17
13
  * This is defined for insert, update, delete and merge queries and contains
18
14
  * the number of rows the query inserted/updated/deleted.
@@ -1,3 +1,4 @@
1
+ import { QueryCompiler } from '../query-compiler/query-compiler.js';
1
2
  import { ArrayItemType } from '../util/type-utils.js';
2
3
  import { DatabaseConnection } from './database-connection.js';
3
4
  /**
@@ -28,6 +29,18 @@ export interface Driver {
28
29
  * Rolls back a transaction.
29
30
  */
30
31
  rollbackTransaction(connection: DatabaseConnection): Promise<void>;
32
+ /**
33
+ * Establishses a new savepoint within a transaction.
34
+ */
35
+ savepoint?(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
36
+ /**
37
+ * Rolls back to a savepoint within a transaction.
38
+ */
39
+ rollbackToSavepoint?(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
40
+ /**
41
+ * Releases a savepoint within a transaction.
42
+ */
43
+ releaseSavepoint?(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
31
44
  /**
32
45
  * Releases a connection back to the pool.
33
46
  */
@@ -38,7 +51,11 @@ export interface Driver {
38
51
  destroy(): Promise<void>;
39
52
  }
40
53
  export interface TransactionSettings {
54
+ readonly accessMode?: AccessMode;
41
55
  readonly isolationLevel?: IsolationLevel;
42
56
  }
57
+ export declare const TRANSACTION_ACCESS_MODES: readonly ["read only", "read write"];
58
+ export type AccessMode = ArrayItemType<typeof TRANSACTION_ACCESS_MODES>;
43
59
  export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable", "snapshot"];
44
60
  export type IsolationLevel = ArrayItemType<typeof TRANSACTION_ISOLATION_LEVELS>;
61
+ export declare function validateTransactionSettings(settings: TransactionSettings): void;
@@ -1,4 +1,5 @@
1
1
  /// <reference types="./driver.d.ts" />
2
+ export const TRANSACTION_ACCESS_MODES = ['read only', 'read write'];
2
3
  export const TRANSACTION_ISOLATION_LEVELS = [
3
4
  'read uncommitted',
4
5
  'read committed',
@@ -6,3 +7,13 @@ export const TRANSACTION_ISOLATION_LEVELS = [
6
7
  'serializable',
7
8
  'snapshot',
8
9
  ];
10
+ export function validateTransactionSettings(settings) {
11
+ if (settings.accessMode &&
12
+ !TRANSACTION_ACCESS_MODES.includes(settings.accessMode)) {
13
+ throw new Error(`invalid transaction access mode ${settings.accessMode}`);
14
+ }
15
+ if (settings.isolationLevel &&
16
+ !TRANSACTION_ISOLATION_LEVELS.includes(settings.isolationLevel)) {
17
+ throw new Error(`invalid transaction isolation level ${settings.isolationLevel}`);
18
+ }
19
+ }
@@ -69,4 +69,7 @@ export declare class DummyDriver implements Driver {
69
69
  * Destroys the driver and releases all resources.
70
70
  */
71
71
  destroy(): Promise<void>;
72
+ releaseSavepoint(): Promise<void>;
73
+ rollbackToSavepoint(): Promise<void>;
74
+ savepoint(): Promise<void>;
72
75
  }
@@ -58,6 +58,15 @@ export class DummyDriver {
58
58
  async destroy() {
59
59
  // Nothing to do here.
60
60
  }
61
+ async releaseSavepoint() {
62
+ // Nothing to do here.
63
+ }
64
+ async rollbackToSavepoint() {
65
+ // Nothing to do here.
66
+ }
67
+ async savepoint() {
68
+ // Nothing to do here.
69
+ }
61
70
  }
62
71
  class DummyConnection {
63
72
  async executeQuery() {
@@ -1,3 +1,4 @@
1
+ import { QueryCompiler } from '../query-compiler/query-compiler.js';
1
2
  import { Log } from '../util/log.js';
2
3
  import { DatabaseConnection } from './database-connection.js';
3
4
  import { Driver, TransactionSettings } from './driver.js';
@@ -36,6 +37,9 @@ export declare class RuntimeDriver implements Driver {
36
37
  * Rolls back a transaction.
37
38
  */
38
39
  rollbackTransaction(connection: DatabaseConnection): Promise<void>;
40
+ savepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
41
+ rollbackToSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
42
+ releaseSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
39
43
  /**
40
44
  * Destroys the driver and releases all resources.
41
45
  */
@@ -62,6 +62,24 @@ export class RuntimeDriver {
62
62
  rollbackTransaction(connection) {
63
63
  return this.#driver.rollbackTransaction(connection);
64
64
  }
65
+ savepoint(connection, savepointName, compileQuery) {
66
+ if (this.#driver.savepoint) {
67
+ return this.#driver.savepoint(connection, savepointName, compileQuery);
68
+ }
69
+ throw new Error('The `savepoint` method is not supported by this driver');
70
+ }
71
+ rollbackToSavepoint(connection, savepointName, compileQuery) {
72
+ if (this.#driver.rollbackToSavepoint) {
73
+ return this.#driver.rollbackToSavepoint(connection, savepointName, compileQuery);
74
+ }
75
+ throw new Error('The `rollbackToSavepoint` method is not supported by this driver');
76
+ }
77
+ releaseSavepoint(connection, savepointName, compileQuery) {
78
+ if (this.#driver.releaseSavepoint) {
79
+ return this.#driver.releaseSavepoint(connection, savepointName, compileQuery);
80
+ }
81
+ throw new Error('The `releaseSavepoint` method is not supported by this driver');
82
+ }
65
83
  async destroy() {
66
84
  if (!this.#initPromise) {
67
85
  return;
@@ -83,6 +101,8 @@ export class RuntimeDriver {
83
101
  // the best option in this case.
84
102
  #addLogging(connection) {
85
103
  const executeQuery = connection.executeQuery;
104
+ const streamQuery = connection.streamQuery;
105
+ const dis = this;
86
106
  connection.executeQuery = async (compiledQuery) => {
87
107
  let caughtError;
88
108
  const startTime = performanceNow();
@@ -91,12 +111,31 @@ export class RuntimeDriver {
91
111
  }
92
112
  catch (error) {
93
113
  caughtError = error;
94
- await this.#logError(error, compiledQuery, startTime);
114
+ await dis.#logError(error, compiledQuery, startTime);
115
+ throw error;
116
+ }
117
+ finally {
118
+ if (!caughtError) {
119
+ await dis.#logQuery(compiledQuery, startTime);
120
+ }
121
+ }
122
+ };
123
+ connection.streamQuery = async function* (compiledQuery, chunkSize) {
124
+ let caughtError;
125
+ const startTime = performanceNow();
126
+ try {
127
+ for await (const result of streamQuery.call(connection, compiledQuery, chunkSize)) {
128
+ yield result;
129
+ }
130
+ }
131
+ catch (error) {
132
+ caughtError = error;
133
+ await dis.#logError(error, compiledQuery, startTime);
95
134
  throw error;
96
135
  }
97
136
  finally {
98
137
  if (!caughtError) {
99
- await this.#logQuery(compiledQuery, startTime);
138
+ await dis.#logQuery(compiledQuery, startTime, true);
100
139
  }
101
140
  }
102
141
  };
@@ -109,9 +148,10 @@ export class RuntimeDriver {
109
148
  queryDurationMillis: this.#calculateDurationMillis(startTime),
110
149
  }));
111
150
  }
112
- async #logQuery(compiledQuery, startTime) {
151
+ async #logQuery(compiledQuery, startTime, isStream = false) {
113
152
  await this.#log.query(() => ({
114
153
  level: 'query',
154
+ isStream,
115
155
  query: compiledQuery,
116
156
  queryDurationMillis: this.#calculateDurationMillis(startTime),
117
157
  }));
@@ -1,5 +1,5 @@
1
1
  import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
2
- import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from '../parser/table-parser.js';
2
+ import { TableExpressionOrList } from '../parser/table-parser.js';
3
3
  import { FunctionModule } from '../query-builder/function-module.js';
4
4
  import { ExtractTypeFromReferenceExpression, ReferenceExpression, SimpleReferenceExpression, StringReference } from '../parser/reference-parser.js';
5
5
  import { QueryExecutor } from '../query-executor/query-executor.js';
@@ -16,6 +16,7 @@ import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTu
16
16
  import { Selectable } from '../util/column-type.js';
17
17
  import { KyselyTypeError } from '../util/type-error.js';
18
18
  import { DataTypeExpression } from '../parser/data-type-parser.js';
19
+ import { SelectFrom } from '../parser/select-from-parser.js';
19
20
  export interface ExpressionBuilder<DB, TB extends keyof DB> {
20
21
  /**
21
22
  * Creates a binary expression.
@@ -116,9 +117,9 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
116
117
  * ```ts
117
118
  * const result = await db.selectFrom('person')
118
119
  * .where(({ eb, exists, selectFrom }) =>
119
- * eb('first_name', '=', 'Jennifer').and(
120
- * exists(selectFrom('pet').whereRef('owner_id', '=', 'person.id').select('pet.id'))
121
- * )
120
+ * eb('first_name', '=', 'Jennifer').and(exists(
121
+ * selectFrom('pet').whereRef('owner_id', '=', 'person.id').select('pet.id')
122
+ * ))
122
123
  * )
123
124
  * .selectAll()
124
125
  * .execute()
@@ -209,11 +210,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
209
210
  * that case Kysely typings wouldn't allow you to reference `pet.owner_id`
210
211
  * because `pet` is not joined to that query.
211
212
  */
212
- selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
213
- selectFrom<TE extends TableExpression<DB, TB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
214
- selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
215
- selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB & PickTableWithAlias<DB, TE>, TE>, {}>;
216
- selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
213
+ selectFrom<TE extends TableExpressionOrList<DB, TB>>(from: TE): SelectFrom<DB, TB, TE>;
217
214
  /**
218
215
  * Creates a `case` statement/operator.
219
216
  *
@@ -444,6 +441,8 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
444
441
  * inner join "pet" on "pet"."owner_id" = "person"."id"
445
442
  * group by "person"."id"
446
443
  * ```
444
+ *
445
+ * If you need a column reference, use {@link ref}.
447
446
  */
448
447
  table<T extends TB & string>(table: T): ExpressionWrapper<DB, TB, Selectable<DB[T]>>;
449
448
  /**
@@ -918,4 +917,4 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
918
917
  }
919
918
  export declare function createExpressionBuilder<DB, TB extends keyof DB>(executor?: QueryExecutor): ExpressionBuilder<DB, TB>;
920
919
  export declare function expressionBuilder<DB, TB extends keyof DB>(_: SelectQueryBuilder<DB, TB, any>): ExpressionBuilder<DB, TB>;
921
- export declare function expressionBuilder<DB, TB extends keyof DB>(): ExpressionBuilder<DB, TB>;
920
+ export declare function expressionBuilder<DB, TB extends keyof DB = never>(): ExpressionBuilder<DB, TB>;
@@ -149,3 +149,51 @@ export declare function jsonObjectFrom<O>(expr: Expression<O>): RawBuilder<Simpl
149
149
  export declare function jsonBuildObject<O extends Record<string, Expression<unknown>>>(obj: O): RawBuilder<Simplify<{
150
150
  [K in keyof O]: O[K] extends Expression<infer V> ? V : never;
151
151
  }>>;
152
+ export type MergeAction = 'INSERT' | 'UPDATE' | 'DELETE';
153
+ /**
154
+ * The PostgreSQL `merge_action` function.
155
+ *
156
+ * This function can be used in a `returning` clause to get the action that was
157
+ * performed in a `mergeInto` query. The function returns one of the following
158
+ * strings: `'INSERT'`, `'UPDATE'`, or `'DELETE'`.
159
+ *
160
+ * ### Examples
161
+ *
162
+ * ```ts
163
+ * import { mergeAction } from 'kysely/helpers/postgres'
164
+ *
165
+ * const result = await db
166
+ * .mergeInto('person as p')
167
+ * .using('person_backup as pb', 'p.id', 'pb.id')
168
+ * .whenMatched()
169
+ * .thenUpdateSet(({ ref }) => ({
170
+ * first_name: ref('pb.first_name'),
171
+ * updated_at: ref('pb.updated_at').$castTo<string | null>(),
172
+ * }))
173
+ * .whenNotMatched()
174
+ * .thenInsertValues(({ ref}) => ({
175
+ * id: ref('pb.id'),
176
+ * first_name: ref('pb.first_name'),
177
+ * created_at: ref('pb.updated_at'),
178
+ * updated_at: ref('pb.updated_at').$castTo<string | null>(),
179
+ * }))
180
+ * .returning([mergeAction().as('action'), 'p.id', 'p.updated_at'])
181
+ * .execute()
182
+ *
183
+ * result[0].action
184
+ * ```
185
+ *
186
+ * The generated SQL (PostgreSQL):
187
+ *
188
+ * ```sql
189
+ * merge into "person" as "p"
190
+ * using "person_backup" as "pb" on "p"."id" = "pb"."id"
191
+ * when matched then update set
192
+ * "first_name" = "pb"."first_name",
193
+ * "updated_at" = "pb"."updated_at"::text
194
+ * when not matched then insert values ("id", "first_name", "created_at", "updated_at")
195
+ * values ("pb"."id", "pb"."first_name", "pb"."updated_at", "pb"."updated_at")
196
+ * returning merge_action() as "action", "p"."id", "p"."updated_at"
197
+ * ```
198
+ */
199
+ export declare function mergeAction(): RawBuilder<MergeAction>;