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
@@ -9,7 +9,6 @@ import { DataTypeNode } from '../operation-node/data-type-node.js';
9
9
  import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
10
10
  import { DropIndexNode } from '../operation-node/drop-index-node.js';
11
11
  import { DropTableNode } from '../operation-node/drop-table-node.js';
12
- import { FilterNode } from '../operation-node/filter-node.js';
13
12
  import { FromNode } from '../operation-node/from-node.js';
14
13
  import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
15
14
  import { GroupByNode } from '../operation-node/group-by-node.js';
@@ -60,7 +59,6 @@ import { ColumnDefinitionNode } from '../operation-node/column-definition-node.j
60
59
  import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
61
60
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
62
61
  import { ColumnNode } from '../operation-node/column-node.js';
63
- import { UnionNode } from '../operation-node/union-node.js';
64
62
  import { CreateViewNode } from '../operation-node/create-view-node.js';
65
63
  import { DropViewNode } from '../operation-node/drop-view-node.js';
66
64
  import { GeneratedNode } from '../operation-node/generated-node.js';
@@ -74,6 +72,13 @@ import { DropTypeNode } from '../operation-node/drop-type-node.js';
74
72
  import { ExplainNode } from '../operation-node/explain-node.js';
75
73
  import { SchemableIdentifierNode } from '../operation-node/schemable-identifier-node.js';
76
74
  import { DefaultInsertValueNode } from '../operation-node/default-insert-value-node.js';
75
+ import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
76
+ import { OverNode } from '../operation-node/over-node.js';
77
+ import { PartitionByNode } from '../operation-node/partition-by-node.js';
78
+ import { PartitionByItemNode } from '../operation-node/partition-by-item-node.js';
79
+ import { SetOperationNode } from '../operation-node/set-operation-node.js';
80
+ import { BinaryOperationNode } from '../operation-node/binary-operation-node.js';
81
+ import { UnaryOperationNode } from '../operation-node/unary-operation-node.js';
77
82
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
78
83
  #private;
79
84
  protected get numParameters(): number;
@@ -83,7 +88,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
83
88
  protected visitFrom(node: FromNode): void;
84
89
  protected visitSelection(node: SelectionNode): void;
85
90
  protected visitColumn(node: ColumnNode): void;
86
- protected compileDistinctOn(selections: ReadonlyArray<SelectionNode>): void;
91
+ protected compileDistinctOn(expressions: ReadonlyArray<OperationNode>): void;
87
92
  protected compileList(nodes: ReadonlyArray<OperationNode>, separator?: string): void;
88
93
  protected visitWhere(node: WhereNode): void;
89
94
  protected visitHaving(node: HavingNode): void;
@@ -96,7 +101,6 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
96
101
  protected visitSelectAll(_: SelectAllNode): void;
97
102
  protected visitIdentifier(node: IdentifierNode): void;
98
103
  protected compileUnwrappedIdentifier(node: IdentifierNode): void;
99
- protected visitFilter(node: FilterNode): void;
100
104
  protected visitAnd(node: AndNode): void;
101
105
  protected visitOr(node: OrNode): void;
102
106
  protected visitValue(node: ValueNode): void;
@@ -145,7 +149,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
145
149
  protected visitModifyColumn(node: ModifyColumnNode): void;
146
150
  protected visitAddConstraint(node: AddConstraintNode): void;
147
151
  protected visitDropConstraint(node: DropConstraintNode): void;
148
- protected visitUnion(node: UnionNode): void;
152
+ protected visitSetOperation(node: SetOperationNode): void;
149
153
  protected visitCreateView(node: CreateViewNode): void;
150
154
  protected visitDropView(node: DropViewNode): void;
151
155
  protected visitGenerated(node: GeneratedNode): void;
@@ -155,6 +159,12 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
155
159
  protected visitDropType(node: DropTypeNode): void;
156
160
  protected visitExplain(node: ExplainNode): void;
157
161
  protected visitDefaultInsertValue(_: DefaultInsertValueNode): void;
