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
@@ -8,7 +8,6 @@ import { parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
8
8
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
9
9
  import { QueryNode } from '../operation-node/query-node.js';
10
10
  import { parseOrderBy, } from '../parser/order-by-parser.js';
11
- import { preventAwait } from '../util/prevent-await.js';
12
11
  import { LimitNode } from '../operation-node/limit-node.js';
13
12
  import { OffsetNode } from '../operation-node/offset-node.js';
14
13
  import { asArray, freeze } from '../util/object-utils.js';
@@ -129,45 +128,45 @@ class SelectQueryBuilderImpl {
129
128
  });
130
129
  }
131
130
  innerJoin(...args) {
132
- return new SelectQueryBuilderImpl({
133
- ...this.#props,
134
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
135
- });
131
+ return this.#join('InnerJoin', args);
136
132
  }
137
133
  leftJoin(...args) {
138
- return new SelectQueryBuilderImpl({
139
- ...this.#props,
140
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
141
- });
134
+ return this.#join('LeftJoin', args);
142
135
  }
143
136
  rightJoin(...args) {
144
- return new SelectQueryBuilderImpl({
145
- ...this.#props,
146
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
147
- });
137
+ return this.#join('RightJoin', args);
148
138
  }
149
139
  fullJoin(...args) {
150
- return new SelectQueryBuilderImpl({
151
- ...this.#props,
152
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
153
- });
140
+ return this.#join('FullJoin', args);
141
+ }
142
+ crossJoin(...args) {
143
+ return this.#join('CrossJoin', args);
154
144
  }
155
145
  innerJoinLateral(...args) {
156
- return new SelectQueryBuilderImpl({
157
- ...this.#props,
158
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LateralInnerJoin', args)),
159
- });
146
+ return this.#join('LateralInnerJoin', args);
160
147
  }
161
148
  leftJoinLateral(...args) {
149
+ return this.#join('LateralLeftJoin', args);
150
+ }
151
+ crossJoinLateral(...args) {
152
+ return this.#join('LateralCrossJoin', args);
153
+ }
154
+ crossApply(...args) {
155
+ return this.#join('CrossApply', args);
156
+ }
157
+ outerApply(...args) {
158
+ return this.#join('OuterApply', args);
159
+ }
160
+ #join(joinType, args) {
162
161
  return new SelectQueryBuilderImpl({
163
162
  ...this.#props,
164
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LateralLeftJoin', args)),
163
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(joinType, args)),
165
164
  });
166
165
  }
