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
@@ -4,6 +4,7 @@ import { DropColumnNode } from '../../operation-node/drop-column-node.js';
4
4
  import { OffsetNode } from '../../operation-node/offset-node.js';
5
5
  import { MergeQueryNode } from '../../operation-node/merge-query-node.js';
6
6
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
7
+ import { CollateNode } from '../../operation-node/collate-node.js';
7
8
  export declare class MssqlQueryCompiler extends DefaultQueryCompiler {
8
9
  protected getCurrentParameterPlaceholder(): string;
9
10
  protected visitOffset(node: OffsetNode): void;
@@ -11,5 +12,6 @@ export declare class MssqlQueryCompiler extends DefaultQueryCompiler {
11
12
  protected visitAddColumn(node: AddColumnNode): void;
12
13
  protected visitDropColumn(node: DropColumnNode): void;
13
14
  protected visitMergeQuery(node: MergeQueryNode): void;
15
+ protected visitCollate(node: CollateNode): void;
14
16
  protected announcesNewColumnDataType(): boolean;
15
17
  }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MssqlQueryCompiler = void 0;
4
4
  const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
5
+ const COLLATION_CHAR_REGEX = /^[a-z0-9_]$/i;
5
6
  class MssqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
6
7
  getCurrentParameterPlaceholder() {
7
8
  return `@${this.numParameters}`;
@@ -65,6 +66,16 @@ class MssqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompile
65
66
  super.visitMergeQuery(node);
66
67
  this.append(';');
67
68
  }
69
+ visitCollate(node) {
70
+ this.append('collate ');
71
+ const { name } = node.collation;
72
+ for (const char of name) {
73
+ if (!COLLATION_CHAR_REGEX.test(char)) {
74
+ throw new Error(`Invalid collation: ${name}`);
75
+ }
76
+ }
77
+ this.append(name);
78
+ }
68
79
  announcesNewColumnDataType() {
69
80
  return false;
70
81
  }
@@ -1,6 +1,7 @@
1
1
  import { DatabaseConnection, QueryResult } from '../../driver/database-connection.js';
2
2
  import { Driver, TransactionSettings } from '../../driver/driver.js';
3
3
  import { CompiledQuery } from '../../query-compiler/compiled-query.js';
4
+ import { QueryCompiler } from '../../query-compiler/query-compiler.js';
4
5
  import { MysqlDialectConfig, MysqlPoolConnection } from './mysql-dialect-config.js';
5
6
  declare const PRIVATE_RELEASE_METHOD: unique symbol;
6
7
  export declare class MysqlDriver implements Driver {
@@ -29,6 +30,9 @@ export declare class MysqlDriver implements Driver {
29
30
  * Rolls back a transaction.
30
31
  */
31
32
  rollbackTransaction(connection: DatabaseConnection): Promise<void>;
33
+ savepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
34
+ rollbackToSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
35
+ releaseSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
32
36
  /**
33
37
  * Releases a connection back to the pool.
34
38
  */
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MysqlDriver = void 0;
4
+ const savepoint_parser_js_1 = require("../../parser/savepoint-parser.js");
4
5
  const compiled_query_js_1 = require("../../query-compiler/compiled-query.js");
5
6
  const object_utils_js_1 = require("../../util/object-utils.js");
7
+ const query_id_js_1 = require("../../util/query-id.js");
6
8
  const stack_trace_utils_js_1 = require("../../util/stack-trace-utils.js");
7
9
  const PRIVATE_RELEASE_METHOD = Symbol();
8
10
  class MysqlDriver {
@@ -48,9 +50,17 @@ class MysqlDriver {
48
50
  });
49
51
  }
50
52
  async beginTransaction(connection, settings) {
51
- if (settings.isolationLevel) {
53
+ if (settings.isolationLevel || settings.accessMode) {
54
+ const parts = [];
55
+ if (settings.isolationLevel) {
56
+ parts.push(`isolation level ${settings.isolationLevel}`);
57
+ }
58
+ if (settings.accessMode) {
59
+ parts.push(settings.accessMode);
60
+ }
61
+ const sql = `set transaction ${parts.join(', ')}`;
52
62
  // On MySQL this sets the isolation level of the next transaction.
53
- await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw(`set transaction isolation level ${settings.isolationLevel}`));
63
+ await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw(sql));
54
64
  }
55
65
  await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw('begin'));
56
66
  }
