kysely 0.24.2 → 0.26.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 (351) hide show
  1. package/README.md +31 -567
  2. package/dist/cjs/dialect/database-introspector.d.ts +1 -1
  3. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +2 -1
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +5 -1
  5. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  6. package/dist/cjs/dialect/postgres/postgres-introspector.js +1 -1
  7. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -1
  8. package/dist/cjs/driver/database-connection.d.ts +6 -0
  9. package/dist/cjs/driver/driver.d.ts +1 -1
  10. package/dist/cjs/driver/runtime-driver.js +6 -6
  11. package/dist/cjs/dynamic/dynamic.d.ts +1 -1
  12. package/dist/cjs/dynamic/dynamic.js +1 -1
  13. package/dist/cjs/expression/expression-builder.d.ts +263 -109
  14. package/dist/cjs/expression/expression-builder.js +38 -7
  15. package/dist/cjs/expression/expression-wrapper.d.ts +296 -5
  16. package/dist/cjs/expression/expression-wrapper.js +70 -2
  17. package/dist/cjs/helpers/mysql.d.ts +3 -3
  18. package/dist/cjs/helpers/mysql.js +2 -2
  19. package/dist/cjs/helpers/postgres.d.ts +31 -19
  20. package/dist/cjs/helpers/postgres.js +30 -18
  21. package/dist/cjs/index.d.ts +10 -0
  22. package/dist/cjs/index.js +10 -0
  23. package/dist/cjs/kysely.d.ts +42 -15
  24. package/dist/cjs/kysely.js +41 -10
  25. package/dist/cjs/migration/file-migration-provider.js +2 -2
  26. package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -7
  27. package/dist/cjs/operation-node/aggregate-function-node.js +1 -1
  28. package/dist/cjs/operation-node/alter-column-node.d.ts +3 -5
  29. package/dist/cjs/operation-node/alter-column-node.js +2 -7
  30. package/dist/cjs/operation-node/alter-table-node.d.ts +3 -3
  31. package/dist/cjs/operation-node/alter-table-node.js +1 -2
  32. package/dist/cjs/operation-node/case-node.d.ts +19 -0
  33. package/dist/cjs/operation-node/case-node.js +42 -0
  34. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -1
  35. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  36. package/dist/cjs/operation-node/create-index-node.d.ts +4 -3
  37. package/dist/cjs/operation-node/create-index-node.js +6 -0
  38. package/dist/cjs/operation-node/create-schema-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/create-table-node.d.ts +2 -2
  40. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  41. package/dist/cjs/operation-node/create-view-node.d.ts +1 -1
  42. package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
  43. package/dist/cjs/operation-node/drop-constraint-node.d.ts +1 -1
  44. package/dist/cjs/operation-node/drop-index-node.d.ts +1 -1
  45. package/dist/cjs/operation-node/drop-schema-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/drop-table-node.d.ts +1 -1
  47. package/dist/cjs/operation-node/drop-type-node.d.ts +1 -1
  48. package/dist/cjs/operation-node/drop-view-node.d.ts +1 -1
  49. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +1 -1
  50. package/dist/cjs/operation-node/generated-node.d.ts +1 -1
  51. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/join-node.d.ts +1 -2
  53. package/dist/cjs/operation-node/join-node.js +0 -8
  54. package/dist/cjs/operation-node/json-operator-chain-node.d.ts +16 -0
  55. package/dist/cjs/operation-node/json-operator-chain-node.js +25 -0
  56. package/dist/cjs/operation-node/json-path-leg-node.d.ts +14 -0
  57. package/dist/cjs/operation-node/json-path-leg-node.js +19 -0
  58. package/dist/cjs/operation-node/json-path-node.d.ts +16 -0
  59. package/dist/cjs/operation-node/json-path-node.js +25 -0
  60. package/dist/cjs/operation-node/json-reference-node.d.ts +17 -0
  61. package/dist/cjs/operation-node/json-reference-node.js +25 -0
  62. package/dist/cjs/operation-node/on-conflict-node.d.ts +1 -1
  63. package/dist/cjs/operation-node/on-duplicate-key-node.d.ts +1 -1
  64. package/dist/cjs/operation-node/operation-node-transformer.d.ts +12 -0
  65. package/dist/cjs/operation-node/operation-node-transformer.js +53 -3
  66. package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -0
  67. package/dist/cjs/operation-node/operation-node-visitor.js +6 -0
  68. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  69. package/dist/cjs/operation-node/operator-node.d.ts +13 -9
  70. package/dist/cjs/operation-node/operator-node.js +12 -2
  71. package/dist/cjs/operation-node/query-node.d.ts +9 -10
  72. package/dist/cjs/operation-node/query-node.js +0 -8
  73. package/dist/cjs/operation-node/reference-node.d.ts +2 -2
  74. package/dist/cjs/operation-node/reference-node.js +1 -1
  75. package/dist/cjs/operation-node/references-node.d.ts +1 -1
  76. package/dist/cjs/operation-node/select-modifier-node.d.ts +1 -1
  77. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  78. package/dist/cjs/operation-node/select-query-node.js +0 -8
  79. package/dist/cjs/operation-node/selection-node.d.ts +1 -1
  80. package/dist/cjs/operation-node/set-operation-node.d.ts +1 -1
  81. package/dist/cjs/operation-node/simple-reference-expression-node.d.ts +1 -1
  82. package/dist/cjs/operation-node/update-query-node.d.ts +1 -1
  83. package/dist/cjs/operation-node/values-node.d.ts +1 -1
  84. package/dist/cjs/operation-node/when-node.d.ts +14 -0
  85. package/dist/cjs/operation-node/when-node.js +24 -0
  86. package/dist/cjs/operation-node/with-node.d.ts +1 -1
  87. package/dist/cjs/parser/binary-operation-parser.d.ts +9 -11
  88. package/dist/cjs/parser/binary-operation-parser.js +40 -103
  89. package/dist/cjs/parser/coalesce-parser.d.ts +1 -1
  90. package/dist/cjs/parser/data-type-parser.d.ts +1 -1
  91. package/dist/cjs/parser/default-value-parser.d.ts +1 -1
  92. package/dist/cjs/parser/expression-parser.d.ts +6 -5
  93. package/dist/cjs/parser/group-by-parser.d.ts +2 -2
  94. package/dist/cjs/parser/insert-values-parser.d.ts +4 -4
  95. package/dist/cjs/parser/join-parser.d.ts +4 -4
  96. package/dist/cjs/parser/order-by-parser.d.ts +4 -3
  97. package/dist/cjs/parser/order-by-parser.js +5 -1
  98. package/dist/cjs/parser/partition-by-parser.d.ts +2 -2
  99. package/dist/cjs/parser/reference-parser.d.ts +16 -8
  100. package/dist/cjs/parser/reference-parser.js +43 -16
  101. package/dist/cjs/parser/returning-parser.d.ts +2 -2
  102. package/dist/cjs/parser/select-parser.d.ts +9 -9
  103. package/dist/cjs/parser/table-parser.d.ts +14 -13
  104. package/dist/cjs/parser/unary-operation-parser.d.ts +1 -1
  105. package/dist/cjs/parser/update-set-parser.d.ts +3 -3
  106. package/dist/cjs/parser/update-set-parser.js +1 -3
  107. package/dist/cjs/parser/value-parser.d.ts +4 -4
  108. package/dist/cjs/parser/with-parser.d.ts +14 -9
  109. package/dist/cjs/plugin/camel-case/camel-case.d.ts +1 -1
  110. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +42 -0
  111. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +32 -0
  112. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +22 -6
  113. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -38
  114. package/dist/cjs/query-builder/aggregate-function-builder.js +4 -59
  115. package/dist/cjs/query-builder/case-builder.d.ts +111 -0
  116. package/dist/cjs/query-builder/case-builder.js +75 -0
  117. package/dist/cjs/query-builder/delete-query-builder.d.ts +130 -63
  118. package/dist/cjs/query-builder/delete-query-builder.js +42 -59
  119. package/dist/cjs/query-builder/delete-result.d.ts +1 -2
  120. package/dist/cjs/query-builder/delete-result.js +2 -8
  121. package/dist/cjs/query-builder/function-module.d.ts +78 -69
  122. package/dist/cjs/query-builder/function-module.js +12 -16
  123. package/dist/cjs/query-builder/having-interface.d.ts +2 -35
  124. package/dist/cjs/query-builder/insert-query-builder.d.ts +99 -47
  125. package/dist/cjs/query-builder/insert-query-builder.js +57 -26
  126. package/dist/cjs/query-builder/insert-result.d.ts +3 -4
  127. package/dist/cjs/query-builder/insert-result.js +5 -14
  128. package/dist/cjs/query-builder/join-builder.d.ts +2 -35
  129. package/dist/cjs/query-builder/join-builder.js +1 -56
  130. package/dist/cjs/query-builder/json-path-builder.d.ts +212 -0
  131. package/dist/cjs/query-builder/json-path-builder.js +191 -0
  132. package/dist/cjs/query-builder/no-result-error.d.ts +1 -1
  133. package/dist/cjs/query-builder/on-conflict-builder.d.ts +144 -73
  134. package/dist/cjs/query-builder/on-conflict-builder.js +2 -111
  135. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  136. package/dist/cjs/query-builder/over-builder.js +1 -1
  137. package/dist/cjs/query-builder/returning-interface.d.ts +1 -1
  138. package/dist/cjs/query-builder/select-query-builder.d.ts +184 -138
  139. package/dist/cjs/query-builder/select-query-builder.js +64 -130
  140. package/dist/cjs/query-builder/update-query-builder.d.ts +143 -71
  141. package/dist/cjs/query-builder/update-query-builder.js +47 -60
  142. package/dist/cjs/query-builder/update-result.d.ts +3 -3
  143. package/dist/cjs/query-builder/update-result.js +5 -9
  144. package/dist/cjs/query-builder/where-interface.d.ts +73 -38
  145. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  146. package/dist/cjs/query-compiler/compiled-query.js +2 -2
  147. package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -0
  148. package/dist/cjs/query-compiler/default-query-compiler.js +67 -5
  149. package/dist/cjs/query-compiler/query-compiler.d.ts +1 -1
  150. package/dist/cjs/query-creator.d.ts +4 -2
  151. package/dist/cjs/schema/alter-column-builder.d.ts +13 -7
  152. package/dist/cjs/schema/alter-column-builder.js +20 -22
  153. package/dist/cjs/schema/alter-table-builder.d.ts +0 -4
  154. package/dist/cjs/schema/alter-table-builder.js +2 -9
  155. package/dist/cjs/schema/column-definition-builder.d.ts +1 -1
  156. package/dist/cjs/schema/column-definition-builder.js +1 -2
  157. package/dist/cjs/schema/create-index-builder.d.ts +49 -7
  158. package/dist/cjs/schema/create-index-builder.js +52 -14
  159. package/dist/cjs/schema/create-table-builder.d.ts +2 -6
  160. package/dist/cjs/schema/create-table-builder.js +0 -6
  161. package/dist/cjs/schema/schema.d.ts +1 -2
  162. package/dist/cjs/schema/schema.js +2 -3
  163. package/dist/cjs/util/column-type.d.ts +21 -16
  164. package/dist/cjs/util/explainable.d.ts +1 -1
  165. package/dist/cjs/util/infer-result.d.ts +2 -2
  166. package/dist/cjs/util/log.d.ts +6 -6
  167. package/dist/cjs/util/log.js +4 -4
  168. package/dist/cjs/util/object-utils.d.ts +2 -1
  169. package/dist/cjs/util/require-all-props.d.ts +1 -1
  170. package/dist/cjs/util/type-utils.d.ts +54 -40
  171. package/dist/esm/dialect/database-introspector.d.ts +1 -1
  172. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +2 -1
  173. package/dist/esm/dialect/mysql/mysql-driver.js +5 -1
  174. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  175. package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
  176. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
  177. package/dist/esm/driver/database-connection.d.ts +6 -0
  178. package/dist/esm/driver/driver.d.ts +1 -1
  179. package/dist/esm/driver/runtime-driver.js +6 -6
  180. package/dist/esm/dynamic/dynamic.d.ts +1 -1
  181. package/dist/esm/dynamic/dynamic.js +1 -1
  182. package/dist/esm/expression/expression-builder.d.ts +263 -109
  183. package/dist/esm/expression/expression-builder.js +40 -9
  184. package/dist/esm/expression/expression-wrapper.d.ts +296 -5
  185. package/dist/esm/expression/expression-wrapper.js +67 -1
  186. package/dist/esm/helpers/mysql.d.ts +3 -3
  187. package/dist/esm/helpers/mysql.js +2 -2
  188. package/dist/esm/helpers/postgres.d.ts +31 -19
  189. package/dist/esm/helpers/postgres.js +30 -18
  190. package/dist/esm/index.d.ts +10 -0
  191. package/dist/esm/index.js +10 -0
  192. package/dist/esm/kysely.d.ts +42 -15
  193. package/dist/esm/kysely.js +42 -11
  194. package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -7
  195. package/dist/esm/operation-node/aggregate-function-node.js +1 -1
  196. package/dist/esm/operation-node/alter-column-node.d.ts +3 -5
  197. package/dist/esm/operation-node/alter-column-node.js +2 -7
  198. package/dist/esm/operation-node/alter-table-node.d.ts +3 -3
  199. package/dist/esm/operation-node/alter-table-node.js +1 -2
  200. package/dist/esm/operation-node/case-node.d.ts +19 -0
  201. package/dist/esm/operation-node/case-node.js +40 -0
  202. package/dist/esm/operation-node/column-definition-node.d.ts +1 -1
  203. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  204. package/dist/esm/operation-node/create-index-node.d.ts +4 -3
  205. package/dist/esm/operation-node/create-index-node.js +6 -0
  206. package/dist/esm/operation-node/create-schema-node.d.ts +1 -1
  207. package/dist/esm/operation-node/create-table-node.d.ts +2 -2
  208. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  209. package/dist/esm/operation-node/create-view-node.d.ts +1 -1
  210. package/dist/esm/operation-node/data-type-node.d.ts +2 -2
  211. package/dist/esm/operation-node/drop-constraint-node.d.ts +1 -1
  212. package/dist/esm/operation-node/drop-index-node.d.ts +1 -1
  213. package/dist/esm/operation-node/drop-schema-node.d.ts +1 -1
  214. package/dist/esm/operation-node/drop-table-node.d.ts +1 -1
  215. package/dist/esm/operation-node/drop-type-node.d.ts +1 -1
  216. package/dist/esm/operation-node/drop-view-node.d.ts +1 -1
  217. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +1 -1
  218. package/dist/esm/operation-node/generated-node.d.ts +1 -1
  219. package/dist/esm/operation-node/insert-query-node.d.ts +1 -1
  220. package/dist/esm/operation-node/join-node.d.ts +1 -2
  221. package/dist/esm/operation-node/join-node.js +0 -8
  222. package/dist/esm/operation-node/json-operator-chain-node.d.ts +16 -0
  223. package/dist/esm/operation-node/json-operator-chain-node.js +23 -0
  224. package/dist/esm/operation-node/json-path-leg-node.d.ts +14 -0
  225. package/dist/esm/operation-node/json-path-leg-node.js +17 -0
  226. package/dist/esm/operation-node/json-path-node.d.ts +16 -0
  227. package/dist/esm/operation-node/json-path-node.js +23 -0
  228. package/dist/esm/operation-node/json-reference-node.d.ts +17 -0
  229. package/dist/esm/operation-node/json-reference-node.js +23 -0
  230. package/dist/esm/operation-node/on-conflict-node.d.ts +1 -1
  231. package/dist/esm/operation-node/on-duplicate-key-node.d.ts +1 -1
  232. package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -0
  233. package/dist/esm/operation-node/operation-node-transformer.js +53 -3
  234. package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -0
  235. package/dist/esm/operation-node/operation-node-visitor.js +6 -0
  236. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  237. package/dist/esm/operation-node/operator-node.d.ts +13 -9
  238. package/dist/esm/operation-node/operator-node.js +10 -1
  239. package/dist/esm/operation-node/query-node.d.ts +9 -10
  240. package/dist/esm/operation-node/query-node.js +0 -8
  241. package/dist/esm/operation-node/reference-node.d.ts +2 -2
  242. package/dist/esm/operation-node/reference-node.js +1 -1
  243. package/dist/esm/operation-node/references-node.d.ts +1 -1
  244. package/dist/esm/operation-node/select-modifier-node.d.ts +1 -1
  245. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  246. package/dist/esm/operation-node/select-query-node.js +0 -8
  247. package/dist/esm/operation-node/selection-node.d.ts +1 -1
  248. package/dist/esm/operation-node/set-operation-node.d.ts +1 -1
  249. package/dist/esm/operation-node/simple-reference-expression-node.d.ts +1 -1
  250. package/dist/esm/operation-node/update-query-node.d.ts +1 -1
  251. package/dist/esm/operation-node/values-node.d.ts +1 -1
  252. package/dist/esm/operation-node/when-node.d.ts +14 -0
  253. package/dist/esm/operation-node/when-node.js +22 -0
  254. package/dist/esm/operation-node/with-node.d.ts +1 -1
  255. package/dist/esm/parser/binary-operation-parser.d.ts +9 -11
  256. package/dist/esm/parser/binary-operation-parser.js +38 -99
  257. package/dist/esm/parser/coalesce-parser.d.ts +1 -1
  258. package/dist/esm/parser/data-type-parser.d.ts +1 -1
  259. package/dist/esm/parser/default-value-parser.d.ts +1 -1
  260. package/dist/esm/parser/expression-parser.d.ts +6 -5
  261. package/dist/esm/parser/group-by-parser.d.ts +2 -2
  262. package/dist/esm/parser/insert-values-parser.d.ts +4 -4
  263. package/dist/esm/parser/join-parser.d.ts +4 -4
  264. package/dist/esm/parser/order-by-parser.d.ts +4 -3
  265. package/dist/esm/parser/order-by-parser.js +3 -0
  266. package/dist/esm/parser/partition-by-parser.d.ts +2 -2
  267. package/dist/esm/parser/reference-parser.d.ts +16 -8
  268. package/dist/esm/parser/reference-parser.js +40 -15
  269. package/dist/esm/parser/returning-parser.d.ts +2 -2
  270. package/dist/esm/parser/select-parser.d.ts +9 -9
  271. package/dist/esm/parser/table-parser.d.ts +14 -13
  272. package/dist/esm/parser/unary-operation-parser.d.ts +1 -1
  273. package/dist/esm/parser/update-set-parser.d.ts +3 -3
  274. package/dist/esm/parser/update-set-parser.js +2 -4
  275. package/dist/esm/parser/value-parser.d.ts +4 -4
  276. package/dist/esm/parser/with-parser.d.ts +14 -9
  277. package/dist/esm/plugin/camel-case/camel-case.d.ts +1 -1
  278. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +42 -0
  279. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +29 -0
  280. package/dist/esm/plugin/with-schema/with-schema-transformer.js +22 -6
  281. package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -38
  282. package/dist/esm/query-builder/aggregate-function-builder.js +5 -60
  283. package/dist/esm/query-builder/case-builder.d.ts +111 -0
  284. package/dist/esm/query-builder/case-builder.js +69 -0
  285. package/dist/esm/query-builder/delete-query-builder.d.ts +130 -63
  286. package/dist/esm/query-builder/delete-query-builder.js +43 -60
  287. package/dist/esm/query-builder/delete-result.d.ts +1 -2
  288. package/dist/esm/query-builder/delete-result.js +2 -8
  289. package/dist/esm/query-builder/function-module.d.ts +78 -69
  290. package/dist/esm/query-builder/function-module.js +13 -17
  291. package/dist/esm/query-builder/having-interface.d.ts +2 -35
  292. package/dist/esm/query-builder/insert-query-builder.d.ts +99 -47
  293. package/dist/esm/query-builder/insert-query-builder.js +57 -26
  294. package/dist/esm/query-builder/insert-result.d.ts +3 -4
  295. package/dist/esm/query-builder/insert-result.js +5 -14
  296. package/dist/esm/query-builder/join-builder.d.ts +2 -35
  297. package/dist/esm/query-builder/join-builder.js +2 -57
  298. package/dist/esm/query-builder/json-path-builder.d.ts +212 -0
  299. package/dist/esm/query-builder/json-path-builder.js +186 -0
  300. package/dist/esm/query-builder/no-result-error.d.ts +1 -1
  301. package/dist/esm/query-builder/on-conflict-builder.d.ts +144 -73
  302. package/dist/esm/query-builder/on-conflict-builder.js +3 -112
  303. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  304. package/dist/esm/query-builder/over-builder.js +1 -1
  305. package/dist/esm/query-builder/returning-interface.d.ts +1 -1
  306. package/dist/esm/query-builder/select-query-builder.d.ts +184 -138
  307. package/dist/esm/query-builder/select-query-builder.js +65 -131
  308. package/dist/esm/query-builder/update-query-builder.d.ts +143 -71
  309. package/dist/esm/query-builder/update-query-builder.js +48 -61
  310. package/dist/esm/query-builder/update-result.d.ts +3 -3
  311. package/dist/esm/query-builder/update-result.js +5 -9
  312. package/dist/esm/query-builder/where-interface.d.ts +73 -38
  313. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  314. package/dist/esm/query-compiler/compiled-query.js +2 -2
  315. package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -0
  316. package/dist/esm/query-compiler/default-query-compiler.js +67 -5
  317. package/dist/esm/query-compiler/query-compiler.d.ts +1 -1
  318. package/dist/esm/query-creator.d.ts +4 -2
  319. package/dist/esm/schema/alter-column-builder.d.ts +13 -7
  320. package/dist/esm/schema/alter-column-builder.js +20 -22
  321. package/dist/esm/schema/alter-table-builder.d.ts +0 -4
  322. package/dist/esm/schema/alter-table-builder.js +2 -9
  323. package/dist/esm/schema/column-definition-builder.d.ts +1 -1
  324. package/dist/esm/schema/column-definition-builder.js +1 -2
  325. package/dist/esm/schema/create-index-builder.d.ts +49 -7
  326. package/dist/esm/schema/create-index-builder.js +54 -16
  327. package/dist/esm/schema/create-table-builder.d.ts +2 -6
  328. package/dist/esm/schema/create-table-builder.js +0 -6
  329. package/dist/esm/schema/schema.d.ts +1 -2
  330. package/dist/esm/schema/schema.js +2 -3
  331. package/dist/esm/util/column-type.d.ts +21 -16
  332. package/dist/esm/util/explainable.d.ts +1 -1
  333. package/dist/esm/util/infer-result.d.ts +2 -2
  334. package/dist/esm/util/log.d.ts +6 -6
  335. package/dist/esm/util/log.js +4 -4
  336. package/dist/esm/util/object-utils.d.ts +2 -1
  337. package/dist/esm/util/require-all-props.d.ts +1 -1
  338. package/dist/esm/util/type-utils.d.ts +54 -40
  339. package/package.json +25 -23
  340. package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +0 -62
  341. package/dist/cjs/query-builder/deprecated-having-expression-builder.js +0 -2
  342. package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +0 -62
  343. package/dist/cjs/query-builder/deprecated-on-expression-builder.js +0 -2
  344. package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +0 -62
  345. package/dist/cjs/query-builder/deprecated-where-expression-builder.js +0 -2
  346. package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +0 -62
  347. package/dist/esm/query-builder/deprecated-having-expression-builder.js +0 -2
  348. package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +0 -62
  349. package/dist/esm/query-builder/deprecated-on-expression-builder.js +0 -2
  350. package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +0 -62
  351. package/dist/esm/query-builder/deprecated-where-expression-builder.js +0 -2
