kysely 0.27.6 → 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 (363) hide show
  1. package/README.md +169 -1
  2. package/deno.check.d.ts +7 -0
  3. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  4. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +6 -3
  5. package/dist/cjs/dialect/mssql/mssql-driver.js +33 -19
  6. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  7. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +11 -0
  8. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +4 -0
  9. package/dist/cjs/dialect/mysql/mysql-driver.js +27 -12
  10. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +4 -0
  11. package/dist/cjs/dialect/postgres/postgres-driver.js +28 -18
  12. package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -17
  13. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +4 -0
  14. package/dist/cjs/dialect/sqlite/sqlite-driver.js +19 -13
  15. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  17. package/dist/cjs/driver/database-connection.d.ts +0 -4
  18. package/dist/cjs/driver/driver.d.ts +17 -0
  19. package/dist/cjs/driver/driver.js +13 -1
  20. package/dist/cjs/driver/dummy-driver.d.ts +3 -0
  21. package/dist/cjs/driver/dummy-driver.js +9 -0
  22. package/dist/cjs/driver/runtime-driver.d.ts +4 -0
  23. package/dist/cjs/driver/runtime-driver.js +43 -3
  24. package/dist/cjs/expression/expression-builder.d.ts +7 -10
  25. package/dist/cjs/helpers/postgres.d.ts +48 -0
  26. package/dist/cjs/helpers/postgres.js +50 -0
  27. package/dist/cjs/index.d.ts +13 -2
  28. package/dist/cjs/index.js +13 -2
  29. package/dist/cjs/kysely.d.ts +339 -2
  30. package/dist/cjs/kysely.js +465 -11
  31. package/dist/cjs/migration/migrator.d.ts +8 -0
  32. package/dist/cjs/migration/migrator.js +1 -1
  33. package/dist/cjs/operation-node/aggregate-function-node.d.ts +2 -1
  34. package/dist/cjs/operation-node/aggregate-function-node.js +4 -3
  35. package/dist/cjs/operation-node/alter-table-node.d.ts +3 -1
  36. package/dist/cjs/operation-node/collate-node.d.ts +13 -0
  37. package/dist/cjs/operation-node/collate-node.js +19 -0
  38. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/create-type-node.js +1 -1
  41. package/dist/cjs/operation-node/delete-query-node.d.ts +8 -2
  42. package/dist/cjs/operation-node/delete-query-node.js +11 -15
  43. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  45. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
  47. package/dist/cjs/operation-node/operation-node-transformer.d.ts +106 -97
  48. package/dist/cjs/operation-node/operation-node-transformer.js +352 -312
  49. package/dist/cjs/operation-node/operation-node-visitor.d.ts +9 -1
  50. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  51. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/or-action-node.d.ts +12 -0
  53. package/dist/cjs/operation-node/or-action-node.js +18 -0
  54. package/dist/cjs/operation-node/order-by-item-node.d.ts +5 -0
  55. package/dist/cjs/operation-node/order-by-item-node.js +6 -0
  56. package/dist/cjs/operation-node/primary-key-constraint-node.d.ts +29 -0
  57. package/dist/cjs/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  58. package/dist/cjs/operation-node/query-node.d.ts +7 -0
  59. package/dist/cjs/operation-node/query-node.js +15 -0
  60. package/dist/cjs/operation-node/refresh-materialized-view-node.d.ts +17 -0
  61. package/dist/cjs/operation-node/refresh-materialized-view-node.js +25 -0
  62. package/dist/cjs/operation-node/rename-constraint-node.d.ts +14 -0
  63. package/dist/cjs/operation-node/rename-constraint-node.js +20 -0
  64. package/dist/cjs/operation-node/select-query-node.d.ts +8 -2
  65. package/dist/cjs/operation-node/select-query-node.js +11 -15
  66. package/dist/cjs/operation-node/unique-constraint-node.d.ts +2 -0
  67. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  68. package/dist/cjs/operation-node/update-query-node.js +5 -2
  69. package/dist/cjs/parser/collate-parser.d.ts +1 -0
  70. package/dist/cjs/parser/collate-parser.js +2 -0
  71. package/dist/cjs/parser/delete-from-parser.d.ts +5 -0
  72. package/dist/cjs/parser/delete-from-parser.js +2 -0
  73. package/dist/cjs/parser/join-parser.d.ts +1 -1
  74. package/dist/cjs/parser/join-parser.js +7 -1
  75. package/dist/cjs/parser/merge-into-parser.d.ts +5 -0
  76. package/dist/cjs/parser/merge-into-parser.js +2 -0
  77. package/dist/cjs/parser/order-by-parser.d.ts +18 -5
  78. package/dist/cjs/parser/order-by-parser.js +24 -14
  79. package/dist/cjs/parser/savepoint-parser.d.ts +4 -0
  80. package/dist/cjs/parser/savepoint-parser.js +11 -0
  81. package/dist/cjs/parser/select-from-parser.d.ts +4 -0
  82. package/dist/cjs/parser/select-from-parser.js +2 -0
  83. package/dist/cjs/parser/table-parser.d.ts +2 -5
  84. package/dist/cjs/parser/update-parser.d.ts +5 -0
  85. package/dist/cjs/parser/update-parser.js +2 -0
  86. package/dist/cjs/parser/update-set-parser.d.ts +7 -4
  87. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  88. package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  89. package/dist/cjs/plugin/camel-case/camel-case-transformer.js +2 -2
  90. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  91. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  92. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  93. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  94. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +162 -0
  95. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  96. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +29 -0
  97. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  98. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.js +66 -0
  99. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.js +1 -1
  100. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  101. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.js +6 -4
  102. package/dist/cjs/plugin/with-schema/with-schema-plugin.js +1 -1
  103. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +6 -5
  104. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +29 -24
  105. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +83 -5
  106. package/dist/cjs/query-builder/aggregate-function-builder.js +15 -27
  107. package/dist/cjs/query-builder/cte-builder.js +0 -2
  108. package/dist/cjs/query-builder/delete-query-builder.d.ts +36 -47
  109. package/dist/cjs/query-builder/delete-query-builder.js +12 -78
  110. package/dist/cjs/query-builder/function-module.d.ts +31 -4
  111. package/dist/cjs/query-builder/insert-query-builder.d.ts +161 -6
  112. package/dist/cjs/query-builder/insert-query-builder.js +197 -10
  113. package/dist/cjs/query-builder/join-builder.js +0 -2
  114. package/dist/cjs/query-builder/merge-query-builder.d.ts +145 -3
  115. package/dist/cjs/query-builder/merge-query-builder.js +28 -7
  116. package/dist/cjs/query-builder/on-conflict-builder.js +0 -4
  117. package/dist/cjs/query-builder/order-by-interface.d.ts +176 -0
  118. package/dist/cjs/query-builder/order-by-interface.js +2 -0
  119. package/dist/cjs/query-builder/order-by-item-builder.d.ts +43 -0
  120. package/dist/cjs/query-builder/order-by-item-builder.js +75 -0
  121. package/dist/cjs/query-builder/over-builder.d.ts +43 -6
  122. package/dist/cjs/query-builder/over-builder.js +8 -25
  123. package/dist/cjs/query-builder/returning-interface.d.ts +20 -3
  124. package/dist/cjs/query-builder/select-query-builder.d.ts +279 -98
  125. package/dist/cjs/query-builder/select-query-builder.js +26 -26
  126. package/dist/cjs/query-builder/update-query-builder.d.ts +88 -9
  127. package/dist/cjs/query-builder/update-query-builder.js +17 -15
  128. package/dist/cjs/query-compiler/compiled-query.d.ts +2 -0
  129. package/dist/cjs/query-compiler/compiled-query.js +2 -0
  130. package/dist/cjs/query-compiler/default-query-compiler.d.ts +17 -2
  131. package/dist/cjs/query-compiler/default-query-compiler.js +97 -2
  132. package/dist/cjs/query-compiler/query-compiler.d.ts +4 -2
  133. package/dist/cjs/query-creator.d.ts +23 -25
  134. package/dist/cjs/query-creator.js +280 -8
  135. package/dist/cjs/query-executor/default-query-executor.d.ts +2 -1
  136. package/dist/cjs/query-executor/default-query-executor.js +2 -2
  137. package/dist/cjs/query-executor/query-executor-base.js +7 -25
  138. package/dist/cjs/raw-builder/raw-builder.js +0 -3
  139. package/dist/cjs/raw-builder/sql.d.ts +3 -3
  140. package/dist/cjs/raw-builder/sql.js +1 -1
  141. package/dist/cjs/schema/alter-column-builder.js +0 -3
  142. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  143. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  144. package/dist/cjs/schema/alter-table-add-index-builder.js +0 -2
  145. package/dist/cjs/schema/alter-table-builder.d.ts +7 -3
  146. package/dist/cjs/schema/alter-table-builder.js +21 -10
  147. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +0 -2
  148. package/dist/cjs/schema/alter-table-executor.js +0 -2
  149. package/dist/cjs/schema/check-constraint-builder.d.ts +13 -0
  150. package/dist/cjs/schema/check-constraint-builder.js +20 -0
  151. package/dist/cjs/schema/column-definition-builder.js +0 -2
  152. package/dist/cjs/schema/create-index-builder.js +1 -3
  153. package/dist/cjs/schema/create-schema-builder.js +0 -2
  154. package/dist/cjs/schema/create-table-builder.d.ts +5 -4
  155. package/dist/cjs/schema/create-table-builder.js +9 -7
  156. package/dist/cjs/schema/create-type-builder.d.ts +1 -1
  157. package/dist/cjs/schema/create-type-builder.js +0 -2
  158. package/dist/cjs/schema/create-view-builder.js +0 -2
  159. package/dist/cjs/schema/drop-index-builder.js +0 -2
  160. package/dist/cjs/schema/drop-schema-builder.js +0 -2
  161. package/dist/cjs/schema/drop-table-builder.js +0 -2
  162. package/dist/cjs/schema/drop-type-builder.js +0 -2
  163. package/dist/cjs/schema/drop-view-builder.js +0 -2
  164. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +9 -0
  165. package/dist/cjs/schema/foreign-key-constraint-builder.js +16 -2
  166. package/dist/cjs/schema/primary-key-constraint-builder.d.ts +17 -0
  167. package/dist/cjs/schema/primary-key-constraint-builder.js +37 -0
  168. package/dist/cjs/schema/refresh-materialized-view-builder.d.ts +47 -0
  169. package/dist/cjs/schema/refresh-materialized-view-builder.js +75 -0
  170. package/dist/cjs/schema/schema.d.ts +14 -0
  171. package/dist/cjs/schema/schema.js +21 -0
  172. package/dist/cjs/schema/unique-constraint-builder.d.ts +10 -1
  173. package/dist/cjs/schema/unique-constraint-builder.js +26 -5
  174. package/dist/cjs/util/infer-result.d.ts +1 -1
  175. package/dist/cjs/util/log.d.ts +1 -0
  176. package/dist/cjs/util/log.js +3 -2
  177. package/dist/cjs/util/provide-controlled-connection.d.ts +7 -0
  178. package/dist/cjs/util/provide-controlled-connection.js +24 -0
  179. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  180. package/dist/esm/dialect/mssql/mssql-driver.d.ts +6 -3
  181. package/dist/esm/dialect/mssql/mssql-driver.js +33 -19
  182. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  183. package/dist/esm/dialect/mssql/mssql-query-compiler.js +11 -0
  184. package/dist/esm/dialect/mysql/mysql-driver.d.ts +4 -0
  185. package/dist/esm/dialect/mysql/mysql-driver.js +27 -12
  186. package/dist/esm/dialect/postgres/postgres-driver.d.ts +4 -0
  187. package/dist/esm/dialect/postgres/postgres-driver.js +28 -18
  188. package/dist/esm/dialect/postgres/postgres-introspector.js +7 -17
  189. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +4 -0
  190. package/dist/esm/dialect/sqlite/sqlite-driver.js +19 -13
  191. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  192. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  193. package/dist/esm/driver/database-connection.d.ts +0 -4
  194. package/dist/esm/driver/driver.d.ts +17 -0
  195. package/dist/esm/driver/driver.js +11 -0
  196. package/dist/esm/driver/dummy-driver.d.ts +3 -0
  197. package/dist/esm/driver/dummy-driver.js +9 -0
  198. package/dist/esm/driver/runtime-driver.d.ts +4 -0
  199. package/dist/esm/driver/runtime-driver.js +43 -3
  200. package/dist/esm/expression/expression-builder.d.ts +7 -10
  201. package/dist/esm/helpers/postgres.d.ts +48 -0
  202. package/dist/esm/helpers/postgres.js +49 -0
  203. package/dist/esm/index.d.ts +13 -2
  204. package/dist/esm/index.js +11 -1
  205. package/dist/esm/kysely.d.ts +339 -2
  206. package/dist/esm/kysely.js +461 -10
  207. package/dist/esm/migration/migrator.d.ts +8 -0
  208. package/dist/esm/migration/migrator.js +1 -1
  209. package/dist/esm/operation-node/aggregate-function-node.d.ts +2 -1
  210. package/dist/esm/operation-node/aggregate-function-node.js +4 -3
  211. package/dist/esm/operation-node/alter-table-node.d.ts +3 -1
  212. package/dist/esm/operation-node/collate-node.d.ts +13 -0
  213. package/dist/esm/operation-node/collate-node.js +17 -0
  214. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  215. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  216. package/dist/esm/operation-node/create-type-node.js +1 -1
  217. package/dist/esm/operation-node/delete-query-node.d.ts +8 -2
  218. package/dist/esm/operation-node/delete-query-node.js +11 -15
  219. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -0
  220. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  221. package/dist/esm/operation-node/join-node.d.ts +1 -1
  222. package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
  223. package/dist/esm/operation-node/operation-node-transformer.d.ts +106 -97
  224. package/dist/esm/operation-node/operation-node-transformer.js +352 -312
  225. package/dist/esm/operation-node/operation-node-visitor.d.ts +9 -1
  226. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  227. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  228. package/dist/esm/operation-node/or-action-node.d.ts +12 -0
  229. package/dist/esm/operation-node/or-action-node.js +16 -0
  230. package/dist/esm/operation-node/order-by-item-node.d.ts +5 -0
  231. package/dist/esm/operation-node/order-by-item-node.js +6 -0
  232. package/dist/esm/operation-node/primary-key-constraint-node.d.ts +29 -0
  233. package/dist/esm/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  234. package/dist/esm/operation-node/query-node.d.ts +7 -0
  235. package/dist/esm/operation-node/query-node.js +15 -0
  236. package/dist/esm/operation-node/refresh-materialized-view-node.d.ts +17 -0
  237. package/dist/esm/operation-node/refresh-materialized-view-node.js +23 -0
  238. package/dist/esm/operation-node/rename-constraint-node.d.ts +14 -0
  239. package/dist/esm/operation-node/rename-constraint-node.js +18 -0
  240. package/dist/esm/operation-node/select-query-node.d.ts +8 -2
  241. package/dist/esm/operation-node/select-query-node.js +11 -15
  242. package/dist/esm/operation-node/unique-constraint-node.d.ts +2 -0
  243. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  244. package/dist/esm/operation-node/update-query-node.js +5 -2
  245. package/dist/esm/parser/collate-parser.d.ts +1 -0
  246. package/dist/esm/parser/collate-parser.js +2 -0
  247. package/dist/esm/parser/delete-from-parser.d.ts +5 -0
  248. package/dist/esm/parser/delete-from-parser.js +2 -0
  249. package/dist/esm/parser/join-parser.d.ts +1 -1
  250. package/dist/esm/parser/join-parser.js +7 -1
  251. package/dist/esm/parser/merge-into-parser.d.ts +5 -0
  252. package/dist/esm/parser/merge-into-parser.js +2 -0
  253. package/dist/esm/parser/order-by-parser.d.ts +18 -5
  254. package/dist/esm/parser/order-by-parser.js +27 -17
  255. package/dist/esm/parser/savepoint-parser.d.ts +4 -0
  256. package/dist/esm/parser/savepoint-parser.js +9 -0
  257. package/dist/esm/parser/select-from-parser.d.ts +4 -0
  258. package/dist/esm/parser/select-from-parser.js +2 -0
  259. package/dist/esm/parser/table-parser.d.ts +2 -5
  260. package/dist/esm/parser/update-parser.d.ts +5 -0
  261. package/dist/esm/parser/update-parser.js +2 -0
  262. package/dist/esm/parser/update-set-parser.d.ts +7 -4
  263. package/dist/esm/plugin/camel-case/camel-case-plugin.js +1 -1
  264. package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  265. package/dist/esm/plugin/camel-case/camel-case-transformer.js +2 -2
  266. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  267. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  268. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  269. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  270. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +159 -0
  271. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  272. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +26 -0
  273. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  274. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.js +63 -0
  275. package/dist/esm/plugin/immediate-value/immediate-value-plugin.js +1 -1
  276. package/dist/esm/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  277. package/dist/esm/plugin/immediate-value/immediate-value-transformer.js +6 -4
  278. package/dist/esm/plugin/with-schema/with-schema-plugin.js +1 -1
  279. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +6 -5
  280. package/dist/esm/plugin/with-schema/with-schema-transformer.js +29 -24
  281. package/dist/esm/query-builder/aggregate-function-builder.d.ts +83 -5
  282. package/dist/esm/query-builder/aggregate-function-builder.js +15 -27
  283. package/dist/esm/query-builder/cte-builder.js +0 -2
  284. package/dist/esm/query-builder/delete-query-builder.d.ts +36 -47
  285. package/dist/esm/query-builder/delete-query-builder.js +12 -78
  286. package/dist/esm/query-builder/function-module.d.ts +31 -4
  287. package/dist/esm/query-builder/insert-query-builder.d.ts +161 -6
  288. package/dist/esm/query-builder/insert-query-builder.js +197 -10
  289. package/dist/esm/query-builder/join-builder.js +0 -2
  290. package/dist/esm/query-builder/merge-query-builder.d.ts +145 -3
  291. package/dist/esm/query-builder/merge-query-builder.js +29 -8
  292. package/dist/esm/query-builder/on-conflict-builder.js +0 -4
  293. package/dist/esm/query-builder/order-by-interface.d.ts +176 -0
  294. package/dist/esm/query-builder/order-by-interface.js +2 -0
  295. package/dist/esm/query-builder/order-by-item-builder.d.ts +43 -0
  296. package/dist/esm/query-builder/order-by-item-builder.js +72 -0
  297. package/dist/esm/query-builder/over-builder.d.ts +43 -6
  298. package/dist/esm/query-builder/over-builder.js +8 -25
  299. package/dist/esm/query-builder/returning-interface.d.ts +20 -3
  300. package/dist/esm/query-builder/select-query-builder.d.ts +279 -98
  301. package/dist/esm/query-builder/select-query-builder.js +26 -26
  302. package/dist/esm/query-builder/update-query-builder.d.ts +88 -9
  303. package/dist/esm/query-builder/update-query-builder.js +17 -15
  304. package/dist/esm/query-compiler/compiled-query.d.ts +2 -0
  305. package/dist/esm/query-compiler/compiled-query.js +2 -0
  306. package/dist/esm/query-compiler/default-query-compiler.d.ts +17 -2
  307. package/dist/esm/query-compiler/default-query-compiler.js +97 -2
  308. package/dist/esm/query-compiler/query-compiler.d.ts +4 -2
  309. package/dist/esm/query-creator.d.ts +23 -25
  310. package/dist/esm/query-creator.js +281 -9
  311. package/dist/esm/query-executor/default-query-executor.d.ts +2 -1
  312. package/dist/esm/query-executor/default-query-executor.js +2 -2
  313. package/dist/esm/query-executor/query-executor-base.js +7 -25
  314. package/dist/esm/raw-builder/raw-builder.js +0 -3
  315. package/dist/esm/raw-builder/sql.d.ts +3 -3
  316. package/dist/esm/raw-builder/sql.js +1 -1
  317. package/dist/esm/schema/alter-column-builder.js +0 -3
  318. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  319. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  320. package/dist/esm/schema/alter-table-add-index-builder.js +0 -2
  321. package/dist/esm/schema/alter-table-builder.d.ts +7 -3
  322. package/dist/esm/schema/alter-table-builder.js +22 -11
  323. package/dist/esm/schema/alter-table-drop-constraint-builder.js +0 -2
  324. package/dist/esm/schema/alter-table-executor.js +0 -2
  325. package/dist/esm/schema/check-constraint-builder.d.ts +13 -0
  326. package/dist/esm/schema/check-constraint-builder.js +17 -0
  327. package/dist/esm/schema/column-definition-builder.js +0 -2
  328. package/dist/esm/schema/create-index-builder.js +1 -3
  329. package/dist/esm/schema/create-schema-builder.js +0 -2
  330. package/dist/esm/schema/create-table-builder.d.ts +5 -4
  331. package/dist/esm/schema/create-table-builder.js +10 -8
  332. package/dist/esm/schema/create-type-builder.d.ts +1 -1
  333. package/dist/esm/schema/create-type-builder.js +0 -2
  334. package/dist/esm/schema/create-view-builder.js +0 -2
  335. package/dist/esm/schema/drop-index-builder.js +0 -2
  336. package/dist/esm/schema/drop-schema-builder.js +0 -2
  337. package/dist/esm/schema/drop-table-builder.js +0 -2
  338. package/dist/esm/schema/drop-type-builder.js +0 -2
  339. package/dist/esm/schema/drop-view-builder.js +0 -2
  340. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +9 -0
  341. package/dist/esm/schema/foreign-key-constraint-builder.js +16 -2
  342. package/dist/esm/schema/primary-key-constraint-builder.d.ts +17 -0
  343. package/dist/esm/schema/primary-key-constraint-builder.js +34 -0
  344. package/dist/esm/schema/refresh-materialized-view-builder.d.ts +47 -0
  345. package/dist/esm/schema/refresh-materialized-view-builder.js +72 -0
  346. package/dist/esm/schema/schema.d.ts +14 -0
  347. package/dist/esm/schema/schema.js +21 -0
  348. package/dist/esm/schema/unique-constraint-builder.d.ts +10 -1
  349. package/dist/esm/schema/unique-constraint-builder.js +26 -5
  350. package/dist/esm/util/infer-result.d.ts +1 -1
  351. package/dist/esm/util/log.d.ts +1 -0
  352. package/dist/esm/util/log.js +3 -2
  353. package/dist/esm/util/provide-controlled-connection.d.ts +7 -0
  354. package/dist/esm/util/provide-controlled-connection.js +22 -0
  355. package/outdated-typescript.d.ts +5 -0
  356. package/package.json +16 -2
  357. package/CONTRIBUTING.md +0 -168
  358. package/dist/cjs/operation-node/primary-constraint-node.d.ts +0 -15
  359. package/dist/cjs/util/prevent-await.d.ts +0 -1
  360. package/dist/cjs/util/prevent-await.js +0 -13
  361. package/dist/esm/operation-node/primary-constraint-node.d.ts +0 -15
  362. package/dist/esm/util/prevent-await.d.ts +0 -1
  363. 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;