167
166
  orderBy(...args) {
168
167
  return new SelectQueryBuilderImpl({
169
168
  ...this.#props,
170
- queryNode: SelectQueryNode.cloneWithOrderByItems(this.#props.queryNode, parseOrderBy(args)),
169
+ queryNode: QueryNode.cloneWithOrderByItems(this.#props.queryNode, parseOrderBy(args)),
171
170
  });
172
171
  }
173
172
  groupBy(groupBy) {
@@ -266,7 +265,7 @@ class SelectQueryBuilderImpl {
266
265
  clearOrderBy() {
267
266
  return new SelectQueryBuilderImpl({
268
267
  ...this.#props,
269
- queryNode: SelectQueryNode.cloneWithoutOrderBy(this.#props.queryNode),
268
+ queryNode: QueryNode.cloneWithoutOrderBy(this.#props.queryNode),
270
269
  });
271
270
  }
272
271
  clearGroupBy() {
@@ -298,6 +297,9 @@ class SelectQueryBuilderImpl {
298
297
  $asTuple() {
299
298
  return new ExpressionWrapper(this.toOperationNode());
300
299
  }
300
+ $asScalar() {
301
+ return new ExpressionWrapper(this.toOperationNode());
302
+ }
301
303
  withPlugin(plugin) {
302
304
  return new SelectQueryBuilderImpl({
303
305
  ...this.#props,
@@ -344,7 +346,6 @@ class SelectQueryBuilderImpl {
344
346
  return await builder.execute();
345
347
  }
346
348
  }
347
- preventAwait(SelectQueryBuilderImpl, "don't await SelectQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
348
349
  export function createSelectQueryBuilder(props) {
349
350
  return new SelectQueryBuilderImpl(props);
350
351
  }
@@ -371,4 +372,3 @@ class AliasedSelectQueryBuilderImpl {
371
372
  return AliasNode.create(this.#queryBuilder.toOperationNode(), IdentifierNode.create(this.#alias));
372
373
  }
373
374
  }
374
- preventAwait(AliasedSelectQueryBuilderImpl, "don't await AliasedSelectQueryBuilder instances directly. AliasedSelectQueryBuilder should never be executed directly since it's always a part of another query.");
@@ -15,7 +15,7 @@ import { QueryId } from '../util/query-id.js';
15
15
  import { UpdateResult } from './update-result.js';
16
16
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
17
17
  import { WhereInterface } from './where-interface.js';
18
- import { ReturningInterface } from './returning-interface.js';
18
+ import { MultiTableReturningInterface } from './returning-interface.js';
19
19
  import { NoResultErrorConstructor } from './no-result-error.js';
20
20
  import { Explainable, ExplainFormat } from '../util/explainable.js';
21
21
  import { AliasedExpression, Expression } from '../expression/expression.js';
@@ -25,7 +25,9 @@ import { Streamable } from '../util/streamable.js';
25
25
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
26
26
  import { ValueExpression } from '../parser/value-parser.js';
27
27
  import { OutputCallback, OutputExpression, OutputInterface, OutputPrefix, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
28
- export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
28
+ import { OrderByInterface } from './order-by-interface.js';
29
+ import { DirectedOrderByStringReference, OrderByExpression, OrderByModifiers } from '../parser/order-by-parser.js';
30
+ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, MultiTableReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O>, OrderByInterface<DB, TB, never>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
29
31
  #private;
30
32
  constructor(props: UpdateQueryBuilderProps);
31
33
  /**
@@ -599,6 +601,50 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
599
601
  */
600
602
  fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilderWithFullJoin<DB, UT, TB, O, TE>;
601
603
  fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilderWithFullJoin<DB, UT, TB, O, TE>;
604
+ /**
605
+ * @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
606
+ */
607
+ orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers?: OrderByModifiers): UpdateQueryBuilder<DB, UT, TB, O>;
608
+ /**
609
+ * @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
610
+ * @deprecated It does ~2-2.6x more compile-time instantiations compared to multiple chained `orderBy(expr, modifiers?)` calls (in `order by` clauses with reasonable item counts), and has broken autocompletion.
611
+ */
612
+ orderBy<OE extends OrderByExpression<DB, TB, {}> | DirectedOrderByStringReference<DB, TB, {}>>(exprs: ReadonlyArray<OE>): UpdateQueryBuilder<DB, UT, TB, O>;
613
+ /**
614
+ * @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
615
+ * @deprecated It does ~2.9x more compile-time instantiations compared to a `orderBy(expr, direction)` call.
616
+ */
617
+ orderBy<OE extends DirectedOrderByStringReference<DB, TB, {}>>(expr: OE): UpdateQueryBuilder<DB, UT, TB, O>;
618
+ /**
619
+ * @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
620
+ * @deprecated Use `orderBy(expr, (ob) => ...)` instead.
621
+ */
622
+ orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers: Expression<any>): UpdateQueryBuilder<DB, UT, TB, O>;
623
+ /**
624
+ * Clears the `order by` clause from the query.
625
+ *
626
+ * See {@link orderBy} for adding an `order by` clause or item to a query.
627
+ *
628
+ * ### Examples
629
+ *
630
+ * ```ts
631
+ * const query = db
632
+ * .selectFrom('person')
633
+ * .selectAll()
634
+ * .orderBy('id', 'desc')
635
+ *
636
+ * const results = await query
637
+ * .clearOrderBy()
638
+ * .execute()
639
+ * ```
640
+ *
641
+ * The generated SQL (PostgreSQL):
642
+ *
643
+ * ```sql
644
+ * select * from "person"
645
+ * ```
646
+ */
647
+ clearOrderBy(): UpdateQueryBuilder<DB, UT, TB, O>;
602
648
  /**
603
649
  * Adds a limit clause to the update query for supported databases, such as MySQL.
604
650
  *
@@ -651,8 +697,6 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
651
697
  * })
652
698
  * .where('id', '=', 1)
653
699
  * .executeTakeFirst()
654
- *
655
- * console.log(result.numUpdatedRows)
656
700
  * ```
657
701
  *
658
702
  * The generated SQL (PostgreSQL):
@@ -676,8 +720,6 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
676
720
  * }))
677
721
  * .where('id', '=', 1)
678
722
  * .executeTakeFirst()
679
- *
680
- * console.log(result.numUpdatedRows)
681
723
  * ```
682
724
  *
683
725
  * The generated SQL (PostgreSQL):
@@ -762,6 +804,43 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
762
804
  * "last_name" = $3 || $4
763
805
  * where "id" = $5
764
806
  * ```
807
+ *
808
+ * <!-- siteExample("update", "MySQL joins", 30) -->
809
+ *
810
+ * MySQL allows you to join tables directly to the "main" table and update
811
+ * rows of all joined tables. This is possible by passing all tables to the
812
+ * `updateTable` method as a list and adding the `ON` conditions as `WHERE`
813
+ * statements. You can then use the `set(column, value)` variant to update
814
+ * columns using table qualified names.
815
+ *
816
+ * The `UpdateQueryBuilder` also has `innerJoin` etc. join methods, but those
817
+ * can only be used as part of a PostgreSQL `update set from join` query.
818
+ * Due to type complexity issues, we unfortunately can't make the same
819
+ * methods work in both cases.
820
+ *
821
+ * ```ts
822
+ * const result = await db
823
+ * .updateTable(['person', 'pet'])
824
+ * .set('person.first_name', 'Updated person')
825
+ * .set('pet.name', 'Updated doggo')
826
+ * .whereRef('person.id', '=', 'pet.owner_id')
827
+ * .where('person.id', '=', 1)
828
+ * .executeTakeFirst()
829
+ * ```
830
+ *
831
+ * The generated SQL (MySQL):
832
+ *
833
+ * ```sql
834
+ * update
835
+ * `person`,
836
+ * `pet`
837
+ * set
838
+ * `person`.`first_name` = ?,
839
+ * `pet`.`name` = ?
840
+ * where
841
+ * `person`.`id` = `pet`.`owner_id`
842
+ * and `person`.`id` = ?
843
+ * ```
765
844
  */
766
845
  set(update: UpdateObjectExpression<DB, TB, UT>): UpdateQueryBuilder<DB, UT, TB, O>;
767
846
  set<RE extends ReferenceExpression<DB, UT>>(key: RE, value: ValueExpression<DB, TB, ExtractUpdateTypeFromReferenceExpression<DB, UT, RE>>): UpdateQueryBuilder<DB, UT, TB, O>;
@@ -769,7 +848,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
769
848
  * Allows you to return data from modified rows.
770
849
  *
771
850
  * On supported databases like PostgreSQL, this method can be chained to
772
- * `insert`, `update` and `delete` queries to return data.
851
+ * `insert`, `update`, `delete` and `merge` queries to return data.
773
852
  *
774
853
  * Note that on SQLite you need to give aliases for the expressions to avoid
775
854
  * [this bug](https://sqlite.org/forum/forumpost/033daf0b32) in SQLite.
@@ -828,8 +907,8 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
828
907
  returning<CB extends SelectCallback<DB, TB>>(callback: CB): UpdateQueryBuilder<DB, UT, TB, ReturningCallbackRow<DB, TB, O, CB>>;
829
908
  returning<SE extends SelectExpression<DB, TB>>(selection: SE): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SE>>;
830
909
  /**
831
- * Adds a `returning *` to an insert/update/delete query on databases
832
- * that support `returning` such as PostgreSQL.
910
+ * Adds a `returning *` or `returning table.*` to an insert/update/delete/merge
911
+ * query on databases that support `returning` such as PostgreSQL.
833
912
  *
834
913
  * Also see the {@link returning} method.
835
914
  */
@@ -5,7 +5,6 @@ import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js';
5
5
  import { QueryNode } from '../operation-node/query-node.js';
6
6
  import { UpdateQueryNode } from '../operation-node/update-query-node.js';
7
7
  import { parseUpdate, } from '../parser/update-set-parser.js';
8
- import { preventAwait } from '../util/prevent-await.js';
9
8
  import { freeze } from '../util/object-utils.js';
10
9
  import { UpdateResult } from './update-result.js';
11
10
  import { isNoResultErrorConstructor, NoResultError, } from './no-result-error.js';
@@ -13,6 +12,7 @@ import { parseReferentialBinaryOperation, parseValueBinaryOperationOrExpression,
13
12
  import { parseValueExpression, } from '../parser/value-parser.js';
14
13
  import { LimitNode } from '../operation-node/limit-node.js';
15
14
  import { parseTop } from '../parser/top-parser.js';
15
+ import { parseOrderBy, } from '../parser/order-by-parser.js';
16
16
  export class UpdateQueryBuilder {
17
17
  #props;
18
18
  constructor(props) {
@@ -88,27 +88,33 @@ export class UpdateQueryBuilder {
88
88
  });
89
89
  }
90
90
  innerJoin(...args) {
91
- return new UpdateQueryBuilder({
92
- ...this.#props,
93
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
94
- });
91
+ return this.#join('InnerJoin', args);
95
92
  }
96
93
  leftJoin(...args) {
94
+ return this.#join('LeftJoin', args);
95
+ }
96
+ rightJoin(...args) {
97
+ return this.#join('RightJoin', args);
98
+ }
99
+ fullJoin(...args) {
100
+ return this.#join('FullJoin', args);
101
+ }
102
+ #join(joinType, args) {
97
103
  return new UpdateQueryBuilder({
98
104
  ...this.#props,
99
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
105
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(joinType, args)),
100
106
  });
101
107
  }
102
- rightJoin(...args) {
108
+ orderBy(...args) {
103
109
  return new UpdateQueryBuilder({
104
110
  ...this.#props,
105
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
111
+ queryNode: QueryNode.cloneWithOrderByItems(this.#props.queryNode, parseOrderBy(args)),
106
112
  });
107
113
  }
108
- fullJoin(...args) {
114
+ clearOrderBy() {
109
115
  return new UpdateQueryBuilder({
110
116
  ...this.#props,
111
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
117
+ queryNode: QueryNode.cloneWithoutOrderBy(this.#props.queryNode),
112
118
  });
113
119
  }
114
120
  /**
@@ -458,10 +464,7 @@ export class UpdateQueryBuilder {
458
464
  return result.rows;
459
465
  }
460
466
  return [
461
- new UpdateResult(
462
- // TODO: remove numUpdatedOrDeletedRows.
463
- // TODO: https://github.com/kysely-org/kysely/pull/431#discussion_r1172330899
464
- result.numAffectedRows ?? result.numUpdatedOrDeletedRows ?? BigInt(0), result.numChangedRows),
467
+ new UpdateResult(result.numAffectedRows ?? BigInt(0), result.numChangedRows),
465
468
  ];
466
469
  }
467
470
  /**
@@ -505,4 +508,3 @@ export class UpdateQueryBuilder {
505
508
  return await builder.execute();
506
509
  }
507
510
  }
508
- preventAwait(UpdateQueryBuilder, "don't await UpdateQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
@@ -1,6 +1,8 @@
1
+ import { QueryId } from '../util/query-id.js';
1
2
  import { RootOperationNode } from './query-compiler.js';
2
3
  export interface CompiledQuery<O = unknown> {
3
4
  readonly query: RootOperationNode;
5
+ readonly queryId: QueryId;
4
6
  readonly sql: string;
5
7
  readonly parameters: ReadonlyArray<unknown>;
6
8
  }
@@ -1,12 +1,14 @@
1
1
  /// <reference types="./compiled-query.d.ts" />
2
2
  import { RawNode } from '../operation-node/raw-node.js';
3
3
  import { freeze } from '../util/object-utils.js';
4
+ import { createQueryId } from '../util/query-id.js';
4
5
  export const CompiledQuery = freeze({
5
6
  raw(sql, parameters = []) {
6
7
  return freeze({
7
8
  sql,
8
9
  query: RawNode.createWithSql(sql),
9
10
  parameters: freeze(parameters),
11
+ queryId: createQueryId(),
10
12
  });
11
13
  },
12
14
  });
@@ -35,7 +35,7 @@ import { SelectAllNode } from '../operation-node/select-all-node.js';
35
35
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
36
36
  import { SelectionNode } from '../operation-node/selection-node.js';
37
37
  import { TableNode } from '../operation-node/table-node.js';
38
- import { PrimaryKeyConstraintNode } from '../operation-node/primary-constraint-node.js';
38
+ import { PrimaryKeyConstraintNode } from '../operation-node/primary-key-constraint-node.js';
39
39
  import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js';
40
40
  import { UpdateQueryNode } from '../operation-node/update-query-node.js';
41
41
  import { ValueListNode } from '../operation-node/value-list-node.js';
@@ -95,10 +95,15 @@ import { CastNode } from '../operation-node/cast-node.js';
95
95
  import { FetchNode } from '../operation-node/fetch-node.js';
96
96
  import { TopNode } from '../operation-node/top-node.js';
97
97
  import { OutputNode } from '../operation-node/output-node.js';
98
+ import { RefreshMaterializedViewNode } from '../operation-node/refresh-materialized-view-node.js';
99
+ import { OrActionNode } from '../operation-node/or-action-node.js';
100
+ import { CollateNode } from '../operation-node/collate-node.js';
101
+ import { QueryId } from '../util/query-id.js';
102
+ import { RenameConstraintNode } from '../operation-node/rename-constraint-node.js';
98
103
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
99
104
  #private;
100
105
  protected get numParameters(): number;
101
- compileQuery(node: RootOperationNode): CompiledQuery;
106
+ compileQuery(node: RootOperationNode, queryId: QueryId): CompiledQuery;
102
107
  protected getSql(): string;
103
108
  protected visitSelectQuery(node: SelectQueryNode): void;
104
109
  protected visitFrom(node: FromNode): void;
@@ -151,6 +156,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
151
156
  protected visitCreateSchema(node: CreateSchemaNode): void;
152
157
  protected visitDropSchema(node: DropSchemaNode): void;
153
158
  protected visitPrimaryKeyConstraint(node: PrimaryKeyConstraintNode): void;
159
+ protected buildDeferrable(node: {
160
+ deferrable?: boolean;
161
+ initiallyDeferred?: boolean;
162
+ }): void;
154
163
  protected visitUniqueConstraint(node: UniqueConstraintNode): void;
155
164
  protected visitCheckConstraint(node: CheckConstraintNode): void;
156
165
  protected visitForeignKeyConstraint(node: ForeignKeyConstraintNode): void;
@@ -166,8 +175,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
166
175
  protected visitModifyColumn(node: ModifyColumnNode): void;
167
176
  protected visitAddConstraint(node: AddConstraintNode): void;
168
177
  protected visitDropConstraint(node: DropConstraintNode): void;
178
+ protected visitRenameConstraint(node: RenameConstraintNode): void;
169
179
  protected visitSetOperation(node: SetOperationNode): void;
170
180
  protected visitCreateView(node: CreateViewNode): void;
181
+ protected visitRefreshMaterializedView(node: RefreshMaterializedViewNode): void;
171
182
  protected visitDropView(node: DropViewNode): void;
172
183
  protected visitGenerated(node: GeneratedNode): void;
173
184
  protected visitDefaultValue(node: DefaultValueNode): void;
@@ -198,6 +209,8 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
198
209
  protected visitFetch(node: FetchNode): void;
199
210
  protected visitOutput(node: OutputNode): void;
200
211
  protected visitTop(node: TopNode): void;
212
+ protected visitOrAction(node: OrActionNode): void;
213
+ protected visitCollate(node: CollateNode): void;
201
214
  protected append(str: string): void;
202
215
  protected appendValue(parameter: unknown): void;
203
216
  protected getLeftIdentifierWrapper(): string;
@@ -208,8 +221,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
208
221
  protected getExplainOptionsDelimiter(): string;
209
222
  protected getRightExplainOptionsWrapper(): string;
210
223
  protected sanitizeIdentifier(identifier: string): string;
224
+ protected sanitizeStringLiteral(value: string): string;
211
225
  protected addParameter(parameter: unknown): void;
212
226
  protected appendImmediateValue(value: unknown): void;
227
+ protected appendStringLiteral(value: string): void;
213
228
  protected sortSelectModifiers(arr: SelectModifierNode[]): ReadonlyArray<SelectModifierNode>;
214
229
  protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void;
215
230
  /**
@@ -9,19 +9,22 @@ import { freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from
9
9
  import { CreateViewNode } from '../operation-node/create-view-node.js';
10
10
  import { SetOperationNode } from '../operation-node/set-operation-node.js';
11
11
  import { MergeQueryNode } from '../operation-node/merge-query-node.js';
12
+ import { logOnce } from '../util/log-once.js';
13
+ const LIT_WRAP_REGEX = /'/g;
12
14
  export class DefaultQueryCompiler extends OperationNodeVisitor {
13
15
  #sql = '';
14
16
  #parameters = [];
15
17
  get numParameters() {
16
18
  return this.#parameters.length;
17
19
  }
18
- compileQuery(node) {
20
+ compileQuery(node, queryId) {
19
21
  this.#sql = '';
20
22
  this.#parameters = [];
21
23
  this.nodeStack.splice(0, this.nodeStack.length);
22
24
  this.visitNode(node);
23
25
  return freeze({
24
26
  query: node,
27
+ queryId,
25
28
  sql: this.getSql(),
26
29
  parameters: [...this.#parameters],
27
30
  });
@@ -159,9 +162,15 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
159
162
  this.append(' ');
160
163
  }
161
164
  this.append(node.replace ? 'replace' : 'insert');
165
+ // TODO: remove in 0.29.
162
166
  if (node.ignore) {
167
+ logOnce('`InsertQueryNode.ignore` is deprecated. Use `InsertQueryNode.orAction` instead.');
163
168
  this.append(' ignore');
164
169
  }
170
+ if (node.orAction) {
171
+ this.append(' ');
172
+ this.visitNode(node.orAction);
173
+ }
165
174
  if (node.top) {
166
175
  this.append(' ');
167
176
  this.visitNode(node.top);
@@ -498,10 +507,18 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
498
507
  }
499
508
  visitOrderByItem(node) {
500
509
  this.visitNode(node.orderBy);
510
+ if (node.collation) {
511
+ this.append(' ');
512
+ this.visitNode(node.collation);
513
+ }
501
514
  if (node.direction) {
502
515
  this.append(' ');
503
516
  this.visitNode(node.direction);
504
517
  }
518
+ if (node.nulls) {
519
+ this.append(' nulls ');
520
+ this.append(node.nulls);
521
+ }
505
522
  }
506
523
  visitGroupBy(node) {
507
524
  this.append('group by ');
@@ -546,6 +563,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
546
563
  this.visitNode(node.from);
547
564
  }
548
565
  if (node.joins) {
566
+ if (!node.from) {
567
+ throw new Error("Joins in an update query are only supported as a part of a PostgreSQL 'update set from join' query. If you want to create a MySQL 'update join set' query, see https://kysely.dev/docs/examples/update/my-sql-joins");
568
+ }
549
569
  this.append(' ');
550
570
  this.compileList(node.joins, ' ');
551
571
  }
@@ -553,6 +573,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
553
573
  this.append(' ');
554
574
  this.visitNode(node.where);
555
575
  }
576
+ if (node.orderBy) {
577
+ this.append(' ');
578
+ this.visitNode(node.orderBy);
579
+ }
556
580
  if (node.limit) {
557
581
  this.append(' ');
558
582
  this.visitNode(node.limit);
@@ -689,6 +713,25 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
689
713
  this.append('primary key (');
690
714
  this.compileList(node.columns);
691
715
  this.append(')');
716
+ this.buildDeferrable(node);
717
+ }
718
+ buildDeferrable(node) {
719
+ if (node.deferrable !== undefined) {
720
+ if (node.deferrable) {
721
+ this.append(' deferrable');
722
+ }
723
+ else {
724
+ this.append(' not deferrable');
725
+ }
726
+ }
727
+ if (node.initiallyDeferred !== undefined) {
728
+ if (node.initiallyDeferred) {
729
+ this.append(' initially deferred');
730
+ }
731
+ else {
732
+ this.append(' initially immediate');
733
+ }
734
+ }
692
735
  }
693
736
  visitUniqueConstraint(node) {
694
737
  if (node.name) {
@@ -703,6 +746,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
703
746
  this.append(' (');
704
747
  this.compileList(node.columns);
705
748
  this.append(')');
749
+ this.buildDeferrable(node);
706
750
  }
707
751
  visitCheckConstraint(node) {
708
752
  if (node.name) {
@@ -732,6 +776,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
732
776
  this.append(' on update ');
733
777
  this.append(node.onUpdate);
734
778
  }
779
+ this.buildDeferrable(node);
735
780
  }
736
781
  visitList(node) {
737
782
  this.compileList(node.items);
@@ -780,6 +825,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
780
825
  if (node.dropConstraint) {
781
826
  this.visitNode(node.dropConstraint);
782
827
  }
828
+ if (node.renameConstraint) {
829
+ this.visitNode(node.renameConstraint);
830
+ }
783
831
  if (node.columnAlterations) {
784
832
  this.compileColumnAlterations(node.columnAlterations);
785
833
  }
@@ -853,6 +901,12 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
853
901
  this.append(' restrict');
854
902
  }
855
903
  }
904
+ visitRenameConstraint(node) {
905
+ this.append('rename constraint ');
906
+ this.visitNode(node.oldName);
907
+ this.append(' to ');
908
+ this.visitNode(node.newName);
909
+ }
856
910
  visitSetOperation(node) {
857
911
  this.append(node.operator);
858
912
  this.append(' ');
@@ -888,6 +942,19 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
888
942
  this.visitNode(node.as);
889
943
  }
890
944
  }
945
+ visitRefreshMaterializedView(node) {
946
+ this.append('refresh materialized view ');
947
+ if (node.concurrently) {
948
+ this.append('concurrently ');
949
+ }
950
+ this.visitNode(node.name);
951
+ if (node.withNoData) {
952
+ this.append(' with no data');
953
+ }
954
+ else {
955
+ this.append(' with data');
956
+ }
957
+ }
891
958
  visitDropView(node) {
892
959
  this.append('drop ');
893
960
  if (node.materialized) {
@@ -988,6 +1055,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
988
1055
  this.visitNode(node.orderBy);
989
1056
  }
990
1057
  this.append(')');
1058
+ if (node.withinGroup) {
1059
+ this.append(' within group (');
1060
+ this.visitNode(node.withinGroup);
1061
+ this.append(')');
1062
+ }
991
1063
  if (node.filter) {
992
1064
  this.append(' filter(');
993
1065
  this.visitNode(node.filter);
@@ -1125,6 +1197,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
1125
1197
  this.append(' ');
1126
1198
  this.compileList(node.whens, ' ');
1127
1199
  }
1200
+ if (node.returning) {
1201
+ this.append(' ');
1202
+ this.visitNode(node.returning);
1203
+ }
1128
1204
  if (node.output) {
1129
1205
  this.append(' ');
1130
1206
  this.visitNode(node.output);
@@ -1182,6 +1258,13 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
1182
1258
  this.append(` ${node.modifiers}`);
1183
1259
  }
1184
1260
  }
1261
+ visitOrAction(node) {
1262
+ this.append(node.action);
1263
+ }
1264
+ visitCollate(node) {
1265
+ this.append('collate ');
1266
+ this.visitNode(node.collation);
1267
+ }
1185
1268
  append(str) {
1186
1269
  this.#sql += str;
1187
1270
  }
@@ -1225,12 +1308,15 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
1225
1308
  }
1226
1309
  return sanitized;
1227
1310
  }
1311
+ sanitizeStringLiteral(value) {
1312
+ return value.replace(LIT_WRAP_REGEX, "''");
1313
+ }
1228
1314
  addParameter(parameter) {
1229
1315
  this.#parameters.push(parameter);
1230
1316
  }
1231
1317
  appendImmediateValue(value) {
1232
1318
  if (isString(value)) {
1233
- this.append(`'${value}'`);
1319
+ this.appendStringLiteral(value);
1234
1320
  }
1235
1321
  else if (isNumber(value) || isBoolean(value)) {
1236
1322
  this.append(value.toString());
@@ -1248,6 +1334,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
1248
1334
  throw new Error(`invalid immediate value ${value}`);
1249
1335
  }
1250
1336
  }
1337
+ appendStringLiteral(value) {
1338
+ this.append("'");
1339
+ this.append(this.sanitizeStringLiteral(value));
1340
+ this.append("'");
1341
+ }
1251
1342
  sortSelectModifiers(arr) {
1252
1343
  arr.sort((left, right) => left.modifier && right.modifier
1253
1344
  ? SELECT_MODIFIER_PRIORITY[left.modifier] -
@@ -1289,7 +1380,11 @@ const JOIN_TYPE_SQL = freeze({
1289
1380
  LeftJoin: 'left join',
1290
1381
  RightJoin: 'right join',
1291
1382
  FullJoin: 'full join',
1383
+ CrossJoin: 'cross join',
1292
1384
  LateralInnerJoin: 'inner join lateral',
1293
1385
  LateralLeftJoin: 'left join lateral',
1386
+ LateralCrossJoin: 'cross join lateral',
1387
+ OuterApply: 'outer apply',
1388
+ CrossApply: 'cross apply',
1294
1389
  Using: 'using',
1295
1390
  });