kysely 0.25.0 → 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 (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 +84 -59
  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 +58 -47
  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 +144 -73
  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 +139 -134
  124. package/dist/cjs/query-builder/select-query-builder.js +24 -133
  125. package/dist/cjs/query-builder/update-query-builder.d.ts +89 -62
  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 +73 -38
  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 +84 -59
  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 +58 -47
  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 +144 -73
  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 +139 -134
  274. package/dist/esm/query-builder/select-query-builder.js +25 -134
  275. package/dist/esm/query-builder/update-query-builder.d.ts +89 -62
  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 +73 -38
  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
@@ -63,17 +63,29 @@ export class InsertQueryBuilder {
63
63
  *
64
64
  * ### Examples
65
65
  *
66
+ * <!-- siteExample("insert", "Insert subquery", 50) -->
67
+ *
68
+ * You can create an `INSERT INTO SELECT FROM` query using the `expression` method:
69
+ *
66
70
  * ```ts
67
- * db.insertInto('person')
68
- * .columns(['first_name'])
69
- * .expression((eb) => eb.selectFrom('pet').select('pet.name'))
71
+ * const result = await db.insertInto('person')
72
+ * .columns(['first_name', 'last_name', 'age'])
73
+ * .expression((eb) => eb
74
+ * .selectFrom('pet')
75
+ * .select((eb) => [
76
+ * 'pet.name',
77
+ * eb.val('Petson').as('last_name'),
78
+ * eb.val(7).as('age'),
79
+ * ])
80
+ * )
81
+ * .execute()
70
82
  * ```
71
83
  *
72
84
  * The generated SQL (PostgreSQL):
73
85
  *
74
86
  * ```sql
75
- * insert into "person" ("first_name")
76
- * select "pet"."name" from "pet"
87
+ * insert into "person" ("first_name", "last_name", "age")
88
+ * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet"
77
89
  * ```
78
90
  */
79
91
  expression(expression) {
@@ -338,12 +350,6 @@ export class InsertQueryBuilder {
338
350
  $call(func) {
339
351
  return func(this);
340
352
  }
341
- /**
342
- * @deprecated Use `$call` instead
343
- */
344
- call(func) {
345
- return this.$call(func);
346
- }
347
353
  /**
348
354
  * Call `func(this)` if `condition` is true.
349
355
  *
@@ -387,17 +393,6 @@ export class InsertQueryBuilder {
387
393
  ...this.#props,
388
394
  });
389
395
  }
390
- /**
391
- * @deprecated Use `$if` instead
392
- */
393
- if(condition, func) {
394
- if (condition) {
395
- return func(this);
396
- }
397
- return new InsertQueryBuilder({
398
- ...this.#props,
399
- });
400
- }
401
396
  /**
402
397
  * Change the output type of the query.
403
398
  *
@@ -407,12 +402,6 @@ export class InsertQueryBuilder {
407
402
  $castTo() {
408
403
  return new InsertQueryBuilder(this.#props);
409
404
  }
410
- /**
411
- * @deprecated Use `$castTo` instead.
412
- */
413
- castTo() {
414
- return this.$castTo();
415
- }
416
405
  /**
417
406
  * Narrows (parts of) the output type of the query.
418
407
  *
@@ -500,12 +489,6 @@ export class InsertQueryBuilder {
500
489
  $assertType() {
501
490
  return new InsertQueryBuilder(this.#props);
502
491
  }
503
- /**
504
- * @deprecated Use `$assertType` instead.
505
- */
506
- assertType() {
507
- return new InsertQueryBuilder(this.#props);
508
- }
509
492
  /**
510
493
  * Returns a copy of this InsertQueryBuilder instance with the given plugin installed.
511
494
  */
@@ -22,14 +22,13 @@
22
22
  * ```
23
23
  */
24
24
  export declare class InsertResult {
25
- #private;
26
- constructor(insertId: bigint | undefined, numInsertedOrUpdatedRows: bigint | undefined);
27
25
  /**
28
26
  * The auto incrementing primary key
29
27
  */
30
- get insertId(): bigint | undefined;
28
+ readonly insertId: bigint | undefined;
31
29
  /**
32
30
  * Affected rows count.
33
31
  */
34
- get numInsertedOrUpdatedRows(): bigint | undefined;
32
+ readonly numInsertedOrUpdatedRows: bigint | undefined;
33
+ constructor(insertId: bigint | undefined, numInsertedOrUpdatedRows: bigint | undefined);
35
34
  }
@@ -23,25 +23,16 @@
23
23
  * ```
24
24
  */
25
25
  export class InsertResult {
26
- #insertId;
27
- #numInsertedOrUpdatedRows;
28
- constructor(insertId, numInsertedOrUpdatedRows) {
29
- this.#insertId = insertId;
30
- this.#numInsertedOrUpdatedRows = numInsertedOrUpdatedRows;
31
- }
32
26
  /**
33
27
  * The auto incrementing primary key
34
28
  */
35
- get insertId() {
36
- return this.#insertId;
37
- }
29
+ insertId;
38
30
  /**
39
31
  * Affected rows count.
40
32
  */
41
- get numInsertedOrUpdatedRows() {
42
- return this.#numInsertedOrUpdatedRows;
33
+ numInsertedOrUpdatedRows;
34
+ constructor(insertId, numInsertedOrUpdatedRows) {
35
+ this.insertId = insertId;
36
+ this.numInsertedOrUpdatedRows = numInsertedOrUpdatedRows;
43
37
  }
44
38
  }
45
- for (const property of ['insertId', 'numInsertedOrUpdatedRows']) {
46
- Object.defineProperty(InsertResult.prototype, property, { enumerable: true });
47
- }
@@ -1,11 +1,10 @@
1
+ import { ExpressionBuilder } from '../expression/expression-builder.js';
1
2
  import { Expression } from '../expression/expression.js';
2
3
  import { JoinNode } from '../operation-node/join-node.js';
3
4
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
4
5
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
5
6
  import { ReferenceExpression } from '../parser/reference-parser.js';
6
- import { ExistsExpression } from '../parser/unary-operation-parser.js';
7
7
  import { SqlBool } from '../util/type-utils.js';
8
- import { OnExpressionBuilder } from './deprecated-on-expression-builder.js';
9
8
  export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
10
9
  #private;
11
10
  constructor(props: JoinBuilderProps);
@@ -18,18 +17,6 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
18
17
  on<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
19
18
  on(factory: OnExpressionFactory<DB, TB>): JoinBuilder<DB, TB>;
20
19
  on(expression: Expression<any>): JoinBuilder<DB, TB>;
21
- /**
22
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
23
- */
24
- orOn<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
25
- /**
26
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
27
- */
28
- orOn(factory: OnExpressionFactory<DB, TB>): JoinBuilder<DB, TB>;
29
- /**
30
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
31
- */
32
- orOn(expression: Expression<any>): JoinBuilder<DB, TB>;
33
20
  /**
34
21
  * Just like {@link WhereInterface.whereRef} but adds an item to the join's
35
22
  * `on` clause instead.
@@ -37,26 +24,6 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
37
24
  * See {@link WhereInterface.whereRef} for documentation and examples.
38
25
  */
39
26
  onRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): JoinBuilder<DB, TB>;
40
- /**
41
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
42
- */
43
- orOnRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): JoinBuilder<DB, TB>;
44
- /**
45
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
46
- */
47
- onExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
48
- /**
49
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
50
- */
51
- onNotExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
52
- /**
53
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
54
- */
55
- orOnExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
56
- /**
57
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
58
- */
59
- orOnNotExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
60
27
  /**
61
28
  * Adds `on true`.
62
29
  */
@@ -71,5 +38,5 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
71
38
  export interface JoinBuilderProps {
72
39
  readonly joinNode: JoinNode;
73
40
  }
74
- declare type OnExpressionFactory<DB, TB extends keyof DB> = (eb: OnExpressionBuilder<DB, TB>) => Expression<SqlBool> | OnExpressionBuilder<DB, TB>;
41
+ type OnExpressionFactory<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => Expression<SqlBool>;
75
42
  export {};
@@ -1,8 +1,7 @@
1
1
  /// <reference types="./join-builder.d.ts" />
2
2
  import { JoinNode } from '../operation-node/join-node.js';
3
3
  import { RawNode } from '../operation-node/raw-node.js';
4
- import { parseOn, parseReferentialComparison, } from '../parser/binary-operation-parser.js';
5
- import { parseExists, parseNotExists, } from '../parser/unary-operation-parser.js';
4
+ import { parseFilter, parseReferentialComparison, } from '../parser/binary-operation-parser.js';
6
5
  import { freeze } from '../util/object-utils.js';
7
6
  import { preventAwait } from '../util/prevent-await.js';
8
7
  export class JoinBuilder {
@@ -13,16 +12,7 @@ export class JoinBuilder {
13
12
  on(...args) {
14
13
  return new JoinBuilder({
15
14
  ...this.#props,
16
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseOn(args)),
17
- });
18
- }
19
- /**
20
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
21
- */
22
- orOn(...args) {
23
- return new JoinBuilder({
24
- ...this.#props,
25
- joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseOn(args)),
15
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseFilter(args)),
26
16
  });
27
17
  }
28
18
  /**
@@ -37,51 +27,6 @@ export class JoinBuilder {
37
27
  joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseReferentialComparison(lhs, op, rhs)),
38
28
  });
39
29
  }
40
- /**
41
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
42
- */
43
- orOnRef(lhs, op, rhs) {
44
- return new JoinBuilder({
45
- ...this.#props,
46
- joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseReferentialComparison(lhs, op, rhs)),
47
- });
48
- }
49
- /**
50
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
51
- */
52
- onExists(arg) {
53
- return new JoinBuilder({
54
- ...this.#props,
55
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseExists(arg)),
56
- });
57
- }
58
- /**
59
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
60
- */
61
- onNotExists(arg) {
62
- return new JoinBuilder({
63
- ...this.#props,
64
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseNotExists(arg)),
65
- });
66
- }
67
- /**
68
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
69
- */
70
- orOnExists(arg) {
71
- return new JoinBuilder({
72
- ...this.#props,
73
- joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseExists(arg)),
74
- });
75
- }
76
- /**
77
- * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
78
- */
79
- orOnNotExists(arg) {
80
- return new JoinBuilder({
81
- ...this.#props,
82
- joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseNotExists(arg)),
83
- });
84
- }
85
30
  /**
86
31
  * Adds `on true`.
87
32
  */
