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
@@ -1,211 +1,47 @@
1
1
  /// <reference types="./function-module.d.ts" />
2
+ import { ExpressionWrapper } from '../expression/expression-wrapper.js';
2
3
  import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
3
- import { parseCoalesce, } from '../parser/coalesce-parser.js';
4
- import { parseSimpleReferenceExpression, } from '../parser/reference-parser.js';
5
- import { RawBuilder } from '../raw-builder/raw-builder.js';
6
- import { createQueryId } from '../util/query-id.js';
4
+ import { FunctionNode } from '../operation-node/function-node.js';
5
+ import { parseSimpleReferenceExpression, parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
6
+ import { parseSelectAll } from '../parser/select-parser.js';
7
7
  import { AggregateFunctionBuilder } from './aggregate-function-builder.js';
8
- /**
9
- * Helpers for type safe SQL function calls.
10
- *
11
- * You can always use the {@link sql} tag to call functions and build arbitrary
12
- * expressions. This module simply has shortcuts for most common function calls.
13
- *
14
- * ### Examples
15
- *
16
- * ```ts
17
- * const { count } = db.fn
18
- *
19
- * await db.selectFrom('person')
20
- * .innerJoin('pet', 'pet.owner_id', 'person.id')
21
- * .select([
22
- * 'person.id',
23
- * count('pet.id').as('pet_count')
24
- * ])
25
- * .groupBy('person.id')
26
- * .having(count('pet.id'), '>', 10)
27
- * .execute()
28
- * ```
29
- *
30
- * The generated SQL (PostgreSQL):
31
- *
32
- * ```sql
33
- * select "person"."id", count("pet"."id") as "pet_count"
34
- * from "person"
35
- * inner join "pet" on "pet"."owner_id" = "person"."id"
36
- * group by "person"."id"
37
- * having count("pet"."id") > $1
38
- * ```
39
- */
40
- export class FunctionModule {
41
- constructor() {
42
- this.avg = this.avg.bind(this);
43
- this.coalesce = this.coalesce.bind(this);
44
- this.count = this.count.bind(this);
45
- this.max = this.max.bind(this);
46
- this.min = this.min.bind(this);
47
- this.sum = this.sum.bind(this);
48
- }
49
- /**
50
- * Calls the `avg` function for the column given as the argument.
51
- *
52
- * If this is used in a `select` statement the type of the selected expression
53
- * will be `number | string` by default. This is because Kysely can't know the
54
- * type the db driver outputs. Sometimes the output can be larger than the largest
55
- * javascript number and a string is returned instead. Most drivers allow you
56
- * to configure the output type of large numbers and Kysely can't know if you've
57
- * done so.
58
- *
59
- * You can specify the output type of the expression by providing the type as
60
- * the first type argument:
61
- *
62
- * ```ts
63
- * const { avg } = db.fn
64
- *
65
- * db.selectFrom('toy')
66
- * .select(avg<number>('price').as('avg_price'))
67
- * .execute()
68
- * ```
69
- *
70
- * Sometimes a null is returned, e.g. when row count is 0, and no `group by`
71
- * was used. It is highly recommended to include null in the output type union
72
- * and handle null values in post-execute code, or wrap the function with a `coalesce`
73
- * function.
74
- *
75
- * ```ts
76
- * const { avg } = db.fn
77
- *
78
- * db.selectFrom('toy')
79
- * .select(avg<number | null>('price').as('avg_price'))
80
- * .execute()
81
- * ```
82
- */
83
- avg(column) {
84
- return new AggregateFunctionBuilder({
85
- aggregateFunctionNode: AggregateFunctionNode.create('avg', parseSimpleReferenceExpression(column)),
86
- });
87
- }
88
- /**
89
- * Calls the `coalesce` function for given arguments.
90
- *
91
- * This function returns the first non-null value from left to right, commonly
92
- * used to provide a default scalar for nullable columns or functions.
93
- *
94
- * ```ts
95
- * const { coalesce, max } = db.fn
96
- *
97
- * db.selectFrom('person')
98
- * .select(coalesce(max('age'), sql<number>`0`).as('max_age'))
99
- * .where('first_name', '=', 'Jennifer')
100
- * .execute()
101
- * ```
102
- *
103
- * The generated SQL (postgres):
104
- *
105
- * ```sql
106
- * select coalesce(max("age"), 0) as "max_age" from "person" where "first_name" = $1
107
- * ```
108
- *
109
- * If this is used in a `select` statement the type of the selected expression
110
- * is inferred in the same manner that the function computes. A union of arguments'
111
- * types - if a non-nullable argument exists, it stops there (ignoring any further
112
- * arguments' types) and exludes null from the final union type.
113
- *
114
- * Examples:
115
- *
116
- * `(string | null, number | null)` is inferred as `string | number | null`.
117
- *
118
- * `(string | null, number, Date | null)` is inferred as `string | number`.
119
- *
120
- * `(number, string | null)` is inferred as `number`.
121
- */
122
- coalesce(value, ...otherValues) {
123
- return new RawBuilder({
124
- queryId: createQueryId(),
125
- rawNode: parseCoalesce([value, ...otherValues]),
126
- });
127
- }
128
- /**
129
- * Calls the `count` function for the column given as the argument.
130
- *
131
- * If this is used in a `select` statement the type of the selected expression
132
- * will be `number | string | bigint` by default. This is because Kysely
133
- * can't know the type the db driver outputs. Sometimes the output can be larger
134
- * than the largest javascript number and a string is returned instead. Most
135
- * drivers allow you to configure the output type of large numbers and Kysely
136
- * can't know if you've done so.
137
- *
138
- * You can specify the output type of the expression by providing
139
- * the type as the first type argument:
140
- *
141
- * ```ts
142
- * const { count } = db.fn
143
- *
144
- * db.selectFrom('toy')
145
- * .select(count<number>('id').as('num_toys'))
146
- * .execute()
147
- * ```
148
- *
149
- * You can limit column range:
150
- *
151
- * ```ts
152
- * db.selectFrom('toy')
153
- * .select(qb => qb.fn.count<number>('id').as('num_toys'))
154
- * .execute()
155
- * ```
156
- */
157
- count(column) {
158
- return new AggregateFunctionBuilder({
159
- aggregateFunctionNode: AggregateFunctionNode.create('count', parseSimpleReferenceExpression(column)),
160
- });
161
- }
162
- max(column) {
163
- return new AggregateFunctionBuilder({
164
- aggregateFunctionNode: AggregateFunctionNode.create('max', parseSimpleReferenceExpression(column)),
165
- });
166
- }
167
- min(column) {
168
- return new AggregateFunctionBuilder({
169
- aggregateFunctionNode: AggregateFunctionNode.create('min', parseSimpleReferenceExpression(column)),
170
- });
171
- }
172
- /**
173
- * Calls the `sum` function for the column given as the argument.
174
- *
175
- * If this is used in a `select` statement the type of the selected expression
176
- * will be `number | string | bigint` by default. This is because Kysely
177
- * can't know the type the db driver outputs. Sometimes the output can be larger
178
- * than the largest javascript number and a string is returned instead. Most
179
- * drivers allow you to configure the output type of large numbers and Kysely
180
- * can't know if you've done so.
181
- *
182
- * You can specify the output type of the expression by providing
183
- * the type as the first type argument:
184
- *
185
- * ```ts
186
- * const { sum } = db.fn
187
- *
188
- * db.selectFrom('toy')
189
- * .select(sum<number>('price').as('total_price'))
190
- * .execute()
191
- * ```
192
- *
193
- * Sometimes a null is returned, e.g. when row count is 0, and no `group by`
194
- * was used. It is highly recommended to include null in the output type union
195
- * and handle null values in post-execute code, or wrap the function with a `coalesce`
196
- * function.
197
- *
198
- * ```ts
199
- * const { sum } = db.fn
200
- *
201
- * db.selectFrom('toy')
202
- * .select(sum<number | null>('price').as('total_price'))
203
- * .execute()
204
- * ```
205
- */
206
- sum(column) {
207
- return new AggregateFunctionBuilder({
208
- aggregateFunctionNode: AggregateFunctionNode.create('sum', parseSimpleReferenceExpression(column)),
209
- });
210
- }
8
+ export function createFunctionModule() {
9
+ const fn = (name, args) => {
10
+ return new ExpressionWrapper(FunctionNode.create(name, parseReferenceExpressionOrList(args)));
11
+ };
12
+ return Object.assign(fn, {
13
+ avg(column) {
14
+ return new AggregateFunctionBuilder({
15
+ aggregateFunctionNode: AggregateFunctionNode.create('avg', parseSimpleReferenceExpression(column)),
16
+ });
17
+ },
18
+ coalesce(value, ...otherValues) {
19
+ return fn('coalesce', [value, ...otherValues]);
20
+ },
21
+ count(column) {
22
+ return new AggregateFunctionBuilder({
23
+ aggregateFunctionNode: AggregateFunctionNode.create('count', parseSimpleReferenceExpression(column)),
24
+ });
25
+ },
26
+ countAll(table) {
27
+ return new AggregateFunctionBuilder({
28
+ aggregateFunctionNode: AggregateFunctionNode.create('count', parseSelectAll(table)[0]),
29
+ });
30
+ },
31
+ max(column) {
32
+ return new AggregateFunctionBuilder({
33
+ aggregateFunctionNode: AggregateFunctionNode.create('max', parseSimpleReferenceExpression(column)),
34
+ });
35
+ },
36
+ min(column) {
37
+ return new AggregateFunctionBuilder({
38
+ aggregateFunctionNode: AggregateFunctionNode.create('min', parseSimpleReferenceExpression(column)),
39
+ });
40
+ },
41
+ sum(column) {
42
+ return new AggregateFunctionBuilder({
43
+ aggregateFunctionNode: AggregateFunctionNode.create('sum', parseSimpleReferenceExpression(column)),
44
+ });
45
+ },
46
+ });
211
47
  }
@@ -1,14 +1,16 @@
1
1
  import { Expression } from '../expression/expression.js';
2
- import { ComparisonOperatorExpression, HavingGrouper, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
2
+ import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
3
3
  import { ReferenceExpression } from '../parser/reference-parser.js';
4
4
  import { ExistsExpression } from '../parser/unary-operation-parser.js';
5
+ import { SqlBool } from '../util/type-utils.js';
6
+ import { HavingExpressionBuilder } from './deprecated-having-expression-builder.js';
5
7
  export interface HavingInterface<DB, TB extends keyof DB> {
6
8
  /**
7
9
  * Just like {@link WhereInterface.where | where} but adds a `having` statement
8
10
  * instead of a `where` statement.
9
11
  */
10
12
  having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
11
- having(grouper: HavingGrouper<DB, TB>): HavingInterface<DB, TB>;
13
+ having(factory: HavingExpressionFactory<DB, TB>): HavingInterface<DB, TB>;
12
14
  having(expression: Expression<any>): HavingInterface<DB, TB>;
13
15
  /**
14
16
  * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
@@ -16,35 +18,36 @@ export interface HavingInterface<DB, TB extends keyof DB> {
16
18
  */
17
19
  havingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
18
20
  /**
19
- * Just like {@link WhereInterface.orWhere | orWhere} but adds a `having` statement
20
- * instead of a `where` statement.
21
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
21
22
  */
22
23
  orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
23
- orHaving(grouper: HavingGrouper<DB, TB>): HavingInterface<DB, TB>;
24
+ /**
25
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
26
+ */
27
+ orHaving(factory: HavingExpressionFactory<DB, TB>): HavingInterface<DB, TB>;
28
+ /**
29
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
30
+ */
24
31
  orHaving(expression: Expression<any>): HavingInterface<DB, TB>;
25
32
  /**
26
- * Just like {@link WhereInterface.orWhereRef | orWhereRef} but adds a `having` statement
27
- * instead of a `where` statement.
33
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
28
34
  */
29
35
  orHavingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
30
36
  /**
31
- * Just like {@link WhereInterface.whereExists | whereExists} but adds a `having` statement
32
- * instead of a `where` statement.
37
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
33
38
  */
34
39
  havingExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
35
40
  /**
36
- * Just like {@link WhereInterface.whereNotExists | whereNotExists} but adds a `having` statement
37
- * instead of a `where` statement.
41
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
38
42
  */
39
- havingNotExist(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
43
+ havingNotExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
40
44
  /**
41
- * Just like {@link WhereInterface.orWhereExists | orWhereExists} but adds a `having` statement
42
- * instead of a `where` statement.
45
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
43
46
  */
44
47
  orHavingExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
45
48
  /**
46
- * Just like {@link WhereInterface.orWhereNotExists | orWhereNotExists} but adds a `having` statement
47
- * instead of a `where` statement.
49
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
48
50
  */
49
51
  orHavingNotExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
50
52
  }
53
+ export declare type HavingExpressionFactory<DB, TB extends keyof DB> = (eb: HavingExpressionBuilder<DB, TB>) => Expression<SqlBool> | HavingExpressionBuilder<DB, TB>;
@@ -1,10 +1,11 @@
1
1
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
2
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
- import { SelectExpression } from '../parser/select-parser.js';
4
- import { InsertObject } from '../parser/insert-values-parser.js';
3
+ import { SelectExpression, SelectArg } from '../parser/select-parser.js';
4
+ import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js';
5
5
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
6
- import { MergePartial, SingleResultType } from '../util/type-utils.js';
7
- import { UpdateObject } from '../parser/update-set-parser.js';
6
+ import { QueryNode } from '../operation-node/query-node.js';
7
+ import { MergePartial, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js';
8
+ import { UpdateExpression } from '../parser/update-set-parser.js';
8
9
  import { Compilable } from '../util/compilable.js';
9
10
  import { QueryExecutor } from '../query-executor/query-executor.js';
10
11
  import { QueryId } from '../util/query-id.js';
@@ -19,7 +20,8 @@ import { Selectable } from '../util/column-type.js';
19
20
  import { Explainable, ExplainFormat } from '../util/explainable.js';
20
21
  import { Expression } from '../expression/expression.js';
21
22
  import { KyselyTypeError } from '../util/type-error.js';
22
- export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable {
23
+ import { Streamable } from '../util/streamable.js';
24
+ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
23
25
  #private;
24
26
  constructor(props: InsertQueryBuilderProps);
25
27
  /**
@@ -116,11 +118,12 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
116
118
  *
117
119
  * const result = await db
118
120
  * .insertInto('person')
119
- * .values({
121
+ * .values((eb) => ({
120
122
  * first_name: 'Jennifer',
121
123
  * last_name: sql`${'Ani'} || ${'ston'}`,
122
- * age: db.selectFrom('person').select(sql`avg(age)`),
123
- * })
124
+ * middle_name: eb.ref('first_name'),
125
+ * age: eb.selectFrom('person').select(sql`avg(age)`),
126
+ * }))
124
127
  * .executeTakeFirst()
125
128
  *
126
129
  * console.log(result.insertId)
@@ -141,15 +144,15 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
141
144
  * .where('first_name', '=', 'Jennifer')
142
145
  * .select(['id', 'first_name', 'gender'])
143
146
  * .limit(1)
144
- * ).insertInto('pet').values({
145
- * owner_id: (eb) => eb.selectFrom('jennifer').select('id'),
146
- * name: (eb) => eb.selectFrom('jennifer').select('first_name'),
147
+ * ).insertInto('pet').values((eb) => ({
148
+ * owner_id: eb.selectFrom('jennifer').select('id'),
149
+ * name: eb.selectFrom('jennifer').select('first_name'),
147
150
  * species: 'cat',
148
- * })
151
+ * }))
149
152
  * ```
150
153
  */
151
- values(row: InsertObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
152
- values(row: ReadonlyArray<InsertObject<DB, TB>>): InsertQueryBuilder<DB, TB, O>;
154
+ values(insert: InsertObjectOrList<DB, TB>): InsertQueryBuilder<DB, TB, O>;
155
+ values(insert: InsertObjectOrListFactory<DB, TB>): InsertQueryBuilder<DB, TB, O>;
153
156
  /**
154
157
  * Sets the columns to insert.
155
158
  *
@@ -259,7 +262,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
259
262
  * .doUpdateSet({ species: 'hamster' })
260
263
  * )
261
264
  * .execute()
262
- * .execute()
263
265
  * ```
264
266
  *
265
267
  * The generated SQL (PostgreSQL):
@@ -385,7 +387,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
385
387
  * .onDuplicateKeyUpdate({ species: 'hamster' })
386
388
  * ```
387
389
  */
388
- onDuplicateKeyUpdate(updates: UpdateObject<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
390
+ onDuplicateKeyUpdate(update: UpdateExpression<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
389
391
  /**
390
392
  * Allows you to return data from modified rows.
391
393
  *
@@ -437,23 +439,23 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
437
439
  * first_name: 'Jennifer',
438
440
  * last_name: 'Aniston'
439
441
  * })
440
- * .returning([
442
+ * .returning(eb => [
441
443
  * 'id as id',
442
444
  * sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
443
- * (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
445
+ * eb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
444
446
  * ])
445
447
  * .executeTakeFirst()
446
448
  * ```
447
449
  */
448
- returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
449
- returning<SE extends SelectExpression<DB, TB>>(selection: SE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
450
+ returning<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
450
451
  /**
451
452
  * Adds a `returning *` to an insert/update/delete query on databases
452
453
  * that support `returning` such as PostgreSQL.
453
454
  */
454
455
  returningAll(): InsertQueryBuilder<DB, TB, Selectable<DB[TB]>>;
455
456
  /**
456
- * Simply calls the given function passing `this` as the only argument.
457
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
458
+ * what the provided function returns.
457
459
  *
458
460
  * If you want to conditionally call a method on `this`, see
459
461
  * the {@link $if} method.
@@ -562,7 +564,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
562
564
  * )
563
565
  * .with('new_pet', (qb) => qb
564
566
  * .insertInto('pet')
565
- * .values({ owner_id: (eb) => eb.selectFrom('new_person').select('id'), ...pet })
567
+ * .values((eb) => ({ owner_id: eb.selectFrom('new_person').select('id'), ...pet }))
566
568
  * .returning(['name as pet_name', 'species'])
567
569
  * .$assertType<{ pet_name: string, species: Species }>()
568
570
  * )
@@ -587,35 +589,81 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
587
589
  *
588
590
  * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
589
591
  */
590
- execute(): Promise<O[]>;
592
+ execute(): Promise<SimplifyResult<O>[]>;
591
593
  /**
592
594
  * Executes the query and returns the first result or undefined if
593
595
  * the query returned no result.
594
596
  */
595
- executeTakeFirst(): Promise<SingleResultType<O>>;
597
+ executeTakeFirst(): Promise<SimplifySingleResult<O>>;
596
598
  /**
597
599
  * Executes the query and returns the first result or throws if
598
600
  * the query returned no result.
599
601
  *
600
602
  * By default an instance of {@link NoResultError} is thrown, but you can
601
- * provide a custom error class as the only argument to throw a different
603
+ * provide a custom error class, or callback as the only argument to throw a different
602
604
  * error.
603
605
  */
604
- executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O>;
606
+ executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor | ((node: QueryNode) => Error)): Promise<SimplifyResult<O>>;
607
+ /**
608
+ * Executes the query and streams the rows.
609
+ *
610
+ * The optional argument `chunkSize` defines how many rows to fetch from the database
611
+ * at a time. It only affects some dialects like PostgreSQL that support it.
612
+ *
613
+ * ### Examples
614
+ *
615
+ * ```ts
616
+ * const stream = db.
617
+ * .selectFrom('person')
618
+ * .select(['first_name', 'last_name'])
619
+ * .where('gender', '=', 'other')
620
+ * .stream()
621
+ *
622
+ * for await (const person of stream) {
623
+ * console.log(person.first_name)
624
+ *
625
+ * if (person.last_name === 'Something') {
626
+ * // Breaking or returning before the stream has ended will release
627
+ * // the database connection and invalidate the stream.
628
+ * break
629
+ * }
630
+ * }
631
+ * ```
632
+ */
633
+ stream(chunkSize?: number): AsyncIterableIterator<O>;
605
634
  /**
606
- * Executes query with `explain` statement before `insert` keyword.
635
+ * Executes query with `explain` statement before the main query.
607
636
  *
608
637
  * ```ts
609
638
  * const explained = await db
610
- * .insertInto('person')
611
- * .values(values)
639
+ * .selectFrom('person')
640
+ * .where('gender', '=', 'female')
641
+ * .selectAll()
612
642
  * .explain('json')
613
643
  * ```
614
644
  *
615
645
  * The generated SQL (MySQL):
616
646
  *
617
647
  * ```sql
618
- * explain format=json insert into `person` (`id`, `first_name`, `last_name`) values (?, ?, ?) (?, ?, ?)
648
+ * explain format=json select * from `person` where `gender` = ?
649
+ * ```
650
+ *
651
+ * You can also execute `explain analyze` statements.
652
+ *
653
+ * ```ts
654
+ * import { sql } from 'kysely'
655
+ *
656
+ * const explained = await db
657
+ * .selectFrom('person')
658
+ * .where('gender', '=', 'female')
659
+ * .selectAll()
660
+ * .explain('json', sql`analyze`)
661
+ * ```
662
+ *
663
+ * The generated SQL (PostgreSQL):
664
+ *
665
+ * ```sql
666
+ * explain (analyze, format json) select * from "person" where "gender" = $1
619
667
  * ```
620
668
  */
621
669
  explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;