kysely 0.23.4 → 0.24.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 (314) hide show
  1. package/README.md +49 -25
  2. package/dist/cjs/dialect/database-introspector.d.ts +4 -2
  3. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
  4. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -1
  5. package/dist/cjs/dialect/mysql/mysql-driver.js +1 -1
  6. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +1 -1
  7. package/dist/cjs/dialect/mysql/mysql-introspector.js +19 -13
  8. package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
  9. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +1 -1
  10. package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -1
  11. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -0
  12. package/dist/cjs/dialect/sqlite/sqlite-dialect.js +1 -0
  13. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  14. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +6 -5
  15. package/dist/cjs/driver/runtime-driver.js +4 -2
  16. package/dist/cjs/expression/expression-builder.d.ts +386 -0
  17. package/dist/cjs/expression/expression-builder.js +92 -0
  18. package/dist/cjs/expression/expression-wrapper.d.ts +92 -0
  19. package/dist/cjs/expression/expression-wrapper.js +54 -0
  20. package/dist/cjs/expression/expression.d.ts +1 -1
  21. package/dist/cjs/helpers/postgres.d.ts +133 -0
  22. package/dist/cjs/helpers/postgres.js +141 -0
  23. package/dist/cjs/index.d.ts +4 -3
  24. package/dist/cjs/index.js +4 -2
  25. package/dist/cjs/kysely.d.ts +10 -0
  26. package/dist/cjs/kysely.js +12 -1
  27. package/dist/cjs/migration/file-migration-provider.d.ts +5 -2
  28. package/dist/cjs/migration/migrator.d.ts +5 -2
  29. package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -2
  30. package/dist/cjs/operation-node/aggregate-function-node.js +2 -2
  31. package/dist/cjs/operation-node/create-index-node.d.ts +2 -0
  32. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
  33. package/dist/cjs/operation-node/delete-query-node.js +2 -8
  34. package/dist/cjs/operation-node/function-node.d.ts +13 -0
  35. package/dist/cjs/operation-node/function-node.js +19 -0
  36. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  37. package/dist/cjs/operation-node/operation-node-transformer.js +11 -2
  38. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  39. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  40. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  41. package/dist/cjs/operation-node/operator-node.d.ts +13 -2
  42. package/dist/cjs/operation-node/operator-node.js +38 -3
  43. package/dist/cjs/operation-node/query-node.d.ts +25 -8
  44. package/dist/cjs/operation-node/query-node.js +9 -2
  45. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  46. package/dist/cjs/operation-node/select-query-node.js +0 -6
  47. package/dist/cjs/operation-node/update-query-node.d.ts +0 -1
  48. package/dist/cjs/operation-node/update-query-node.js +0 -6
  49. package/dist/cjs/parser/binary-operation-parser.d.ts +9 -10
  50. package/dist/cjs/parser/binary-operation-parser.js +89 -39
  51. package/dist/cjs/parser/coalesce-parser.d.ts +0 -2
  52. package/dist/cjs/parser/coalesce-parser.js +0 -9
  53. package/dist/cjs/parser/expression-parser.d.ts +7 -3
  54. package/dist/cjs/parser/expression-parser.js +4 -4
  55. package/dist/cjs/parser/group-by-parser.d.ts +3 -2
  56. package/dist/cjs/parser/group-by-parser.js +3 -0
  57. package/dist/cjs/parser/insert-values-parser.d.ts +4 -1
  58. package/dist/cjs/parser/insert-values-parser.js +19 -13
  59. package/dist/cjs/parser/join-parser.js +1 -1
  60. package/dist/cjs/parser/parse-utils.d.ts +0 -2
  61. package/dist/cjs/parser/parse-utils.js +1 -8
  62. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  63. package/dist/cjs/parser/select-parser.d.ts +5 -13
  64. package/dist/cjs/parser/select-parser.js +8 -4
  65. package/dist/cjs/parser/table-parser.d.ts +6 -3
  66. package/dist/cjs/parser/unary-operation-parser.d.ts +5 -2
  67. package/dist/cjs/parser/unary-operation-parser.js +9 -8
  68. package/dist/cjs/parser/update-set-parser.d.ts +4 -1
  69. package/dist/cjs/parser/update-set-parser.js +9 -4
  70. package/dist/cjs/parser/value-parser.d.ts +5 -0
  71. package/dist/cjs/parser/value-parser.js +1 -3
  72. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +7 -0
  73. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +10 -4
  74. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
  75. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  76. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +40 -113
  77. package/dist/cjs/query-builder/aggregate-function-builder.js +23 -63
  78. package/dist/cjs/query-builder/delete-query-builder.d.ts +224 -205
  79. package/dist/cjs/query-builder/delete-query-builder.js +21 -27
  80. package/dist/cjs/query-builder/delete-result.js +3 -0
  81. package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +62 -0
  82. package/dist/cjs/query-builder/deprecated-having-expression-builder.js +2 -0
  83. package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +62 -0
  84. package/dist/cjs/query-builder/deprecated-on-expression-builder.js +2 -0
  85. package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +62 -0
  86. package/dist/cjs/query-builder/deprecated-where-expression-builder.js +2 -0
  87. package/dist/cjs/query-builder/function-module.d.ts +304 -42
  88. package/dist/cjs/query-builder/function-module.js +44 -208
  89. package/dist/cjs/query-builder/having-interface.d.ts +19 -16
  90. package/dist/cjs/query-builder/insert-query-builder.d.ts +78 -30
  91. package/dist/cjs/query-builder/insert-query-builder.js +21 -30
  92. package/dist/cjs/query-builder/insert-result.js +3 -0
  93. package/dist/cjs/query-builder/join-builder.d.ts +23 -26
  94. package/dist/cjs/query-builder/join-builder.js +17 -22
  95. package/dist/cjs/query-builder/no-result-error.d.ts +1 -0
  96. package/dist/cjs/query-builder/no-result-error.js +5 -1
  97. package/dist/cjs/query-builder/on-conflict-builder.d.ts +158 -276
  98. package/dist/cjs/query-builder/on-conflict-builder.js +52 -36
  99. package/dist/cjs/query-builder/over-builder.d.ts +5 -0
  100. package/dist/cjs/query-builder/over-builder.js +7 -0
  101. package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
  102. package/dist/cjs/query-builder/select-query-builder.d.ts +155 -243
  103. package/dist/cjs/query-builder/select-query-builder.js +333 -78
  104. package/dist/cjs/query-builder/update-query-builder.d.ts +149 -217
  105. package/dist/cjs/query-builder/update-query-builder.js +21 -115
  106. package/dist/cjs/query-builder/update-result.js +3 -0
  107. package/dist/cjs/query-builder/where-interface.d.ts +71 -184
  108. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  109. package/dist/cjs/query-compiler/default-query-compiler.js +18 -2
  110. package/dist/cjs/query-creator.d.ts +38 -2
  111. package/dist/cjs/query-creator.js +3 -45
  112. package/dist/cjs/query-executor/query-executor.d.ts +3 -3
  113. package/dist/cjs/raw-builder/raw-builder.d.ts +5 -3
  114. package/dist/cjs/raw-builder/raw-builder.js +13 -7
  115. package/dist/cjs/raw-builder/sql.d.ts +17 -9
  116. package/dist/cjs/raw-builder/sql.js +8 -2
  117. package/dist/cjs/schema/alter-column-builder.d.ts +5 -0
  118. package/dist/cjs/schema/alter-column-builder.js +7 -0
  119. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
  120. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
  121. package/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts +5 -0
  122. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +7 -0
  123. package/dist/cjs/schema/column-definition-builder.d.ts +6 -1
  124. package/dist/cjs/schema/column-definition-builder.js +8 -1
  125. package/dist/cjs/schema/create-index-builder.d.ts +51 -9
  126. package/dist/cjs/schema/create-index-builder.js +17 -0
  127. package/dist/cjs/schema/create-schema-builder.d.ts +5 -0
  128. package/dist/cjs/schema/create-schema-builder.js +7 -0
  129. package/dist/cjs/schema/create-table-builder.d.ts +3 -1
  130. package/dist/cjs/schema/create-table-builder.js +3 -1
  131. package/dist/cjs/schema/create-type-builder.d.ts +5 -0
  132. package/dist/cjs/schema/create-type-builder.js +7 -0
  133. package/dist/cjs/schema/create-view-builder.d.ts +5 -0
  134. package/dist/cjs/schema/create-view-builder.js +7 -0
  135. package/dist/cjs/schema/drop-index-builder.d.ts +5 -0
  136. package/dist/cjs/schema/drop-index-builder.js +7 -0
  137. package/dist/cjs/schema/drop-schema-builder.d.ts +5 -0
  138. package/dist/cjs/schema/drop-schema-builder.js +7 -0
  139. package/dist/cjs/schema/drop-table-builder.d.ts +5 -0
  140. package/dist/cjs/schema/drop-table-builder.js +7 -0
  141. package/dist/cjs/schema/drop-type-builder.d.ts +5 -0
  142. package/dist/cjs/schema/drop-type-builder.js +7 -0
  143. package/dist/cjs/schema/drop-view-builder.d.ts +5 -0
  144. package/dist/cjs/schema/drop-view-builder.js +7 -0
  145. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +5 -0
  146. package/dist/cjs/schema/foreign-key-constraint-builder.js +7 -0
  147. package/dist/cjs/util/compilable.d.ts +1 -0
  148. package/dist/cjs/util/compilable.js +6 -0
  149. package/dist/cjs/util/explainable.d.ts +35 -0
  150. package/dist/cjs/util/log.d.ts +2 -0
  151. package/dist/cjs/util/object-utils.js +1 -1
  152. package/dist/cjs/util/streamable.d.ts +29 -0
  153. package/dist/cjs/util/streamable.js +2 -0
  154. package/dist/cjs/util/type-utils.d.ts +6 -4
  155. package/dist/esm/dialect/database-introspector.d.ts +4 -2
  156. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  157. package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -1
  158. package/dist/esm/dialect/mysql/mysql-driver.js +1 -1
  159. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +1 -1
  160. package/dist/esm/dialect/mysql/mysql-introspector.js +19 -13
  161. package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
  162. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +1 -1
  163. package/dist/esm/dialect/postgres/postgres-introspector.js +3 -1
  164. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -0
  165. package/dist/esm/dialect/sqlite/sqlite-dialect.js +1 -0
  166. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  167. package/dist/esm/dialect/sqlite/sqlite-introspector.js +6 -5
  168. package/dist/esm/driver/runtime-driver.js +4 -2
  169. package/dist/esm/expression/expression-builder.d.ts +386 -0
  170. package/dist/esm/expression/expression-builder.js +88 -0
  171. package/dist/esm/expression/expression-wrapper.d.ts +92 -0
  172. package/dist/esm/expression/expression-wrapper.js +50 -0
  173. package/dist/esm/expression/expression.d.ts +1 -1
  174. package/dist/esm/helpers/postgres.d.ts +133 -0
  175. package/dist/esm/helpers/postgres.js +136 -0
  176. package/dist/esm/index.d.ts +4 -3
  177. package/dist/esm/index.js +2 -1
  178. package/dist/esm/kysely.d.ts +10 -0
  179. package/dist/esm/kysely.js +13 -2
  180. package/dist/esm/migration/file-migration-provider.d.ts +5 -2
  181. package/dist/esm/migration/migrator.d.ts +5 -2
  182. package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -2
  183. package/dist/esm/operation-node/aggregate-function-node.js +2 -2
  184. package/dist/esm/operation-node/create-index-node.d.ts +2 -0
  185. package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
  186. package/dist/esm/operation-node/delete-query-node.js +2 -8
  187. package/dist/esm/operation-node/function-node.d.ts +13 -0
  188. package/dist/esm/operation-node/function-node.js +17 -0
  189. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  190. package/dist/esm/operation-node/operation-node-transformer.js +11 -2
  191. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  192. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  193. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  194. package/dist/esm/operation-node/operator-node.d.ts +13 -2
  195. package/dist/esm/operation-node/operator-node.js +34 -3
  196. package/dist/esm/operation-node/query-node.d.ts +25 -8
  197. package/dist/esm/operation-node/query-node.js +9 -2
  198. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  199. package/dist/esm/operation-node/select-query-node.js +0 -6
  200. package/dist/esm/operation-node/update-query-node.d.ts +0 -1
  201. package/dist/esm/operation-node/update-query-node.js +0 -6
  202. package/dist/esm/parser/binary-operation-parser.d.ts +9 -10
  203. package/dist/esm/parser/binary-operation-parser.js +85 -37
  204. package/dist/esm/parser/coalesce-parser.d.ts +0 -2
  205. package/dist/esm/parser/coalesce-parser.js +1 -7
  206. package/dist/esm/parser/expression-parser.d.ts +7 -3
  207. package/dist/esm/parser/expression-parser.js +5 -5
  208. package/dist/esm/parser/group-by-parser.d.ts +3 -2
  209. package/dist/esm/parser/group-by-parser.js +3 -0
  210. package/dist/esm/parser/insert-values-parser.d.ts +4 -1
  211. package/dist/esm/parser/insert-values-parser.js +18 -12
  212. package/dist/esm/parser/join-parser.js +2 -2
  213. package/dist/esm/parser/parse-utils.d.ts +0 -2
  214. package/dist/esm/parser/parse-utils.js +0 -6
  215. package/dist/esm/parser/returning-parser.d.ts +2 -1
  216. package/dist/esm/parser/select-parser.d.ts +5 -13
  217. package/dist/esm/parser/select-parser.js +7 -3
  218. package/dist/esm/parser/table-parser.d.ts +6 -3
  219. package/dist/esm/parser/unary-operation-parser.d.ts +5 -2
  220. package/dist/esm/parser/unary-operation-parser.js +8 -8
  221. package/dist/esm/parser/update-set-parser.d.ts +4 -1
  222. package/dist/esm/parser/update-set-parser.js +7 -2
  223. package/dist/esm/parser/value-parser.d.ts +5 -0
  224. package/dist/esm/parser/value-parser.js +1 -3
  225. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +7 -0
  226. package/dist/esm/plugin/camel-case/camel-case-plugin.js +10 -4
  227. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
  228. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  229. package/dist/esm/query-builder/aggregate-function-builder.d.ts +40 -113
  230. package/dist/esm/query-builder/aggregate-function-builder.js +24 -64
  231. package/dist/esm/query-builder/delete-query-builder.d.ts +224 -205
  232. package/dist/esm/query-builder/delete-query-builder.js +24 -30
  233. package/dist/esm/query-builder/delete-result.js +3 -0
  234. package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +62 -0
  235. package/dist/esm/query-builder/deprecated-having-expression-builder.js +2 -0
  236. package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +62 -0
  237. package/dist/esm/query-builder/deprecated-on-expression-builder.js +2 -0
  238. package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +62 -0
  239. package/dist/esm/query-builder/deprecated-where-expression-builder.js +2 -0
  240. package/dist/esm/query-builder/function-module.d.ts +304 -42
  241. package/dist/esm/query-builder/function-module.js +43 -207
  242. package/dist/esm/query-builder/having-interface.d.ts +19 -16
  243. package/dist/esm/query-builder/insert-query-builder.d.ts +78 -30
  244. package/dist/esm/query-builder/insert-query-builder.js +25 -34
  245. package/dist/esm/query-builder/insert-result.js +3 -0
  246. package/dist/esm/query-builder/join-builder.d.ts +23 -26
  247. package/dist/esm/query-builder/join-builder.js +18 -23
  248. package/dist/esm/query-builder/no-result-error.d.ts +1 -0
  249. package/dist/esm/query-builder/no-result-error.js +3 -0
  250. package/dist/esm/query-builder/on-conflict-builder.d.ts +158 -276
  251. package/dist/esm/query-builder/on-conflict-builder.js +54 -38
  252. package/dist/esm/query-builder/over-builder.d.ts +5 -0
  253. package/dist/esm/query-builder/over-builder.js +7 -0
  254. package/dist/esm/query-builder/returning-interface.d.ts +2 -2
  255. package/dist/esm/query-builder/select-query-builder.d.ts +155 -243
  256. package/dist/esm/query-builder/select-query-builder.js +337 -82
  257. package/dist/esm/query-builder/update-query-builder.d.ts +149 -217
  258. package/dist/esm/query-builder/update-query-builder.js +25 -119
  259. package/dist/esm/query-builder/update-result.js +3 -0
  260. package/dist/esm/query-builder/where-interface.d.ts +71 -184
  261. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  262. package/dist/esm/query-compiler/default-query-compiler.js +18 -2
  263. package/dist/esm/query-creator.d.ts +38 -2
  264. package/dist/esm/query-creator.js +3 -45
  265. package/dist/esm/query-executor/query-executor.d.ts +3 -3
  266. package/dist/esm/raw-builder/raw-builder.d.ts +5 -3
  267. package/dist/esm/raw-builder/raw-builder.js +13 -7
  268. package/dist/esm/raw-builder/sql.d.ts +17 -9
  269. package/dist/esm/raw-builder/sql.js +8 -2
  270. package/dist/esm/schema/alter-column-builder.d.ts +5 -0
  271. package/dist/esm/schema/alter-column-builder.js +7 -0
  272. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
  273. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
  274. package/dist/esm/schema/alter-table-drop-constraint-builder.d.ts +5 -0
  275. package/dist/esm/schema/alter-table-drop-constraint-builder.js +7 -0
  276. package/dist/esm/schema/column-definition-builder.d.ts +6 -1
  277. package/dist/esm/schema/column-definition-builder.js +8 -1
  278. package/dist/esm/schema/create-index-builder.d.ts +51 -9
  279. package/dist/esm/schema/create-index-builder.js +17 -0
  280. package/dist/esm/schema/create-schema-builder.d.ts +5 -0
  281. package/dist/esm/schema/create-schema-builder.js +7 -0
  282. package/dist/esm/schema/create-table-builder.d.ts +3 -1
  283. package/dist/esm/schema/create-table-builder.js +3 -1
  284. package/dist/esm/schema/create-type-builder.d.ts +5 -0
  285. package/dist/esm/schema/create-type-builder.js +7 -0
  286. package/dist/esm/schema/create-view-builder.d.ts +5 -0
  287. package/dist/esm/schema/create-view-builder.js +7 -0
  288. package/dist/esm/schema/drop-index-builder.d.ts +5 -0
  289. package/dist/esm/schema/drop-index-builder.js +7 -0
  290. package/dist/esm/schema/drop-schema-builder.d.ts +5 -0
  291. package/dist/esm/schema/drop-schema-builder.js +7 -0
  292. package/dist/esm/schema/drop-table-builder.d.ts +5 -0
  293. package/dist/esm/schema/drop-table-builder.js +7 -0
  294. package/dist/esm/schema/drop-type-builder.d.ts +5 -0
  295. package/dist/esm/schema/drop-type-builder.js +7 -0
  296. package/dist/esm/schema/drop-view-builder.d.ts +5 -0
  297. package/dist/esm/schema/drop-view-builder.js +7 -0
  298. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +5 -0
  299. package/dist/esm/schema/foreign-key-constraint-builder.js +7 -0
  300. package/dist/esm/util/compilable.d.ts +1 -0
  301. package/dist/esm/util/compilable.js +4 -1
  302. package/dist/esm/util/explainable.d.ts +35 -0
  303. package/dist/esm/util/log.d.ts +2 -0
  304. package/dist/esm/util/object-utils.js +1 -1
  305. package/dist/esm/util/streamable.d.ts +29 -0
  306. package/dist/esm/util/streamable.js +2 -0
  307. package/dist/esm/util/type-utils.d.ts +6 -4
  308. package/helpers/postgres.d.ts +1 -0
  309. package/helpers/postgres.js +1 -0
  310. package/package.json +20 -9
  311. package/dist/cjs/query-builder/expression-builder.d.ts +0 -126
  312. package/dist/cjs/query-builder/expression-builder.js +0 -107
  313. package/dist/esm/query-builder/expression-builder.d.ts +0 -126
  314. package/dist/esm/query-builder/expression-builder.js +0 -104