@@ -60,6 +70,15 @@ class MysqlDriver {
60
70
  async rollbackTransaction(connection) {
61
71
  await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw('rollback'));
62
72
  }
73
+ async savepoint(connection, savepointName, compileQuery) {
74
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('savepoint', savepointName), (0, query_id_js_1.createQueryId)()));
75
+ }
76
+ async rollbackToSavepoint(connection, savepointName, compileQuery) {
77
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('rollback to', savepointName), (0, query_id_js_1.createQueryId)()));
78
+ }
79
+ async releaseSavepoint(connection, savepointName, compileQuery) {
80
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('release savepoint', savepointName), (0, query_id_js_1.createQueryId)()));
81
+ }
63
82
  async releaseConnection(connection) {
64
83
  connection[PRIVATE_RELEASE_METHOD]();
65
84
  }
@@ -90,22 +109,18 @@ class MysqlConnection {
90
109
  const result = await this.#executeQuery(compiledQuery);
91
110
  if (isOkPacket(result)) {
92
111
  const { insertId, affectedRows, changedRows } = result;
93
- const numAffectedRows = affectedRows !== undefined && affectedRows !== null
94
- ? BigInt(affectedRows)
95
- : undefined;
96
- const numChangedRows = changedRows !== undefined && changedRows !== null
97
- ? BigInt(changedRows)
98
- : undefined;
99
112
  return {
100
113
  insertId: insertId !== undefined &&
101
114
  insertId !== null &&
102
115
  insertId.toString() !== '0'
103
116
  ? BigInt(insertId)
104
117
  : undefined,
105
- // TODO: remove.
106
- numUpdatedOrDeletedRows: numAffectedRows,
107
- numAffectedRows,
108
- numChangedRows,
118
+ numAffectedRows: affectedRows !== undefined && affectedRows !== null
119
+ ? BigInt(affectedRows)
120
+ : undefined,
121
+ numChangedRows: changedRows !== undefined && changedRows !== null
122
+ ? BigInt(changedRows)
123
+ : undefined,
109
124
  rows: [],
110
125
  };
111
126
  }
@@ -1,6 +1,7 @@
1
1
  import { DatabaseConnection, QueryResult } from '../../driver/database-connection.js';
2
2
  import { Driver, TransactionSettings } from '../../driver/driver.js';
3
3
  import { CompiledQuery } from '../../query-compiler/compiled-query.js';
4
+ import { QueryCompiler } from '../../query-compiler/query-compiler.js';
4
5
  import { PostgresCursorConstructor, PostgresDialectConfig, PostgresPoolClient } from './postgres-dialect-config.js';
5
6
  declare const PRIVATE_RELEASE_METHOD: unique symbol;
6
7
  export declare class PostgresDriver implements Driver {
@@ -29,6 +30,9 @@ export declare class PostgresDriver implements Driver {
29
30
  * Rolls back a transaction.
30
31
  */
31
32
  rollbackTransaction(connection: DatabaseConnection): Promise<void>;
33
+ savepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
34
+ rollbackToSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
35
+ releaseSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
32
36
  /**
33
37
  * Releases a connection back to the pool.
34
38
  */
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PostgresDriver = void 0;
4
+ const savepoint_parser_js_1 = require("../../parser/savepoint-parser.js");
4
5
  const compiled_query_js_1 = require("../../query-compiler/compiled-query.js");
5
6
  const object_utils_js_1 = require("../../util/object-utils.js");
7
+ const query_id_js_1 = require("../../util/query-id.js");
6
8
  const stack_trace_utils_js_1 = require("../../util/stack-trace-utils.js");
7
9
  const PRIVATE_RELEASE_METHOD = Symbol();
8
10
  class PostgresDriver {
@@ -38,8 +40,15 @@ class PostgresDriver {
38
40
  return connection;
39
41
  }
40
42
  async beginTransaction(connection, settings) {
41
- if (settings.isolationLevel) {
42
- await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw(`start transaction isolation level ${settings.isolationLevel}`));
43
+ if (settings.isolationLevel || settings.accessMode) {
44
+ let sql = 'start transaction';
45
+ if (settings.isolationLevel) {
46
+ sql += ` isolation level ${settings.isolationLevel}`;
47
+ }
48
+ if (settings.accessMode) {
49
+ sql += ` ${settings.accessMode}`;
50
+ }
51
+ await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw(sql));
43
52
  }
44
53
  else {
45
54
  await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw('begin'));
@@ -51,6 +60,15 @@ class PostgresDriver {
51
60
  async rollbackTransaction(connection) {
52
61
  await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw('rollback'));
53
62
  }
63
+ async savepoint(connection, savepointName, compileQuery) {
64
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('savepoint', savepointName), (0, query_id_js_1.createQueryId)()));
65
+ }
66
+ async rollbackToSavepoint(connection, savepointName, compileQuery) {
67
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('rollback to', savepointName), (0, query_id_js_1.createQueryId)()));
68
+ }
69
+ async releaseSavepoint(connection, savepointName, compileQuery) {
70
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('release', savepointName), (0, query_id_js_1.createQueryId)()));
71
+ }
54
72
  async releaseConnection(connection) {
55
73
  connection[PRIVATE_RELEASE_METHOD]();
56
74
  }
