kysely 0.25.0 → 0.26.1

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 (315) hide show
  1. package/README.md +10 -563
  2. package/dist/cjs/dialect/database-introspector.d.ts +1 -1
  3. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +2 -2
  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 -4
  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/expression/expression-builder.d.ts +207 -108
  11. package/dist/cjs/expression/expression-builder.js +28 -7
  12. package/dist/cjs/expression/expression-wrapper.d.ts +296 -5
  13. package/dist/cjs/expression/expression-wrapper.js +70 -2
  14. package/dist/cjs/helpers/postgres.d.ts +30 -18
  15. package/dist/cjs/helpers/postgres.js +30 -18
  16. package/dist/cjs/index.d.ts +6 -0
  17. package/dist/cjs/index.js +6 -0
  18. package/dist/cjs/kysely.d.ts +23 -13
  19. package/dist/cjs/kysely.js +13 -9
  20. package/dist/cjs/migration/file-migration-provider.js +2 -2
  21. package/dist/cjs/operation-node/alter-column-node.d.ts +2 -3
  22. package/dist/cjs/operation-node/alter-column-node.js +2 -7
  23. package/dist/cjs/operation-node/alter-table-node.d.ts +2 -2
  24. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -1
  25. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  26. package/dist/cjs/operation-node/create-index-node.d.ts +2 -2
  27. package/dist/cjs/operation-node/create-schema-node.d.ts +1 -1
  28. package/dist/cjs/operation-node/create-table-node.d.ts +2 -2
  29. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  30. package/dist/cjs/operation-node/create-view-node.d.ts +1 -1
  31. package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
  32. package/dist/cjs/operation-node/drop-constraint-node.d.ts +1 -1
  33. package/dist/cjs/operation-node/drop-index-node.d.ts +1 -1
  34. package/dist/cjs/operation-node/drop-schema-node.d.ts +1 -1
  35. package/dist/cjs/operation-node/drop-table-node.d.ts +1 -1
  36. package/dist/cjs/operation-node/drop-type-node.d.ts +1 -1
  37. package/dist/cjs/operation-node/drop-view-node.d.ts +1 -1
  38. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/generated-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -1
  41. package/dist/cjs/operation-node/join-node.d.ts +1 -2
  42. package/dist/cjs/operation-node/join-node.js +0 -8
  43. package/dist/cjs/operation-node/json-operator-chain-node.d.ts +16 -0
  44. package/dist/cjs/operation-node/json-operator-chain-node.js +25 -0
  45. package/dist/cjs/operation-node/json-path-leg-node.d.ts +14 -0
  46. package/dist/cjs/operation-node/json-path-leg-node.js +19 -0
  47. package/dist/cjs/operation-node/json-path-node.d.ts +16 -0
  48. package/dist/cjs/operation-node/json-path-node.js +25 -0
  49. package/dist/cjs/operation-node/json-reference-node.d.ts +17 -0
  50. package/dist/cjs/operation-node/json-reference-node.js +25 -0
  51. package/dist/cjs/operation-node/on-conflict-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/on-duplicate-key-node.d.ts +1 -1
  53. package/dist/cjs/operation-node/operation-node-transformer.d.ts +8 -0
  54. package/dist/cjs/operation-node/operation-node-transformer.js +33 -1
  55. package/dist/cjs/operation-node/operation-node-visitor.d.ts +8 -0
  56. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  57. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  58. package/dist/cjs/operation-node/operator-node.d.ts +13 -9
  59. package/dist/cjs/operation-node/operator-node.js +12 -2
  60. package/dist/cjs/operation-node/query-node.d.ts +9 -10
  61. package/dist/cjs/operation-node/query-node.js +0 -8
  62. package/dist/cjs/operation-node/reference-node.d.ts +2 -2
  63. package/dist/cjs/operation-node/reference-node.js +1 -1
  64. package/dist/cjs/operation-node/references-node.d.ts +1 -1
  65. package/dist/cjs/operation-node/select-modifier-node.d.ts +1 -1
  66. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  67. package/dist/cjs/operation-node/select-query-node.js +0 -8
  68. package/dist/cjs/operation-node/selection-node.d.ts +1 -1
  69. package/dist/cjs/operation-node/set-operation-node.d.ts +1 -1
  70. package/dist/cjs/operation-node/simple-reference-expression-node.d.ts +1 -1
  71. package/dist/cjs/operation-node/update-query-node.d.ts +1 -1
  72. package/dist/cjs/operation-node/values-node.d.ts +1 -1
  73. package/dist/cjs/operation-node/with-node.d.ts +1 -1
  74. package/dist/cjs/parser/binary-operation-parser.d.ts +9 -12
  75. package/dist/cjs/parser/binary-operation-parser.js +40 -119
  76. package/dist/cjs/parser/coalesce-parser.d.ts +1 -1
  77. package/dist/cjs/parser/data-type-parser.d.ts +1 -1
  78. package/dist/cjs/parser/default-value-parser.d.ts +1 -1
  79. package/dist/cjs/parser/expression-parser.d.ts +5 -5
  80. package/dist/cjs/parser/group-by-parser.d.ts +2 -2
  81. package/dist/cjs/parser/insert-values-parser.d.ts +4 -4
  82. package/dist/cjs/parser/join-parser.d.ts +4 -4
  83. package/dist/cjs/parser/order-by-parser.d.ts +3 -3
  84. package/dist/cjs/parser/partition-by-parser.d.ts +2 -2
  85. package/dist/cjs/parser/reference-parser.d.ts +13 -9
  86. package/dist/cjs/parser/reference-parser.js +28 -16
  87. package/dist/cjs/parser/returning-parser.d.ts +2 -2
  88. package/dist/cjs/parser/select-parser.d.ts +10 -10
  89. package/dist/cjs/parser/table-parser.d.ts +12 -12
  90. package/dist/cjs/parser/unary-operation-parser.d.ts +1 -1
  91. package/dist/cjs/parser/update-set-parser.d.ts +3 -3
  92. package/dist/cjs/parser/update-set-parser.js +1 -3
  93. package/dist/cjs/parser/value-parser.d.ts +4 -4
  94. package/dist/cjs/parser/with-parser.d.ts +12 -8
  95. package/dist/cjs/plugin/camel-case/camel-case.d.ts +1 -1
  96. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +42 -0
  97. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +32 -0
  98. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +22 -6
  99. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -38
  100. package/dist/cjs/query-builder/aggregate-function-builder.js +4 -59
  101. package/dist/cjs/query-builder/case-builder.d.ts +11 -11
  102. package/dist/cjs/query-builder/case-builder.js +2 -2
  103. package/dist/cjs/query-builder/delete-query-builder.d.ts +110 -62
  104. package/dist/cjs/query-builder/delete-query-builder.js +1 -62
  105. package/dist/cjs/query-builder/delete-result.d.ts +1 -2
  106. package/dist/cjs/query-builder/delete-result.js +2 -8
  107. package/dist/cjs/query-builder/function-module.d.ts +44 -66
  108. package/dist/cjs/query-builder/having-interface.d.ts +2 -35
  109. package/dist/cjs/query-builder/insert-query-builder.d.ts +59 -48
  110. package/dist/cjs/query-builder/insert-query-builder.js +17 -34
  111. package/dist/cjs/query-builder/insert-result.d.ts +3 -4
  112. package/dist/cjs/query-builder/insert-result.js +5 -14
  113. package/dist/cjs/query-builder/join-builder.d.ts +2 -35
  114. package/dist/cjs/query-builder/join-builder.js +1 -56
  115. package/dist/cjs/query-builder/json-path-builder.d.ts +212 -0
  116. package/dist/cjs/query-builder/json-path-builder.js +191 -0
  117. package/dist/cjs/query-builder/no-result-error.d.ts +1 -1
  118. package/dist/cjs/query-builder/on-conflict-builder.d.ts +194 -77
  119. package/dist/cjs/query-builder/on-conflict-builder.js +2 -111
  120. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  121. package/dist/cjs/query-builder/over-builder.js +1 -1
  122. package/dist/cjs/query-builder/returning-interface.d.ts +1 -1
  123. package/dist/cjs/query-builder/select-query-builder.d.ts +169 -141
  124. package/dist/cjs/query-builder/select-query-builder.js +27 -136
  125. package/dist/cjs/query-builder/update-query-builder.d.ts +147 -66
  126. package/dist/cjs/query-builder/update-query-builder.js +3 -63
  127. package/dist/cjs/query-builder/update-result.d.ts +3 -3
  128. package/dist/cjs/query-builder/update-result.js +5 -9
  129. package/dist/cjs/query-builder/where-interface.d.ts +98 -40
  130. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  131. package/dist/cjs/query-compiler/compiled-query.js +2 -2
  132. package/dist/cjs/query-compiler/default-query-compiler.d.ts +8 -0
  133. package/dist/cjs/query-compiler/default-query-compiler.js +37 -2
  134. package/dist/cjs/query-compiler/query-compiler.d.ts +1 -1
  135. package/dist/cjs/query-creator.d.ts +4 -2
  136. package/dist/cjs/schema/alter-column-builder.d.ts +11 -5
  137. package/dist/cjs/schema/alter-column-builder.js +19 -21
  138. package/dist/cjs/schema/alter-table-builder.d.ts +0 -4
  139. package/dist/cjs/schema/alter-table-builder.js +2 -9
  140. package/dist/cjs/schema/column-definition-builder.d.ts +1 -1
  141. package/dist/cjs/schema/column-definition-builder.js +1 -2
  142. package/dist/cjs/schema/create-index-builder.js +1 -1
  143. package/dist/cjs/schema/create-table-builder.d.ts +2 -6
  144. package/dist/cjs/schema/create-table-builder.js +0 -6
  145. package/dist/cjs/schema/schema.d.ts +1 -2
  146. package/dist/cjs/schema/schema.js +1 -2
  147. package/dist/cjs/util/column-type.d.ts +22 -18
  148. package/dist/cjs/util/explainable.d.ts +1 -1
  149. package/dist/cjs/util/infer-result.d.ts +2 -2
  150. package/dist/cjs/util/log.d.ts +4 -4
  151. package/dist/cjs/util/require-all-props.d.ts +1 -1
  152. package/dist/cjs/util/type-utils.d.ts +19 -19
  153. package/dist/esm/dialect/database-introspector.d.ts +1 -1
  154. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +2 -2
  155. package/dist/esm/dialect/mysql/mysql-driver.js +5 -1
  156. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  157. package/dist/esm/dialect/postgres/postgres-introspector.js +1 -4
  158. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
  159. package/dist/esm/driver/database-connection.d.ts +6 -0
  160. package/dist/esm/driver/driver.d.ts +1 -1
  161. package/dist/esm/expression/expression-builder.d.ts +207 -108
  162. package/dist/esm/expression/expression-builder.js +30 -9
  163. package/dist/esm/expression/expression-wrapper.d.ts +296 -5
  164. package/dist/esm/expression/expression-wrapper.js +67 -1
  165. package/dist/esm/helpers/postgres.d.ts +30 -18
  166. package/dist/esm/helpers/postgres.js +30 -18
  167. package/dist/esm/index.d.ts +6 -0
  168. package/dist/esm/index.js +6 -0
  169. package/dist/esm/kysely.d.ts +23 -13
  170. package/dist/esm/kysely.js +13 -9
  171. package/dist/esm/operation-node/alter-column-node.d.ts +2 -3
  172. package/dist/esm/operation-node/alter-column-node.js +2 -7
  173. package/dist/esm/operation-node/alter-table-node.d.ts +2 -2
  174. package/dist/esm/operation-node/column-definition-node.d.ts +1 -1
  175. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  176. package/dist/esm/operation-node/create-index-node.d.ts +2 -2
  177. package/dist/esm/operation-node/create-schema-node.d.ts +1 -1
  178. package/dist/esm/operation-node/create-table-node.d.ts +2 -2
  179. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  180. package/dist/esm/operation-node/create-view-node.d.ts +1 -1
  181. package/dist/esm/operation-node/data-type-node.d.ts +2 -2
  182. package/dist/esm/operation-node/drop-constraint-node.d.ts +1 -1
  183. package/dist/esm/operation-node/drop-index-node.d.ts +1 -1
  184. package/dist/esm/operation-node/drop-schema-node.d.ts +1 -1
  185. package/dist/esm/operation-node/drop-table-node.d.ts +1 -1
  186. package/dist/esm/operation-node/drop-type-node.d.ts +1 -1
  187. package/dist/esm/operation-node/drop-view-node.d.ts +1 -1
  188. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +1 -1
  189. package/dist/esm/operation-node/generated-node.d.ts +1 -1
  190. package/dist/esm/operation-node/insert-query-node.d.ts +1 -1
  191. package/dist/esm/operation-node/join-node.d.ts +1 -2
  192. package/dist/esm/operation-node/join-node.js +0 -8
  193. package/dist/esm/operation-node/json-operator-chain-node.d.ts +16 -0
  194. package/dist/esm/operation-node/json-operator-chain-node.js +23 -0
  195. package/dist/esm/operation-node/json-path-leg-node.d.ts +14 -0
  196. package/dist/esm/operation-node/json-path-leg-node.js +17 -0
  197. package/dist/esm/operation-node/json-path-node.d.ts +16 -0
  198. package/dist/esm/operation-node/json-path-node.js +23 -0
  199. package/dist/esm/operation-node/json-reference-node.d.ts +17 -0
  200. package/dist/esm/operation-node/json-reference-node.js +23 -0
  201. package/dist/esm/operation-node/on-conflict-node.d.ts +1 -1
  202. package/dist/esm/operation-node/on-duplicate-key-node.d.ts +1 -1
  203. package/dist/esm/operation-node/operation-node-transformer.d.ts +8 -0
  204. package/dist/esm/operation-node/operation-node-transformer.js +33 -1
  205. package/dist/esm/operation-node/operation-node-visitor.d.ts +8 -0
  206. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  207. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  208. package/dist/esm/operation-node/operator-node.d.ts +13 -9
  209. package/dist/esm/operation-node/operator-node.js +10 -1
  210. package/dist/esm/operation-node/query-node.d.ts +9 -10
  211. package/dist/esm/operation-node/query-node.js +0 -8
  212. package/dist/esm/operation-node/reference-node.d.ts +2 -2
  213. package/dist/esm/operation-node/reference-node.js +1 -1
  214. package/dist/esm/operation-node/references-node.d.ts +1 -1
  215. package/dist/esm/operation-node/select-modifier-node.d.ts +1 -1
  216. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  217. package/dist/esm/operation-node/select-query-node.js +0 -8
  218. package/dist/esm/operation-node/selection-node.d.ts +1 -1
  219. package/dist/esm/operation-node/set-operation-node.d.ts +1 -1
  220. package/dist/esm/operation-node/simple-reference-expression-node.d.ts +1 -1
  221. package/dist/esm/operation-node/update-query-node.d.ts +1 -1
  222. package/dist/esm/operation-node/values-node.d.ts +1 -1
  223. package/dist/esm/operation-node/with-node.d.ts +1 -1
  224. package/dist/esm/parser/binary-operation-parser.d.ts +9 -12
  225. package/dist/esm/parser/binary-operation-parser.js +38 -114
  226. package/dist/esm/parser/coalesce-parser.d.ts +1 -1
  227. package/dist/esm/parser/data-type-parser.d.ts +1 -1
  228. package/dist/esm/parser/default-value-parser.d.ts +1 -1
  229. package/dist/esm/parser/expression-parser.d.ts +5 -5
  230. package/dist/esm/parser/group-by-parser.d.ts +2 -2
  231. package/dist/esm/parser/insert-values-parser.d.ts +4 -4
  232. package/dist/esm/parser/join-parser.d.ts +4 -4
  233. package/dist/esm/parser/order-by-parser.d.ts +3 -3
  234. package/dist/esm/parser/partition-by-parser.d.ts +2 -2
  235. package/dist/esm/parser/reference-parser.d.ts +13 -9
  236. package/dist/esm/parser/reference-parser.js +26 -15
  237. package/dist/esm/parser/returning-parser.d.ts +2 -2
  238. package/dist/esm/parser/select-parser.d.ts +10 -10
  239. package/dist/esm/parser/table-parser.d.ts +12 -12
  240. package/dist/esm/parser/unary-operation-parser.d.ts +1 -1
  241. package/dist/esm/parser/update-set-parser.d.ts +3 -3
  242. package/dist/esm/parser/update-set-parser.js +2 -4
  243. package/dist/esm/parser/value-parser.d.ts +4 -4
  244. package/dist/esm/parser/with-parser.d.ts +12 -8
  245. package/dist/esm/plugin/camel-case/camel-case.d.ts +1 -1
  246. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +42 -0
  247. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +29 -0
  248. package/dist/esm/plugin/with-schema/with-schema-transformer.js +22 -6
  249. package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -38
  250. package/dist/esm/query-builder/aggregate-function-builder.js +5 -60
  251. package/dist/esm/query-builder/case-builder.d.ts +11 -11
  252. package/dist/esm/query-builder/case-builder.js +3 -3
  253. package/dist/esm/query-builder/delete-query-builder.d.ts +110 -62
  254. package/dist/esm/query-builder/delete-query-builder.js +2 -63
  255. package/dist/esm/query-builder/delete-result.d.ts +1 -2
  256. package/dist/esm/query-builder/delete-result.js +2 -8
  257. package/dist/esm/query-builder/function-module.d.ts +44 -66
  258. package/dist/esm/query-builder/having-interface.d.ts +2 -35
  259. package/dist/esm/query-builder/insert-query-builder.d.ts +59 -48
  260. package/dist/esm/query-builder/insert-query-builder.js +17 -34
  261. package/dist/esm/query-builder/insert-result.d.ts +3 -4
  262. package/dist/esm/query-builder/insert-result.js +5 -14
  263. package/dist/esm/query-builder/join-builder.d.ts +2 -35
  264. package/dist/esm/query-builder/join-builder.js +2 -57
  265. package/dist/esm/query-builder/json-path-builder.d.ts +212 -0
  266. package/dist/esm/query-builder/json-path-builder.js +186 -0
  267. package/dist/esm/query-builder/no-result-error.d.ts +1 -1
  268. package/dist/esm/query-builder/on-conflict-builder.d.ts +194 -77
  269. package/dist/esm/query-builder/on-conflict-builder.js +3 -112
  270. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  271. package/dist/esm/query-builder/over-builder.js +1 -1
  272. package/dist/esm/query-builder/returning-interface.d.ts +1 -1
  273. package/dist/esm/query-builder/select-query-builder.d.ts +169 -141
  274. package/dist/esm/query-builder/select-query-builder.js +28 -137
  275. package/dist/esm/query-builder/update-query-builder.d.ts +147 -66
  276. package/dist/esm/query-builder/update-query-builder.js +4 -64
  277. package/dist/esm/query-builder/update-result.d.ts +3 -3
  278. package/dist/esm/query-builder/update-result.js +5 -9
  279. package/dist/esm/query-builder/where-interface.d.ts +98 -40
  280. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  281. package/dist/esm/query-compiler/compiled-query.js +2 -2
  282. package/dist/esm/query-compiler/default-query-compiler.d.ts +8 -0
  283. package/dist/esm/query-compiler/default-query-compiler.js +37 -2
  284. package/dist/esm/query-compiler/query-compiler.d.ts +1 -1
  285. package/dist/esm/query-creator.d.ts +4 -2
  286. package/dist/esm/schema/alter-column-builder.d.ts +11 -5
  287. package/dist/esm/schema/alter-column-builder.js +19 -21
  288. package/dist/esm/schema/alter-table-builder.d.ts +0 -4
  289. package/dist/esm/schema/alter-table-builder.js +2 -9
  290. package/dist/esm/schema/column-definition-builder.d.ts +1 -1
  291. package/dist/esm/schema/column-definition-builder.js +1 -2
  292. package/dist/esm/schema/create-index-builder.js +2 -2
  293. package/dist/esm/schema/create-table-builder.d.ts +2 -6
  294. package/dist/esm/schema/create-table-builder.js +0 -6
  295. package/dist/esm/schema/schema.d.ts +1 -2
  296. package/dist/esm/schema/schema.js +1 -2
  297. package/dist/esm/util/column-type.d.ts +22 -18
  298. package/dist/esm/util/explainable.d.ts +1 -1
  299. package/dist/esm/util/infer-result.d.ts +2 -2
  300. package/dist/esm/util/log.d.ts +4 -4
  301. package/dist/esm/util/require-all-props.d.ts +1 -1
  302. package/dist/esm/util/type-utils.d.ts +19 -19
  303. package/package.json +25 -23
  304. package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +0 -62
  305. package/dist/cjs/query-builder/deprecated-having-expression-builder.js +0 -2
  306. package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +0 -62
  307. package/dist/cjs/query-builder/deprecated-on-expression-builder.js +0 -2
  308. package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +0 -62
  309. package/dist/cjs/query-builder/deprecated-where-expression-builder.js +0 -2
  310. package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +0 -62
  311. package/dist/esm/query-builder/deprecated-having-expression-builder.js +0 -2
  312. package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +0 -62
  313. package/dist/esm/query-builder/deprecated-on-expression-builder.js +0 -2
  314. package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +0 -62
  315. package/dist/esm/query-builder/deprecated-where-expression-builder.js +0 -2