@@ -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
  *
@@ -920,4 +917,4 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
920
917
  }
921
918
  export declare function createExpressionBuilder<DB, TB extends keyof DB>(executor?: QueryExecutor): ExpressionBuilder<DB, TB>;
922
919
  export declare function expressionBuilder<DB, TB extends keyof DB>(_: SelectQueryBuilder<DB, TB, any>): ExpressionBuilder<DB, TB>;
923
- 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>;
@@ -152,3 +152,52 @@ export function jsonObjectFrom(expr) {
152
152
  export function jsonBuildObject(obj) {
153
153
  return sql `json_build_object(${sql.join(Object.keys(obj).flatMap((k) => [sql.lit(k), obj[k]]))})`;
154
154
  }
155
+ /**
156
+ * The PostgreSQL `merge_action` function.
157
+ *
158
+ * This function can be used in a `returning` clause to get the action that was
159
+ * performed in a `mergeInto` query. The function returns one of the following
160
+ * strings: `'INSERT'`, `'UPDATE'`, or `'DELETE'`.
161
+ *
162
+ * ### Examples
163
+ *
164
+ * ```ts
165
+ * import { mergeAction } from 'kysely/helpers/postgres'
166
+ *
167
+ * const result = await db
168
+ * .mergeInto('person as p')
169
+ * .using('person_backup as pb', 'p.id', 'pb.id')
170
+ * .whenMatched()
171
+ * .thenUpdateSet(({ ref }) => ({
172
+ * first_name: ref('pb.first_name'),
173
+ * updated_at: ref('pb.updated_at').$castTo<string | null>(),
174
+ * }))
175
+ * .whenNotMatched()
176
+ * .thenInsertValues(({ ref}) => ({
177
+ * id: ref('pb.id'),
178
+ * first_name: ref('pb.first_name'),
179
+ * created_at: ref('pb.updated_at'),
180
+ * updated_at: ref('pb.updated_at').$castTo<string | null>(),
181
+ * }))
182
+ * .returning([mergeAction().as('action'), 'p.id', 'p.updated_at'])
183
+ * .execute()
184
+ *
185
+ * result[0].action
186
+ * ```
187
+ *
188
+ * The generated SQL (PostgreSQL):
189
+ *
190
+ * ```sql
191
+ * merge into "person" as "p"
192
+ * using "person_backup" as "pb" on "p"."id" = "pb"."id"
193
+ * when matched then update set
194
+ * "first_name" = "pb"."first_name",
195
+ * "updated_at" = "pb"."updated_at"::text
196
+ * when not matched then insert values ("id", "first_name", "created_at", "updated_at")
197
+ * values ("pb"."id", "pb"."first_name", "pb"."updated_at", "pb"."updated_at")
198
+ * returning merge_action() as "action", "p"."id", "p"."updated_at"
199
+ * ```
200
+ */
201
+ export function mergeAction() {
202
+ return sql `merge_action()`;
203
+ }
@@ -7,6 +7,7 @@ export * from './query-builder/where-interface.js';
7
7
  export * from './query-builder/returning-interface.js';
8
8
  export * from './query-builder/output-interface.js';
9
9
  export * from './query-builder/having-interface.js';
10
+ export * from './query-builder/order-by-interface.js';
10
11
  export * from './query-builder/select-query-builder.js';
11
12
  export * from './query-builder/insert-query-builder.js';
12
13
  export * from './query-builder/update-query-builder.js';
@@ -23,6 +24,7 @@ export * from './query-builder/case-builder.js';
23
24
  export * from './query-builder/json-path-builder.js';
24
25
  export * from './query-builder/merge-query-builder.js';
25
26
  export * from './query-builder/merge-result.js';
27
+ export * from './query-builder/order-by-item-builder.js';
26
28
  export * from './raw-builder/raw-builder.js';
27
29
  export * from './raw-builder/sql.js';
28
30
  export * from './query-executor/query-executor.js';
@@ -44,6 +46,7 @@ export * from './schema/column-definition-builder.js';
44
46
  export * from './schema/foreign-key-constraint-builder.js';
45
47
  export * from './schema/alter-table-builder.js';
46
48
  export * from './schema/create-view-builder.js';
49
+ export * from './schema/refresh-materialized-view-builder.js';
47
50
  export * from './schema/drop-view-builder.js';
48
51
  export * from './schema/alter-column-builder.js';
49
52
  export * from './dynamic/dynamic.js';
@@ -90,6 +93,8 @@ export * from './plugin/camel-case/camel-case-plugin.js';
90
93
  export * from './plugin/deduplicate-joins/deduplicate-joins-plugin.js';
91
94
  export * from './plugin/with-schema/with-schema-plugin.js';
92
95
  export * from './plugin/parse-json-results/parse-json-results-plugin.js';
96
+ export * from './plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js';
97
+ export * from './plugin/handle-empty-in-lists/handle-empty-in-lists.js';
93
98
  export * from './operation-node/add-column-node.js';
94
99
  export * from './operation-node/add-constraint-node.js';
95
100
  export * from './operation-node/add-index-node.js';
@@ -102,6 +107,7 @@ export * from './operation-node/binary-operation-node.js';
102
107
  export * from './operation-node/case-node.js';
103
108
  export * from './operation-node/cast-node.js';
104
109
  export * from './operation-node/check-constraint-node.js';
110
+ export * from './operation-node/collate-node.js';
105
111
  export * from './operation-node/column-definition-node.js';
106
112
  export * from './operation-node/column-node.js';
107
113
  export * from './operation-node/column-update-node.js';
@@ -113,6 +119,7 @@ export * from './operation-node/create-schema-node.js';
113
119
  export * from './operation-node/create-table-node.js';
114
120
  export * from './operation-node/create-type-node.js';
115
121
  export * from './operation-node/create-view-node.js';
122
+ export * from './operation-node/refresh-materialized-view-node.js';
116
123
  export * from './operation-node/data-type-node.js';
117
124
  export * from './operation-node/default-insert-value-node.js';
118
125
  export * from './operation-node/default-value-node.js';
@@ -154,6 +161,7 @@ export * from './operation-node/operation-node-transformer.js';
154
161
  export * from './operation-node/operation-node-visitor.js';
155
162
  export * from './operation-node/operation-node.js';
156
163
  export * from './operation-node/operator-node.js';
164
+ export * from './operation-node/or-action-node.js';
157
165
  export * from './operation-node/or-node.js';
158
166
  export * from './operation-node/order-by-item-node.js';
159
167
  export * from './operation-node/order-by-node.js';
@@ -162,13 +170,14 @@ export * from './operation-node/over-node.js';
162
170
  export * from './operation-node/parens-node.js';
163
171
  export * from './operation-node/partition-by-item-node.js';
164
172
  export * from './operation-node/partition-by-node.js';
165
- export * from './operation-node/primary-constraint-node.js';
173
+ export * from './operation-node/primary-key-constraint-node.js';
166
174
  export * from './operation-node/primitive-value-list-node.js';
167
175
  export * from './operation-node/query-node.js';
168
176
  export * from './operation-node/raw-node.js';
169
177
  export * from './operation-node/reference-node.js';
170
178
  export * from './operation-node/references-node.js';
171
179
  export * from './operation-node/rename-column-node.js';
180
+ export * from './operation-node/rename-constraint-node.js';
172
181
  export * from './operation-node/returning-node.js';
173
182
  export * from './operation-node/schemable-identifier-node.js';
174
183
  export * from './operation-node/select-all-node.js';
@@ -198,6 +207,7 @@ export * from './util/log.js';
198
207
  export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, Nullable, NotNull, } from './util/type-utils.js';