@@ -72,23 +90,15 @@ class PostgresConnection {
72
90
  }
73
91
  async executeQuery(compiledQuery) {
74
92
  try {
75
- const result = await this.#client.query(compiledQuery.sql, [
76
- ...compiledQuery.parameters,
77
- ]);
78
- if (result.command === 'INSERT' ||
79
- result.command === 'UPDATE' ||
80
- result.command === 'DELETE' ||
81
- result.command === 'MERGE') {
82
- const numAffectedRows = BigInt(result.rowCount);
83
- return {
84
- // TODO: remove.
85
- numUpdatedOrDeletedRows: numAffectedRows,
86
- numAffectedRows,
87
- rows: result.rows ?? [],
88
- };
89
- }
93
+ const { command, rowCount, rows } = await this.#client.query(compiledQuery.sql, [...compiledQuery.parameters]);
90
94
  return {
91
- rows: result.rows ?? [],
95
+ numAffectedRows: command === 'INSERT' ||
96
+ command === 'UPDATE' ||
97
+ command === 'DELETE' ||
98
+ command === 'MERGE'
99
+ ? BigInt(rowCount)
100
+ : undefined,
101
+ rows: rows ?? [],
92
102
  };
93
103
  }
94
104
  catch (err) {
@@ -39,23 +39,13 @@ class PostgresIntrospector {
39
39
  'typ.typname as type',
40
40
  'dtns.nspname as type_schema',
41
41
  (0, sql_js_1.sql) `col_description(a.attrelid, a.attnum)`.as('column_description'),
42
- // Detect if the column is auto incrementing by finding the sequence
43
- // that is created for `serial` and `bigserial` columns.
44
- this.#db
45
- .selectFrom('pg_class')
46
- .select((0, sql_js_1.sql) `true`.as('auto_incrementing'))
47
- // Make sure the sequence is in the same schema as the table.
48
- .whereRef('relnamespace', '=', 'c.relnamespace')
49
- .where('relkind', '=', 'S')
50
- .where('relname', '=', (0, sql_js_1.sql) `c.relname || '_' || a.attname || '_seq'`)
51
- .as('auto_incrementing'),
42
+ (0, sql_js_1.sql) `pg_get_serial_sequence(ns.nspname || '.' || c.relname, a.attname)`.as('auto_incrementing'),
43
+ ])
44
+ .where('c.relkind', 'in', [
45
+ 'r' /*regular table*/,
46
+ 'v' /*view*/,
47
+ 'p' /*partitioned table*/,
52
48
  ])