@@ -2,7 +2,7 @@ import { SelectQueryBuilder } from './query-builder/select-query-builder.js';
2
2
  import { InsertQueryBuilder } from './query-builder/insert-query-builder.js';
3
3
  import { DeleteQueryBuilder } from './query-builder/delete-query-builder.js';
4
4
  import { UpdateQueryBuilder } from './query-builder/update-query-builder.js';
5
- import { TableExpression, From, FromTables, TableReference } from './parser/table-parser.js';
5
+ import { TableExpression, From, FromTables, TableReference, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from './parser/table-parser.js';
6
6
  import { QueryExecutor } from './query-executor/query-executor.js';
7
7
  import { CommonTableExpression, QueryCreatorWithCommonTableExpression, RecursiveCommonTableExpression } from './parser/with-parser.js';
8
8
  import { WithNode } from './operation-node/with-node.js';
@@ -120,7 +120,10 @@ export declare class QueryCreator<DB> {
120
120
  * (select 1 as one) as "q"
121
121
  * ```
122
122
  */
123
+ selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
123
124
  selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
125
+ selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
126
+ selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB, TE>, {}>;
124
127
  selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
125
128
  /**
126
129
  * Creates an insert query.
@@ -198,6 +201,8 @@ export declare class QueryCreator<DB> {
198
201
  *
199
202
  * ### Examples
200
203
  *
204
+ * Deleting person with id 1:
205
+ *
201
206
  * ```ts
202
207
  * const result = await db
203
208
  * .deleteFrom('person')
@@ -206,7 +211,36 @@ export declare class QueryCreator<DB> {
206
211
  *
207
212
  * console.log(result.numDeletedRows)
208
213
  * ```
214
+ *
215
+ * The generated SQL (PostgreSQL):
216
+ *
217
+ * ```sql
218
+ * delete from "person" where "person"."id" = $1
219
+ * ```
220
+ *
221
+ * Some databases such as MySQL support deleting from multiple tables:
222
+ *
223
+ * ```ts
224
+ * const result = await db
225
+ * .deleteFrom(['person', 'pet'])
226
+ * .using('person')
227
+ * .innerJoin('pet', 'pet.owner_id', '=', 'person.id')
228
+ * .where('person.id', '=', 1)
229
+ * .executeTakeFirst()
230
+ * ```
231
+ *
232
+ * The generated SQL (MySQL):
233
+ *
234
+ * ```sql
235
+ * delete from `person`, `pet`
236
+ * using `person`
237
+ * inner join `pet` on `pet`.`owner_id` = `person`.`id`
238
+ * where `person`.`id` = ?
239
+ * ```
209
240
  */
241
+ deleteFrom<TR extends keyof DB & string>(from: TR[]): DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>;
242
+ deleteFrom<TR extends TableReference<DB>>(tables: TR[]): DeleteQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, DeleteResult>;
243
+ deleteFrom<TR extends keyof DB & string>(from: TR): DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>;
210
244
  deleteFrom<TR extends TableReference<DB>>(table: TR): DeleteQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, DeleteResult>;
211
245
  /**
212
246
  * Creates an update query.
@@ -231,6 +265,8 @@ export declare class QueryCreator<DB> {
231
265
  * console.log(result.numUpdatedRows)
232
266
  * ```
233
267
  */
268
+ updateTable<TR extends keyof DB & string>(table: TR): UpdateQueryBuilder<DB, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>;
269
+ updateTable<TR extends AnyAliasedTable<DB>>(table: TR): UpdateQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>;
234
270
  updateTable<TR extends TableReference<DB>>(table: TR): UpdateQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, FromTables<DB, never, TR>, UpdateResult>;
235
271
  /**
236
272
  * Creates a `with` query (Common Table Expression).
@@ -295,7 +331,7 @@ export declare class QueryCreator<DB> {
295
331
  * This only affects the query created through the builder returned from
296
332
  * this method and doesn't modify the `db` instance.
297
333
  *
298
- * See [this recipe](https://github.com/koskimas/kysely/tree/master/recipes/schemas.md)
334
+ * See [this recipe](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/schemas.md)
299
335
  * for a more detailed explanation.
300
336
  *
301
337
  * ### Examples
@@ -105,55 +105,13 @@ class QueryCreator {
105
105
  queryNode: insert_query_node_js_1.InsertQueryNode.create((0, table_parser_js_1.parseTable)(table), this.#props.withNode, true),
106
106
  });
107
107
  }
108
- /**
109
- * Creates a delete query.
110
- *
111
- * See the {@link DeleteQueryBuilder.where} method for examples on how to specify
112
- * a where clause for the delete operation.
113
- *
114
- * The return value of the query is an instance of {@link DeleteResult}.
115
- *
116
- * ### Examples
117
- *
118
- * ```ts
119
- * const result = await db
120
- * .deleteFrom('person')
121
- * .where('person.id', '=', 1)
122
- * .executeTakeFirst()
123
- *
124
- * console.log(result.numDeletedRows)
125
- * ```
126
- */
127
- deleteFrom(table) {
108
+ deleteFrom(tables) {
128
109
  return new delete_query_builder_js_1.DeleteQueryBuilder({
129
110
  queryId: (0, query_id_js_1.createQueryId)(),
130
111
  executor: this.#props.executor,
131
- queryNode: delete_query_node_js_1.DeleteQueryNode.create((0, table_parser_js_1.parseTableExpression)(table), this.#props.withNode),
112
+ queryNode: delete_query_node_js_1.DeleteQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(tables), this.#props.withNode),
132
113
  });
133
114
  }
134
- /**
135
- * Creates an update query.
136
- *
137
- * See the {@link UpdateQueryBuilder.where} method for examples on how to specify
138
- * a where clause for the update operation.
139
- *
140
- * See the {@link UpdateQueryBuilder.set} method for examples on how to
141
- * specify the updates.
142
- *
143
- * The return value of the query is an {@link UpdateResult}.
144
- *
145
- * ### Examples
146
- *
147
- * ```ts
148
- * const result = await db
149
- * .updateTable('person')
150
- * .set({ first_name: 'Jennifer' })
151
- * .where('person.id', '=', 1)
152
- * .executeTakeFirst()
153
- *
154
- * console.log(result.numUpdatedRows)
155
- * ```
156
- */
157
115
  updateTable(table) {
158
116
  return new update_query_builder_js_1.UpdateQueryBuilder({
159
117
  queryId: (0, query_id_js_1.createQueryId)(),
@@ -250,7 +208,7 @@ class QueryCreator {
250
208
  * This only affects the query created through the builder returned from
251
209
  * this method and doesn't modify the `db` instance.
252
210
  *
253
- * See [this recipe](https://github.com/koskimas/kysely/tree/master/recipes/schemas.md)
211
+ * See [this recipe](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/schemas.md)
254
212
  * for a more detailed explanation.
255
213
  *
256
214
  * ### Examples
@@ -31,18 +31,18 @@ export interface QueryExecutor extends ConnectionProvider {
31
31
  * the output of {@link transformQuery} into this method but you can
32
32
  * compile any query using this method.
33
33
  */
34
- compileQuery(node: RootOperationNode, queryId: QueryId): CompiledQuery;
34
+ compileQuery<R = unknown>(node: RootOperationNode, queryId: QueryId): CompiledQuery<R>;
35
35
  /**
36
36
  * Executes a compiled query and runs the result through all plugins'
37
37
  * `transformResult` method.
38
38
  */
39
- executeQuery<R>(compiledQuery: CompiledQuery, queryId: QueryId): Promise<QueryResult<R>>;
39
+ executeQuery<R>(compiledQuery: CompiledQuery<R>, queryId: QueryId): Promise<QueryResult<R>>;
40
40
  /**
41
41
  * Executes a compiled query and runs the result through all plugins'
42
42
  * `transformResult` method. Results are streamead instead of loaded
43
43
  * at once.
44
44
  */
45
- stream<R>(compiledQuery: CompiledQuery,
45
+ stream<R>(compiledQuery: CompiledQuery<R>,
46
46
  /**
47
47
  * How many rows should be pulled from the database at once. Supported
48
48
  * only by the postgres driver.
@@ -1,6 +1,7 @@
1
1
  import { QueryResult } from '../driver/database-connection.js';
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
3
  import { RawNode } from '../operation-node/raw-node.js';
4
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
4
5
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
5
6
  import { QueryExecutorProvider } from '../query-executor/query-executor-provider.js';
6
7
  import { QueryId } from '../util/query-id.js';
@@ -86,7 +87,7 @@ export declare class RawBuilder<O> implements Expression<O> {
86
87
  * ```
87
88
  */
88
89
  as<A extends string>(alias: A): AliasedRawBuilder<O, A>;
89
- as<A extends string = never>(alias: Expression<any>): AliasedRawBuilder<O, A>;
90
+ as<A extends string>(alias: Expression<any>): AliasedRawBuilder<O, A>;
90
91
  /**
91
92
  * Change the output type of the raw expression.
92
93
  *
@@ -117,6 +118,7 @@ export declare class RawBuilder<O> implements Expression<O> {
117
118
  * ```
118
119
  */
119
120
  toOperationNode(): RawNode;
121
+ compile(executorProvider: QueryExecutorProvider): CompiledQuery<O>;
120
122
  execute(executorProvider: QueryExecutorProvider): Promise<QueryResult<O>>;
121
123
  }
122
124
  export declare function isRawBuilder(obj: unknown): obj is RawBuilder<unknown>;
@@ -125,7 +127,7 @@ export declare function isRawBuilder(obj: unknown): obj is RawBuilder<unknown>;
125
127
  */
126
128
  export declare class AliasedRawBuilder<O = unknown, A extends string = never> implements AliasedExpression<O, A> {
127
129
  #private;
128
- constructor(rawBuilder: RawBuilder<O>, alias: A | Expression<any>);
130
+ constructor(rawBuilder: RawBuilder<O>, alias: A | Expression<unknown>);
129
131
  /** @private */
130
132
  /**
131
133
  * Returns the aliased expression.
@@ -135,7 +137,7 @@ export declare class AliasedRawBuilder<O = unknown, A extends string = never> im
135
137
  /**
136
138
  * Returns the alias.
137
139
  */
138
- get alias(): A;
140
+ get alias(): A | Expression<unknown>;
139
141
  /**
140
142
  * Creates the OperationNode that describes how to compile this expression into SQL.
141
143
  */
@@ -52,17 +52,23 @@ class RawBuilder {
52
52
  });
53
53
  }
54
54
  toOperationNode() {
55
- const executor = this.#props.plugins !== undefined
56
- ? noop_query_executor_js_1.NOOP_QUERY_EXECUTOR.withPlugins(this.#props.plugins)
57
- : noop_query_executor_js_1.NOOP_QUERY_EXECUTOR;
58
- return this.#toOperationNode(executor);
55
+ return this.#toOperationNode(this.#getExecutor());
56
+ }
57
+ compile(executorProvider) {
58
+ return this.#compile(this.#getExecutor(executorProvider));
59
59
  }
60
60
  async execute(executorProvider) {
61
- const executor = this.#props.plugins !== undefined
62
- ? executorProvider.getExecutor().withPlugins(this.#props.plugins)
63
- : executorProvider.getExecutor();
61
+ const executor = this.#getExecutor(executorProvider);
64
62
  return executor.executeQuery(this.#compile(executor), this.#props.queryId);
65
63
  }
64
+ #getExecutor(executorProvider) {
65
+ const executor = executorProvider !== undefined
66
+ ? executorProvider.getExecutor()
67
+ : noop_query_executor_js_1.NOOP_QUERY_EXECUTOR;
68
+ return this.#props.plugins !== undefined
69
+ ? executor.withPlugins(this.#props.plugins)
70
+ : executor;
71
+ }
66
72
  #toOperationNode(executor) {
67
73
  return executor.transformQuery(this.#props.rawNode, this.#props.queryId);
68
74
  }
@@ -18,7 +18,7 @@ export interface Sql {
18
18
  *
19
19
  * If you need your substitutions to be interpreted as identifiers, value literals or
20
20
  * lists of things, see the {@link Sql.ref}, {@link Sql.table}, {@link Sql.id},
21
- * {@link Sql.literal}, {@link Sql.raw} and {@link Sql.join} functions.
21
+ * {@link Sql.lit}, {@link Sql.raw} and {@link Sql.join} functions.
22
22
  *
23
23
  * You can pass sql snippets returned by the `sql` tag pretty much anywhere. Whenever
24
24
  * something can't be done using the Kysely API, you should be able to drop down to
@@ -98,13 +98,17 @@ export interface Sql {
98
98
  */
99
99
  <T = unknown>(sqlFragments: TemplateStringsArray, ...parameters: unknown[]): RawBuilder<T>;
100
100
  /**
101
- * `sql.value(value)` is a shortcut for:
101
+ * `sql.val(value)` is a shortcut for:
102
102
  *
103
103
  * ```ts
104
104
  * sql<ValueType>`${value}`
105
105
  * ```
106
106
  */
107
- value<T>(value: T): RawBuilder<T>;
107
+ val<V>(value: V): RawBuilder<V>;
108
+ /**
109
+ * @deprecated Use {@link Sql.val} instead.
110
+ */
111
+ value<V>(value: V): RawBuilder<V>;
108
112
  /**
109
113
  * This can be used to add runtime column references to SQL snippets.
110
114
  *
@@ -155,7 +159,7 @@ export interface Sql {
155
159
  * select "public"."person"."first_name" from person
156
160
  * ```
157
161
  */
158
- ref(columnReference: string): RawBuilder<unknown>;
162
+ ref<R = unknown>(columnReference: string): RawBuilder<R>;
159
163
  /**
160
164
  * This can be used to add runtime table references to SQL snippets.
161
165
  *
@@ -246,7 +250,7 @@ export interface Sql {
246
250
  * ```ts
247
251
  * const firstName = 'first_name'
248
252
  *
249
- * sql`select * from person where first_name = ${sql.literal(firstName)}`
253
+ * sql`select * from person where first_name = ${sql.lit(firstName)}`
250
254
  * ```
251
255
  *
252
256
  * The generated SQL (PostgreSQL):
@@ -259,7 +263,11 @@ export interface Sql {
259
263
  * the SQL string instead of as a parameter. Only use this function when
260
264
  * something can't be sent as a parameter.
261
265
  */
262
- literal(value: unknown): RawBuilder<unknown>;
266
+ lit<V>(value: V): RawBuilder<V>;
267
+ /**
268
+ * @deprecated Use {@link lit} instead.
269
+ */
270
+ literal<V>(value: V): RawBuilder<V>;
263
271
  /**
264
272
  * This can be used to add arbitrary runtime SQL to SQL snippets.
265
273
  *
@@ -278,11 +286,11 @@ export interface Sql {
278
286
  * select * from person where first_name = 'first_name'
279
287
  * ```
280
288
  *
281
- * Note that the difference to `sql.literal` is that this function
289
+ * Note that the difference to `sql.lit` is that this function
282
290
  * doesn't assume the inputs are values. The input to this function
283
291
  * can be any sql and it's simply glued to the parent string as-is.
284
292
  */
285
- raw(anySql: string): RawBuilder<unknown>;
293
+ raw<R = unknown>(anySql: string): RawBuilder<R>;
286
294
  /**
287
295
  * This can be used to add lists of things to SQL snippets.
288
296
  *
@@ -321,7 +329,7 @@ export interface Sql {
321
329
  * 123,
322
330
  * sql`(1 == 1)`,
323
331
  * db.selectFrom('person').selectAll(),
324
- * sql.literal(false),
332
+ * sql.lit(false),
325
333
  * sql.id('first_name')
326
334
  * ]
327
335
  *
@@ -21,12 +21,15 @@ 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) {
24
+ val(value) {
25
25
  return new raw_builder_js_1.RawBuilder({
26
26
  queryId: (0, query_id_js_1.createQueryId)(),
27
27
  rawNode: raw_node_js_1.RawNode.createWithChild((0, value_parser_js_1.parseValueExpression)(value)),
28
28
  });
29
29
  },
30
+ value(value) {
31
+ return this.val(value);
32
+ },
30
33
  table(tableReference) {
31
34
  return new raw_builder_js_1.RawBuilder({
32
35
  queryId: (0, query_id_js_1.createQueryId)(),
@@ -42,12 +45,15 @@ exports.sql = Object.assign((sqlFragments, ...parameters) => {
42
45
  rawNode: raw_node_js_1.RawNode.create(fragments, ids.map(identifier_node_js_1.IdentifierNode.create)),
43
46
  });
44
47
  },
45
- literal(value) {
48
+ lit(value) {
46
49
  return new raw_builder_js_1.RawBuilder({
47
50
  queryId: (0, query_id_js_1.createQueryId)(),
48
51
  rawNode: raw_node_js_1.RawNode.createWithChild(value_node_js_1.ValueNode.createImmediate(value)),
49
52
  });
50
53
  },
54
+ literal(value) {
55
+ return this.lit(value);
56
+ },
51
57
  raw(sql) {
52
58
  return new raw_builder_js_1.RawBuilder({
53
59
  queryId: (0, query_id_js_1.createQueryId)(),
@@ -10,6 +10,11 @@ export declare class AlterColumnBuilder {
10
10
  dropDefault(): AlteredColumnBuilder;
11
11
  setNotNull(): AlteredColumnBuilder;
12
12
  dropNotNull(): AlteredColumnBuilder;
13
+ /**
14
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
15
+ * what the provided function returns.
16
+ */
17
+ $call<T>(func: (qb: this) => T): T;
13
18
  }
14
19
  /**
15
20
  * Allows us to force consumers to do something, anything, when altering a column.
@@ -34,6 +34,13 @@ class AlterColumnBuilder {
34
34
  dropNotNull: true,
35
35
  }));
36
36
  }
37
+ /**
38
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
39
+ * what the provided function returns.
40
+ */
41
+ $call(func) {
42
+ return func(this);
43
+ }
37
44
  }
38
45
  exports.AlterColumnBuilder = AlterColumnBuilder;
39
46
  /**
@@ -11,6 +11,11 @@ export declare class AlterTableAddForeignKeyConstraintBuilder implements Foreign
11
11
  constructor(props: AlterTableAddForeignKeyConstraintBuilderProps);
12
12
  onDelete(onDelete: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
13
13
  onUpdate(onUpdate: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
14
+ /**
15
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
16
+ * what the provided function returns.
17
+ */
18
+ $call<T>(func: (qb: this) => T): T;
14
19
  toOperationNode(): AlterTableNode;
15
20
  compile(): CompiledQuery;
16
21
  execute(): Promise<void>;
@@ -22,6 +22,13 @@ class AlterTableAddForeignKeyConstraintBuilder {
22
22
  constraintBuilder: this.#props.constraintBuilder.onUpdate(onUpdate),
23
23
  });
24
24
  }
25
+ /**
26
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
27
+ * what the provided function returns.
28
+ */
29
+ $call(func) {
30
+ return func(this);
31
+ }
25
32
  toOperationNode() {
26
33
  return this.#props.executor.transformQuery(alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
27
34
  addConstraint: add_constraint_node_js_1.AddConstraintNode.create(this.#props.constraintBuilder.toOperationNode()),
@@ -10,6 +10,11 @@ export declare class AlterTableDropConstraintBuilder implements OperationNodeSou
10
10
  ifExists(): AlterTableDropConstraintBuilder;
11
11
  cascade(): AlterTableDropConstraintBuilder;
12
12
  restrict(): AlterTableDropConstraintBuilder;
13
+ /**
14
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
15
+ * what the provided function returns.
16
+ */
17
+ $call<T>(func: (qb: this) => T): T;
13
18
  toOperationNode(): AlterTableNode;
14
19
  compile(): CompiledQuery;
15
20
  execute(): Promise<void>;
@@ -40,6 +40,13 @@ class AlterTableDropConstraintBuilder {
40
40
  }),
41
41
  });
42
42
  }
43
+ /**
44
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
45
+ * what the provided function returns.
46
+ */
47
+ $call(func) {
48
+ return func(this);
49
+ }
43
50
  toOperationNode() {
44
51
  return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId);
45
52
  }
@@ -191,7 +191,7 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource {
191
191
  * ```ts
192
192
  * db.schema.createTable('person')
193
193
  * .addColumn('id', 'integer', col => col.primaryKey())
194
- * .addColumn('age', 'integer', col => col.unsigned().notNull().modifyEnd(sql`comment ${sql.literal('it is not polite to ask a woman her age')}`))
194
+ * .addColumn('age', 'integer', col => col.unsigned().notNull().modifyEnd(sql`comment ${sql.lit('it is not polite to ask a woman her age')}`))
195
195
  * .execute()
196
196
  * ```
197
197
  *
@@ -205,6 +205,11 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource {
205
205
  * ```
206
206
  */
207
207
  modifyEnd(modifier: Expression<any>): ColumnDefinitionBuilder;
208
+ /**
209
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
210
+ * what the provided function returns.
211
+ */
212
+ $call<T>(func: (qb: this) => T): T;
208
213
  toOperationNode(): ColumnDefinitionNode;
209
214
  }
210
215
  export declare type ColumnDefinitionBuilderCallback = (builder: ColumnDefinitionBuilder) => ColumnDefinitionBuilder;
@@ -267,7 +267,7 @@ class ColumnDefinitionBuilder {
267
267
  * ```ts
268
268
  * db.schema.createTable('person')
269
269
  * .addColumn('id', 'integer', col => col.primaryKey())
270
- * .addColumn('age', 'integer', col => col.unsigned().notNull().modifyEnd(sql`comment ${sql.literal('it is not polite to ask a woman her age')}`))
270
+ * .addColumn('age', 'integer', col => col.unsigned().notNull().modifyEnd(sql`comment ${sql.lit('it is not polite to ask a woman her age')}`))
271
271
  * .execute()
272
272
  * ```
273
273
  *
@@ -283,6 +283,13 @@ class ColumnDefinitionBuilder {
283
283
  modifyEnd(modifier) {
284
284
  return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWithEndModifier(this.#node, modifier.toOperationNode()));
285
285
  }
286
+ /**
287
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
288
+ * what the provided function returns.
289
+ */
290
+ $call(func) {
291
+ return func(this);
292
+ }
286
293
  toOperationNode() {
287
294
  return this.#node;
288
295
  }
@@ -5,7 +5,10 @@ import { Compilable } from '../util/compilable.js';
5
5
  import { QueryExecutor } from '../query-executor/query-executor.js';
6
6
  import { QueryId } from '../util/query-id.js';
7
7
  import { Expression } from '../expression/expression.js';
8
- export declare class CreateIndexBuilder implements OperationNodeSource, Compilable {
8
+ import { ComparisonOperatorExpression } from '../parser/binary-operation-parser.js';
9
+ import { ExpressionBuilder } from '../expression/expression-builder.js';
10
+ import { SqlBool } from '../util/type-utils.js';
11
+ export declare class CreateIndexBuilder<C = never> implements OperationNodeSource, Compilable {
9
12
  #private;
10
13
  constructor(props: CreateIndexBuilderProps);
11
14
  /**
@@ -13,27 +16,27 @@ export declare class CreateIndexBuilder implements OperationNodeSource, Compilab
13
16
  *
14
17
  * If the index already exists, no error is thrown if this method has been called.
15
18
  */
16
- ifNotExists(): CreateIndexBuilder;
19
+ ifNotExists(): CreateIndexBuilder<C>;
17
20
  /**
18
21
  * Makes the index unique.
19
22
  */
20
- unique(): CreateIndexBuilder;
23
+ unique(): CreateIndexBuilder<C>;
21
24
  /**
22
25
  * Specifies the table for the index.
23
26
  */
24
- on(table: string): CreateIndexBuilder;
27
+ on(table: string): CreateIndexBuilder<C>;
25
28
  /**
26
29
  * Specifies the column for the index.
27
30
  *
28
31
  * Also see the `expression` for specifying an arbitrary expression.
29
32
  */
30
- column(column: string): CreateIndexBuilder;
33
+ column<CL extends string>(column: CL): CreateIndexBuilder<C | CL>;
31
34
  /**
32
35
  * Specifies a list of columns for the index.
33
36
  *
34
37
  * Also see the `expression` for specifying an arbitrary expression.
35
38
  */
36
- columns(columns: string[]): CreateIndexBuilder;
39
+ columns<CL extends string>(columns: CL[]): CreateIndexBuilder<C | CL>;
37
40
  /**
38
41
  * Specifies an arbitrary expression for the index.
39
42
  *
@@ -49,12 +52,51 @@ export declare class CreateIndexBuilder implements OperationNodeSource, Compilab
49
52
  * .execute()
50
53
  * ```
51
54
  */
52
- expression(expression: Expression<any>): CreateIndexBuilder;
55
+ expression(expression: Expression<any>): CreateIndexBuilder<C>;
53
56
  /**
54
57
  * Specifies the index type.
55
58
  */
56
- using(indexType: IndexType): CreateIndexBuilder;
57
- using(indexType: string): CreateIndexBuilder;
59
+ using(indexType: IndexType): CreateIndexBuilder<C>;
60
+ using(indexType: string): CreateIndexBuilder<C>;
61
+ /**
62
+ * Adds a where clause to the query. This Effectively turns the index partial.
63
+ *
64
+ * ### Examples
65
+ *
66
+ * ```ts
67
+ * import { sql } from 'kysely'
68
+ *
69
+ * await db.schema
70
+ * .createIndex('orders_unbilled_index')
71
+ * .on('orders')
72
+ * .column('order_nr')
73
+ * .where(sql.ref('billed'), 'is not', true)
74
+ * .where('order_nr', 'like', '123%')
75
+ * ```
76
+ *
77
+ * The generated SQL (PostgreSQL):
78
+ *
79
+ * ```sql
80
+ * create index "orders_unbilled_index" on "orders" ("order_nr") where "billed" is not true and "order_nr" like '123%'
81
+ * ```
82
+ *
83
+ * Column names specified in {@link column} or {@link columns} are known at compile-time
84
+ * and can be referred to in the current query and context.
85
+ *
86
+ * Sometimes you may want to refer to columns that exist in the table but are not
87
+ * part of the current index. In that case you can refer to them using {@link sql}
88
+ * expressions.
89
+ *
90
+ * Parameters are always sent as literals due to database restrictions.
91
+ */
92
+ where(lhs: C | Expression<any>, op: ComparisonOperatorExpression, rhs: unknown): CreateIndexBuilder<C>;
93
+ where(factory: (qb: ExpressionBuilder<Record<string, Record<C & string, any>>, string>) => Expression<SqlBool>): CreateIndexBuilder<C>;
94
+ where(expression: Expression<any>): CreateIndexBuilder<C>;
95
+ /**
96
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
97
+ * what the provided function returns.
98
+ */
99
+ $call<T>(func: (qb: this) => T): T;
58
100
  toOperationNode(): CreateIndexNode;
59
101
  compile(): CompiledQuery;
60
102
  execute(): Promise<void>;
@@ -8,6 +8,9 @@ const reference_parser_js_1 = require("../parser/reference-parser.js");
8
8
  const table_parser_js_1 = require("../parser/table-parser.js");
9
9
  const prevent_await_js_1 = require("../util/prevent-await.js");
10
10
  const object_utils_js_1 = require("../util/object-utils.js");
11
+ const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
12
+ const query_node_js_1 = require("../operation-node/query-node.js");
13
+ const immediate_value_transformer_js_1 = require("../plugin/immediate-value/immediate-value-transformer.js");
11
14
  class CreateIndexBuilder {
12
15
  #props;
13
16
  constructor(props) {
@@ -105,6 +108,20 @@ class CreateIndexBuilder {
105
108
  }),
106
109
  });
107
110
  }
111
+ where(...args) {
112
+ const transformer = new immediate_value_transformer_js_1.ImmediateValueTransformer();
113
+ return new CreateIndexBuilder({
114
+ ...this.#props,
115
+ node: query_node_js_1.QueryNode.cloneWithWhere(this.#props.node, transformer.transformNode((0, binary_operation_parser_js_1.parseWhere)(args))),
116
+ });
117
+ }
118
+ /**
119
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
120
+ * what the provided function returns.
121
+ */
122
+ $call(func) {
123
+ return func(this);
124
+ }
108
125
  toOperationNode() {
109
126
  return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId);
110
127
  }
@@ -8,6 +8,11 @@ export declare class CreateSchemaBuilder implements OperationNodeSource, Compila
8
8
  #private;
9
9
  constructor(props: CreateSchemaBuilderProps);
10
10
  ifNotExists(): CreateSchemaBuilder;
11
+ /**
12
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
13
+ * what the provided function returns.
14
+ */
15
+ $call<T>(func: (qb: this) => T): T;
11
16
  toOperationNode(): CreateSchemaNode;
12
17
  compile(): CompiledQuery;
13
18
  execute(): Promise<void>;
@@ -15,6 +15,13 @@ class CreateSchemaBuilder {
15
15
  node: create_schema_node_js_1.CreateSchemaNode.cloneWith(this.#props.node, { ifNotExists: true }),
16
16
  });
17
17
  }
18
+ /**
19
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
20
+ * what the provided function returns.
21
+ */
22
+ $call(func) {
23
+ return func(this);
24
+ }
18
25
  toOperationNode() {
19
26
  return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId);
20
27
  }