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
@@ -1,6 +1,7 @@
1
- import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
1
+ import { Expression } from '../expression/expression.js';
2
+ import { ComparisonOperatorExpression, OperandValueExpressionOrList, WhereGrouper } from '../parser/binary-operation-parser.js';
2
3
  import { ReferenceExpression } from '../parser/reference-parser.js';
3
- import { AnyRawBuilder } from '../util/type-utils.js';
4
+ import { ExistsExpression } from '../parser/unary-operation-parser.js';
4
5
  export interface WhereInterface<DB, TB extends keyof DB> {
5
6
  /**
6
7
  * Adds a `where` clause to the query.
@@ -186,16 +187,16 @@ export interface WhereInterface<DB, TB extends keyof DB> {
186
187
  * .execute()
187
188
  * ```
188
189
  */
189
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
190
+ where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
190
191
  where(grouper: WhereGrouper<DB, TB>): WhereInterface<DB, TB>;
191
- where(raw: AnyRawBuilder): WhereInterface<DB, TB>;
192
+ where(expression: Expression<any>): WhereInterface<DB, TB>;
192
193
  /**
193
194
  * Adds a `where` clause where both sides of the operator are references
194
195
  * to columns.
195
196
  *
196
197
  * The normal `where` method treats the right hand side argument as a
197
198
  * value by default. `whereRef` treats it as a column reference. This method is
198
- * expecially useful with joins and correclated subqueries.
199
+ * expecially useful with joins and correlated subqueries.
199
200
  *
200
201
  * ### Examples
201
202
  *
@@ -240,7 +241,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
240
241
  * ) as "pet_name"
241
242
  * from "person"
242
243
  */
243
- whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
244
+ whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
244
245
  /**
245
246
  * Adds an `or where` clause to the query. Otherwise works just like {@link where}.
246
247
  *
@@ -304,15 +305,15 @@ export interface WhereInterface<DB, TB extends keyof DB> {
304
305
  * select * from "person" (where "id" = 1 or "id" = 2)
305
306
  * ```
306
307
  */
307
- orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
308
+ orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
308
309
  orWhere(grouper: WhereGrouper<DB, TB>): WhereInterface<DB, TB>;
309
- orWhere(raw: AnyRawBuilder): WhereInterface<DB, TB>;
310
+ orWhere(expression: Expression<any>): WhereInterface<DB, TB>;
310
311
  /**
311
312
  * Adds an `or where` clause to the query. Otherwise works just like {@link whereRef}.
312
313
  *
313
314
  * Also see {@link orWhere} and {@link where}.
314
315
  */
315
- orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
316
+ orWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
316
317
  /**
317
318
  * Adds a `where exists` clause to the query.
318
319
  *
@@ -379,11 +380,11 @@ export interface WhereInterface<DB, TB extends keyof DB> {
379
380
  */
380
381
  whereNotExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
381
382
  /**
382
- * Just like {@link whereExists} but creates a `or exists` clause.
383
+ * Just like {@link whereExists} but creates an `or exists` clause.
383
384
  */
384
385
  orWhereExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
385
386
  /**
386
- * Just like {@link whereExists} but creates a `or not exists` clause.
387
+ * Just like {@link whereExists} but creates an `or not exists` clause.
387
388
  */
388
389
  orWhereNotExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
389
390
  }
@@ -1,5 +1,5 @@
1
1
  import { RootOperationNode } from './query-compiler.js';