53
- // r == normal table
54
- .where((eb) => eb.or([
55
- eb('c.relkind', '=', 'r'),
56
- eb('c.relkind', '=', 'v'),
57
- eb('c.relkind', '=', 'p'),
58
- ]))
59
49
  .where('ns.nspname', '!~', '^pg_')
60
50
  .where('ns.nspname', '!=', 'information_schema')
61
51
  // No system columns
@@ -95,7 +85,7 @@ class PostgresIntrospector {
95
85
  dataType: it.type,
96
86
  dataTypeSchema: it.type_schema,
97
87
  isNullable: !it.not_null,
98
- isAutoIncrementing: !!it.auto_incrementing,
88
+ isAutoIncrementing: it.auto_incrementing !== null,
99
89
  hasDefaultValue: it.has_default,
100
90
  comment: it.column_description ?? undefined,
101
91
  }));
@@ -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
  */
@@ -2,8 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SqliteDriver = void 0;
4
4
  const select_query_node_js_1 = require("../../operation-node/select-query-node.js");
5
+ const savepoint_parser_js_1 = require("../../parser/savepoint-parser.js");
5
6
  const compiled_query_js_1 = require("../../query-compiler/compiled-query.js");
6
7
  const object_utils_js_1 = require("../../util/object-utils.js");
8
+ const query_id_js_1 = require("../../util/query-id.js");
7
9
  class SqliteDriver {
8
10
  #config;
9
11
  #connectionMutex = new ConnectionMutex();
@@ -36,6 +38,15 @@ class SqliteDriver {
36
38
  async rollbackTransaction(connection) {
37
39
  await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw('rollback'));
38
40
  }
41
+ async savepoint(connection, savepointName, compileQuery) {
42
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('savepoint', savepointName), (0, query_id_js_1.createQueryId)()));
43
+ }
44
+ async rollbackToSavepoint(connection, savepointName, compileQuery) {
45
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('rollback to', savepointName), (0, query_id_js_1.createQueryId)()));
46
+ }
47
+ async releaseSavepoint(connection, savepointName, compileQuery) {
48
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('release', savepointName), (0, query_id_js_1.createQueryId)()));
49
+ }
39
50
  async releaseConnection() {
40
51
  this.#connectionMutex.unlock();
41
52
  }
@@ -57,19 +68,14 @@ class SqliteConnection {
57
68
  rows: stmt.all(parameters),
58
69
  });
59
70
  }
60
- else {
61
- const { changes, lastInsertRowid } = stmt.run(parameters);
62
- const numAffectedRows = changes !== undefined && changes !== null ? BigInt(changes) : undefined;
63
- return Promise.resolve({
64
- // TODO: remove.
65
- numUpdatedOrDeletedRows: numAffectedRows,
66
- numAffectedRows,
67
- insertId: lastInsertRowid !== undefined && lastInsertRowid !== null
68
- ? BigInt(lastInsertRowid)
69
- : undefined,
70
- rows: [],
71
- });
72
- }
71
+ const { changes, lastInsertRowid } = stmt.run(parameters);
72
+ return Promise.resolve({
73
+ numAffectedRows: changes !== undefined && changes !== null ? BigInt(changes) : undefined,
74
+ insertId: lastInsertRowid !== undefined && lastInsertRowid !== null
75
+ ? BigInt(lastInsertRowid)
76
+ : undefined,
77
+ rows: [],
78
+ });
73
79
  }
