kysely 0.21.6 → 0.23.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 (380) hide show
  1. package/CONTRIBUTING.md +70 -0
  2. package/README.md +27 -4
  3. package/dist/cjs/dialect/database-introspector.d.ts +4 -0
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +6 -3
  5. package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
  6. package/dist/cjs/dialect/postgres/postgres-driver.js +7 -2
  7. package/dist/cjs/dialect/postgres/postgres-introspector.js +8 -0
  8. package/dist/cjs/dialect/sqlite/sqlite-driver.js +4 -3
  9. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  10. package/dist/cjs/driver/database-connection.d.ts +6 -2
  11. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +2 -3
  12. package/dist/cjs/dynamic/dynamic-reference-builder.js +1 -1
  13. package/dist/cjs/expression/expression.d.ts +100 -0
  14. package/dist/cjs/expression/expression.js +16 -0
  15. package/dist/cjs/index.d.ts +17 -8
  16. package/dist/cjs/index.js +15 -4
  17. package/dist/cjs/kysely.d.ts +3 -3
  18. package/dist/cjs/kysely.js +3 -3
  19. package/dist/cjs/migration/file-migration-provider.js +11 -4
  20. package/dist/cjs/operation-node/aggregate-function-node.d.ts +25 -0
  21. package/dist/cjs/operation-node/aggregate-function-node.js +48 -0
  22. package/dist/cjs/operation-node/alias-node.d.ts +3 -10
  23. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -2
  24. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -7
  25. package/dist/cjs/operation-node/alter-table-node.js +9 -1
  26. package/dist/cjs/operation-node/and-node.d.ts +3 -4
  27. package/dist/cjs/operation-node/binary-operation-node.d.ts +14 -0
  28. package/dist/cjs/operation-node/binary-operation-node.js +20 -0
  29. package/dist/cjs/operation-node/check-constraint-node.d.ts +2 -3
  30. package/dist/cjs/operation-node/column-definition-node.d.ts +6 -5
  31. package/dist/cjs/operation-node/column-definition-node.js +16 -0
  32. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  33. package/dist/cjs/operation-node/common-table-expression-node.d.ts +2 -4
  34. package/dist/cjs/operation-node/create-index-node.d.ts +1 -3
  35. package/dist/cjs/operation-node/create-table-node.d.ts +4 -5
  36. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  37. package/dist/cjs/operation-node/create-type-node.js +1 -2
  38. package/dist/cjs/operation-node/default-value-node.d.ts +2 -4
  39. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
  40. package/dist/cjs/operation-node/drop-type-node.d.ts +1 -1
  41. package/dist/cjs/operation-node/drop-type-node.js +1 -2
  42. package/dist/cjs/operation-node/explain-node.d.ts +2 -4
  43. package/dist/cjs/operation-node/explain-node.js +1 -1
  44. package/dist/cjs/operation-node/from-node.d.ts +3 -4
  45. package/dist/cjs/operation-node/generated-node.d.ts +2 -3
  46. package/dist/cjs/operation-node/group-by-item-node.d.ts +2 -3
  47. package/dist/cjs/operation-node/group-by-node.d.ts +1 -1
  48. package/dist/cjs/operation-node/group-by-node.js +3 -3
  49. package/dist/cjs/operation-node/having-node.d.ts +3 -4
  50. package/dist/cjs/operation-node/having-node.js +4 -4
  51. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -4
  52. package/dist/cjs/operation-node/join-node.d.ts +5 -9
  53. package/dist/cjs/operation-node/join-node.js +6 -6
  54. package/dist/cjs/operation-node/on-conflict-node.d.ts +5 -7
  55. package/dist/cjs/operation-node/on-conflict-node.js +12 -12
  56. package/dist/cjs/operation-node/on-node.d.ts +3 -4
  57. package/dist/cjs/operation-node/on-node.js +4 -4
  58. package/dist/cjs/operation-node/operation-node-transformer.d.ts +14 -4
  59. package/dist/cjs/operation-node/operation-node-transformer.js +60 -20
  60. package/dist/cjs/operation-node/operation-node-visitor.d.ts +14 -4
  61. package/dist/cjs/operation-node/operation-node-visitor.js +7 -2
  62. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  63. package/dist/cjs/operation-node/operator-node.d.ts +5 -3
  64. package/dist/cjs/operation-node/operator-node.js +3 -5
  65. package/dist/cjs/operation-node/or-node.d.ts +3 -4
  66. package/dist/cjs/operation-node/order-by-item-node.d.ts +3 -5
  67. package/dist/cjs/operation-node/over-node.d.ts +19 -0
  68. package/dist/cjs/operation-node/over-node.js +35 -0
  69. package/dist/cjs/operation-node/parens-node.d.ts +2 -3
  70. package/dist/cjs/operation-node/partition-by-item-node.d.ts +13 -0
  71. package/dist/cjs/operation-node/{filter-node.js → partition-by-item-node.js} +6 -8
  72. package/dist/cjs/operation-node/partition-by-node.d.ts +14 -0
  73. package/dist/cjs/operation-node/partition-by-node.js +24 -0
  74. package/dist/cjs/operation-node/query-node.d.ts +2 -3
  75. package/dist/cjs/operation-node/query-node.js +6 -6
  76. package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -3
  77. package/dist/cjs/operation-node/select-modifier-node.js +1 -1
  78. package/dist/cjs/operation-node/select-query-node.d.ts +8 -9
  79. package/dist/cjs/operation-node/select-query-node.js +14 -14
  80. package/dist/cjs/operation-node/selection-node.d.ts +2 -3
  81. package/dist/cjs/operation-node/set-operation-node.d.ts +15 -0
  82. package/dist/cjs/operation-node/{union-node.js → set-operation-node.js} +7 -6
  83. package/dist/cjs/operation-node/simple-reference-expression-node.d.ts +3 -0
  84. package/dist/cjs/operation-node/{operation-node-utils.js → simple-reference-expression-node.js} +0 -0
  85. package/dist/cjs/operation-node/unary-operation-node.d.ts +13 -0
  86. package/dist/cjs/operation-node/unary-operation-node.js +19 -0
  87. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  88. package/dist/cjs/operation-node/value-list-node.d.ts +2 -8
  89. package/dist/cjs/operation-node/where-node.d.ts +3 -4
  90. package/dist/cjs/operation-node/where-node.js +4 -4
  91. package/dist/cjs/parser/binary-operation-parser.d.ts +20 -0
  92. package/dist/cjs/parser/binary-operation-parser.js +99 -0
  93. package/dist/cjs/parser/coalesce-parser.d.ts +4 -0
  94. package/dist/cjs/parser/coalesce-parser.js +11 -0
  95. package/dist/cjs/parser/data-type-parser.d.ts +5 -5
  96. package/dist/cjs/parser/default-value-parser.d.ts +4 -5
  97. package/dist/cjs/parser/default-value-parser.js +2 -2
  98. package/dist/cjs/parser/expression-parser.d.ts +10 -0
  99. package/dist/cjs/parser/{complex-expression-parser.js → expression-parser.js} +9 -8
  100. package/dist/cjs/parser/group-by-parser.d.ts +1 -1
  101. package/dist/cjs/parser/group-by-parser.js +2 -2
  102. package/dist/cjs/parser/identifier-parser.d.ts +2 -0
  103. package/dist/cjs/parser/identifier-parser.js +23 -0
  104. package/dist/cjs/parser/insert-values-parser.d.ts +1 -1
  105. package/dist/cjs/parser/insert-values-parser.js +2 -2
  106. package/dist/cjs/parser/join-parser.js +2 -2
  107. package/dist/cjs/parser/order-by-parser.d.ts +2 -2
  108. package/dist/cjs/parser/parse-utils.d.ts +2 -0
  109. package/dist/cjs/parser/parse-utils.js +9 -1
  110. package/dist/cjs/parser/partition-by-parser.d.ts +6 -0
  111. package/dist/cjs/parser/partition-by-parser.js +9 -0
  112. package/dist/cjs/parser/reference-parser.d.ts +14 -13
  113. package/dist/cjs/parser/reference-parser.js +12 -9
  114. package/dist/cjs/parser/select-parser.d.ts +6 -6
  115. package/dist/cjs/parser/select-parser.js +2 -2
  116. package/dist/cjs/parser/set-operation-parser.d.ts +3 -0
  117. package/dist/cjs/parser/set-operation-parser.js +8 -0
  118. package/dist/cjs/parser/table-parser.d.ts +11 -12
  119. package/dist/cjs/parser/table-parser.js +2 -2
  120. package/dist/cjs/parser/unary-operation-parser.d.ts +5 -0
  121. package/dist/cjs/parser/unary-operation-parser.js +17 -0
  122. package/dist/cjs/parser/update-set-parser.d.ts +1 -1
  123. package/dist/cjs/parser/value-parser.d.ts +5 -8
  124. package/dist/cjs/parser/value-parser.js +4 -4
  125. package/dist/cjs/parser/with-parser.d.ts +3 -4
  126. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  127. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +348 -0
  128. package/dist/cjs/query-builder/aggregate-function-builder.js +298 -0
  129. package/dist/cjs/query-builder/delete-query-builder.d.ts +20 -20
  130. package/dist/cjs/query-builder/delete-query-builder.js +19 -16
  131. package/dist/cjs/query-builder/expression-builder.d.ts +3 -3
  132. package/dist/cjs/query-builder/expression-builder.js +3 -3
  133. package/dist/cjs/query-builder/function-module.d.ts +241 -0
  134. package/dist/cjs/query-builder/function-module.js +214 -0
  135. package/dist/cjs/query-builder/having-interface.d.ts +9 -8
  136. package/dist/cjs/query-builder/insert-query-builder.d.ts +7 -6
  137. package/dist/cjs/query-builder/insert-query-builder.js +11 -9
  138. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  139. package/dist/cjs/query-builder/insert-result.js +12 -1
  140. package/dist/cjs/query-builder/join-builder.d.ts +9 -8
  141. package/dist/cjs/query-builder/join-builder.js +10 -9
  142. package/dist/cjs/query-builder/on-conflict-builder.d.ts +25 -24
  143. package/dist/cjs/query-builder/on-conflict-builder.js +18 -17
  144. package/dist/cjs/query-builder/over-builder.d.ts +59 -0
  145. package/dist/cjs/query-builder/over-builder.js +50 -0
  146. package/dist/cjs/query-builder/select-query-builder.d.ts +138 -47
  147. package/dist/cjs/query-builder/select-query-builder.js +122 -40
  148. package/dist/cjs/query-builder/update-query-builder.d.ts +20 -20
  149. package/dist/cjs/query-builder/update-query-builder.js +19 -16
  150. package/dist/cjs/query-builder/where-interface.d.ts +12 -11
  151. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  152. package/dist/cjs/query-compiler/default-query-compiler.d.ts +15 -5
  153. package/dist/cjs/query-compiler/default-query-compiler.js +78 -47
  154. package/dist/cjs/query-executor/query-executor-base.js +16 -1
  155. package/dist/cjs/raw-builder/raw-builder.d.ts +49 -13
  156. package/dist/cjs/raw-builder/raw-builder.js +24 -14
  157. package/dist/cjs/raw-builder/sql.d.ts +15 -7
  158. package/dist/cjs/raw-builder/sql.js +6 -0
  159. package/dist/cjs/schema/alter-column-builder.d.ts +28 -0
  160. package/dist/cjs/schema/alter-column-builder.js +55 -0
  161. package/dist/cjs/schema/alter-table-builder.d.ts +39 -341
  162. package/dist/cjs/schema/alter-table-builder.js +65 -280
  163. package/dist/cjs/schema/column-definition-builder.d.ts +43 -155
  164. package/dist/cjs/schema/column-definition-builder.js +189 -0
  165. package/dist/cjs/schema/create-index-builder.d.ts +2 -2
  166. package/dist/cjs/schema/create-table-builder.d.ts +38 -5
  167. package/dist/cjs/schema/create-table-builder.js +36 -1
  168. package/dist/cjs/schema/create-view-builder.d.ts +3 -2
  169. package/dist/cjs/schema/schema.d.ts +2 -2
  170. package/dist/cjs/schema/schema.js +6 -5
  171. package/dist/cjs/util/compilable.d.ts +2 -2
  172. package/dist/cjs/util/explainable.d.ts +2 -2
  173. package/dist/cjs/util/infer-result.d.ts +46 -0
  174. package/dist/cjs/util/infer-result.js +2 -0
  175. package/dist/cjs/util/log-once.d.ts +5 -0
  176. package/dist/cjs/util/log-once.js +16 -0
  177. package/dist/cjs/util/object-utils.d.ts +1 -0
  178. package/dist/cjs/util/object-utils.js +5 -1
  179. package/dist/cjs/util/type-utils.d.ts +3 -13
  180. package/dist/esm/dialect/database-introspector.d.ts +4 -0
  181. package/dist/esm/dialect/mysql/mysql-driver.js +6 -3
  182. package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
  183. package/dist/esm/dialect/postgres/postgres-driver.js +7 -2
  184. package/dist/esm/dialect/postgres/postgres-introspector.js +8 -0
  185. package/dist/esm/dialect/sqlite/sqlite-driver.js +4 -3
  186. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  187. package/dist/esm/driver/database-connection.d.ts +6 -2
  188. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +2 -3
  189. package/dist/esm/dynamic/dynamic-reference-builder.js +2 -2
  190. package/dist/esm/expression/expression.d.ts +100 -0
  191. package/dist/esm/expression/expression.js +12 -0
  192. package/dist/esm/index.d.ts +17 -8
  193. package/dist/esm/index.js +13 -4
  194. package/dist/esm/kysely.d.ts +3 -3
  195. package/dist/esm/kysely.js +3 -3
  196. package/dist/esm/migration/file-migration-provider.js +11 -4
  197. package/dist/esm/operation-node/aggregate-function-node.d.ts +25 -0
  198. package/dist/esm/operation-node/aggregate-function-node.js +46 -0
  199. package/dist/esm/operation-node/alias-node.d.ts +3 -10
  200. package/dist/esm/operation-node/alter-column-node.d.ts +1 -2
  201. package/dist/esm/operation-node/alter-table-node.d.ts +5 -7
  202. package/dist/esm/operation-node/alter-table-node.js +9 -1
  203. package/dist/esm/operation-node/and-node.d.ts +3 -4
  204. package/dist/esm/operation-node/binary-operation-node.d.ts +14 -0
  205. package/dist/esm/operation-node/binary-operation-node.js +18 -0
  206. package/dist/esm/operation-node/check-constraint-node.d.ts +2 -3
  207. package/dist/esm/operation-node/column-definition-node.d.ts +6 -5
  208. package/dist/esm/operation-node/column-definition-node.js +16 -0
  209. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  210. package/dist/esm/operation-node/common-table-expression-node.d.ts +2 -4
  211. package/dist/esm/operation-node/create-index-node.d.ts +1 -3
  212. package/dist/esm/operation-node/create-table-node.d.ts +4 -5
  213. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  214. package/dist/esm/operation-node/create-type-node.js +1 -2
  215. package/dist/esm/operation-node/default-value-node.d.ts +2 -4
  216. package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
  217. package/dist/esm/operation-node/drop-type-node.d.ts +1 -1
  218. package/dist/esm/operation-node/drop-type-node.js +1 -2
  219. package/dist/esm/operation-node/explain-node.d.ts +2 -4
  220. package/dist/esm/operation-node/explain-node.js +1 -1
  221. package/dist/esm/operation-node/from-node.d.ts +3 -4
  222. package/dist/esm/operation-node/generated-node.d.ts +2 -3
  223. package/dist/esm/operation-node/group-by-item-node.d.ts +2 -3
  224. package/dist/esm/operation-node/group-by-node.d.ts +1 -1
  225. package/dist/esm/operation-node/group-by-node.js +3 -3
  226. package/dist/esm/operation-node/having-node.d.ts +3 -4
  227. package/dist/esm/operation-node/having-node.js +4 -4
  228. package/dist/esm/operation-node/insert-query-node.d.ts +1 -4
  229. package/dist/esm/operation-node/join-node.d.ts +5 -9
  230. package/dist/esm/operation-node/join-node.js +6 -6
  231. package/dist/esm/operation-node/on-conflict-node.d.ts +5 -7
  232. package/dist/esm/operation-node/on-conflict-node.js +12 -12
  233. package/dist/esm/operation-node/on-node.d.ts +3 -4
  234. package/dist/esm/operation-node/on-node.js +4 -4
  235. package/dist/esm/operation-node/operation-node-transformer.d.ts +14 -4
  236. package/dist/esm/operation-node/operation-node-transformer.js +60 -20
  237. package/dist/esm/operation-node/operation-node-visitor.d.ts +14 -4
  238. package/dist/esm/operation-node/operation-node-visitor.js +7 -2
  239. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  240. package/dist/esm/operation-node/operator-node.d.ts +5 -3
  241. package/dist/esm/operation-node/operator-node.js +2 -4
  242. package/dist/esm/operation-node/or-node.d.ts +3 -4
  243. package/dist/esm/operation-node/order-by-item-node.d.ts +3 -5
  244. package/dist/esm/operation-node/over-node.d.ts +19 -0
  245. package/dist/esm/operation-node/over-node.js +33 -0
  246. package/dist/esm/operation-node/parens-node.d.ts +2 -3
  247. package/dist/esm/operation-node/partition-by-item-node.d.ts +13 -0
  248. package/dist/esm/operation-node/partition-by-item-node.js +16 -0
  249. package/dist/esm/operation-node/partition-by-node.d.ts +14 -0
  250. package/dist/esm/operation-node/partition-by-node.js +22 -0
  251. package/dist/esm/operation-node/query-node.d.ts +2 -3
  252. package/dist/esm/operation-node/query-node.js +6 -6
  253. package/dist/esm/operation-node/select-modifier-node.d.ts +2 -3
  254. package/dist/esm/operation-node/select-modifier-node.js +1 -1
  255. package/dist/esm/operation-node/select-query-node.d.ts +8 -9
  256. package/dist/esm/operation-node/select-query-node.js +14 -14
  257. package/dist/esm/operation-node/selection-node.d.ts +2 -3
  258. package/dist/esm/operation-node/set-operation-node.d.ts +15 -0
  259. package/dist/esm/operation-node/set-operation-node.js +18 -0
  260. package/dist/esm/operation-node/simple-reference-expression-node.d.ts +3 -0
  261. package/dist/esm/operation-node/simple-reference-expression-node.js +2 -0
  262. package/dist/esm/operation-node/unary-operation-node.d.ts +13 -0
  263. package/dist/esm/operation-node/unary-operation-node.js +17 -0
  264. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  265. package/dist/esm/operation-node/value-list-node.d.ts +2 -8
  266. package/dist/esm/operation-node/where-node.d.ts +3 -4
  267. package/dist/esm/operation-node/where-node.js +4 -4
  268. package/dist/esm/parser/binary-operation-parser.d.ts +20 -0
  269. package/dist/esm/parser/binary-operation-parser.js +92 -0
  270. package/dist/esm/parser/coalesce-parser.d.ts +4 -0
  271. package/dist/esm/parser/coalesce-parser.js +8 -0
  272. package/dist/esm/parser/data-type-parser.d.ts +5 -5
  273. package/dist/esm/parser/default-value-parser.d.ts +4 -5
  274. package/dist/esm/parser/default-value-parser.js +2 -2
  275. package/dist/esm/parser/expression-parser.d.ts +10 -0
  276. package/dist/esm/parser/{complex-expression-parser.js → expression-parser.js} +6 -5
  277. package/dist/esm/parser/group-by-parser.d.ts +1 -1
  278. package/dist/esm/parser/group-by-parser.js +2 -2
  279. package/dist/esm/parser/identifier-parser.d.ts +2 -0
  280. package/dist/esm/parser/identifier-parser.js +20 -0
  281. package/dist/esm/parser/insert-values-parser.d.ts +1 -1
  282. package/dist/esm/parser/insert-values-parser.js +2 -2
  283. package/dist/esm/parser/join-parser.js +2 -2
  284. package/dist/esm/parser/order-by-parser.d.ts +2 -2
  285. package/dist/esm/parser/parse-utils.d.ts +2 -0
  286. package/dist/esm/parser/parse-utils.js +7 -0
  287. package/dist/esm/parser/partition-by-parser.d.ts +6 -0
  288. package/dist/esm/parser/partition-by-parser.js +6 -0
  289. package/dist/esm/parser/reference-parser.d.ts +14 -13
  290. package/dist/esm/parser/reference-parser.js +10 -8
  291. package/dist/esm/parser/select-parser.d.ts +6 -6
  292. package/dist/esm/parser/select-parser.js +2 -2
  293. package/dist/esm/parser/set-operation-parser.d.ts +3 -0
  294. package/dist/esm/parser/set-operation-parser.js +5 -0
  295. package/dist/esm/parser/table-parser.d.ts +11 -12
  296. package/dist/esm/parser/table-parser.js +2 -2
  297. package/dist/esm/parser/unary-operation-parser.d.ts +5 -0
  298. package/dist/esm/parser/unary-operation-parser.js +13 -0
  299. package/dist/esm/parser/update-set-parser.d.ts +1 -1
  300. package/dist/esm/parser/value-parser.d.ts +5 -8
  301. package/dist/esm/parser/value-parser.js +4 -4
  302. package/dist/esm/parser/with-parser.d.ts +3 -4
  303. package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
  304. package/dist/esm/query-builder/aggregate-function-builder.d.ts +348 -0
  305. package/dist/esm/query-builder/aggregate-function-builder.js +294 -0
  306. package/dist/esm/query-builder/delete-query-builder.d.ts +20 -20
  307. package/dist/esm/query-builder/delete-query-builder.js +19 -16
  308. package/dist/esm/query-builder/expression-builder.d.ts +3 -3
  309. package/dist/esm/query-builder/expression-builder.js +3 -3
  310. package/dist/esm/query-builder/function-module.d.ts +241 -0
  311. package/dist/esm/query-builder/function-module.js +211 -0
  312. package/dist/esm/query-builder/having-interface.d.ts +9 -8
  313. package/dist/esm/query-builder/insert-query-builder.d.ts +7 -6
  314. package/dist/esm/query-builder/insert-query-builder.js +11 -9
  315. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  316. package/dist/esm/query-builder/insert-result.js +12 -1
  317. package/dist/esm/query-builder/join-builder.d.ts +9 -8
  318. package/dist/esm/query-builder/join-builder.js +10 -9
  319. package/dist/esm/query-builder/on-conflict-builder.d.ts +25 -24
  320. package/dist/esm/query-builder/on-conflict-builder.js +18 -17
  321. package/dist/esm/query-builder/over-builder.d.ts +59 -0
  322. package/dist/esm/query-builder/over-builder.js +47 -0
  323. package/dist/esm/query-builder/select-query-builder.d.ts +138 -47
  324. package/dist/esm/query-builder/select-query-builder.js +120 -38
  325. package/dist/esm/query-builder/update-query-builder.d.ts +20 -20
  326. package/dist/esm/query-builder/update-query-builder.js +19 -16
  327. package/dist/esm/query-builder/where-interface.d.ts +12 -11
  328. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  329. package/dist/esm/query-compiler/default-query-compiler.d.ts +15 -5
  330. package/dist/esm/query-compiler/default-query-compiler.js +79 -48
  331. package/dist/esm/query-executor/query-executor-base.js +16 -1
  332. package/dist/esm/raw-builder/raw-builder.d.ts +49 -13
  333. package/dist/esm/raw-builder/raw-builder.js +23 -14
  334. package/dist/esm/raw-builder/sql.d.ts +15 -7
  335. package/dist/esm/raw-builder/sql.js +6 -0
  336. package/dist/esm/schema/alter-column-builder.d.ts +28 -0
  337. package/dist/esm/schema/alter-column-builder.js +51 -0
  338. package/dist/esm/schema/alter-table-builder.d.ts +39 -341
  339. package/dist/esm/schema/alter-table-builder.js +61 -274
  340. package/dist/esm/schema/column-definition-builder.d.ts +43 -155
  341. package/dist/esm/schema/column-definition-builder.js +189 -0
  342. package/dist/esm/schema/create-index-builder.d.ts +2 -2
  343. package/dist/esm/schema/create-table-builder.d.ts +38 -5
  344. package/dist/esm/schema/create-table-builder.js +36 -1
  345. package/dist/esm/schema/create-view-builder.d.ts +3 -2
  346. package/dist/esm/schema/schema.d.ts +2 -2
  347. package/dist/esm/schema/schema.js +6 -5
  348. package/dist/esm/util/compilable.d.ts +2 -2
  349. package/dist/esm/util/explainable.d.ts +2 -2
  350. package/dist/esm/util/infer-result.d.ts +46 -0
  351. package/dist/esm/util/infer-result.js +2 -0
  352. package/dist/esm/util/log-once.d.ts +5 -0
  353. package/dist/esm/util/log-once.js +13 -0
  354. package/dist/esm/util/object-utils.d.ts +1 -0
  355. package/dist/esm/util/object-utils.js +3 -0
  356. package/dist/esm/util/type-utils.d.ts +3 -13
  357. package/package.json +4 -1
  358. package/dist/cjs/operation-node/filter-node.d.ts +0 -18
  359. package/dist/cjs/operation-node/operation-node-utils.d.ts +0 -17
  360. package/dist/cjs/operation-node/union-node.d.ts +0 -16
  361. package/dist/cjs/parser/complex-expression-parser.d.ts +0 -10
  362. package/dist/cjs/parser/filter-parser.d.ts +0 -24
  363. package/dist/cjs/parser/filter-parser.js +0 -109
  364. package/dist/cjs/parser/union-parser.d.ts +0 -5
  365. package/dist/cjs/parser/union-parser.js +0 -8
  366. package/dist/cjs/query-builder/function-builder.d.ts +0 -133
  367. package/dist/cjs/query-builder/function-builder.js +0 -160
  368. package/dist/esm/operation-node/filter-node.d.ts +0 -18
  369. package/dist/esm/operation-node/filter-node.js +0 -18
  370. package/dist/esm/operation-node/operation-node-utils.d.ts +0 -17
  371. package/dist/esm/operation-node/operation-node-utils.js +0 -2
  372. package/dist/esm/operation-node/union-node.d.ts +0 -16
  373. package/dist/esm/operation-node/union-node.js +0 -17
  374. package/dist/esm/parser/complex-expression-parser.d.ts +0 -10
  375. package/dist/esm/parser/filter-parser.d.ts +0 -24
  376. package/dist/esm/parser/filter-parser.js +0 -100
  377. package/dist/esm/parser/union-parser.d.ts +0 -5
  378. package/dist/esm/parser/union-parser.js +0 -5
  379. package/dist/esm/query-builder/function-builder.d.ts +0 -133
  380. package/dist/esm/query-builder/function-builder.js +0 -157