2
- export interface CompiledQuery {
2
+ export interface CompiledQuery<O = unknown> {
3
3
  readonly query: RootOperationNode;
4
4
  readonly sql: string;
5
5
  readonly parameters: ReadonlyArray<unknown>;
@@ -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;
@@ -4,10 +4,9 @@ exports.DefaultQueryCompiler = void 0;
4
4
  const insert_query_node_js_1 = require("../operation-node/insert-query-node.js");
5
5
  const operation_node_visitor_js_1 = require("../operation-node/operation-node-visitor.js");
6
6
  const query_node_js_1 = require("../operation-node/query-node.js");
7
- const raw_node_js_1 = require("../operation-node/raw-node.js");
8
7
  const object_utils_js_1 = require("../util/object-utils.js");
9
- const union_node_js_1 = require("../operation-node/union-node.js");
10
8
  const create_view_node_js_1 = require("../operation-node/create-view-node.js");
9
+ const set_operation_node_js_1 = require("../operation-node/set-operation-node.js");
11
10
  class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisitor {
12
11
  #sql = '';
13
12
  #parameters = [];
@@ -31,7 +30,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
31
30
  const wrapInParens = this.parentNode !== undefined &&
32
31
  !insert_query_node_js_1.InsertQueryNode.is(this.parentNode) &&
33
32
  !create_view_node_js_1.CreateViewNode.is(this.parentNode) &&
34
- !union_node_js_1.UnionNode.is(this.parentNode);
33
+ !set_operation_node_js_1.SetOperationNode.is(this.parentNode);
35
34
  if (this.parentNode === undefined && node.explain) {
36
35
  this.visitNode(node.explain);
37
36
  this.append(' ');
@@ -44,8 +43,8 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
44
43
  this.append(' ');
45
44
  }
46
45
  this.append('select ');
47
- if (node.distinctOnSelections) {
48
- this.compileDistinctOn(node.distinctOnSelections);
46
+ if (node.distinctOn) {
47
+ this.compileDistinctOn(node.distinctOn);
49
48
  this.append(' ');
50
49
  }
51
50
  if (node.frontModifiers && node.frontModifiers.length > 0) {
@@ -73,9 +72,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
73
72
  this.append(' ');
74
73
  this.visitNode(node.having);
75
74
  }
76
- if (node.union) {
75
+ if (node.setOperations) {
77
76
  this.append(' ');
78
- this.compileList(node.union, ' ');
77
+ this.compileList(node.setOperations, ' ');
79
78
  }
80
79
  if (node.orderBy) {
81
80
  this.append(' ');
@@ -107,16 +106,16 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
107
106
  visitColumn(node) {
108
107
  this.visitNode(node.column);
109
108
  }
110
- compileDistinctOn(selections) {
109
+ compileDistinctOn(expressions) {
111
110
  this.append('distinct on (');
112
- this.compileList(selections);
111
+ this.compileList(expressions);
113
112
  this.append(')');
114
113
  }
115
114
  compileList(nodes, separator = ', ') {
116
- const lastNode = (0, object_utils_js_1.getLast)(nodes);
117
- for (const node of nodes) {
118
- this.visitNode(node);
119
- if (node !== lastNode) {
115
+ const lastIndex = nodes.length - 1;
116
+ for (let i = 0; i <= lastIndex; i++) {
117
+ this.visitNode(nodes[i]);
118
+ if (i < lastIndex) {
120
119
  this.append(separator);
121
120
  }
122
121
  }
@@ -244,15 +243,6 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
244
243
  }
245
244
  this.append(this.sanitizeIdentifier(node.name));
246
245
  }
247
- visitFilter(node) {
248
- if (node.left) {
249
- this.visitNode(node.left);
250
- this.append(' ');
251
- }
252
- this.visitNode(node.op);
253
- this.append(' ');
254
- this.visitNode(node.right);
255
- }
256
246
  visitAnd(node) {
257
247
  this.visitNode(node.left);
258
248
  this.append(' and ');
@@ -329,7 +319,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
329
319
  }
330
320
  visitCreateTable(node) {
331
321
  this.append('create ');
332
- if (node.frontModifiers) {
322
+ if (node.frontModifiers && node.frontModifiers.length > 0) {
333
323
  this.compileList(node.frontModifiers, ' ');
334
324
  this.append(' ');
335
325
  }
@@ -348,7 +338,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
348
338
  this.append(' on commit ');
349
339
  this.append(node.onCommit);
350
340
  }
351
- if (node.endModifiers) {
341
+ if (node.endModifiers && node.endModifiers.length > 0) {
352
342
  this.append(' ');
353
343
  this.compileList(node.endModifiers, ' ');
354
344
  }
@@ -360,6 +350,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
360
350
  if (node.unsigned) {
361
351
  this.append(' unsigned');
362
352
  }
353
+ if (node.frontModifiers && node.frontModifiers.length > 0) {
354
+ this.append(' ');
355
+ this.compileList(node.frontModifiers, ' ');
356
+ }
363
357
  if (node.generated) {
364
358
  this.append(' ');
365
359
  this.visitNode(node.generated);
@@ -389,6 +383,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
389
383
  this.append(' ');
390
384
  this.visitNode(node.check);
391
385
  }
386
+ if (node.endModifiers && node.endModifiers.length > 0) {
387
+ this.append(' ');
388
+ this.compileList(node.endModifiers, ' ');
389
+ }
392
390
  }
393
391
  getAutoIncrement() {
394
392
  return 'auto_increment';
@@ -544,13 +542,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
544
542
  }
545
543
  if (node.expression) {
546
544
  this.append(' (');
547
- if (raw_node_js_1.RawNode.is(node.expression)) {
548
- this.append('(');
549
- }
550
545
  this.visitNode(node.expression);
551
- if (raw_node_js_1.RawNode.is(node.expression)) {
552
- this.append(')');
553
- }
554
546
  this.append(')');
555
547
  }
556
548
  }
@@ -675,20 +667,8 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
675
667
  if (node.dropConstraint) {
676
668
  this.visitNode(node.dropConstraint);
677
669
  }
678
- if (node.renameColumn) {
679
- this.visitNode(node.renameColumn);
680
- }
681
- if (node.addColumn) {
682
- this.visitNode(node.addColumn);
683
- }
684
- if (node.dropColumn) {
685
- this.visitNode(node.dropColumn);
686
- }
687
- if (node.alterColumn) {
688
- this.visitNode(node.alterColumn);
689
- }
690
- if (node.modifyColumn) {
691
- this.visitNode(node.modifyColumn);
670
+ if (node.columnAlterations) {
671
+ this.compileList(node.columnAlterations);
692
672
  }
693
673
  }
694
674
  visitAddColumn(node) {
@@ -752,12 +732,13 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
752
732
  this.append(' restrict');
753
733
  }
754
734
  }
755
- visitUnion(node) {
756
- this.append('union ');
735
+ visitSetOperation(node) {
736
+ this.append(node.operator);
737
+ this.append(' ');
757
738
  if (node.all) {
758
739
  this.append('all ');
759
740
  }
760
- this.visitNode(node.union);
741
+ this.visitNode(node.expression);
761
742
  }
762
743
  visitCreateView(node) {
763
744
  this.append('create ');
@@ -870,6 +851,56 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
870
851
  visitDefaultInsertValue(_) {
871
852
  this.append('default');
872
853
  }
854
+ visitAggregateFunction(node) {
855
+ this.append(node.func);
856
+ this.append('(');
857
+ if (node.distinct) {
858
+ this.append('distinct ');
859
+ }
860
+ this.visitNode(node.column);
861
+ this.append(')');
862
+ if (node.filter) {
863
+ this.append(' filter(');
864
+ this.visitNode(node.filter);
865
+ this.append(')');
866
+ }
867
+ if (node.over) {
868
+ this.append(' ');
869
+ this.visitNode(node.over);
870
+ }
871
+ }
872
+ visitOver(node) {
873
+ this.append('over(');
874
+ if (node.partitionBy) {
875
+ this.visitNode(node.partitionBy);
876
+ if (node.orderBy) {
877
+ this.append(' ');
878
+ }
879
+ }
880
+ if (node.orderBy) {
881
+ this.visitNode(node.orderBy);
882
+ }
883
+ this.append(')');
884
+ }
885
+ visitPartitionBy(node) {
886
+ this.append('partition by ');
887
+ this.compileList(node.items);
888
+ }
889
+ visitPartitionByItem(node) {
890
+ this.visitNode(node.partitionBy);
891
+ }
892
+ visitBinaryOperation(node) {
893
+ this.visitNode(node.leftOperand);
894
+ this.append(' ');
895
+ this.visitNode(node.operator);
896
+ this.append(' ');
897
+ this.visitNode(node.rightOperand);
898
+ }
899
+ visitUnaryOperation(node) {
900
+ this.visitNode(node.operator);
901
+ this.append(' ');
902
+ this.visitNode(node.operand);
903
+ }
873
904
  append(str) {
874
905
  this.#sql += str;
875
906
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.QueryExecutorBase = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
5
  const deferred_js_1 = require("../util/deferred.js");
6
+ const log_once_js_1 = require("../util/log-once.js");
6
7
  const NO_PLUGINS = (0, object_utils_js_1.freeze)([]);
7
8
  class QueryExecutorBase {
8
9
  #plugins;
@@ -34,7 +35,10 @@ class QueryExecutorBase {
34
35
  async executeQuery(compiledQuery, queryId) {
35
36
  return await this.provideConnection(async (connection) => {
36
37
  const result = await connection.executeQuery(compiledQuery);
37
- return this.#transformResult(result, queryId);
38
+ const transformedResult = await this.#transformResult(result, queryId);
39
+ // TODO: remove.
40
+ warnOfOutdatedDriverOrPlugins(result, transformedResult);
41
+ return transformedResult;
38
42
  });
39
43
  }
40
44
  async *stream(compiledQuery, chunkSize, queryId) {
@@ -63,3 +67,14 @@ class QueryExecutorBase {
63
67
  }
64
68
  }
65
69
  exports.QueryExecutorBase = QueryExecutorBase;
70
+ // TODO: remove.
71
+ function warnOfOutdatedDriverOrPlugins(result, transformedResult) {
72
+ const { numAffectedRows } = result;
73
+ if ((numAffectedRows === undefined &&
74
+ result.numUpdatedOrDeletedRows === undefined) ||
75
+ (numAffectedRows !== undefined &&
76
+ transformedResult.numAffectedRows !== undefined)) {
77
+ return;
78
+ }
79
+ (0, log_once_js_1.logOnce)('kysely:warning: outdated driver/plugin detected! QueryResult.numUpdatedOrDeletedRows is deprecated and will be removed in a future release.');
80
+ }
@@ -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,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AliasedRawBuilder = exports.RawBuilder = void 0;
3
+ exports.AliasedRawBuilder = exports.isRawBuilder = exports.RawBuilder = void 0;
4
4
  const alias_node_js_1 = require("../operation-node/alias-node.js");
5
- const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
6
5
  const prevent_await_js_1 = require("../util/prevent-await.js");
7
6
  const object_utils_js_1 = require("../util/object-utils.js");
8
7
  const noop_query_executor_js_1 = require("../query-executor/noop-query-executor.js");
9
8
  const identifier_node_js_1 = require("../operation-node/identifier-node.js");
9
+ const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
10
10
  /**
11
11
  * An instance of this class can be used to create raw SQL snippets or queries.
12
12
  *
@@ -18,6 +18,10 @@ class RawBuilder {
18
18
  constructor(props) {
19
19
  this.#props = (0, object_utils_js_1.freeze)(props);
20
20
  }
21
+ /** @private */
22
+ get expressionType() {
23
+ return undefined;
24
+ }
21
25
  as(alias) {
22
26
  return new AliasedRawBuilder(this, alias);
23
27
  }
@@ -61,6 +65,15 @@ class RawBuilder {
61
65
  }
62
66
  }
63
67
  exports.RawBuilder = RawBuilder;
68
+ function isRawBuilder(obj) {
69
+ return ((0, object_utils_js_1.isObject)(obj) &&
70
+ (0, object_utils_js_1.isFunction)(obj.as) &&
71
+ (0, object_utils_js_1.isFunction)(obj.castTo) &&
72
+ (0, object_utils_js_1.isFunction)(obj.withPlugin) &&
73
+ (0, object_utils_js_1.isFunction)(obj.toOperationNode) &&
74
+ (0, object_utils_js_1.isFunction)(obj.execute));
75
+ }
76
+ exports.isRawBuilder = isRawBuilder;
64
77
  (0, prevent_await_js_1.preventAwait)(RawBuilder, "don't await RawBuilder instances directly. To execute the query you need to call `execute`");
65
78
  /**
66
79
  * {@link RawBuilder} with an alias. The result of calling {@link RawBuilder.as}.
@@ -68,14 +81,15 @@ exports.RawBuilder = RawBuilder;
68
81
  class AliasedRawBuilder {
69
82
  #rawBuilder;
70
83
  #alias;
71
- /**
72
- * @private
73
- *
74
- * This needs to be here just so that the typings work. Without this
75
- * the generated .d.ts file contains no reference to the type param A
76
- * which causes this type to be equal to AliasedRawBuilder with any A
77
- * as long as O is the same.
78
- */
84
+ constructor(rawBuilder, alias) {
85
+ this.#rawBuilder = rawBuilder;
86
+ this.#alias = alias;
87
+ }
88
+ /** @private */
89
+ get expression() {
90
+ return this.#rawBuilder;
91
+ }
92
+ /** @private */
79
93
  get alias() {
80
94
  return this.#alias;
81
95
  }
@@ -84,9 +98,5 @@ class AliasedRawBuilder {
84
98
  ? this.#alias.toOperationNode()
85
99
  : identifier_node_js_1.IdentifierNode.create(this.#alias));
86
100
  }
87
- constructor(rawBuilder, alias) {
88
- this.#rawBuilder = rawBuilder;
89
- this.#alias = alias;
90
- }
91
101
  }
92
102
  exports.AliasedRawBuilder = AliasedRawBuilder;
@@ -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;
@@ -21,6 +21,12 @@ exports.sql = Object.assign((sqlFragments, ...parameters) => {
21
21
  rawNode: raw_node_js_1.RawNode.createWithChild((0, reference_parser_js_1.parseStringReference)(columnReference)),
22
22
  });
23
23
  },
24
+ value(value) {
25
+ return new raw_builder_js_1.RawBuilder({
26
+ queryId: (0, query_id_js_1.createQueryId)(),
27
+ rawNode: raw_node_js_1.RawNode.createWithChild((0, value_parser_js_1.parseValueExpression)(value)),
28
+ });
29
+ },
24
30
  table(tableReference) {
25
31
  return new raw_builder_js_1.RawBuilder({
26
32
  queryId: (0, query_id_js_1.createQueryId)(),