162
+ protected visitAggregateFunction(node: AggregateFunctionNode): void;
163
+ protected visitOver(node: OverNode): void;
164
+ protected visitPartitionBy(node: PartitionByNode): void;
165
+ protected visitPartitionByItem(node: PartitionByItemNode): void;
166
+ protected visitBinaryOperation(node: BinaryOperationNode): void;
167
+ protected visitUnaryOperation(node: UnaryOperationNode): void;
158
168
  protected append(str: string): void;
159
169
  protected appendValue(parameter: unknown): void;
160
170
  protected getLeftIdentifierWrapper(): string;
@@ -2,10 +2,9 @@
2
2
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
3
3
  import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.js';
4
4
  import { QueryNode } from '../operation-node/query-node.js';
5
- import { RawNode } from '../operation-node/raw-node.js';
6
- import { getLast, freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from '../util/object-utils.js';
7
- import { UnionNode } from '../operation-node/union-node.js';
5
+ import { freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from '../util/object-utils.js';
8
6
  import { CreateViewNode } from '../operation-node/create-view-node.js';
7
+ import { SetOperationNode } from '../operation-node/set-operation-node.js';
9
8
  export class DefaultQueryCompiler extends OperationNodeVisitor {
10
9
  #sql = '';
11
10
  #parameters = [];
@@ -29,7 +28,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
29
28
  const wrapInParens = this.parentNode !== undefined &&
30
29
  !InsertQueryNode.is(this.parentNode) &&
31
30
  !CreateViewNode.is(this.parentNode) &&
32
- !UnionNode.is(this.parentNode);
31
+ !SetOperationNode.is(this.parentNode);
33
32
  if (this.parentNode === undefined && node.explain) {
34
33
  this.visitNode(node.explain);
35
34
  this.append(' ');
@@ -42,8 +41,8 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
42
41
  this.append(' ');
43
42
  }
44
43
  this.append('select ');
45
- if (node.distinctOnSelections) {
46
- this.compileDistinctOn(node.distinctOnSelections);
44
+ if (node.distinctOn) {
45
+ this.compileDistinctOn(node.distinctOn);
47
46
  this.append(' ');
48
47
  }
49
48
  if (node.frontModifiers && node.frontModifiers.length > 0) {
@@ -71,9 +70,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
71
70
  this.append(' ');
72
71
  this.visitNode(node.having);
73
72
  }
74
- if (node.union) {
73
+ if (node.setOperations) {
75
74
  this.append(' ');
76
- this.compileList(node.union, ' ');
75
+ this.compileList(node.setOperations, ' ');
77
76
  }
78
77
  if (node.orderBy) {
79
78
  this.append(' ');
@@ -105,16 +104,16 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
105
104
  visitColumn(node) {
106
105
  this.visitNode(node.column);
107
106
  }
108
- compileDistinctOn(selections) {
107
+ compileDistinctOn(expressions) {
109
108
  this.append('distinct on (');
110
- this.compileList(selections);
109
+ this.compileList(expressions);
111
110
  this.append(')');
112
111
  }
113
112
  compileList(nodes, separator = ', ') {
114
- const lastNode = getLast(nodes);
115
- for (const node of nodes) {
116
- this.visitNode(node);
117
- if (node !== lastNode) {
113
+ const lastIndex = nodes.length - 1;
114
+ for (let i = 0; i <= lastIndex; i++) {
115
+ this.visitNode(nodes[i]);
116
+ if (i < lastIndex) {
118
117
  this.append(separator);
119
118
  }
120
119
  }
@@ -242,15 +241,6 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
242
241
  }
243
242
  this.append(this.sanitizeIdentifier(node.name));
244
243
  }
245
- visitFilter(node) {
246
- if (node.left) {
247
- this.visitNode(node.left);
248
- this.append(' ');
249
- }
250
- this.visitNode(node.op);
251
- this.append(' ');
252
- this.visitNode(node.right);
253
- }
254
244
  visitAnd(node) {
255
245
  this.visitNode(node.left);
256
246
  this.append(' and ');
@@ -327,7 +317,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
327
317
  }
328
318
  visitCreateTable(node) {
329
319
  this.append('create ');
330
- if (node.frontModifiers) {
320
+ if (node.frontModifiers && node.frontModifiers.length > 0) {
331
321
  this.compileList(node.frontModifiers, ' ');
332
322
  this.append(' ');
333
323
  }
@@ -346,7 +336,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
346
336
  this.append(' on commit ');
347
337
  this.append(node.onCommit);
348
338
  }
349
- if (node.endModifiers) {
339
+ if (node.endModifiers && node.endModifiers.length > 0) {
350
340
  this.append(' ');
351
341
  this.compileList(node.endModifiers, ' ');
352
342
  }
@@ -358,6 +348,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
358
348
  if (node.unsigned) {
359
349
  this.append(' unsigned');
360
350
  }
351
+ if (node.frontModifiers && node.frontModifiers.length > 0) {
352
+ this.append(' ');
353
+ this.compileList(node.frontModifiers, ' ');
354
+ }
361
355
  if (node.generated) {
362
356
  this.append(' ');
363
357
  this.visitNode(node.generated);
@@ -387,6 +381,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
387
381
  this.append(' ');
388
382
  this.visitNode(node.check);
389
383
  }
384
+ if (node.endModifiers && node.endModifiers.length > 0) {
385
+ this.append(' ');
386
+ this.compileList(node.endModifiers, ' ');
387
+ }
390
388
  }
391
389
  getAutoIncrement() {
392
390
  return 'auto_increment';
@@ -542,13 +540,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
542
540
  }
543
541
  if (node.expression) {
544
542
  this.append(' (');
545
- if (RawNode.is(node.expression)) {
546
- this.append('(');
547
- }
548
543
  this.visitNode(node.expression);
549
- if (RawNode.is(node.expression)) {
550
- this.append(')');
551
- }
552
544
  this.append(')');
553
545
  }
554
546
  }
@@ -673,20 +665,8 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
673
665
  if (node.dropConstraint) {
674
666
  this.visitNode(node.dropConstraint);
675
667
  }
676
- if (node.renameColumn) {
677
- this.visitNode(node.renameColumn);
678
- }
679
- if (node.addColumn) {
680
- this.visitNode(node.addColumn);
681
- }
682
- if (node.dropColumn) {
683
- this.visitNode(node.dropColumn);
684
- }
685
- if (node.alterColumn) {
686
- this.visitNode(node.alterColumn);
687
- }
688
- if (node.modifyColumn) {
689
- this.visitNode(node.modifyColumn);
668
+ if (node.columnAlterations) {
669
+ this.compileList(node.columnAlterations);
690
670
  }
691
671
  }
692
672
  visitAddColumn(node) {
@@ -750,12 +730,13 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
750
730
  this.append(' restrict');
751
731
  }
752
732
  }
753
- visitUnion(node) {
754
- this.append('union ');
733
+ visitSetOperation(node) {
734
+ this.append(node.operator);
735
+ this.append(' ');
755
736
  if (node.all) {
756
737
  this.append('all ');
757
738
  }
758
- this.visitNode(node.union);
739
+ this.visitNode(node.expression);
759
740
  }
760
741
  visitCreateView(node) {
761
742
  this.append('create ');
@@ -868,6 +849,56 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
868
849
  visitDefaultInsertValue(_) {
869
850
  this.append('default');
870
851
  }
852
+ visitAggregateFunction(node) {
853
+ this.append(node.func);
854
+ this.append('(');
855
+ if (node.distinct) {
856
+ this.append('distinct ');
857
+ }
858
+ this.visitNode(node.column);
859
+ this.append(')');
860
+ if (node.filter) {
861
+ this.append(' filter(');
862
+ this.visitNode(node.filter);
863
+ this.append(')');
864
+ }
865
+ if (node.over) {
866
+ this.append(' ');
867
+ this.visitNode(node.over);
868
+ }
869
+ }
870
+ visitOver(node) {
871
+ this.append('over(');
872
+ if (node.partitionBy) {
873
+ this.visitNode(node.partitionBy);
874
+ if (node.orderBy) {
875
+ this.append(' ');
876
+ }
877
+ }
878
+ if (node.orderBy) {
879
+ this.visitNode(node.orderBy);
880
+ }
881
+ this.append(')');
882
+ }
883
+ visitPartitionBy(node) {
884
+ this.append('partition by ');
885
+ this.compileList(node.items);
886
+ }
887
+ visitPartitionByItem(node) {
888
+ this.visitNode(node.partitionBy);
889
+ }
890
+ visitBinaryOperation(node) {
891
+ this.visitNode(node.leftOperand);
892
+ this.append(' ');
893
+ this.visitNode(node.operator);
894
+ this.append(' ');
895
+ this.visitNode(node.rightOperand);
896
+ }
897
+ visitUnaryOperation(node) {
898
+ this.visitNode(node.operator);
899
+ this.append(' ');
900
+ this.visitNode(node.operand);
901
+ }
871
902
  append(str) {
872
903
  this.#sql += str;
873
904
  }
@@ -1,6 +1,7 @@
1
1
  /// <reference types="./query-executor-base.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
3
  import { Deferred } from '../util/deferred.js';
4
+ import { logOnce } from '../util/log-once.js';
4
5
  const NO_PLUGINS = freeze([]);
5
6
  export class QueryExecutorBase {
6
7
  #plugins;
@@ -32,7 +33,10 @@ export class QueryExecutorBase {
32
33
  async executeQuery(compiledQuery, queryId) {
33
34
  return await this.provideConnection(async (connection) => {
34
35
  const result = await connection.executeQuery(compiledQuery);
35
- return this.#transformResult(result, queryId);
36
+ const transformedResult = await this.#transformResult(result, queryId);
37
+ // TODO: remove.
38
+ warnOfOutdatedDriverOrPlugins(result, transformedResult);
39
+ return transformedResult;
36
40
  });
37
41
  }
38
42
  async *stream(compiledQuery, chunkSize, queryId) {
@@ -60,3 +64,14 @@ export class QueryExecutorBase {
60
64
  return result;
61
65
  }
62
66
  }
67
+ // TODO: remove.
68
+ function warnOfOutdatedDriverOrPlugins(result, transformedResult) {
69
+ const { numAffectedRows } = result;
70
+ if ((numAffectedRows === undefined &&
71
+ result.numUpdatedOrDeletedRows === undefined) ||
72
+ (numAffectedRows !== undefined &&
73
+ transformedResult.numAffectedRows !== undefined)) {
74
+ return;
75
+ }
76
+ logOnce('kysely:warning: outdated driver/plugin detected! QueryResult.numUpdatedOrDeletedRows is deprecated and will be removed in a future release.');
77
+ }
@@ -1,20 +1,37 @@
1
1
  import { QueryResult } from '../driver/database-connection.js';
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
- import { OperationNodeSource } from '../operation-node/operation-node-source.js';
4
3
  import { RawNode } from '../operation-node/raw-node.js';
5
4
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
6
5
  import { QueryExecutorProvider } from '../query-executor/query-executor-provider.js';
7
6
  import { QueryId } from '../util/query-id.js';
8
- import { AnyRawBuilder } from '../util/type-utils.js';
7
+ import { AliasedExpression, Expression } from '../expression/expression.js';
9
8
  /**
10
9
  * An instance of this class can be used to create raw SQL snippets or queries.
11
10
  *
12
11
  * You shouldn't need to create `RawBuilder` instances directly. Instead you should
13
12
  * use the {@link sql} template tag.
14
13
  */
15
- export declare class RawBuilder<O = unknown> implements OperationNodeSource {
14
+ export declare class RawBuilder<O> implements Expression<O> {
16
15
  #private;
17
16
  constructor(props: RawBuilderProps);
17
+ /** @private */
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(): O | undefined;
18
35
  /**
19
36
  * Returns an aliased version of the SQL expression.
20
37
  *
@@ -69,7 +86,7 @@ export declare class RawBuilder<O = unknown> implements OperationNodeSource {
69
86
  * ```
70
87
  */
71
88
  as<A extends string>(alias: A): AliasedRawBuilder<O, A>;
72
- as<A extends string = never>(alias: AnyRawBuilder): AliasedRawBuilder<O, A>;
89
+ as<A extends string = never>(alias: Expression<any>): AliasedRawBuilder<O, A>;
73
90
  /**
74
91
  * Change the output type of the raw expression.
75
92
  *
@@ -81,25 +98,44 @@ export declare class RawBuilder<O = unknown> implements OperationNodeSource {
81
98
  * Adds a plugin for this SQL snippet.
82
99
  */
83
100
  withPlugin(plugin: KyselyPlugin): RawBuilder<O>;
101
+ /**
102
+ * Creates the OperationNode that describes how to compile this expression into SQL.
103
+ *
104
+ * If you are creating a custom expression, it's often easiest to use the {@link sql}
105
+ * template tag to build the node:
106
+ *
107
+ * ```ts
108
+ * class SomeExpression<T> implements Expression<T> {
109
+ * toOperationNode(): OperationNode {
110
+ * return sql`some sql here`.toOperationNode()
111
+ * }
112
+ * }
113
+ * ```
114
+ */
84
115
  toOperationNode(): RawNode;
85
116
  execute(executorProvider: QueryExecutorProvider): Promise<QueryResult<O>>;
86
117
  }
118
+ export declare function isRawBuilder(obj: unknown): obj is RawBuilder<unknown>;
87
119
  /**
88
120
  * {@link RawBuilder} with an alias. The result of calling {@link RawBuilder.as}.
89
121
  */
90
- export declare class AliasedRawBuilder<O = unknown, A extends string = never> implements OperationNodeSource {
122
+ export declare class AliasedRawBuilder<O = unknown, A extends string = never> implements AliasedExpression<O, A> {
91
123
  #private;
124
+ constructor(rawBuilder: RawBuilder<O>, alias: A | Expression<any>);
125
+ /** @private */
92
126
  /**
93
- * @private
94
- *
95
- * This needs to be here just so that the typings work. Without this
96
- * the generated .d.ts file contains no reference to the type param A
97
- * which causes this type to be equal to AliasedRawBuilder with any A
98
- * as long as O is the same.
127
+ * Returns the aliased expression.
128
+ */
129
+ get expression(): Expression<O>;
130
+ /** @private */
131
+ /**
132
+ * Returns the alias.
133
+ */
134
+ get alias(): A;
135
+ /**
136
+ * Creates the OperationNode that describes how to compile this expression into SQL.
99
137
  */
100
- protected get alias(): A | AnyRawBuilder;
101
138
  toOperationNode(): AliasNode;
102
- constructor(rawBuilder: RawBuilder<O>, alias: A | AnyRawBuilder);
103
139
  }
104
140
  export interface RawBuilderProps {
105
141
  readonly queryId: QueryId;
@@ -1,10 +1,10 @@
1
1
  /// <reference types="./raw-builder.d.ts" />
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
- import { isOperationNodeSource, } from '../operation-node/operation-node-source.js';
4
3
  import { preventAwait } from '../util/prevent-await.js';
5
- import { freeze } from '../util/object-utils.js';
4
+ import { freeze, isFunction, isObject } from '../util/object-utils.js';
6
5
  import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
7
6
  import { IdentifierNode } from '../operation-node/identifier-node.js';
7
+ import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
8
8
  /**
9
9
  * An instance of this class can be used to create raw SQL snippets or queries.
10
10
  *
@@ -16,6 +16,10 @@ export class RawBuilder {
16
16
  constructor(props) {
17
17
  this.#props = freeze(props);
18
18
  }
19
+ /** @private */
20
+ get expressionType() {
21
+ return undefined;
22
+ }
19
23
  as(alias) {
20
24
  return new AliasedRawBuilder(this, alias);
21
25
  }
@@ -58,6 +62,14 @@ export class RawBuilder {
58
62
  return executor.compileQuery(this.#toOperationNode(executor), this.#props.queryId);
59
63
  }
60
64
  }
65
+ export function isRawBuilder(obj) {
66
+ return (isObject(obj) &&
67
+ isFunction(obj.as) &&
68
+ isFunction(obj.castTo) &&
69
+ isFunction(obj.withPlugin) &&
70
+ isFunction(obj.toOperationNode) &&
71
+ isFunction(obj.execute));
72
+ }
61
73
  preventAwait(RawBuilder, "don't await RawBuilder instances directly. To execute the query you need to call `execute`");
62
74
  /**
63
75
  * {@link RawBuilder} with an alias. The result of calling {@link RawBuilder.as}.
@@ -65,14 +77,15 @@ preventAwait(RawBuilder, "don't await RawBuilder instances directly. To execute
65
77
  export class AliasedRawBuilder {
66
78
  #rawBuilder;
67
79
  #alias;
68
- /**
69
- * @private
70
- *
71
- * This needs to be here just so that the typings work. Without this
72
- * the generated .d.ts file contains no reference to the type param A
73
- * which causes this type to be equal to AliasedRawBuilder with any A
74
- * as long as O is the same.
75
- */
80
+ constructor(rawBuilder, alias) {
81
+ this.#rawBuilder = rawBuilder;
82
+ this.#alias = alias;
83
+ }
84
+ /** @private */
85
+ get expression() {
86
+ return this.#rawBuilder;
87
+ }
88
+ /** @private */
76
89
  get alias() {
77
90
  return this.#alias;
78
91
  }
@@ -81,8 +94,4 @@ export class AliasedRawBuilder {
81
94
  ? this.#alias.toOperationNode()
82
95
  : IdentifierNode.create(this.#alias));
83
96
  }
84
- constructor(rawBuilder, alias) {
85
- this.#rawBuilder = rawBuilder;
86
- this.#alias = alias;
87
- }
88
97
  }
@@ -7,13 +7,14 @@ export interface Sql {
7
7
  * import { sql } from 'kysely'
8
8
  *
9
9
  * const id = 123
10
- *
11
10
  * const snippet = sql<Person[]>`select * from person where id = ${id}`
12
11
  * ```
13
12
  *
14
13
  * Substitutions (the things inside `${}`) are automatically passed to the database
15
- * as parameters and are NOT interpolated to the SQL string. There's no need to worry
16
- * about SQL injection vulnerabilities.
14
+ * as parameters and are never interpolated to the SQL string. There's no need to worry
15
+ * about SQL injection vulnerabilities. Substitutions can be values, other `sql`
16
+ * expressions, queries and almost anything else Kysely can produce and they get
17
+ * handled correctly. See the examples below.
17
18
  *
18
19
  * If you need your substitutions to be interpreted as identifiers, value literals or
19
20
  * lists of things, see the {@link Sql.ref}, {@link Sql.table}, {@link Sql.id},
@@ -29,8 +30,7 @@ export interface Sql {
29
30
  * .selectFrom('person')
30
31
  * .select(
31
32
  * // If you use `sql` in a select statement, remember to call the `as`
32
- * // method to give it an alias. Otherwise Kysely is not able to add
33
- * // the column to the result type.
33
+ * // method to give it an alias.
34
34
  * sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
35
35
  * )
36
36
  * .where(sql`birthdate between ${date1} and ${date2}`)
@@ -97,6 +97,14 @@ export interface Sql {
97
97
  * type-safety though... But it's possible.
98
98
  */
99
99
  <T = unknown>(sqlFragments: TemplateStringsArray, ...parameters: unknown[]): RawBuilder<T>;
100
+ /**
101
+ * `sql.value(value)` is a shortcut for:
102
+ *
103
+ * ```ts
104
+ * sql<ValueType>`${value}`
105
+ * ```
106
+ */
107
+ value<T>(value: T): RawBuilder<T>;
100
108
  /**
101
109
  * This can be used to add runtime column references to SQL snippets.
102
110
  *
@@ -226,7 +234,7 @@ export interface Sql {
226
234
  * select "public"."person"."first_name" from "public"."person"
227
235
  * ```
228
236
  */
229
- id(...ids: string[]): RawBuilder<unknown>;
237
+ id(...ids: readonly string[]): RawBuilder<unknown>;
230
238
  /**
231
239
  * This can be used to add literal values to SQL snippets.
232
240
  *
@@ -326,6 +334,6 @@ export interface Sql {
326
334
  * BEFORE $1::varchar, (1 == 1)::varchar, (select * from "person")::varchar, false::varchar, "first_name" AFTER
327
335
  * ```
328
336
  */
329
- join(array: unknown[], separator?: RawBuilder<any>): RawBuilder<unknown>;
337
+ join(array: readonly unknown[], separator?: RawBuilder<any>): RawBuilder<unknown>;
330
338
  }
331
339
  export declare const sql: Sql;
@@ -19,6 +19,12 @@ export const sql = Object.assign((sqlFragments, ...parameters) => {
19
19
  rawNode: RawNode.createWithChild(parseStringReference(columnReference)),
20
20
  });
21
21
  },
22
+ value(value) {
23
+ return new RawBuilder({
24
+ queryId: createQueryId(),
25
+ rawNode: RawNode.createWithChild(parseValueExpression(value)),
26
+ });
27
+ },
22
28
  table(tableReference) {
23
29
  return new RawBuilder({
24
30
  queryId: createQueryId(),
@@ -0,0 +1,28 @@
1
+ import { AlterColumnNode } from '../operation-node/alter-column-node.js';
2
+ import { ColumnDataType } from '../operation-node/data-type-node.js';
3
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
4
+ import { DefaultValueExpression } from '../parser/default-value-parser.js';
5
+ export declare class AlterColumnBuilder {
6
+ protected readonly alterColumnNode: AlterColumnNode;
7
+ constructor(alterColumnNode: AlterColumnNode);
8
+ setDataType(dataType: ColumnDataType): AlteredColumnBuilder;
9
+ setDefault(value: DefaultValueExpression): AlteredColumnBuilder;
10
+ dropDefault(): AlteredColumnBuilder;
11
+ setNotNull(): AlteredColumnBuilder;
12
+ dropNotNull(): AlteredColumnBuilder;
13
+ }
14
+ /**
15
+ * Allows us to force consumers to do something, anything, when altering a column.
16
+ *
17
+ * Basically, deny the following:
18
+ *
19
+ * ```ts
20
+ * db.schema.alterTable('person').alterColumn('age', (ac) => ac)
21
+ * ```
22
+ *
23
+ * Which would now throw a compilation error, instead of a runtime error.
24
+ */
25
+ export declare class AlteredColumnBuilder extends AlterColumnBuilder implements OperationNodeSource {
26
+ toOperationNode(): AlterColumnNode;
27
+ }
28
+ export declare type AlterColumnBuilderCallback = (builder: AlterColumnBuilder) => AlteredColumnBuilder;
@@ -0,0 +1,51 @@
1
+ /// <reference types="./alter-column-builder.d.ts" />
2
+ import { AlterColumnNode } from '../operation-node/alter-column-node.js';
3
+ import { DataTypeNode, } from '../operation-node/data-type-node.js';
4
+ import { parseDefaultValueExpression, } from '../parser/default-value-parser.js';
5
+ export class AlterColumnBuilder {
6
+ alterColumnNode;
7
+ constructor(alterColumnNode) {
8
+ this.alterColumnNode = alterColumnNode;
9
+ }
10
+ setDataType(dataType) {
11
+ return new AlteredColumnBuilder(AlterColumnNode.cloneWith(this.alterColumnNode, {
12
+ dataType: DataTypeNode.create(dataType),
13
+ }));
14
+ }
15
+ setDefault(value) {
16
+ return new AlteredColumnBuilder(AlterColumnNode.cloneWith(this.alterColumnNode, {
17
+ setDefault: parseDefaultValueExpression(value),
18
+ }));
19
+ }
20
+ dropDefault() {
21
+ return new AlteredColumnBuilder(AlterColumnNode.cloneWith(this.alterColumnNode, {
22
+ dropDefault: true,
23
+ }));
24
+ }
25
+ setNotNull() {
26
+ return new AlteredColumnBuilder(AlterColumnNode.cloneWith(this.alterColumnNode, {
27
+ setNotNull: true,
28
+ }));
29
+ }
30
+ dropNotNull() {
31
+ return new AlteredColumnBuilder(AlterColumnNode.cloneWith(this.alterColumnNode, {
32
+ dropNotNull: true,
33
+ }));
34
+ }
35
+ }
36
+ /**
37
+ * Allows us to force consumers to do something, anything, when altering a column.
38
+ *
39
+ * Basically, deny the following:
40
+ *
41
+ * ```ts
42
+ * db.schema.alterTable('person').alterColumn('age', (ac) => ac)
43
+ * ```
44
+ *
45
+ * Which would now throw a compilation error, instead of a runtime error.
46
+ */
47
+ export class AlteredColumnBuilder extends AlterColumnBuilder {
48
+ toOperationNode() {
49
+ return this.alterColumnNode;
50
+ }
51
+ }