@@ -17,14 +17,20 @@ const unary_operation_parser_js_1 = require("../parser/unary-operation-parser.js
17
17
  const value_parser_js_1 = require("../parser/value-parser.js");
18
18
  const noop_query_executor_js_1 = require("../query-executor/noop-query-executor.js");
19
19
  const value_node_js_1 = require("../operation-node/value-node.js");
20
+ const case_builder_js_1 = require("../query-builder/case-builder.js");
21
+ const case_node_js_1 = require("../operation-node/case-node.js");
22
+ const object_utils_js_1 = require("../util/object-utils.js");
23
+ const json_path_builder_js_1 = require("../query-builder/json-path-builder.js");
20
24
  function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_EXECUTOR) {
25
+ function binary(lhs, op, rhs) {
26
+ return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
27
+ }
21
28
  function unary(op, expr) {
22
29
  return new expression_wrapper_js_1.ExpressionWrapper((0, unary_operation_parser_js_1.parseUnaryOperation)(op, expr));
23
30
  }
24
- return {
25
- get fn() {
26
- return (0, function_module_js_1.createFunctionModule)();
27
- },
31
+ const eb = Object.assign(binary, {
32
+ fn: undefined,
33
+ eb: undefined,
28
34
  selectFrom(table) {
29
35
  return new select_query_builder_js_1.SelectQueryBuilder({
30
36
  queryId: (0, query_id_js_1.createQueryId)(),
@@ -32,15 +38,27 @@ function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_
32
38
  queryNode: select_query_node_js_1.SelectQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(table)),
33
39
  });
34
40
  },
35
- ref(reference) {
36
- return new expression_wrapper_js_1.ExpressionWrapper((0, reference_parser_js_1.parseStringReference)(reference));
41
+ case(reference) {
42
+ return new case_builder_js_1.CaseBuilder({
43
+ node: case_node_js_1.CaseNode.create((0, object_utils_js_1.isUndefined)(reference)
44
+ ? undefined
45
+ : (0, reference_parser_js_1.parseReferenceExpression)(reference)),
46
+ });
47
+ },
48
+ ref(reference, op) {
49
+ if ((0, object_utils_js_1.isUndefined)(op)) {
50
+ return new expression_wrapper_js_1.ExpressionWrapper((0, reference_parser_js_1.parseStringReference)(reference));
51
+ }
52
+ return new json_path_builder_js_1.JSONPathBuilder((0, reference_parser_js_1.parseJSONReference)(reference, op));
37
53
  },
38
54
  val(value) {
39
55
  return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseValueExpressionOrList)(value));
40
56
  },
57
+ // @deprecated
41
58
  cmpr(lhs, op, rhs) {
42
59
  return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
43
60
  },
61
+ // @deprecated
44
62
  bxp(lhs, op, rhs) {
45
63
  return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
46
64
  },
@@ -80,10 +98,23 @@ function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_
80
98
  }
81
99
  return new expression_wrapper_js_1.ExpressionWrapper(parens_node_js_1.ParensNode.create(node));
82
100
  },