@@ -0,0 +1,212 @@
1
+ import { AliasedExpression, Expression } from '../expression/expression.js';
2
+ import { AliasNode } from '../operation-node/alias-node.js';
3
+ import { JSONReferenceNode } from '../operation-node/json-reference-node.js';
4
+ import { OperationNode } from '../operation-node/operation-node.js';
5
+ export declare class JSONPathBuilder<S, O = S> {
6
+ #private;
7
+ constructor(node: JSONReferenceNode);
8
+ /**
9
+ * Access an element of a JSON array in a specific location.
10
+ *
11
+ * Since there's no guarantee an element exists in the given array location, the
12
+ * resulting type is always nullable. If you're sure the element exists, you
13
+ * should use {@link SelectQueryBuilder.$assertType} to narrow the type safely.
14
+ *
15
+ * See also {@link key} to access properties of JSON objects.
16
+ *
17
+ * ### Examples
18
+ *
19
+ * ```ts
20
+ * db.selectFrom('person').select(eb =>
21
+ * eb.ref('nicknames', '->').at(0).as('primary_nickname')
22
+ * )
23
+ *
24
+ * The generated SQL (PostgreSQL):
25
+ *
26
+ * ```sql
27
+ * select "nicknames"->0 as "primary_nickname" from "person"
28
+ *```
29
+ *
30
+ * Combined with {@link key}:
31
+ *
32
+ * ```ts
33
+ * db.selectFrom('person').select(eb =>
34
+ * eb.ref('experience', '->').at(0).key('role').as('first_role')
35
+ * )
36
+ * ```
37
+ *
38
+ * The generated SQL (PostgreSQL):
39
+ *
40
+ * ```sql
41
+ * select "experience"->0->'role' as "first_role" from "person"
42
+ * ```
43
+ *
44
+ * You can use `'last'` to access the last element of the array in MySQL:
45
+ *
46
+ * ```ts
47
+ * db.selectFrom('person').select(eb =>
48
+ * eb.ref('nicknames', '->$').at('last').as('last_nickname')
49
+ * )
50
+ * ```
51
+ *
52
+ * The generated SQL (MySQL):
53
+ *
54
+ * ```sql
55
+ * select `nicknames`->'$[last]' as `last_nickname` from `person`
56
+ * ```
57
+ *
58
+ * Or `'#-1'` in SQLite:
59
+ *
60
+ * ```ts
61
+ * db.selectFrom('person').select(eb =>
62
+ * eb.ref('nicknames', '->>$').at('#-1').as('last_nickname')
63
+ * )
64
+ * ```
65
+ *
66
+ * The generated SQL (SQLite):
67
+ *
68
+ * ```sql
69
+ * select "nicknames"->>'$[#-1]' as `last_nickname` from `person`
70
+ * ```
71
+ */
72
+ at<I extends any[] extends O ? number | 'last' | `#-${number}` : never, O2 = null | NonNullable<NonNullable<O>[keyof NonNullable<O> & number]>>(index: `${I}` extends `${any}.${any}` | `#--${any}` ? never : I): TraversedJSONPathBuilder<S, O2>;
73
+ /**
74
+ * Access a property of a JSON object.
75
+ *
76
+ * If a field is optional, the resulting type will be nullable.
77
+ *
78
+ * See also {@link at} to access elements of JSON arrays.
79
+ *
80
+ * ### Examples
81
+ *
82
+ * ```ts
83
+ * db.selectFrom('person').select(eb =>
84
+ * eb.ref('address', '->').key('city').as('city')
85
+ * )
86
+ * ```
87
+ *
88
+ * The generated SQL (PostgreSQL):
89
+ *
90
+ * ```sql
91
+ * select "address"->'city' as "city" from "person"
92
+ * ```
93
+ *
94
+ * Going deeper:
95
+ *
96
+ * ```ts
97
+ * db.selectFrom('person').select(eb =>
98
+ * eb.ref('profile', '->$').key('website').key('url').as('website_url')
99
+ * )
100
+ * ```
101
+ *
102
+ * The generated SQL (MySQL):
103
+ *
104
+ * ```sql
105
+ * select `profile`->'$.website.url' as `website_url` from `person`
106
+ * ```
107
+ *
108
+ * Combined with {@link at}:
109
+ *
110
+ * ```ts
111
+ * db.selectFrom('person').select(eb =>
112
+ * eb.ref('profile', '->').key('addresses').at(0).key('city').as('city')
113
+ * )
114
+ * ```
115
+ *
116
+ * The generated SQL (PostgreSQL):
117
+ *
118
+ * ```sql
119
+ * select "profile"->'addresses'->0->'city' as "city" from "person"
120
+ * ```
121
+ */
122
+ key<K extends any[] extends O ? never : O extends object ? keyof NonNullable<O> & string : never, O2 = undefined extends O ? null | NonNullable<NonNullable<O>[K]> : null extends O ? null | NonNullable<NonNullable<O>[K]> : NonNullable<O>[K]>(key: K): TraversedJSONPathBuilder<S, O2>;
123
+ }
124
+ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O> implements Expression<O> {
125
+ #private;
126
+ constructor(node: JSONReferenceNode);
127
+ /** @private */
128
+ /**
129
+ * All expressions need to have this getter for complicated type-related reasons.
130
+ * Simply add this getter for your expression and always return `undefined` from it:
131
+ *
132
+ * ```ts
133
+ * class SomeExpression<T> implements Expression<T> {
134
+ * get expressionType(): T | undefined {
135
+ * return undefined
136
+ * }
137
+ * }
138
+ * ```
139
+ *
140
+ * The getter is needed to make the expression assignable to another expression only
141
+ * if the types `T` are assignable. Without this property (or some other property
142
+ * that references `T`), you could assing `Expression<string>` to `Expression<number>`.
143
+ */
144
+ get expressionType(): O | undefined;
145
+ /**
146
+ * Returns an aliased version of the expression.
147
+ *
148
+ * In addition to slapping `as "the_alias"` to the end of the SQL,
149
+ * this method also provides strict typing:
150
+ *
151
+ * ```ts
152
+ * const result = await db
153
+ * .selectFrom('person')
154
+ * .select(eb =>
155
+ * eb.cmpr('first_name', '=', 'Jennifer').as('is_jennifer')
156
+ * )
157
+ * .executeTakeFirstOrThrow()
158
+ *
159
+ * // `is_jennifer: SqlBool` field exists in the result type.
160
+ * console.log(result.is_jennifer)
161
+ * ```
162
+ *
163
+ * The generated SQL (PostgreSQL):
164
+ *
165
+ * ```ts
166
+ * select "first_name" = $1 as "is_jennifer"
167
+ * from "person"
168
+ * ```
169
+ */
170
+ as<A extends string>(alias: A): AliasedExpression<O, A>;
171
+ as<A extends string>(alias: Expression<unknown>): AliasedExpression<O, A>;
172
+ /**
173
+ * Change the output type of the json path.
174
+ *
175
+ * This method call doesn't change the SQL in any way. This methods simply
176
+ * returns a copy of this `JSONPathBuilder` with a new output type.
177
+ */
178
+ $castTo<T>(): JSONPathBuilder<T>;
179
+ /**
180
+ * Creates the OperationNode that describes how to compile this expression into SQL.
181
+ *
182
+ * If you are creating a custom expression, it's often easiest to use the {@link sql}
183
+ * template tag to build the node:
184
+ *
185
+ * ```ts
186
+ * class SomeExpression<T> implements Expression<T> {
187
+ * toOperationNode(): OperationNode {
188
+ * return sql`some sql here`.toOperationNode()
189
+ * }
190
+ * }
191
+ * ```
192
+ */
193
+ toOperationNode(): OperationNode;
194
+ }
195
+ export declare class AliasedJSONPathBuilder<O, A extends string> implements AliasedExpression<O, A> {
196
+ #private;
197
+ constructor(jsonPath: TraversedJSONPathBuilder<any, O>, alias: A | Expression<unknown>);
198
+ /** @private */
199
+ /**
200
+ * Returns the aliased expression.
201
+ */
202
+ get expression(): Expression<O>;
203
+ /** @private */
204
+ /**
205
+ * Returns the alias.
206
+ */
207
+ get alias(): A | Expression<unknown>;
208
+ /**
209
+ * Creates the OperationNode that describes how to compile this expression into SQL.
210
+ */
211
+ toOperationNode(): AliasNode;
212
+ }
@@ -0,0 +1,186 @@
1
+ /// <reference types="./json-path-builder.d.ts" />
2
+ import { AliasNode } from '../operation-node/alias-node.js';
3
+ import { IdentifierNode } from '../operation-node/identifier-node.js';
4
+ import { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js';
5
+ import { JSONPathLegNode, } from '../operation-node/json-path-leg-node.js';
6
+ import { JSONPathNode } from '../operation-node/json-path-node.js';
7
+ import { JSONReferenceNode } from '../operation-node/json-reference-node.js';
8
+ import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
9
+ import { ValueNode } from '../operation-node/value-node.js';
10
+ export class JSONPathBuilder {
11
+ #node;
12
+ constructor(node) {
13
+ this.#node = node;
14
+ }
15
+ /**
16
+ * Access an element of a JSON array in a specific location.
17
+ *
18
+ * Since there's no guarantee an element exists in the given array location, the
19
+ * resulting type is always nullable. If you're sure the element exists, you
20
+ * should use {@link SelectQueryBuilder.$assertType} to narrow the type safely.
21
+ *
22
+ * See also {@link key} to access properties of JSON objects.
23
+ *
24
+ * ### Examples
25
+ *
26
+ * ```ts
27
+ * db.selectFrom('person').select(eb =>
28
+ * eb.ref('nicknames', '->').at(0).as('primary_nickname')
29
+ * )
30
+ *
31
+ * The generated SQL (PostgreSQL):
32
+ *
33
+ * ```sql
34
+ * select "nicknames"->0 as "primary_nickname" from "person"
35
+ *```
36
+ *
37
+ * Combined with {@link key}:
38
+ *
39
+ * ```ts
40
+ * db.selectFrom('person').select(eb =>
41
+ * eb.ref('experience', '->').at(0).key('role').as('first_role')
42
+ * )
43
+ * ```
44
+ *
45
+ * The generated SQL (PostgreSQL):
46
+ *
47
+ * ```sql
48
+ * select "experience"->0->'role' as "first_role" from "person"
49
+ * ```
50
+ *
51
+ * You can use `'last'` to access the last element of the array in MySQL:
52
+ *
53
+ * ```ts
54
+ * db.selectFrom('person').select(eb =>
55
+ * eb.ref('nicknames', '->$').at('last').as('last_nickname')
56
+ * )
57
+ * ```
58
+ *
59
+ * The generated SQL (MySQL):
60
+ *
61
+ * ```sql
62
+ * select `nicknames`->'$[last]' as `last_nickname` from `person`
63
+ * ```
64
+ *
65
+ * Or `'#-1'` in SQLite:
66
+ *
67
+ * ```ts
68
+ * db.selectFrom('person').select(eb =>
69
+ * eb.ref('nicknames', '->>$').at('#-1').as('last_nickname')
70
+ * )
71
+ * ```
72
+ *
73
+ * The generated SQL (SQLite):
74
+ *
75
+ * ```sql
76
+ * select "nicknames"->>'$[#-1]' as `last_nickname` from `person`
77
+ * ```
78
+ */
79
+ at(index) {
80
+ return this.#createBuilderWithPathLeg('ArrayLocation', index);
81
+ }
82
+ /**
83
+ * Access a property of a JSON object.
84
+ *
85
+ * If a field is optional, the resulting type will be nullable.
86
+ *
87
+ * See also {@link at} to access elements of JSON arrays.
88
+ *
89
+ * ### Examples
90
+ *
91
+ * ```ts
92
+ * db.selectFrom('person').select(eb =>
93
+ * eb.ref('address', '->').key('city').as('city')
94
+ * )
95
+ * ```
96
+ *
97
+ * The generated SQL (PostgreSQL):
98
+ *
99
+ * ```sql
100
+ * select "address"->'city' as "city" from "person"
101
+ * ```
102
+ *
103
+ * Going deeper:
104
+ *
105
+ * ```ts
106
+ * db.selectFrom('person').select(eb =>
107
+ * eb.ref('profile', '->$').key('website').key('url').as('website_url')
108
+ * )
109
+ * ```
110
+ *
111
+ * The generated SQL (MySQL):
112
+ *
113
+ * ```sql
114
+ * select `profile`->'$.website.url' as `website_url` from `person`
115
+ * ```
116
+ *
117
+ * Combined with {@link at}:
118
+ *
119
+ * ```ts
120
+ * db.selectFrom('person').select(eb =>
121
+ * eb.ref('profile', '->').key('addresses').at(0).key('city').as('city')
122
+ * )
123
+ * ```
124
+ *
125
+ * The generated SQL (PostgreSQL):
126
+ *
127
+ * ```sql
128
+ * select "profile"->'addresses'->0->'city' as "city" from "person"
129
+ * ```
130
+ */
131
+ key(key) {
132
+ return this.#createBuilderWithPathLeg('Member', key);
133
+ }
134
+ #createBuilderWithPathLeg(legType, value) {
135
+ return new TraversedJSONPathBuilder(JSONReferenceNode.cloneWithTraversal(this.#node, JSONPathNode.is(this.#node.traversal)
136
+ ? JSONPathNode.cloneWithLeg(this.#node.traversal, JSONPathLegNode.create(legType, value))
137
+ : JSONOperatorChainNode.cloneWithValue(this.#node.traversal, ValueNode.createImmediate(value))));
138
+ }
139
+ }
140
+ export class TraversedJSONPathBuilder extends JSONPathBuilder {
141
+ #node;
142
+ constructor(node) {
143
+ super(node);
144
+ this.#node = node;
145
+ }
146
+ /** @private */
147
+ get expressionType() {
148
+ return undefined;
149
+ }
150
+ as(alias) {
151
+ return new AliasedJSONPathBuilder(this, alias);
152
+ }
153
+ /**
154
+ * Change the output type of the json path.
155
+ *
156
+ * This method call doesn't change the SQL in any way. This methods simply
157
+ * returns a copy of this `JSONPathBuilder` with a new output type.
158
+ */
159
+ $castTo() {
160
+ return new JSONPathBuilder(this.#node);
161
+ }
162
+ toOperationNode() {
163
+ return this.#node;
164
+ }
165
+ }
166
+ export class AliasedJSONPathBuilder {
167
+ #jsonPath;
168
+ #alias;
169
+ constructor(jsonPath, alias) {
170
+ this.#jsonPath = jsonPath;
171
+ this.#alias = alias;
172
+ }
173
+ /** @private */
174
+ get expression() {
175
+ return this.#jsonPath;
176
+ }
177
+ /** @private */
178
+ get alias() {
179
+ return this.#alias;
180
+ }
181
+ toOperationNode() {
182
+ return AliasNode.create(this.#jsonPath.toOperationNode(), isOperationNodeSource(this.#alias)
183
+ ? this.#alias.toOperationNode()
184
+ : IdentifierNode.create(this.#alias));
185
+ }
186
+ }
@@ -1,5 +1,5 @@
1
1
  import { QueryNode } from '../operation-node/query-node.js';
2
- export declare type NoResultErrorConstructor = new (node: QueryNode) => Error;
2
+ export type NoResultErrorConstructor = new (node: QueryNode) => Error;
3
3
  export declare class NoResultError extends Error {
4
4
  /**
5
5
  * The operation node tree of the query that was executed.