@@ -216,7 +216,7 @@ class CreateTableBuilder {
216
216
  * ```ts
217
217
  * db.schema.createTable('person')
218
218
  * .modifyFront(sql`global temporary`)
219
- * .addColumn('id', 'integer', col => col => primaryKey())
219
+ * .addColumn('id', 'integer', col => col.primaryKey())
220
220
  * .addColumn('first_name', 'varchar(64)', col => col.notNull())
221
221
  * .addColumn('last_name', 'varchar(64), col => col.notNull())
222
222
  * .execute()
@@ -270,6 +270,41 @@ class CreateTableBuilder {
270
270
  createTableNode: create_table_node_js_1.CreateTableNode.cloneWithEndModifier(this.#props.createTableNode, modifier.toOperationNode()),
271
271
  });
272
272
  }
273
+ /**
274
+ * Calls the given function passing `this` as the only argument.
275
+ *
276
+ * ### Examples
277
+ *
278
+ * ```ts
279
+ * db.schema
280
+ * .createTable('test')
281
+ * .call((builder) => builder.addColumn('id', 'integer'))
282
+ * .execute()
283
+ * ```
284
+ *
285
+ * ```ts
286
+ * const addDefaultColumns = <T extends string, C extends string = never>(
287
+ * builder: CreateTableBuilder<T, C>
288
+ * ) => {
289
+ * return builder
290
+ * .addColumn('id', 'integer', (col) => col.notNull())
291
+ * .addColumn('created_at', 'date', (col) =>
292
+ * col.notNull().defaultTo(sql`now()`)
293
+ * )
294
+ * .addColumn('updated_at', 'date', (col) =>
295
+ * col.notNull().defaultTo(sql`now()`)
296
+ * )
297
+ * }
298
+ *
299
+ * db.schema
300
+ * .createTable('test')
301
+ * .call(addDefaultColumns)
302
+ * .execute()
303
+ * ```
304
+ */
305
+ call(func) {
306
+ return func(this);
307
+ }
273
308
  toOperationNode() {
274
309
  return this.#props.executor.transformQuery(this.#props.createTableNode, this.#props.queryId);
275
310
  }
@@ -4,7 +4,8 @@ import { Compilable } from '../util/compilable.js';
4
4
  import { QueryExecutor } from '../query-executor/query-executor.js';
5
5
  import { QueryId } from '../util/query-id.js';
6
6
  import { CreateViewNode } from '../operation-node/create-view-node.js';
7
- import { AnyRawBuilder, AnySelectQueryBuilder } from '../util/type-utils.js';
7
+ import { AnySelectQueryBuilder } from '../util/type-utils.js';
8
+ import { RawBuilder } from '../raw-builder/raw-builder.js';
8
9
  export declare class CreateViewBuilder implements OperationNodeSource, Compilable {
9
10
  #private;
10
11
  constructor(props: CreateViewBuilderProps);
@@ -30,7 +31,7 @@ export declare class CreateViewBuilder implements OperationNodeSource, Compilabl
30
31
  * string opening an SQL injection vulnerability. DO NOT pass unchecked user input
31
32
  * into the query or raw expression passed to this method!
32
33
  */
33
- as(query: AnySelectQueryBuilder | AnyRawBuilder): CreateViewBuilder;
34
+ as(query: AnySelectQueryBuilder | RawBuilder<any>): CreateViewBuilder;
34
35
  toOperationNode(): CreateViewNode;
35
36
  compile(): CompiledQuery;
36
37
  execute(): Promise<void>;
@@ -186,7 +186,7 @@ export declare class SchemaModule {
186
186
  * .execute()
187
187
  * ```
188
188
  */
189
- createType(viewName: string): CreateTypeBuilder;
189
+ createType(typeName: string): CreateTypeBuilder;
190
190
  /**
191
191
  * Drop a type.
192
192
  *
@@ -201,7 +201,7 @@ export declare class SchemaModule {
201
201
  * .execute()
202
202
  * ```
203
203
  */
204
- dropType(viewName: string): DropTypeBuilder;
204
+ dropType(typeName: string): DropTypeBuilder;
205
205
  /**
206
206
  * Returns a copy of this schema module with the given plugin installed.
207
207
  */
@@ -26,6 +26,7 @@ const create_type_builder_js_1 = require("./create-type-builder.js");
26
26
  const drop_type_builder_js_1 = require("./drop-type-builder.js");
27
27
  const create_type_node_js_1 = require("../operation-node/create-type-node.js");
28
28
  const drop_type_node_js_1 = require("../operation-node/drop-type-node.js");
29
+ const identifier_parser_js_1 = require("../parser/identifier-parser.js");
29
30
  /**
30
31
  * Provides methods for building database schema.
31
32
  */
@@ -201,7 +202,7 @@ class SchemaModule {
201
202
  return new alter_table_builder_js_1.AlterTableBuilder({
202
203
  queryId: (0, query_id_js_1.createQueryId)(),
203
204
  executor: this.#executor,
204
- alterTableNode: alter_table_node_js_1.AlterTableNode.create(table),
205
+ node: alter_table_node_js_1.AlterTableNode.create(table),
205
206
  });
206
207
  }
207
208
  /**
@@ -257,11 +258,11 @@ class SchemaModule {
257
258
  * .execute()
258
259
  * ```
259
260
  */
260
- createType(viewName) {
261
+ createType(typeName) {
261
262
  return new create_type_builder_js_1.CreateTypeBuilder({
262
263
  queryId: (0, query_id_js_1.createQueryId)(),
263
264
  executor: this.#executor,
264
- createTypeNode: create_type_node_js_1.CreateTypeNode.create(viewName),
265
+ createTypeNode: create_type_node_js_1.CreateTypeNode.create((0, identifier_parser_js_1.parseSchemableIdentifier)(typeName)),
265
266
  });
266
267
  }
267
268
  /**
@@ -278,11 +279,11 @@ class SchemaModule {
278
279
  * .execute()
279
280
  * ```
280
281
  */
281
- dropType(viewName) {
282
+ dropType(typeName) {
282
283
  return new drop_type_builder_js_1.DropTypeBuilder({
283
284
  queryId: (0, query_id_js_1.createQueryId)(),
284
285
  executor: this.#executor,
285
- dropTypeNode: drop_type_node_js_1.DropTypeNode.create(viewName),
286
+ dropTypeNode: drop_type_node_js_1.DropTypeNode.create((0, identifier_parser_js_1.parseSchemableIdentifier)(typeName)),
286
287
  });
287
288
  }
288
289
  /**
@@ -1,4 +1,4 @@
1
1
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
2
- export interface Compilable {
3
- compile(): CompiledQuery;
2
+ export interface Compilable<O = unknown> {
3
+ compile(): CompiledQuery<O>;
4
4
  }
@@ -1,5 +1,5 @@
1
- import { AnyRawBuilder } from './type-utils.js';
1
+ import { Expression } from '../expression/expression.js';
2
2
  export declare type ExplainFormat = 'text' | 'xml' | 'json' | 'yaml' | 'traditional' | 'tree';
3
3
  export interface Explainable {
4
- explain<O extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: AnyRawBuilder): Promise<O[]>;
4
+ explain<O extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<O[]>;
5
5
  }
@@ -0,0 +1,46 @@
1
+ import { DeleteResult } from '../query-builder/delete-result.js';
2
+ import { InsertResult } from '../query-builder/insert-result.js';
3
+ import { UpdateResult } from '../query-builder/update-result.js';
4
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
5
+ import { Compilable } from './compilable.js';
6
+ /**
7
+ * A helper type that allows inferring a select/insert/update/delete query's result
8
+ * type from a query builder or compiled query.
9
+ *
10
+ * ### Examples
11
+ *
12
+ * Infer a query builder's result type:
13
+ *
14
+ * ```ts
15
+ * import { InferResult } from 'kysely'
16
+ *
17
+ * const query = db
18
+ * .selectFrom('person')
19
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
20
+ * .select(['person.first_name', 'pet.name'])
21
+ *
22
+ * type QueryResult = InferResult<typeof query> // { first_name: string; name: string; }[]
23
+ * ```
24
+ *
25
+ * Infer a compiled query's result type:
26
+ *
27
+ * ```ts
28
+ * import { InferResult } from 'kysely'
29
+ *
30
+ * const compiledQuery = db
31
+ * .insertInto('person')
32
+ * .values({
33
+ * first_name: 'Foo',
34
+ * last_name: 'Barson',
35
+ * gender: 'other',
36
+ * age: 15,
37
+ * })
38
+ * .returningAll()
39
+ * .compile()
40
+ *
41
+ * type QueryResult = InferResult<typeof compiledQuery> // Selectable<Person>[]
42
+ * ```
43
+ */
44
+ export declare type InferResult<C extends Compilable<any> | CompiledQuery<any>> = C extends Compilable<infer O> ? ResolveResult<O> : C extends CompiledQuery<infer O> ? ResolveResult<O> : never;
45
+ declare type ResolveResult<O> = O extends InsertResult | UpdateResult | DeleteResult ? O : O[];
46
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Use for system-level logging, such as deprecation messages.
3
+ * Logs a message and ensures it won't be logged again.
4
+ */
5
+ export declare function logOnce(message: string): void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logOnce = void 0;
4
+ const LOGGED_MESSAGES = new Set();
5
+ /**
6
+ * Use for system-level logging, such as deprecation messages.
7
+ * Logs a message and ensures it won't be logged again.
8
+ */
9
+ function logOnce(message) {
10
+ if (LOGGED_MESSAGES.has(message)) {
11
+ return;
12
+ }
13
+ LOGGED_MESSAGES.add(message);
14
+ console.log(message);
15
+ }
16
+ exports.logOnce = logOnce;
@@ -11,6 +11,7 @@ export declare function isBuffer(obj: unknown): obj is {
11
11
  };
12
12
  export declare function isFunction(obj: unknown): obj is Function;
13
13
  export declare function isObject(obj: unknown): obj is Record<string, unknown>;
14
+ export declare function isArrayBufferOrView(obj: unknown): obj is ArrayBuffer | ArrayBufferView;
14
15
  export declare function getLast<T>(arr: ArrayLike<T>): T | undefined;
15
16
  export declare function freeze<T>(obj: T): Readonly<T>;
16
17
  export declare function asArray<T>(arg: T | T[]): T[];
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compare = exports.noop = exports.isReadonlyArray = exports.asReadonlyArray = exports.asArray = exports.freeze = exports.getLast = exports.isObject = exports.isFunction = exports.isBuffer = exports.isBigInt = exports.isDate = exports.isNull = exports.isBoolean = exports.isNumber = exports.isString = exports.isUndefined = exports.isEmpty = void 0;
3
+ exports.compare = exports.noop = exports.isReadonlyArray = exports.asReadonlyArray = exports.asArray = exports.freeze = exports.getLast = exports.isArrayBufferOrView = exports.isObject = exports.isFunction = exports.isBuffer = exports.isBigInt = exports.isDate = exports.isNull = exports.isBoolean = exports.isNumber = exports.isString = exports.isUndefined = exports.isEmpty = void 0;
4
4
  function isEmpty(obj) {
5
5
  if (Array.isArray(obj) || isString(obj) || isBuffer(obj)) {
6
6
  return obj.length === 0;
@@ -53,6 +53,10 @@ function isObject(obj) {
53
53
  return typeof obj === 'object' && obj !== null;
54
54
  }
55
55
  exports.isObject = isObject;
56
+ function isArrayBufferOrView(obj) {
57
+ return obj instanceof ArrayBuffer || ArrayBuffer.isView(obj);
58
+ }
59
+ exports.isArrayBufferOrView = isArrayBufferOrView;
56
60
  function getLast(arr) {
57
61
  return arr[arr.length - 1];
58
62
  }
@@ -1,6 +1,4 @@
1
- import { AliasedRawBuilder, RawBuilder } from '../raw-builder/raw-builder.js';
2
- import { AliasedQueryBuilder, SelectQueryBuilder } from '../query-builder/select-query-builder.js';
3
- import { ExpressionBuilder } from '../query-builder/expression-builder.js';
1
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
4
2
  import { InsertResult } from '../query-builder/insert-result.js';
5
3
  import { DeleteResult } from '../query-builder/delete-result.js';
6
4
  import { UpdateResult } from '../query-builder/update-result.js';
@@ -99,21 +97,11 @@ export declare type AnyAliasedColumnWithTable<DB, TB extends keyof DB> = {
99
97
  */
100
98
  export declare type ArrayItemType<T> = T extends ReadonlyArray<infer I> ? I : never;
101
99
  export declare type AnySelectQueryBuilder = SelectQueryBuilder<any, any, any>;
102
- export declare type AnyAliasedQueryBuilder = AliasedQueryBuilder<any, any, any, any>;
103
- export declare type AnyRawBuilder = RawBuilder<any>;
104
- export declare type AnyAliasedRawBuilder = AliasedRawBuilder<any, any>;
105
- export declare type SelectQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnySelectQueryBuilder;
106
- export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedQueryBuilder;
107
- export declare type RawBuilderFactory<DB, TB extends keyof DB, O = any> = (qb: ExpressionBuilder<DB, TB>) => RawBuilder<O>;
108
- export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
109
100
  export declare type SingleResultType<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O | undefined;
110
101
  export declare type UnknownRow = Record<string, unknown>;
111
102
  export declare type Nullable<T> = {
112
103
  [P in keyof T]: T[P] | null;
113
104
  };
114
- export declare type NullableValues<T> = {
115
- [P in keyof T]: Nullable<T[P]>;
116
- };
117
105
  /**
118
106
  * Takes all properties from T1 and merges all properties from T2
119
107
  * that don't exist in T1 as optional properties.
@@ -135,3 +123,5 @@ export declare type NullableValues<T> = {
135
123
  * // { name: string, age: number, species?: 'cat' | 'dog' }
136
124
  */
137
125
  export declare type MergePartial<T1, T2> = T1 & Partial<Omit<T2, keyof T1>>;
126
+ export declare type IsNever<T> = [T] extends [never] ? true : false;
127
+ export declare type Equals<T, U> = (<G>() => G extends T ? 1 : 2) extends <G>() => G extends U ? 1 : 2 ? true : false;
@@ -49,6 +49,10 @@ export interface ColumnMetadata {
49
49
  * on PostgreSQL, `INTEGER` on SQLite and `int` on MySQL.
50
50
  */
51
51
  readonly dataType: string;
52
+ /**
53
+ * The schema this column's data type was created in.
54
+ */
55
+ readonly dataTypeSchema?: string;
52
56
  readonly isAutoIncrementing: boolean;
53
57
  readonly isNullable: boolean;
54
58
  readonly hasDefaultValue: boolean;
@@ -84,15 +84,18 @@ class MysqlConnection {
84
84
  const result = await this.#executeQuery(compiledQuery);
85
85
  if (isOkPacket(result)) {
86
86
  const { insertId, affectedRows } = result;
87
+ const numAffectedRows = affectedRows !== undefined && affectedRows !== null
88
+ ? BigInt(affectedRows)
89
+ : undefined;
87
90
  return {
88
91
  insertId: insertId !== undefined &&
89
92
  insertId !== null &&
90
93
  insertId.toString() !== '0'
91
94
  ? BigInt(insertId)
92
95
  : undefined,
93
- numUpdatedOrDeletedRows: affectedRows !== undefined && insertId !== null
94
- ? BigInt(affectedRows)
95
- : undefined,
96
+ // TODO: remove.
97
+ numUpdatedOrDeletedRows: numAffectedRows,
98
+ numAffectedRows,
96
99
  rows: [],
97
100
  };
98
101
  }
@@ -2,7 +2,7 @@
2
2
  import { sql } from '../../raw-builder/sql.js';
3
3
  import { DialectAdapterBase } from '../dialect-adapter-base.js';
4
4
  // Random id for our transaction lock.
5
- const LOCK_ID = 3853314791062309107n;
5
+ const LOCK_ID = BigInt('3853314791062309107');
6
6
  export class PostgresAdapter extends DialectAdapterBase {
7
7
  get supportsTransactionalDdl() {
8
8
  return true;
@@ -69,9 +69,14 @@ class PostgresConnection {
69
69
  const result = await this.#client.query(compiledQuery.sql, [
70
70
  ...compiledQuery.parameters,
71
71
  ]);
72
- if (result.command === 'UPDATE' || result.command === 'DELETE') {
72
+ if (result.command === 'INSERT' ||
73
+ result.command === 'UPDATE' ||
74
+ result.command === 'DELETE') {
75
+ const numAffectedRows = BigInt(result.rowCount);
73
76
  return {
74
- numUpdatedOrDeletedRows: BigInt(result.rowCount),
77
+ // TODO: remove.
78
+ numUpdatedOrDeletedRows: numAffectedRows,
79
+ numAffectedRows,
75
80
  rows: result.rows ?? [],
76
81
  };
77
82
  }
@@ -17,10 +17,16 @@ export class PostgresIntrospector {
17
17
  }
18
18
  async getTables(options = { withInternalKyselyTables: false }) {
19
19
  let query = this.#db
20
+ // column
20
21
  .selectFrom('pg_catalog.pg_attribute as a')
22
+ // table
21
23
  .innerJoin('pg_catalog.pg_class as c', 'a.attrelid', 'c.oid')
24
+ // table schema
22
25
  .innerJoin('pg_catalog.pg_namespace as ns', 'c.relnamespace', 'ns.oid')
26
+ // column data type
23
27
  .innerJoin('pg_catalog.pg_type as typ', 'a.atttypid', 'typ.oid')
28
+ // column data type schema
29
+ .innerJoin('pg_catalog.pg_namespace as dtns', 'typ.typnamespace', 'dtns.oid')
24
30
  .select([
25
31
  'a.attname as column',
26
32
  'a.attnotnull as not_null',
@@ -28,6 +34,7 @@ export class PostgresIntrospector {
28
34
  'c.relname as table',
29
35
  'ns.nspname as schema',
30
36
  'typ.typname as type',
37
+ 'dtns.nspname as type_schema',
31
38
  // Detect if the column is auto incrementing by finding the sequence
32
39
  // that is created for `serial` and `bigserial` columns.
33
40
  this.#db
@@ -77,6 +84,7 @@ export class PostgresIntrospector {
77
84
  table.columns.push(freeze({
78
85
  name: it.column,
79
86
  dataType: it.type,
87
+ dataTypeSchema: it.type_schema,
80
88
  isNullable: !it.not_null,
81
89
  isAutoIncrementing: !!it.auto_incrementing,
82
90
  hasDefaultValue: it.has_default,
@@ -55,10 +55,11 @@ class SqliteConnection {
55
55
  }
56
56
  else {
57
57
  const { changes, lastInsertRowid } = stmt.run(parameters);
58
+ const numAffectedRows = changes !== undefined && changes !== null ? BigInt(changes) : undefined;
58
59
  return Promise.resolve({
59
- numUpdatedOrDeletedRows: changes !== undefined && changes !== null
60
- ? BigInt(changes)
61
- : undefined,
60
+ // TODO: remove.
61
+ numUpdatedOrDeletedRows: numAffectedRows,
62
+ numAffectedRows,
62
63
  insertId: lastInsertRowid !== undefined && lastInsertRowid !== null
63
64
  ? BigInt(lastInsertRowid)
64
65
  : undefined,
@@ -44,6 +44,7 @@ export class SqliteIntrospector {
44
44
  const autoIncrementCol = createSql[0]?.sql
45
45
  ?.split(/[\(\),]/)
46
46
  ?.find((it) => it.toLowerCase().includes('autoincrement'))
47
+ ?.trimStart()
47
48
  ?.split(/\s+/)?.[0]
48
49
  ?.replace(/["`]/g, '');
49
50
  const columns = await db
@@ -10,10 +10,14 @@ export interface DatabaseConnection {
10
10
  }
11
11
  export interface QueryResult<O> {
12
12
  /**
13
- * This is defined for update and delete queries and contains
14
- * the number of rows the query updated/deleted.
13
+ * @deprecated use {@link QueryResult.numAffectedRows} instead.
15
14
  */
16
15
  readonly numUpdatedOrDeletedRows?: bigint;
16
+ /**
17
+ * This is defined for insert, update and delete queries and contains
18
+ * the number of rows the query inserted/updated/deleted.
19
+ */
20
+ readonly numAffectedRows?: bigint;
17
21
  /**
18
22
  * This is defined for insert queries on dialects that return
19
23
  * the auto incrementing primary key from an insert.
@@ -1,6 +1,5 @@
1
- import { ColumnNode } from '../operation-node/column-node.js';
2
1
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
- import { ReferenceNode } from '../operation-node/reference-node.js';
2
+ import { SimpleReferenceExpressionNode } from '../operation-node/simple-reference-expression-node.js';
4
3
  export declare class DynamicReferenceBuilder<R extends string = never> implements OperationNodeSource {
5
4
  #private;
6
5
  get dynamicReference(): string;
@@ -14,6 +13,6 @@ export declare class DynamicReferenceBuilder<R extends string = never> implement
14
13
  */
15
14
  protected get refType(): R;
16
15
  constructor(reference: string);
17
- toOperationNode(): ReferenceNode | ColumnNode;
16
+ toOperationNode(): SimpleReferenceExpressionNode;
18
17
  }
19
18
  export declare function isDynamicReferenceBuilder(obj: unknown): obj is DynamicReferenceBuilder<any>;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="./dynamic-reference-builder.d.ts" />
2
2
  import { isOperationNodeSource, } from '../operation-node/operation-node-source.js';
3
- import { parseStringReference } from '../parser/reference-parser.js';
3
+ import { parseSimpleReferenceExpression } from '../parser/reference-parser.js';
4
4
  import { isObject, isString } from '../util/object-utils.js';
5
5
  export class DynamicReferenceBuilder {
6
6
  #dynamicReference;
@@ -22,7 +22,7 @@ export class DynamicReferenceBuilder {
22
22
  this.#dynamicReference = reference;
23
23
  }
24
24
  toOperationNode() {
25
- return parseStringReference(this.#dynamicReference);
25
+ return parseSimpleReferenceExpression(this.#dynamicReference);
26
26
  }
27
27
  }
28
28
  export function isDynamicReferenceBuilder(obj) {
@@ -0,0 +1,100 @@
1
+ import { AliasNode } from '../operation-node/alias-node.js';
2
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
+ import { OperationNode } from '../operation-node/operation-node.js';
4
+ /**
5
+ * `Expression` represents an arbitrary SQL expression with a type.
6
+ *
7
+ * Most Kysely methods accept instances of `Expression` and most classes like `SelectQueryBuilder`
8
+ * and the return value of the {@link sql} template tag implement it.
9
+ *
10
+ * ```ts
11
+ * const exp1: Expression<string> = sql<string>`CONCAT('hello', ' ', 'world')`
12
+ * const exp2: Expression<{ first_name: string }> = db.selectFrom('person').select('first_name')
13
+ * ```
14
+ *
15
+ * You can implement the `Expression` interface to create your own type-safe utilities for Kysely.
16
+ */
17
+ export interface Expression<T> extends OperationNodeSource {
18
+ /**
19
+ * All expressions need to have this getter for complicated type-related reasons.
20
+ * Simply add this getter for your expression and always return `undefined` from it:
21
+ *
22
+ * ```ts
23
+ * class SomeExpression<T> implements Expression<T> {
24
+ * get expressionType(): T | undefined {
25
+ * return undefined
26
+ * }
27
+ * }
28
+ * ```
29
+ *
30
+ * The getter is needed to make the expression assignable to another expression only
31
+ * if the types `T` are assignable. Without this property (or some other property
32
+ * that references `T`), you could assing `Expression<string>` to `Expression<number>`.
33
+ */
34
+ get expressionType(): T | undefined;
35
+ /**
36
+ * Creates the OperationNode that describes how to compile this expression into SQL.
37
+ *
38
+ * If you are creating a custom expression, it's often easiest to use the {@link sql}
39
+ * template tag to build the node:
40
+ *
41
+ * ```ts
42
+ * class SomeExpression<T> implements Expression<T> {
43
+ * toOperationNode(): OperationNode {
44
+ * return sql`some sql here`.toOperationNode()
45
+ * }
46
+ * }
47
+ * ```
48
+ */
49
+ toOperationNode(): OperationNode;
50
+ }
51
+ /**
52
+ * Just like `Expression<T>` but also holds an alias type `A`.
53
+ *
54
+ * `AliasedExpression<T, A>` can be used in places where, in addition to the value type `T`, you
55
+ * also need a name `A` for that value. For example anything you can pass into the `select` method
56
+ * needs to implement an `AliasedExpression<T, A>`. `A` becomes the name of the selected expression
57
+ * in the result and `T` becomes its type.
58
+ *
59
+ * @example
60
+ *
61
+ * ```ts
62
+ * class SomeAliasedExpression<T, A extends string> implements AliasedExpression<T, A> {
63
+ * #expression: Expression<T>
64
+ * #alias: A
65
+ *
66
+ * constructor(expression: Expression<T>, alias: A) {
67
+ * this.#expression = expression
68
+ * this.#alias = alias
69
+ * }
70
+ *
71
+ * get expression(): Expression<T> {
72
+ * return this.#expression
73
+ * }
74
+ *
75
+ * get alias(): A {
76
+ * return this.#alias
77
+ * }
78
+ *
79
+ * toOperationNode(): AliasNode {
80
+ * return AliasNode.create(this.#expression.toOperationNode(), IdentifierNode.create(this.#alias))
81
+ * }
82
+ * }
83
+ * ```
84
+ */
85
+ export interface AliasedExpression<T, A extends string> extends OperationNodeSource {
86
+ /**
87
+ * Returns the aliased expression.
88
+ */
89
+ get expression(): Expression<T>;
90
+ /**
91
+ * Returns the alias.
92
+ */
93
+ get alias(): A;
94
+ /**
95
+ * Creates the OperationNode that describes how to compile this expression into SQL.
96
+ */
97
+ toOperationNode(): AliasNode;
98
+ }
99
+ export declare function isExpression(obj: unknown): obj is Expression<any>;
100
+ export declare function isAliasedExpression(obj: unknown): obj is AliasedExpression<any, any>;
@@ -0,0 +1,12 @@
1
+ /// <reference types="./expression.d.ts" />
2
+ import { isOperationNodeSource, } from '../operation-node/operation-node-source.js';
3
+ import { isObject, isString } from '../util/object-utils.js';
4
+ export function isExpression(obj) {
5
+ return isObject(obj) && 'expressionType' in obj && isOperationNodeSource(obj);
6
+ }
7
+ export function isAliasedExpression(obj) {
8
+ return (isObject(obj) &&
9
+ 'expression' in obj &&
10
+ isString(obj.alias) &&
11
+ isOperationNodeSource(obj));
12
+ }