@@ -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;
@@ -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):
@@ -5,13 +5,23 @@ const sql_js_1 = require("../raw-builder/sql.js");
5
5
  /**
6
6
  * A postgres helper for aggregating a subquery (or other expression) into a JSONB array.
7
7
  *
8
- * NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
9
- * While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
10
- * may not parse the nested results into arrays.
11
- *
12
8
  * ### Examples
13
9
  *
10
+ * <!-- siteExample("select", "Nested array", 110) -->
11
+ *
12
+ * While kysely is not an ORM and it doesn't have the concept of relations, we do provide
13
+ * helpers for fetching nested objects and arrays in a single query. In this example we
14
+ * use the `jsonArrayFrom` helper to fetch person's pets along with the person's id.
15
+ *
16
+ * Please keep in mind that the helpers under the `kysely/helpers` folder, including
17
+ * `jsonArrayFrom`, are not guaranteed to work with third party dialects. In order for
18
+ * them to work, the dialect must automatically parse the `json` data type into
19
+ * javascript JSON values like objects and arrays. Some dialects might simply return
20
+ * the data as a JSON string.
21
+ *
14
22
  * ```ts
23
+ * import { jsonArrayFrom } from 'kysely/helpers/postgres'
24
+ *
15
25
  * const result = await db
16
26
  * .selectFrom('person')
17
27
  * .select((eb) => [
@@ -19,15 +29,11 @@ const sql_js_1 = require("../raw-builder/sql.js");
19
29
  * jsonArrayFrom(
20
30
  * eb.selectFrom('pet')
21
31
  * .select(['pet.id as pet_id', 'pet.name'])
22
- * .where('pet.owner_id', '=', 'person.id')
32
+ * .whereRef('pet.owner_id', '=', 'person.id')
23
33
  * .orderBy('pet.name')
24
34
  * ).as('pets')
25
35
  * ])
26
36
  * .execute()
27
- *
28
- * result[0].id
29
- * result[0].pets[0].pet_id
30
- * result[0].pets[0].name
31
37
  * ```
32
38
  *
33
39
  * The generated SQL (PostgreSQL):
@@ -53,13 +59,23 @@ exports.jsonArrayFrom = jsonArrayFrom;
53
59
  *
54
60
  * The subquery must only return one row.
55
61
  *
56
- * NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
57
- * While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
58
- * may not parse the nested results into objects.
59
- *
60
62
  * ### Examples
61
63
  *
64
+ * <!-- siteExample("select", "Nested object", 120) -->
65
+ *
66
+ * While kysely is not an ORM and it doesn't have the concept of relations, we do provide
67
+ * helpers for fetching nested objects and arrays in a single query. In this example we
68
+ * use the `jsonObjectFrom` helper to fetch person's favorite pet along with the person's id.
69
+ *
70
+ * Please keep in mind that the helpers under the `kysely/helpers` folder, including
71
+ * `jsonObjectFrom`, are not guaranteed to work with third party dialects. In order for
72
+ * them to work, the dialect must automatically parse the `json` data type into
73
+ * javascript JSON values like objects and arrays. Some dialects might simply return
74
+ * the data as a JSON string.
75
+ *
62
76
  * ```ts
77
+ * import { jsonObjectFrom } from 'kysely/helpers/postgres'
78
+ *
63
79
  * const result = await db
64
80
  * .selectFrom('person')
65
81
  * .select((eb) => [
@@ -67,15 +83,11 @@ exports.jsonArrayFrom = jsonArrayFrom;
67
83
  * jsonObjectFrom(
68
84
  * eb.selectFrom('pet')
69
85
  * .select(['pet.id as pet_id', 'pet.name'])
70
- * .where('pet.owner_id', '=', 'person.id')
86
+ * .whereRef('pet.owner_id', '=', 'person.id')
71
87
  * .where('pet.is_favorite', '=', true)
72
88
  * ).as('favorite_pet')
73
89
  * ])
74
90
  * .execute()
75
- *
76
- * result[0].id
77
- * result[0].favorite_pet.pet_id
78
- * result[0].favorite_pet.name
79
91
  * ```
80
92
  *
81
93
  * The generated SQL (PostgreSQL):
@@ -19,6 +19,7 @@ export * from './query-builder/update-result.js';
19
19
  export * from './query-builder/on-conflict-builder.js';
20
20
  export * from './query-builder/aggregate-function-builder.js';
21
21
  export * from './query-builder/case-builder.js';
22
+ export * from './query-builder/json-path-builder.js';
22
23
  export * from './raw-builder/raw-builder.js';
23
24
  export * from './raw-builder/sql.js';
24
25
  export * from './query-executor/query-executor.js';
@@ -79,6 +80,7 @@ export * from './plugin/kysely-plugin.js';
79
80
  export * from './plugin/camel-case/camel-case-plugin.js';
80
81
  export * from './plugin/deduplicate-joins/deduplicate-joins-plugin.js';
81
82
  export * from './plugin/with-schema/with-schema-plugin.js';
83
+ export * from './plugin/parse-json-results/parse-json-results-plugin.js';
82
84
  export * from './operation-node/add-column-node.js';
83
85
  export * from './operation-node/add-constraint-node.js';
84
86
  export * from './operation-node/alias-node.js';
@@ -164,6 +166,10 @@ export * from './operation-node/set-operation-node.js';
164
166
  export * from './operation-node/binary-operation-node.js';
165
167
  export * from './operation-node/unary-operation-node.js';
166
168
  export * from './operation-node/using-node.js';
169
+ export * from './operation-node/json-reference-node.js';
170
+ export * from './operation-node/json-path-leg-node.js';
171
+ export * from './operation-node/json-path-node.js';
172
+ export * from './operation-node/json-operator-chain-node.js';
167
173
  export * from './util/column-type.js';
168
174
  export * from './util/compilable.js';
169
175
  export * from './util/explainable.js';
package/dist/cjs/index.js CHANGED
@@ -37,6 +37,7 @@ __exportStar(require("./query-builder/update-result.js"), exports);
37
37
  __exportStar(require("./query-builder/on-conflict-builder.js"), exports);
38
38
  __exportStar(require("./query-builder/aggregate-function-builder.js"), exports);
39
39
  __exportStar(require("./query-builder/case-builder.js"), exports);
40
+ __exportStar(require("./query-builder/json-path-builder.js"), exports);
40
41
  __exportStar(require("./raw-builder/raw-builder.js"), exports);
41
42
  __exportStar(require("./raw-builder/sql.js"), exports);
42
43
  __exportStar(require("./query-executor/query-executor.js"), exports);
@@ -97,6 +98,7 @@ __exportStar(require("./plugin/kysely-plugin.js"), exports);
97
98
  __exportStar(require("./plugin/camel-case/camel-case-plugin.js"), exports);
98
99
  __exportStar(require("./plugin/deduplicate-joins/deduplicate-joins-plugin.js"), exports);
99
100
  __exportStar(require("./plugin/with-schema/with-schema-plugin.js"), exports);
101
+ __exportStar(require("./plugin/parse-json-results/parse-json-results-plugin.js"), exports);
100
102
  __exportStar(require("./operation-node/add-column-node.js"), exports);
101
103
  __exportStar(require("./operation-node/add-constraint-node.js"), exports);
102
104
  __exportStar(require("./operation-node/alias-node.js"), exports);
@@ -182,6 +184,10 @@ __exportStar(require("./operation-node/set-operation-node.js"), exports);
182
184
  __exportStar(require("./operation-node/binary-operation-node.js"), exports);
183
185
  __exportStar(require("./operation-node/unary-operation-node.js"), exports);
184
186
  __exportStar(require("./operation-node/using-node.js"), exports);
187
+ __exportStar(require("./operation-node/json-reference-node.js"), exports);
188
+ __exportStar(require("./operation-node/json-path-leg-node.js"), exports);
189
+ __exportStar(require("./operation-node/json-path-node.js"), exports);
190
+ __exportStar(require("./operation-node/json-operator-chain-node.js"), exports);
185
191
  __exportStar(require("./util/column-type.js"), exports);
186
192
  __exportStar(require("./util/compilable.js"), exports);
187
193
  __exportStar(require("./util/explainable.js"), exports);