74
80
  async *streamQuery(compiledQuery, _chunkSize) {
75
81
  const { sql, parameters, query } = compiledQuery;
@@ -13,59 +13,81 @@ class SqliteIntrospector {
13
13
  return [];
14
14
  }
15
15
  async getTables(options = { withInternalKyselyTables: false }) {
16
- let query = this.#db
16
+ return await this.#getTableMetadata(options);
17
+ }
18
+ async getMetadata(options) {
19
+ return {
20
+ tables: await this.getTables(options),
21
+ };
22
+ }
23
+ #tablesQuery(qb, options) {
24
+ let tablesQuery = qb
17
25
  .selectFrom('sqlite_master')
18
26
  .where('type', 'in', ['table', 'view'])
19
27
  .where('name', 'not like', 'sqlite_%')
20
- .select('name')
21
- .orderBy('name')
22
- .$castTo();
28
+ .select(['name', 'sql', 'type'])
29
+ .orderBy('name');
23
30
  if (!options.withInternalKyselyTables) {
24
- query = query
31
+ tablesQuery = tablesQuery
25
32
  .where('name', '!=', migrator_js_1.DEFAULT_MIGRATION_TABLE)
26
33
  .where('name', '!=', migrator_js_1.DEFAULT_MIGRATION_LOCK_TABLE);
27
34
  }
28
- const tables = await query.execute();
29
- return Promise.all(tables.map(({ name }) => this.#getTableMetadata(name)));
35
+ return tablesQuery;
30
36
  }
31
- async getMetadata(options) {
32
- return {
33
- tables: await this.getTables(options),
34
- };
35
- }
36
- async #getTableMetadata(table) {
37
- const db = this.#db;
38
- // Get the SQL that was used to create the table.
39
- const tableDefinition = await db
40
- .selectFrom('sqlite_master')
41
- .where('name', '=', table)
42
- .select(['sql', 'type'])
43
- .$castTo()
44
- .executeTakeFirstOrThrow();
45
- // Try to find the name of the column that has `autoincrement` 🤦
46
- const autoIncrementCol = tableDefinition.sql
47
- ?.split(/[\(\),]/)
48
- ?.find((it) => it.toLowerCase().includes('autoincrement'))
49
- ?.trimStart()
50
- ?.split(/\s+/)?.[0]
51
- ?.replace(/["`]/g, '');
52
- const columns = await db
53
- .selectFrom((0, sql_js_1.sql) `pragma_table_info(${table})`.as('table_info'))
54
- .select(['name', 'type', 'notnull', 'dflt_value'])
55
- .orderBy('cid')
37
+ async #getTableMetadata(options) {
38
+ const tablesResult = await this.#tablesQuery(this.#db, options).execute();
39
+ const tableMetadata = await this.#db
40
+ .with('table_list', (qb) => this.#tablesQuery(qb, options))
41
+ .selectFrom([
42
+ 'table_list as tl',
43
+ (0, sql_js_1.sql) `pragma_table_info(tl.name)`.as('p'),
44
+ ])
45
+ .select([
46
+ 'tl.name as table',
47
+ 'p.cid',
48
+ 'p.name',
49
+ 'p.type',
50
+ 'p.notnull',
51
+ 'p.dflt_value',
52
+ 'p.pk',
53
+ ])
54
+ .orderBy(['tl.name', 'p.cid'])
56
55
  .execute();
57
- return {
58
- name: table,
59
- isView: tableDefinition.type === 'view',
60
- columns: columns.map((col) => ({
61
- name: col.name,
62
- dataType: col.type,
63
- isNullable: !col.notnull,
64
- isAutoIncrementing: col.name === autoIncrementCol,
65
- hasDefaultValue: col.dflt_value != null,
66
- comment: undefined,
67
- })),
68
- };
56
+ const columnsByTable = {};
57
+ for (const row of tableMetadata) {
58
+ columnsByTable[row.table] ??= [];
59
+ columnsByTable[row.table].push(row);
60
+ }
61
+ return tablesResult.map(({ name, sql, type }) => {
62
+ // // Try to find the name of the column that has `autoincrement` 🤦
63
+ let autoIncrementCol = sql
64
+ ?.split(/[\(\),]/)
65
+ ?.find((it) => it.toLowerCase().includes('autoincrement'))
66
+ ?.trimStart()
67
+ ?.split(/\s+/)?.[0]
68
+ ?.replace(/["`]/g, '');
69
+ const columns = columnsByTable[name] ?? [];
70
+ // Otherwise, check for an INTEGER PRIMARY KEY
71
+ // https://www.sqlite.org/autoinc.html
72
+ if (!autoIncrementCol) {
73
+ const pkCols = columns.filter((r) => r.pk > 0);
74
+ if (pkCols.length === 1 && pkCols[0].type.toLowerCase() === 'integer') {
75
+ autoIncrementCol = pkCols[0].name;
76
+ }
77
+ }
78
+ return {
79
+ name: name,
80
+ isView: type === 'view',
81
+ columns: columns.map((col) => ({
82
+ name: col.name,
83
+ dataType: col.type,
84
+ isNullable: !col.notnull,
85
+ isAutoIncrementing: col.name === autoIncrementCol,
86
+ hasDefaultValue: col.dflt_value != null,
87
+ comment: undefined,
88
+ })),
89
+ };
90
+ });
69
91
  }
70
92
  }
71
93
  exports.SqliteIntrospector = SqliteIntrospector;
@@ -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;
@@ -4,6 +4,10 @@ exports.SqliteQueryCompiler = void 0;
4
4
  const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
5
5
  const ID_WRAP_REGEX = /"/g;
6
6
  class SqliteQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
7
+ visitOrAction(node) {
8
+ this.append('or ');
9
+ this.append(node.action);
10
+ }
7
11
  getCurrentParameterPlaceholder() {
8
12
  return '?';
9
13
  }
@@ -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,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TRANSACTION_ISOLATION_LEVELS = void 0;
3
+ exports.TRANSACTION_ISOLATION_LEVELS = exports.TRANSACTION_ACCESS_MODES = void 0;
4
+ exports.validateTransactionSettings = validateTransactionSettings;
5
+ exports.TRANSACTION_ACCESS_MODES = ['read only', 'read write'];
4
6
  exports.TRANSACTION_ISOLATION_LEVELS = [
5
7
  'read uncommitted',
6
8
  'read committed',
@@ -8,3 +10,13 @@ exports.TRANSACTION_ISOLATION_LEVELS = [
8
10
  'serializable',
9
11
  'snapshot',
10
12
  ];
13
+ function validateTransactionSettings(settings) {
14
+ if (settings.accessMode &&
15
+ !exports.TRANSACTION_ACCESS_MODES.includes(settings.accessMode)) {
16
+ throw new Error(`invalid transaction access mode ${settings.accessMode}`);
17
+ }
18
+ if (settings.isolationLevel &&
19
+ !exports.TRANSACTION_ISOLATION_LEVELS.includes(settings.isolationLevel)) {
20
+ throw new Error(`invalid transaction isolation level ${settings.isolationLevel}`);
21
+ }
22
+ }
@@ -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
  }
@@ -60,6 +60,15 @@ class DummyDriver {
60
60
  async destroy() {
61
61
  // Nothing to do here.
62
62
  }
63
+ async releaseSavepoint() {
64
+ // Nothing to do here.
65
+ }
66
+ async rollbackToSavepoint() {
67
+ // Nothing to do here.
68
+ }
69
+ async savepoint() {
70
+ // Nothing to do here.
71
+ }
63
72
  }
64
73
  exports.DummyDriver = DummyDriver;
65
74
  class DummyConnection {
@@ -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
  */