199
208
  export * from './util/infer-result.js';
200
209
  export { logOnce } from './util/log-once.js';
210
+ export { createQueryId, QueryId } from './util/query-id.js';
201
211
  export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js';
202
212
  export { ReferenceExpression, ReferenceExpressionOrList, SimpleReferenceExpression, StringReference, ExtractTypeFromStringReference, ExtractTypeFromReferenceExpression, } from './parser/reference-parser.js';
203
213
  export { ValueExpression, ValueExpressionOrList, } from './parser/value-parser.js';
@@ -205,7 +215,8 @@ export { SimpleTableReference, TableExpression, TableExpressionOrList, } from '.
205
215
  export { JoinReferenceExpression, JoinCallbackExpression, } from './parser/join-parser.js';
206
216
  export { InsertObject } from './parser/insert-values-parser.js';
207
217
  export { UpdateObject } from './parser/update-set-parser.js';
208
- export { OrderByExpression, OrderByDirectionExpression, } from './parser/order-by-parser.js';
218
+ export { OrderByExpression, OrderByDirectionExpression, OrderByModifiers, OrderByDirection, OrderByModifiersCallbackExpression, } from './parser/order-by-parser.js';
209
219
  export { ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList, FilterObject, } from './parser/binary-operation-parser.js';
210
220
  export { ExistsExpression } from './parser/unary-operation-parser.js';
211
221
  export { OperandExpression, ExpressionOrFactory, } from './parser/expression-parser.js';
222
+ export { Collation } from './parser/collate-parser.js';