101
+ parens(...args) {
102
+ const node = (0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args);
103
+ if (parens_node_js_1.ParensNode.is(node)) {
104
+ // No double wrapping.
105
+ return new expression_wrapper_js_1.ExpressionWrapper(node);
106
+ }
107
+ else {
108
+ return new expression_wrapper_js_1.ExpressionWrapper(parens_node_js_1.ParensNode.create(node));
109
+ }
110
+ },
83
111
  withSchema(schema) {
84
112
  return createExpressionBuilder(executor.withPluginAtFront(new with_schema_plugin_js_1.WithSchemaPlugin(schema)));
85
113
  },
86
- };
114
+ });
115
+ eb.fn = (0, function_module_js_1.createFunctionModule)();
116
+ eb.eb = eb;
117
+ return eb;
87
118
  }
88
119
  exports.createExpressionBuilder = createExpressionBuilder;
89
120
  function expressionBuilder(_) {
@@ -1,7 +1,14 @@
1
1
  import { AliasNode } from '../operation-node/alias-node.js';
2
+ import { AndNode } from '../operation-node/and-node.js';
2
3
  import { OperationNode } from '../operation-node/operation-node.js';
4
+ import { OrNode } from '../operation-node/or-node.js';
5
+ import { ParensNode } from '../operation-node/parens-node.js';
6
+ import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
7
+ import { ReferenceExpression } from '../parser/reference-parser.js';
8
+ import { KyselyTypeError } from '../util/type-error.js';
9
+ import { SqlBool } from '../util/type-utils.js';
3
10
  import { AliasedExpression, Expression } from './expression.js';
4
- export declare class ExpressionWrapper<T> implements Expression<T> {
11
+ export declare class ExpressionWrapper<DB, TB extends keyof DB, T> implements Expression<T> {
5
12
  #private;
6
13
  constructor(node: OperationNode);
7
14
  /** @private */
@@ -31,8 +38,8 @@ export declare class ExpressionWrapper<T> implements Expression<T> {
31
38
  * ```ts
32
39
  * const result = await db
33
40
  * .selectFrom('person')
34
- * .select(eb =>
35
- * eb.cmpr('first_name', '=', 'Jennifer').as('is_jennifer')
41
+ * .select((eb) =>
42
+ * eb('first_name', '=', 'Jennifer').as('is_jennifer')
36
43
  * )
37
44
  * .executeTakeFirstOrThrow()
38
45
  *
@@ -50,12 +57,136 @@ export declare class ExpressionWrapper<T> implements Expression<T> {
50
57
  as<A extends string>(alias: A): AliasedExpression<T, A>;
51
58
  as<A extends string>(alias: Expression<unknown>): AliasedExpression<T, A>;
52
59
  /**
53
- * Change the output type of the raw expression.
60
+ * Combines `this` and another expression using `OR`.
61
+ *
62
+ * Also see {@link ExpressionBuilder.or}
63
+ *
64
+ * ### Examples
65
+ *
66
+ * ```ts
67
+ * db.selectFrom('person')
68
+ * .selectAll()
69
+ * .where(eb => eb('first_name', '=', 'Jennifer')
70
+ * .or('first_name', '=', 'Arnold')
71
+ * .or('first_name', '=', 'Sylvester')
72
+ * )
73
+ * ```
74
+ *
75
+ * The generated SQL (PostgreSQL):
76
+ *
77
+ * ```ts
78
+ * select *
79
+ * from "person"
80
+ * where (
81
+ * "first_name" = $1
82
+ * or "first_name" = $2
83
+ * or "first_name" = $3
84
+ * )
85
+ * ```
86
+ *
87
+ * You can also pass any expression as the only argument to
88
+ * this method:
89
+ *
90
+ * ```ts
91
+ * db.selectFrom('person')
92
+ * .selectAll()
93
+ * .where(eb => eb('first_name', '=', 'Jennifer')
94
+ * .or(eb('first_name', '=', 'Sylvester').and('last_name', '=', 'Stallone'))
95
+ * .or(eb.exists(
96
+ * eb.selectFrom('pet')
97
+ * .select('id')
98
+ * .whereRef('pet.owner_id', '=', 'person.id')
99
+ * )
100
+ * )
101
+ * ```
102
+ *
103
+ * The generated SQL (PostgreSQL):
104
+ *
105
+ * ```ts
106
+ * select *
107
+ * from "person"
108
+ * where (
109
+ * "first_name" = $1
110
+ * or ("first_name" = $2 and "last_name" = $3)
111
+ * or exists (
112
+ * select "id"
113
+ * from "pet"
114
+ * where "pet"."owner_id" = "person"."id"
115
+ * )
116
+ * )
117
+ * ```
118
+ */
119
+ or<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): T extends SqlBool ? OrWrapper<DB, TB, SqlBool> : KyselyTypeError<'or() method can only be called on boolean expressions'>;
120
+ or(expression: Expression<SqlBool>): T extends SqlBool ? OrWrapper<DB, TB, SqlBool> : KyselyTypeError<'or() method can only be called on boolean expressions'>;
121
+ /**
122
+ * Combines `this` and another expression using `AND`.
123
+ *
124
+ * Also see {@link ExpressionBuilder.and}
125
+ *
126
+ * ### Examples
127
+ *
128
+ * ```ts
129
+ * db.selectFrom('person')
130
+ * .selectAll()
131
+ * .where(eb => eb('first_name', '=', 'Jennifer')
132
+ * .and('last_name', '=', 'Aniston')
133
+ * .and('age', '>', 40)
134
+ * )
135
+ * ```
136
+ *
137
+ * The generated SQL (PostgreSQL):
138
+ *
139
+ * ```ts
140
+ * select *
141
+ * from "person"
142
+ * where (
143
+ * "first_name" = $1
144
+ * and "last_name" = $2
145
+ * and "age" > $3
146
+ * )
147
+ * ```
148
+ *
149
+ * You can also pass any expression as the only argument to
150
+ * this method:
151
+ *
152
+ * ```ts
153
+ * db.selectFrom('person')
154
+ * .selectAll()
155
+ * .where(eb => eb('first_name', '=', 'Jennifer')
156
+ * .and(eb('first_name', '=', 'Sylvester').or('last_name', '=', 'Stallone'))
157
+ * .and(eb.exists(
158
+ * eb.selectFrom('pet')
159
+ * .select('id')
160
+ * .whereRef('pet.owner_id', '=', 'person.id')
161
+ * )
162
+ * )
163
+ * ```
164
+ *
165
+ * The generated SQL (PostgreSQL):
166
+ *
167
+ * ```ts
168
+ * select *
169
+ * from "person"
170
+ * where (
171
+ * "first_name" = $1
172
+ * and ("first_name" = $2 or "last_name" = $3)
173
+ * and exists (
174
+ * select "id"
175
+ * from "pet"
176
+ * where "pet"."owner_id" = "person"."id"
177
+ * )
178
+ * )
179
+ * ```
180
+ */
181
+ and<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): T extends SqlBool ? AndWrapper<DB, TB, SqlBool> : KyselyTypeError<'and() method can only be called on boolean expressions'>;
182
+ and(expression: Expression<SqlBool>): T extends SqlBool ? AndWrapper<DB, TB, SqlBool> : KyselyTypeError<'and() method can only be called on boolean expressions'>;
183
+ /**
184
+ * Change the output type of the expression.
54
185
  *
55
186
  * This method call doesn't change the SQL in any way. This methods simply
56
187
  * returns a copy of this `ExpressionWrapper` with a new output type.
57
188
  */
58
- $castTo<T>(): ExpressionWrapper<T>;
189
+ $castTo<T>(): ExpressionWrapper<DB, TB, T>;
59
190
  /**
60
191
  * Creates the OperationNode that describes how to compile this expression into SQL.
61
192
  *
@@ -90,3 +221,163 @@ export declare class AliasedExpressionWrapper<T, A extends string> implements Al
90
221
  */
91
222
  toOperationNode(): AliasNode;
92
223
  }
224
+ export declare class OrWrapper<DB, TB extends keyof DB, T extends SqlBool> implements Expression<T> {
225
+ #private;
226
+ constructor(node: OrNode);
227
+ /** @private */
228
+ /**
229
+ * All expressions need to have this getter for complicated type-related reasons.
230
+ * Simply add this getter for your expression and always return `undefined` from it:
231
+ *
232
+ * ```ts
233
+ * class SomeExpression<T> implements Expression<T> {
234
+ * get expressionType(): T | undefined {
235
+ * return undefined
236
+ * }
237
+ * }
238
+ * ```
239
+ *
240
+ * The getter is needed to make the expression assignable to another expression only
241
+ * if the types `T` are assignable. Without this property (or some other property
242
+ * that references `T`), you could assing `Expression<string>` to `Expression<number>`.
243
+ */
244
+ get expressionType(): T | undefined;
245
+ /**
246
+ * Returns an aliased version of the expression.
247
+ *
248
+ * In addition to slapping `as "the_alias"` to the end of the SQL,
249
+ * this method also provides strict typing:
250
+ *
251
+ * ```ts
252
+ * const result = await db
253
+ * .selectFrom('person')
254
+ * .select(eb =>
255
+ * eb('first_name', '=', 'Jennifer')
256
+ * .or('first_name', '=', 'Sylvester')
257
+ * .as('is_jennifer_or_sylvester')
258
+ * )
259
+ * .executeTakeFirstOrThrow()
260
+ *
261
+ * // `is_jennifer_or_sylvester: SqlBool` field exists in the result type.
262
+ * console.log(result.is_jennifer_or_sylvester)
263
+ * ```
264
+ *
265
+ * The generated SQL (PostgreSQL):
266
+ *
267
+ * ```ts
268
+ * select "first_name" = $1 or "first_name" = $2 as "is_jennifer_or_sylvester"
269
+ * from "person"
270
+ * ```
271
+ */
272
+ as<A extends string>(alias: A): AliasedExpression<T, A>;
273
+ as<A extends string>(alias: Expression<unknown>): AliasedExpression<T, A>;
274
+ /**
275
+ * Combines `this` and another expression using `OR`.
276
+ *
277
+ * See {@link ExpressionWrapper.or} for examples.
278
+ */
279
+ or<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): OrWrapper<DB, TB, T>;
280
+ or(expression: Expression<SqlBool>): OrWrapper<DB, TB, T>;
281
+ /**
282
+ * Change the output type of the expression.
283
+ *
284
+ * This method call doesn't change the SQL in any way. This methods simply
285
+ * returns a copy of this `OrWrapper` with a new output type.
286
+ */
287
+ $castTo<T extends SqlBool>(): OrWrapper<DB, TB, T>;
288
+ /**
289
+ * Creates the OperationNode that describes how to compile this expression into SQL.
290
+ *
291
+ * If you are creating a custom expression, it's often easiest to use the {@link sql}
292
+ * template tag to build the node:
293
+ *
294
+ * ```ts
295
+ * class SomeExpression<T> implements Expression<T> {
296
+ * toOperationNode(): OperationNode {
297
+ * return sql`some sql here`.toOperationNode()
298
+ * }
299
+ * }
300
+ * ```
301
+ */
302
+ toOperationNode(): ParensNode;
303
+ }
304
+ export declare class AndWrapper<DB, TB extends keyof DB, T extends SqlBool> implements Expression<T> {
305
+ #private;
306
+ constructor(node: AndNode);
307
+ /** @private */
308
+ /**
309
+ * All expressions need to have this getter for complicated type-related reasons.
310
+ * Simply add this getter for your expression and always return `undefined` from it:
311
+ *
312
+ * ```ts
313
+ * class SomeExpression<T> implements Expression<T> {
314
+ * get expressionType(): T | undefined {
315
+ * return undefined
316
+ * }
317
+ * }
318
+ * ```
319
+ *
320
+ * The getter is needed to make the expression assignable to another expression only
321
+ * if the types `T` are assignable. Without this property (or some other property
322
+ * that references `T`), you could assing `Expression<string>` to `Expression<number>`.
323
+ */
324
+ get expressionType(): T | undefined;
325
+ /**
326
+ * Returns an aliased version of the expression.
327
+ *
328
+ * In addition to slapping `as "the_alias"` to the end of the SQL,
329
+ * this method also provides strict typing:
330
+ *
331
+ * ```ts
332
+ * const result = await db
333
+ * .selectFrom('person')
334
+ * .select(eb =>
335
+ * eb('first_name', '=', 'Jennifer')
336
+ * .and('last_name', '=', 'Aniston')
337
+ * .as('is_jennifer_aniston')
338
+ * )
339
+ * .executeTakeFirstOrThrow()
340
+ *
341
+ * // `is_jennifer_aniston: SqlBool` field exists in the result type.
342
+ * console.log(result.is_jennifer_or_sylvester)
343
+ * ```
344
+ *
345
+ * The generated SQL (PostgreSQL):
346
+ *
347
+ * ```ts
348
+ * select "first_name" = $1 and "first_name" = $2 as "is_jennifer_aniston"
349
+ * from "person"
350
+ * ```
351
+ */
352
+ as<A extends string>(alias: A): AliasedExpression<T, A>;
353
+ as<A extends string>(alias: Expression<unknown>): AliasedExpression<T, A>;
354
+ /**
355
+ * Combines `this` and another expression using `AND`.
356
+ *
357
+ * See {@link ExpressionWrapper.and} for examples.
358
+ */
359
+ and<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): AndWrapper<DB, TB, T>;
360
+ and(expression: Expression<SqlBool>): AndWrapper<DB, TB, T>;
361
+ /**
362
+ * Change the output type of the expression.
363
+ *
364
+ * This method call doesn't change the SQL in any way. This methods simply
365
+ * returns a copy of this `AndWrapper` with a new output type.
366
+ */
367
+ $castTo<T extends SqlBool>(): AndWrapper<DB, TB, T>;
368
+ /**
369
+ * Creates the OperationNode that describes how to compile this expression into SQL.
370
+ *
371
+ * If you are creating a custom expression, it's often easiest to use the {@link sql}
372
+ * template tag to build the node:
373
+ *
374
+ * ```ts
375
+ * class SomeExpression<T> implements Expression<T> {
376
+ * toOperationNode(): OperationNode {
377
+ * return sql`some sql here`.toOperationNode()
378
+ * }
379
+ * }
380
+ * ```
381
+ */
382
+ toOperationNode(): ParensNode;
383
+ }
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AliasedExpressionWrapper = exports.ExpressionWrapper = void 0;
3
+ exports.AndWrapper = exports.OrWrapper = exports.AliasedExpressionWrapper = exports.ExpressionWrapper = void 0;
4
4
  const alias_node_js_1 = require("../operation-node/alias-node.js");
5
+ const and_node_js_1 = require("../operation-node/and-node.js");
5
6
  const identifier_node_js_1 = require("../operation-node/identifier-node.js");
6
7
  const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
8
+ const or_node_js_1 = require("../operation-node/or-node.js");
9
+ const parens_node_js_1 = require("../operation-node/parens-node.js");
10
+ const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
7
11
  class ExpressionWrapper {
8
12
  #node;
9
13
  constructor(node) {
@@ -16,8 +20,14 @@ class ExpressionWrapper {
16
20
  as(alias) {
17
21
  return new AliasedExpressionWrapper(this, alias);
18
22
  }
23
+ or(...args) {
24
+ return new OrWrapper(or_node_js_1.OrNode.create(this.#node, (0, binary_operation_parser_js_1.parseFilter)(args)));
25
+ }
26
+ and(...args) {
27
+ return new AndWrapper(and_node_js_1.AndNode.create(this.#node, (0, binary_operation_parser_js_1.parseFilter)(args)));
28
+ }
19
29
  /**
20
- * Change the output type of the raw expression.
30
+ * Change the output type of the expression.
21
31
  *
22
32
  * This method call doesn't change the SQL in any way. This methods simply
23
33
  * returns a copy of this `ExpressionWrapper` with a new output type.
@@ -52,3 +62,61 @@ class AliasedExpressionWrapper {
52
62
  }
53
63
  }
54
64
  exports.AliasedExpressionWrapper = AliasedExpressionWrapper;
65
+ class OrWrapper {
66
+ #node;
67
+ constructor(node) {
68
+ this.#node = node;
69
+ }
70
+ /** @private */
71
+ get expressionType() {
72
+ return undefined;
73
+ }
74
+ as(alias) {
75
+ return new AliasedExpressionWrapper(this, alias);
76
+ }
77
+ or(...args) {
78
+ return new OrWrapper(or_node_js_1.OrNode.create(this.#node, (0, binary_operation_parser_js_1.parseFilter)(args)));
79
+ }
80
+ /**
81
+ * Change the output type of the expression.
82
+ *
83
+ * This method call doesn't change the SQL in any way. This methods simply
84
+ * returns a copy of this `OrWrapper` with a new output type.
85
+ */
86
+ $castTo() {
87
+ return new OrWrapper(this.#node);
88
+ }
89
+ toOperationNode() {
90
+ return parens_node_js_1.ParensNode.create(this.#node);
91
+ }
92
+ }
93
+ exports.OrWrapper = OrWrapper;
94
+ class AndWrapper {
95
+ #node;
96
+ constructor(node) {
97
+ this.#node = node;
98
+ }
99
+ /** @private */
100
+ get expressionType() {
101
+ return undefined;
102
+ }
103
+ as(alias) {
104
+ return new AliasedExpressionWrapper(this, alias);
105
+ }
106
+ and(...args) {
107
+ return new AndWrapper(and_node_js_1.AndNode.create(this.#node, (0, binary_operation_parser_js_1.parseFilter)(args)));
108
+ }
109
+ /**
110
+ * Change the output type of the expression.
111
+ *
112
+ * This method call doesn't change the SQL in any way. This methods simply
113
+ * returns a copy of this `AndWrapper` with a new output type.
114
+ */
115
+ $castTo() {
116
+ return new AndWrapper(this.#node);
117
+ }
118
+ toOperationNode() {
119
+ return parens_node_js_1.ParensNode.create(this.#node);
120
+ }
121
+ }
122
+ exports.AndWrapper = AndWrapper;
@@ -3,7 +3,7 @@ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
3
3
  import { RawBuilder } from '../raw-builder/raw-builder.js';
4
4
  import { Simplify } from '../util/type-utils.js';
5
5
  /**
6
- * A MySQL helper for aggregating a subquery (or other expression) into a JSON array.
6
+ * A MySQL helper for aggregating a subquery into a JSON array.
7
7
  *
8
8
  * NOTE: This helper is only guaranteed to fully work with the built-in `MysqlDialect`.
9
9
  * While the produced SQL is compatibe with all MySQL databases, some 3rd party dialects
@@ -49,7 +49,7 @@ import { Simplify } from '../util/type-utils.js';
49
49
  */
50
50
  export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O>[]>;
51
51
  /**
52
- * A MySQL helper for turning a subquery (or other expression) into a JSON object.
52
+ * A MySQL helper for turning a subquery into a JSON object.
53
53
  *
54
54
  * The subquery must only return one row.
55
55
  *
@@ -95,7 +95,7 @@ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>):
95
95
  * from `person`
96
96
  * ```
97
97
  */
98
- export declare function jsonObjectFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O>>;
98
+ export declare function jsonObjectFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O> | null>;
99
99
  /**
100
100
  * The MySQL `json_object` function.
101
101
  *
@@ -7,7 +7,7 @@ const identifier_node_js_1 = require("../operation-node/identifier-node.js");
7
7
  const reference_node_js_1 = require("../operation-node/reference-node.js");
8
8
  const sql_js_1 = require("../raw-builder/sql.js");
9
9
  /**
10
- * A MySQL helper for aggregating a subquery (or other expression) into a JSON array.
10
+ * A MySQL helper for aggregating a subquery into a JSON array.
11
11
  *
12
12
  * NOTE: This helper is only guaranteed to fully work with the built-in `MysqlDialect`.
13
13
  * While the produced SQL is compatibe with all MySQL databases, some 3rd party dialects
@@ -56,7 +56,7 @@ function jsonArrayFrom(expr) {
56
56
  }
57
57
  exports.jsonArrayFrom = jsonArrayFrom;
58
58
  /**
59
- * A MySQL helper for turning a subquery (or other expression) into a JSON object.
59
+ * A MySQL helper for turning a subquery into a JSON object.
60
60
  *
61
61
  * The subquery must only return one row.
62
62
  *
@@ -4,13 +4,23 @@ import { Simplify } from '../util/type-utils.js';
4
4
  /**
5
5
  * A postgres helper for aggregating a subquery (or other expression) into a JSONB array.
6
6
  *
7
- * NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
8
- * While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
9
- * may not parse the nested results into arrays.
10
- *
11
7
  * ### Examples
12
8
  *
9
+ * <!-- siteExample("select", "Nested array", 110) -->
10
+ *
11
+ * While kysely is not an ORM and it doesn't have the concept of relations, we do provide
12
+ * helpers for fetching nested objects and arrays in a single query. In this example we
13
+ * use the `jsonArrayFrom` helper to fetch person's pets along with the person's id.
14
+ *
15
+ * Please keep in mind that the helpers under the `kysely/helpers` folder, including
16
+ * `jsonArrayFrom`, are not guaranteed to work with third party dialects. In order for
17
+ * them to work, the dialect must automatically parse the `json` data type into
18
+ * javascript JSON values like objects and arrays. Some dialects might simply return
19
+ * the data as a JSON string.
20
+ *
13
21
  * ```ts
22
+ * import { jsonArrayFrom } from 'kysely/helpers/postgres'
23
+ *
14
24
  * const result = await db
15
25
  * .selectFrom('person')
16
26
  * .select((eb) => [
@@ -18,15 +28,11 @@ import { Simplify } from '../util/type-utils.js';
18
28
  * jsonArrayFrom(
19
29
  * eb.selectFrom('pet')
20
30
  * .select(['pet.id as pet_id', 'pet.name'])
21
- * .where('pet.owner_id', '=', 'person.id')
31
+ * .whereRef('pet.owner_id', '=', 'person.id')
22
32
  * .orderBy('pet.name')
23
33
  * ).as('pets')
24
34
  * ])
25
35
  * .execute()
26
- *
27
- * result[0].id
28
- * result[0].pets[0].pet_id
29
- * result[0].pets[0].name
30
36
  * ```
31
37
  *
32
38
  * The generated SQL (PostgreSQL):
@@ -49,13 +55,23 @@ export declare function jsonArrayFrom<O>(expr: Expression<O>): RawBuilder<Simpli
49
55
  *
50
56
  * The subquery must only return one row.
51
57
  *
52
- * NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
53
- * While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
54
- * may not parse the nested results into objects.
55
- *
56
58
  * ### Examples
57
59
  *
60
+ * <!-- siteExample("select", "Nested object", 120) -->
61
+ *
62
+ * While kysely is not an ORM and it doesn't have the concept of relations, we do provide
63
+ * helpers for fetching nested objects and arrays in a single query. In this example we
64
+ * use the `jsonObjectFrom` helper to fetch person's favorite pet along with the person's id.
65
+ *
66
+ * Please keep in mind that the helpers under the `kysely/helpers` folder, including
67
+ * `jsonObjectFrom`, are not guaranteed to work with third party dialects. In order for
68
+ * them to work, the dialect must automatically parse the `json` data type into
69
+ * javascript JSON values like objects and arrays. Some dialects might simply return
70
+ * the data as a JSON string.
71
+ *
58
72
  * ```ts
73
+ * import { jsonObjectFrom } from 'kysely/helpers/postgres'
74
+ *
59
75
  * const result = await db
60
76
  * .selectFrom('person')
61
77
  * .select((eb) => [
@@ -63,15 +79,11 @@ export declare function jsonArrayFrom<O>(expr: Expression<O>): RawBuilder<Simpli
63
79
  * jsonObjectFrom(
64
80
  * eb.selectFrom('pet')
65
81
  * .select(['pet.id as pet_id', 'pet.name'])
66
- * .where('pet.owner_id', '=', 'person.id')
82
+ * .whereRef('pet.owner_id', '=', 'person.id')
67
83
  * .where('pet.is_favorite', '=', true)
68
84
  * ).as('favorite_pet')
69
85
  * ])
70
86
  * .execute()
71
- *
72
- * result[0].id
73
- * result[0].favorite_pet.pet_id
74
- * result[0].favorite_pet.name
75
87
  * ```
76
88
  *
77
89
  * The generated SQL (PostgreSQL):
@@ -88,7 +100,7 @@ export declare function jsonArrayFrom<O>(expr: Expression<O>): RawBuilder<Simpli
88
100
  * from "person"
89
101
  * ```
90
102
  */
91
- export declare function jsonObjectFrom<O>(expr: Expression<O>): RawBuilder<Simplify<O>>;
103
+ export declare function jsonObjectFrom<O>(expr: Expression<O>): RawBuilder<Simplify<O> | null>;
92
104
  /**
93
105
  * The PostgreSQL `json_build_object` function.
94
106
  *