kysely 0.23.5 → 0.24.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 (300) hide show
  1. package/README.md +46 -24
  2. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
  3. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -1
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +1 -1
  5. package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
  6. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -0
  7. package/dist/cjs/dialect/sqlite/sqlite-dialect.js +1 -0
  8. package/dist/cjs/driver/runtime-driver.js +4 -2
  9. package/dist/cjs/expression/expression-builder.d.ts +386 -0
  10. package/dist/cjs/expression/expression-builder.js +92 -0
  11. package/dist/cjs/expression/expression-wrapper.d.ts +92 -0
  12. package/dist/cjs/expression/expression-wrapper.js +54 -0
  13. package/dist/cjs/expression/expression.d.ts +1 -1
  14. package/dist/cjs/helpers/mysql.d.ts +140 -0
  15. package/dist/cjs/helpers/mysql.js +170 -0
  16. package/dist/cjs/helpers/postgres.d.ts +133 -0
  17. package/dist/cjs/helpers/postgres.js +141 -0
  18. package/dist/cjs/index.d.ts +4 -3
  19. package/dist/cjs/index.js +4 -2
  20. package/dist/cjs/kysely.d.ts +10 -0
  21. package/dist/cjs/kysely.js +12 -1
  22. package/dist/cjs/migration/file-migration-provider.d.ts +5 -2
  23. package/dist/cjs/migration/migrator.d.ts +5 -2
  24. package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -3
  25. package/dist/cjs/operation-node/create-index-node.d.ts +2 -0
  26. package/dist/cjs/operation-node/delete-query-node.d.ts +0 -1
  27. package/dist/cjs/operation-node/delete-query-node.js +0 -6
  28. package/dist/cjs/operation-node/function-node.d.ts +13 -0
  29. package/dist/cjs/operation-node/function-node.js +19 -0
  30. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  31. package/dist/cjs/operation-node/operation-node-transformer.js +9 -0
  32. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  33. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  34. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  35. package/dist/cjs/operation-node/operator-node.d.ts +13 -2
  36. package/dist/cjs/operation-node/operator-node.js +38 -3
  37. package/dist/cjs/operation-node/query-node.d.ts +25 -8
  38. package/dist/cjs/operation-node/query-node.js +9 -2
  39. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  40. package/dist/cjs/operation-node/select-query-node.js +0 -6
  41. package/dist/cjs/operation-node/update-query-node.d.ts +0 -1
  42. package/dist/cjs/operation-node/update-query-node.js +0 -6
  43. package/dist/cjs/parser/binary-operation-parser.d.ts +9 -10
  44. package/dist/cjs/parser/binary-operation-parser.js +89 -39
  45. package/dist/cjs/parser/coalesce-parser.d.ts +0 -2
  46. package/dist/cjs/parser/coalesce-parser.js +0 -9
  47. package/dist/cjs/parser/expression-parser.d.ts +7 -3
  48. package/dist/cjs/parser/expression-parser.js +3 -3
  49. package/dist/cjs/parser/group-by-parser.d.ts +3 -2
  50. package/dist/cjs/parser/group-by-parser.js +3 -0
  51. package/dist/cjs/parser/insert-values-parser.d.ts +4 -1
  52. package/dist/cjs/parser/insert-values-parser.js +19 -13
  53. package/dist/cjs/parser/join-parser.js +1 -1
  54. package/dist/cjs/parser/parse-utils.d.ts +0 -2
  55. package/dist/cjs/parser/parse-utils.js +1 -8
  56. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  57. package/dist/cjs/parser/select-parser.d.ts +5 -13
  58. package/dist/cjs/parser/select-parser.js +8 -4
  59. package/dist/cjs/parser/table-parser.d.ts +5 -3
  60. package/dist/cjs/parser/unary-operation-parser.d.ts +5 -2
  61. package/dist/cjs/parser/unary-operation-parser.js +9 -8
  62. package/dist/cjs/parser/update-set-parser.d.ts +4 -1
  63. package/dist/cjs/parser/update-set-parser.js +9 -4
  64. package/dist/cjs/parser/value-parser.d.ts +5 -0
  65. package/dist/cjs/parser/value-parser.js +1 -3
  66. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
  67. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  68. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +40 -113
  69. package/dist/cjs/query-builder/aggregate-function-builder.js +23 -63
  70. package/dist/cjs/query-builder/delete-query-builder.d.ts +220 -201
  71. package/dist/cjs/query-builder/delete-query-builder.js +21 -27
  72. package/dist/cjs/query-builder/delete-result.js +3 -0
  73. package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +62 -0
  74. package/dist/cjs/query-builder/deprecated-having-expression-builder.js +2 -0
  75. package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +62 -0
  76. package/dist/cjs/query-builder/deprecated-on-expression-builder.js +2 -0
  77. package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +62 -0
  78. package/dist/cjs/query-builder/deprecated-where-expression-builder.js +2 -0
  79. package/dist/cjs/query-builder/function-module.d.ts +40 -12
  80. package/dist/cjs/query-builder/function-module.js +43 -329
  81. package/dist/cjs/query-builder/having-interface.d.ts +19 -16
  82. package/dist/cjs/query-builder/insert-query-builder.d.ts +75 -26
  83. package/dist/cjs/query-builder/insert-query-builder.js +21 -29
  84. package/dist/cjs/query-builder/insert-result.js +3 -0
  85. package/dist/cjs/query-builder/join-builder.d.ts +23 -26
  86. package/dist/cjs/query-builder/join-builder.js +17 -22
  87. package/dist/cjs/query-builder/no-result-error.d.ts +1 -0
  88. package/dist/cjs/query-builder/no-result-error.js +5 -1
  89. package/dist/cjs/query-builder/on-conflict-builder.d.ts +158 -276
  90. package/dist/cjs/query-builder/on-conflict-builder.js +52 -36
  91. package/dist/cjs/query-builder/over-builder.d.ts +5 -0
  92. package/dist/cjs/query-builder/over-builder.js +7 -0
  93. package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
  94. package/dist/cjs/query-builder/select-query-builder.d.ts +148 -237
  95. package/dist/cjs/query-builder/select-query-builder.js +333 -78
  96. package/dist/cjs/query-builder/update-query-builder.d.ts +145 -213
  97. package/dist/cjs/query-builder/update-query-builder.js +21 -115
  98. package/dist/cjs/query-builder/update-result.js +3 -0
  99. package/dist/cjs/query-builder/where-interface.d.ts +71 -184
  100. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  101. package/dist/cjs/query-compiler/default-query-compiler.js +17 -1
  102. package/dist/cjs/query-creator.d.ts +9 -2
  103. package/dist/cjs/query-creator.js +1 -24
  104. package/dist/cjs/query-executor/query-executor.d.ts +3 -3
  105. package/dist/cjs/raw-builder/raw-builder.d.ts +5 -3
  106. package/dist/cjs/raw-builder/raw-builder.js +13 -7
  107. package/dist/cjs/raw-builder/sql.d.ts +17 -9
  108. package/dist/cjs/raw-builder/sql.js +8 -2
  109. package/dist/cjs/schema/alter-column-builder.d.ts +5 -0
  110. package/dist/cjs/schema/alter-column-builder.js +7 -0
  111. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
  112. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
  113. package/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts +5 -0
  114. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +7 -0
  115. package/dist/cjs/schema/column-definition-builder.d.ts +6 -1
  116. package/dist/cjs/schema/column-definition-builder.js +8 -1
  117. package/dist/cjs/schema/create-index-builder.d.ts +51 -9
  118. package/dist/cjs/schema/create-index-builder.js +17 -0
  119. package/dist/cjs/schema/create-schema-builder.d.ts +5 -0
  120. package/dist/cjs/schema/create-schema-builder.js +7 -0
  121. package/dist/cjs/schema/create-table-builder.d.ts +3 -1
  122. package/dist/cjs/schema/create-table-builder.js +3 -1
  123. package/dist/cjs/schema/create-type-builder.d.ts +5 -0
  124. package/dist/cjs/schema/create-type-builder.js +7 -0
  125. package/dist/cjs/schema/create-view-builder.d.ts +5 -0
  126. package/dist/cjs/schema/create-view-builder.js +7 -0
  127. package/dist/cjs/schema/drop-index-builder.d.ts +5 -0
  128. package/dist/cjs/schema/drop-index-builder.js +7 -0
  129. package/dist/cjs/schema/drop-schema-builder.d.ts +5 -0
  130. package/dist/cjs/schema/drop-schema-builder.js +7 -0
  131. package/dist/cjs/schema/drop-table-builder.d.ts +5 -0
  132. package/dist/cjs/schema/drop-table-builder.js +7 -0
  133. package/dist/cjs/schema/drop-type-builder.d.ts +5 -0
  134. package/dist/cjs/schema/drop-type-builder.js +7 -0
  135. package/dist/cjs/schema/drop-view-builder.d.ts +5 -0
  136. package/dist/cjs/schema/drop-view-builder.js +7 -0
  137. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +5 -0
  138. package/dist/cjs/schema/foreign-key-constraint-builder.js +7 -0
  139. package/dist/cjs/util/compilable.d.ts +1 -0
  140. package/dist/cjs/util/compilable.js +6 -0
  141. package/dist/cjs/util/explainable.d.ts +35 -0
  142. package/dist/cjs/util/log.d.ts +2 -0
  143. package/dist/cjs/util/object-utils.js +1 -1
  144. package/dist/cjs/util/streamable.d.ts +29 -0
  145. package/dist/cjs/util/streamable.js +2 -0
  146. package/dist/cjs/util/type-utils.d.ts +1 -0
  147. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  148. package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -1
  149. package/dist/esm/dialect/mysql/mysql-driver.js +1 -1
  150. package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
  151. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -0
  152. package/dist/esm/dialect/sqlite/sqlite-dialect.js +1 -0
  153. package/dist/esm/driver/runtime-driver.js +4 -2
  154. package/dist/esm/expression/expression-builder.d.ts +386 -0
  155. package/dist/esm/expression/expression-builder.js +88 -0
  156. package/dist/esm/expression/expression-wrapper.d.ts +92 -0
  157. package/dist/esm/expression/expression-wrapper.js +50 -0
  158. package/dist/esm/expression/expression.d.ts +1 -1
  159. package/dist/esm/helpers/mysql.d.ts +140 -0
  160. package/dist/esm/helpers/mysql.js +165 -0
  161. package/dist/esm/helpers/postgres.d.ts +133 -0
  162. package/dist/esm/helpers/postgres.js +136 -0
  163. package/dist/esm/index.d.ts +4 -3
  164. package/dist/esm/index.js +2 -1
  165. package/dist/esm/kysely.d.ts +10 -0
  166. package/dist/esm/kysely.js +13 -2
  167. package/dist/esm/migration/file-migration-provider.d.ts +5 -2
  168. package/dist/esm/migration/migrator.d.ts +5 -2
  169. package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -3
  170. package/dist/esm/operation-node/create-index-node.d.ts +2 -0
  171. package/dist/esm/operation-node/delete-query-node.d.ts +0 -1
  172. package/dist/esm/operation-node/delete-query-node.js +0 -6
  173. package/dist/esm/operation-node/function-node.d.ts +13 -0
  174. package/dist/esm/operation-node/function-node.js +17 -0
  175. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  176. package/dist/esm/operation-node/operation-node-transformer.js +9 -0
  177. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  178. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  179. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  180. package/dist/esm/operation-node/operator-node.d.ts +13 -2
  181. package/dist/esm/operation-node/operator-node.js +34 -3
  182. package/dist/esm/operation-node/query-node.d.ts +25 -8
  183. package/dist/esm/operation-node/query-node.js +9 -2
  184. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  185. package/dist/esm/operation-node/select-query-node.js +0 -6
  186. package/dist/esm/operation-node/update-query-node.d.ts +0 -1
  187. package/dist/esm/operation-node/update-query-node.js +0 -6
  188. package/dist/esm/parser/binary-operation-parser.d.ts +9 -10
  189. package/dist/esm/parser/binary-operation-parser.js +85 -37
  190. package/dist/esm/parser/coalesce-parser.d.ts +0 -2
  191. package/dist/esm/parser/coalesce-parser.js +1 -7
  192. package/dist/esm/parser/expression-parser.d.ts +7 -3
  193. package/dist/esm/parser/expression-parser.js +3 -3
  194. package/dist/esm/parser/group-by-parser.d.ts +3 -2
  195. package/dist/esm/parser/group-by-parser.js +3 -0
  196. package/dist/esm/parser/insert-values-parser.d.ts +4 -1
  197. package/dist/esm/parser/insert-values-parser.js +18 -12
  198. package/dist/esm/parser/join-parser.js +2 -2
  199. package/dist/esm/parser/parse-utils.d.ts +0 -2
  200. package/dist/esm/parser/parse-utils.js +0 -6
  201. package/dist/esm/parser/returning-parser.d.ts +2 -1
  202. package/dist/esm/parser/select-parser.d.ts +5 -13
  203. package/dist/esm/parser/select-parser.js +7 -3
  204. package/dist/esm/parser/table-parser.d.ts +5 -3
  205. package/dist/esm/parser/unary-operation-parser.d.ts +5 -2
  206. package/dist/esm/parser/unary-operation-parser.js +8 -8
  207. package/dist/esm/parser/update-set-parser.d.ts +4 -1
  208. package/dist/esm/parser/update-set-parser.js +7 -2
  209. package/dist/esm/parser/value-parser.d.ts +5 -0
  210. package/dist/esm/parser/value-parser.js +1 -3
  211. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
  212. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  213. package/dist/esm/query-builder/aggregate-function-builder.d.ts +40 -113
  214. package/dist/esm/query-builder/aggregate-function-builder.js +24 -64
  215. package/dist/esm/query-builder/delete-query-builder.d.ts +220 -201
  216. package/dist/esm/query-builder/delete-query-builder.js +24 -30
  217. package/dist/esm/query-builder/delete-result.js +3 -0
  218. package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +62 -0
  219. package/dist/esm/query-builder/deprecated-having-expression-builder.js +2 -0
  220. package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +62 -0
  221. package/dist/esm/query-builder/deprecated-on-expression-builder.js +2 -0
  222. package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +62 -0
  223. package/dist/esm/query-builder/deprecated-where-expression-builder.js +2 -0
  224. package/dist/esm/query-builder/function-module.d.ts +40 -12
  225. package/dist/esm/query-builder/function-module.js +42 -328
  226. package/dist/esm/query-builder/having-interface.d.ts +19 -16
  227. package/dist/esm/query-builder/insert-query-builder.d.ts +75 -26
  228. package/dist/esm/query-builder/insert-query-builder.js +25 -33
  229. package/dist/esm/query-builder/insert-result.js +3 -0
  230. package/dist/esm/query-builder/join-builder.d.ts +23 -26
  231. package/dist/esm/query-builder/join-builder.js +18 -23
  232. package/dist/esm/query-builder/no-result-error.d.ts +1 -0
  233. package/dist/esm/query-builder/no-result-error.js +3 -0
  234. package/dist/esm/query-builder/on-conflict-builder.d.ts +158 -276
  235. package/dist/esm/query-builder/on-conflict-builder.js +54 -38
  236. package/dist/esm/query-builder/over-builder.d.ts +5 -0
  237. package/dist/esm/query-builder/over-builder.js +7 -0
  238. package/dist/esm/query-builder/returning-interface.d.ts +2 -2
  239. package/dist/esm/query-builder/select-query-builder.d.ts +148 -237
  240. package/dist/esm/query-builder/select-query-builder.js +337 -82
  241. package/dist/esm/query-builder/update-query-builder.d.ts +145 -213
  242. package/dist/esm/query-builder/update-query-builder.js +25 -119
  243. package/dist/esm/query-builder/update-result.js +3 -0
  244. package/dist/esm/query-builder/where-interface.d.ts +71 -184
  245. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  246. package/dist/esm/query-compiler/default-query-compiler.js +17 -1
  247. package/dist/esm/query-creator.d.ts +9 -2
  248. package/dist/esm/query-creator.js +1 -24
  249. package/dist/esm/query-executor/query-executor.d.ts +3 -3
  250. package/dist/esm/raw-builder/raw-builder.d.ts +5 -3
  251. package/dist/esm/raw-builder/raw-builder.js +13 -7
  252. package/dist/esm/raw-builder/sql.d.ts +17 -9
  253. package/dist/esm/raw-builder/sql.js +8 -2
  254. package/dist/esm/schema/alter-column-builder.d.ts +5 -0
  255. package/dist/esm/schema/alter-column-builder.js +7 -0
  256. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
  257. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
  258. package/dist/esm/schema/alter-table-drop-constraint-builder.d.ts +5 -0
  259. package/dist/esm/schema/alter-table-drop-constraint-builder.js +7 -0
  260. package/dist/esm/schema/column-definition-builder.d.ts +6 -1
  261. package/dist/esm/schema/column-definition-builder.js +8 -1
  262. package/dist/esm/schema/create-index-builder.d.ts +51 -9
  263. package/dist/esm/schema/create-index-builder.js +17 -0
  264. package/dist/esm/schema/create-schema-builder.d.ts +5 -0
  265. package/dist/esm/schema/create-schema-builder.js +7 -0
  266. package/dist/esm/schema/create-table-builder.d.ts +3 -1
  267. package/dist/esm/schema/create-table-builder.js +3 -1
  268. package/dist/esm/schema/create-type-builder.d.ts +5 -0
  269. package/dist/esm/schema/create-type-builder.js +7 -0
  270. package/dist/esm/schema/create-view-builder.d.ts +5 -0
  271. package/dist/esm/schema/create-view-builder.js +7 -0
  272. package/dist/esm/schema/drop-index-builder.d.ts +5 -0
  273. package/dist/esm/schema/drop-index-builder.js +7 -0
  274. package/dist/esm/schema/drop-schema-builder.d.ts +5 -0
  275. package/dist/esm/schema/drop-schema-builder.js +7 -0
  276. package/dist/esm/schema/drop-table-builder.d.ts +5 -0
  277. package/dist/esm/schema/drop-table-builder.js +7 -0
  278. package/dist/esm/schema/drop-type-builder.d.ts +5 -0
  279. package/dist/esm/schema/drop-type-builder.js +7 -0
  280. package/dist/esm/schema/drop-view-builder.d.ts +5 -0
  281. package/dist/esm/schema/drop-view-builder.js +7 -0
  282. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +5 -0
  283. package/dist/esm/schema/foreign-key-constraint-builder.js +7 -0
  284. package/dist/esm/util/compilable.d.ts +1 -0
  285. package/dist/esm/util/compilable.js +4 -1
  286. package/dist/esm/util/explainable.d.ts +35 -0
  287. package/dist/esm/util/log.d.ts +2 -0
  288. package/dist/esm/util/object-utils.js +1 -1
  289. package/dist/esm/util/streamable.d.ts +29 -0
  290. package/dist/esm/util/streamable.js +2 -0
  291. package/dist/esm/util/type-utils.d.ts +1 -0
  292. package/helpers/mysql.d.ts +1 -0
  293. package/helpers/mysql.js +1 -0
  294. package/helpers/postgres.d.ts +1 -0
  295. package/helpers/postgres.js +1 -0
  296. package/package.json +26 -9
  297. package/dist/cjs/query-builder/expression-builder.d.ts +0 -126
  298. package/dist/cjs/query-builder/expression-builder.js +0 -107
  299. package/dist/esm/query-builder/expression-builder.d.ts +0 -126
  300. package/dist/esm/query-builder/expression-builder.js +0 -104
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expressionBuilder = exports.createExpressionBuilder = void 0;
4
+ const select_query_builder_js_1 = require("../query-builder/select-query-builder.js");
5
+ const select_query_node_js_1 = require("../operation-node/select-query-node.js");
6
+ const table_parser_js_1 = require("../parser/table-parser.js");
7
+ const with_schema_plugin_js_1 = require("../plugin/with-schema/with-schema-plugin.js");
8
+ const query_id_js_1 = require("../util/query-id.js");
9
+ const function_module_js_1 = require("../query-builder/function-module.js");
10
+ const reference_parser_js_1 = require("../parser/reference-parser.js");
11
+ const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
12
+ const and_node_js_1 = require("../operation-node/and-node.js");
13
+ const or_node_js_1 = require("../operation-node/or-node.js");
14
+ const parens_node_js_1 = require("../operation-node/parens-node.js");
15
+ const expression_wrapper_js_1 = require("./expression-wrapper.js");
16
+ const unary_operation_parser_js_1 = require("../parser/unary-operation-parser.js");
17
+ const value_parser_js_1 = require("../parser/value-parser.js");
18
+ const noop_query_executor_js_1 = require("../query-executor/noop-query-executor.js");
19
+ const value_node_js_1 = require("../operation-node/value-node.js");
20
+ function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_EXECUTOR) {
21
+ function unary(op, expr) {
22
+ return new expression_wrapper_js_1.ExpressionWrapper((0, unary_operation_parser_js_1.parseUnaryOperation)(op, expr));
23
+ }
24
+ return {
25
+ get fn() {
26
+ return (0, function_module_js_1.createFunctionModule)();
27
+ },
28
+ selectFrom(table) {
29
+ return new select_query_builder_js_1.SelectQueryBuilder({
30
+ queryId: (0, query_id_js_1.createQueryId)(),
31
+ executor: executor,
32
+ queryNode: select_query_node_js_1.SelectQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(table)),
33
+ });
34
+ },
35
+ ref(reference) {
36
+ return new expression_wrapper_js_1.ExpressionWrapper((0, reference_parser_js_1.parseStringReference)(reference));
37
+ },
38
+ val(value) {
39
+ return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseValueExpressionOrList)(value));
40
+ },
41
+ cmpr(lhs, op, rhs) {
42
+ return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
43
+ },
44
+ bxp(lhs, op, rhs) {
45
+ return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
46
+ },
47
+ unary,
48
+ not(expr) {
49
+ return unary('not', expr);
50
+ },
51
+ exists(expr) {
52
+ return unary('exists', expr);
53
+ },
54
+ neg(expr) {
55
+ return unary('-', expr);
56
+ },
57
+ and(exprs) {
58
+ if (exprs.length === 0) {
59
+ return new expression_wrapper_js_1.ExpressionWrapper(value_node_js_1.ValueNode.createImmediate(true));
60
+ }
61
+ else if (exprs.length === 1) {
62
+ return new expression_wrapper_js_1.ExpressionWrapper(exprs[0].toOperationNode());
63
+ }
64
+ let node = and_node_js_1.AndNode.create(exprs[0].toOperationNode(), exprs[1].toOperationNode());
65
+ for (let i = 2; i < exprs.length; ++i) {
66
+ node = and_node_js_1.AndNode.create(node, exprs[i].toOperationNode());
67
+ }
68
+ return new expression_wrapper_js_1.ExpressionWrapper(parens_node_js_1.ParensNode.create(node));
69
+ },
70
+ or(exprs) {
71
+ if (exprs.length === 0) {
72
+ return new expression_wrapper_js_1.ExpressionWrapper(value_node_js_1.ValueNode.createImmediate(false));
73
+ }
74
+ else if (exprs.length === 1) {
75
+ return new expression_wrapper_js_1.ExpressionWrapper(exprs[0].toOperationNode());
76
+ }
77
+ let node = or_node_js_1.OrNode.create(exprs[0].toOperationNode(), exprs[1].toOperationNode());
78
+ for (let i = 2; i < exprs.length; ++i) {
79
+ node = or_node_js_1.OrNode.create(node, exprs[i].toOperationNode());
80
+ }
81
+ return new expression_wrapper_js_1.ExpressionWrapper(parens_node_js_1.ParensNode.create(node));
82
+ },
83
+ withSchema(schema) {
84
+ return createExpressionBuilder(executor.withPluginAtFront(new with_schema_plugin_js_1.WithSchemaPlugin(schema)));
85
+ },
86
+ };
87
+ }
88
+ exports.createExpressionBuilder = createExpressionBuilder;
89
+ function expressionBuilder(_) {
90
+ return createExpressionBuilder();
91
+ }
92
+ exports.expressionBuilder = expressionBuilder;
@@ -0,0 +1,92 @@
1
+ import { AliasNode } from '../operation-node/alias-node.js';
2
+ import { OperationNode } from '../operation-node/operation-node.js';
3
+ import { AliasedExpression, Expression } from './expression.js';
4
+ export declare class ExpressionWrapper<T> implements Expression<T> {
5
+ #private;
6
+ constructor(node: OperationNode);
7
+ /** @private */
8
+ /**
9
+ * All expressions need to have this getter for complicated type-related reasons.
10
+ * Simply add this getter for your expression and always return `undefined` from it:
11
+ *
12
+ * ```ts
13
+ * class SomeExpression<T> implements Expression<T> {
14
+ * get expressionType(): T | undefined {
15
+ * return undefined
16
+ * }
17
+ * }
18
+ * ```
19
+ *
20
+ * The getter is needed to make the expression assignable to another expression only
21
+ * if the types `T` are assignable. Without this property (or some other property
22
+ * that references `T`), you could assing `Expression<string>` to `Expression<number>`.
23
+ */
24
+ get expressionType(): T | undefined;
25
+ /**
26
+ * Returns an aliased version of the expression.
27
+ *
28
+ * In addition to slapping `as "the_alias"` to the end of the SQL,
29
+ * this method also provides strict typing:
30
+ *
31
+ * ```ts
32
+ * const result = await db
33
+ * .selectFrom('person')
34
+ * .select(eb =>
35
+ * eb.cmpr('first_name', '=', 'Jennifer').as('is_jennifer')
36
+ * )
37
+ * .executeTakeFirstOrThrow()
38
+ *
39
+ * // `is_jennifer: SqlBool` field exists in the result type.
40
+ * console.log(result.is_jennifer)
41
+ * ```
42
+ *
43
+ * The generated SQL (PostgreSQL):
44
+ *
45
+ * ```ts
46
+ * select "first_name" = $1 as "is_jennifer"
47
+ * from "person"
48
+ * ```
49
+ */
50
+ as<A extends string>(alias: A): AliasedExpression<T, A>;
51
+ as<A extends string>(alias: Expression<unknown>): AliasedExpression<T, A>;
52
+ /**
53
+ * Change the output type of the raw expression.
54
+ *
55
+ * This method call doesn't change the SQL in any way. This methods simply
56
+ * returns a copy of this `ExpressionWrapper` with a new output type.
57
+ */
58
+ $castTo<T>(): ExpressionWrapper<T>;
59
+ /**
60
+ * Creates the OperationNode that describes how to compile this expression into SQL.
61
+ *
62
+ * If you are creating a custom expression, it's often easiest to use the {@link sql}
63
+ * template tag to build the node:
64
+ *
65
+ * ```ts
66
+ * class SomeExpression<T> implements Expression<T> {
67
+ * toOperationNode(): OperationNode {
68
+ * return sql`some sql here`.toOperationNode()
69
+ * }
70
+ * }
71
+ * ```
72
+ */
73
+ toOperationNode(): OperationNode;
74
+ }
75
+ export declare class AliasedExpressionWrapper<T, A extends string> implements AliasedExpression<T, A> {
76
+ #private;
77
+ constructor(expr: Expression<T>, alias: A | Expression<unknown>);
78
+ /** @private */
79
+ /**
80
+ * Returns the aliased expression.
81
+ */
82
+ get expression(): Expression<T>;
83
+ /** @private */
84
+ /**
85
+ * Returns the alias.
86
+ */
87
+ get alias(): A | Expression<unknown>;
88
+ /**
89
+ * Creates the OperationNode that describes how to compile this expression into SQL.
90
+ */
91
+ toOperationNode(): AliasNode;
92
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AliasedExpressionWrapper = exports.ExpressionWrapper = void 0;
4
+ const alias_node_js_1 = require("../operation-node/alias-node.js");
5
+ const identifier_node_js_1 = require("../operation-node/identifier-node.js");
6
+ const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
7
+ class ExpressionWrapper {
8
+ #node;
9
+ constructor(node) {
10
+ this.#node = node;
11
+ }
12
+ /** @private */
13
+ get expressionType() {
14
+ return undefined;
15
+ }
16
+ as(alias) {
17
+ return new AliasedExpressionWrapper(this, alias);
18
+ }
19
+ /**
20
+ * Change the output type of the raw expression.
21
+ *
22
+ * This method call doesn't change the SQL in any way. This methods simply
23
+ * returns a copy of this `ExpressionWrapper` with a new output type.
24
+ */
25
+ $castTo() {
26
+ return new ExpressionWrapper(this.#node);
27
+ }
28
+ toOperationNode() {
29
+ return this.#node;
30
+ }
31
+ }
32
+ exports.ExpressionWrapper = ExpressionWrapper;
33
+ class AliasedExpressionWrapper {
34
+ #expr;
35
+ #alias;
36
+ constructor(expr, alias) {
37
+ this.#expr = expr;
38
+ this.#alias = alias;
39
+ }
40
+ /** @private */
41
+ get expression() {
42
+ return this.#expr;
43
+ }
44
+ /** @private */
45
+ get alias() {
46
+ return this.#alias;
47
+ }
48
+ toOperationNode() {
49
+ return alias_node_js_1.AliasNode.create(this.#expr.toOperationNode(), (0, operation_node_source_js_1.isOperationNodeSource)(this.#alias)
50
+ ? this.#alias.toOperationNode()
51
+ : identifier_node_js_1.IdentifierNode.create(this.#alias));
52
+ }
53
+ }
54
+ exports.AliasedExpressionWrapper = AliasedExpressionWrapper;
@@ -90,7 +90,7 @@ export interface AliasedExpression<T, A extends string> extends OperationNodeSou
90
90
  /**
91
91
  * Returns the alias.
92
92
  */
93
- get alias(): A;
93
+ get alias(): A | Expression<unknown>;
94
94
  /**
95
95
  * Creates the OperationNode that describes how to compile this expression into SQL.
96
96
  */
@@ -0,0 +1,140 @@
1
+ import { Expression } from '../expression/expression.js';
2
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
3
+ import { RawBuilder } from '../raw-builder/raw-builder.js';
4
+ import { Simplify } from '../util/type-utils.js';
5
+ /**
6
+ * A MySQL helper for aggregating a subquery (or other expression) into a JSON array.
7
+ *
8
+ * NOTE: This helper is only guaranteed to fully work with the built-in `MysqlDialect`.
9
+ * While the produced SQL is compatibe with all MySQL databases, some 3rd party dialects
10
+ * may not parse the nested results into arrays.
11
+ *
12
+ * ### Examples
13
+ *
14
+ * ```ts
15
+ * const result = await db
16
+ * .selectFrom('person')
17
+ * .select((eb) => [
18
+ * 'id',
19
+ * jsonArrayFrom(
20
+ * eb.selectFrom('pet')
21
+ * .select(['pet.id as pet_id', 'pet.name'])
22
+ * .where('pet.owner_id', '=', 'person.id')
23
+ * .orderBy('pet.name')
24
+ * ).as('pets')
25
+ * ])
26
+ * .execute()
27
+ *
28
+ * result[0].id
29
+ * result[0].pets[0].pet_id
30
+ * result[0].pets[0].name
31
+ * ```
32
+ *
33
+ * The generated SQL (MySQL):
34
+ *
35
+ * ```sql
36
+ * select `id`, (
37
+ * select cast(coalesce(json_arrayagg(json_object(
38
+ * 'pet_id', `agg`.`pet_id`,
39
+ * 'name', `agg`.`name`
40
+ * )), '[]') as json) from (
41
+ * select `pet`.`id` as `pet_id`, `pet`.`name`
42
+ * from `pet`
43
+ * where `pet`.`owner_id` = `person`.`id`
44
+ * order by `pet`.`name`
45
+ * ) as `agg`
46
+ * ) as `pets`
47
+ * from `person`
48
+ * ```
49
+ */
50
+ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O>[]>;
51
+ /**
52
+ * A MySQL helper for turning a subquery (or other expression) into a JSON object.
53
+ *
54
+ * The subquery must only return one row.
55
+ *
56
+ * NOTE: This helper is only guaranteed to fully work with the built-in `MysqlDialect`.
57
+ * While the produced SQL is compatibe with all MySQL databases, some 3rd party dialects
58
+ * may not parse the nested results into objects.
59
+ *
60
+ * ### Examples
61
+ *
62
+ * ```ts
63
+ * const result = await db
64
+ * .selectFrom('person')
65
+ * .select((eb) => [
66
+ * 'id',
67
+ * jsonObjectFrom(
68
+ * eb.selectFrom('pet')
69
+ * .select(['pet.id as pet_id', 'pet.name'])
70
+ * .where('pet.owner_id', '=', 'person.id')
71
+ * .where('pet.is_favorite', '=', true)
72
+ * ).as('favorite_pet')
73
+ * ])
74
+ * .execute()
75
+ *
76
+ * result[0].id
77
+ * result[0].favorite_pet.pet_id
78
+ * result[0].favorite_pet.name
79
+ * ```
80
+ *
81
+ * The generated SQL (MySQL):
82
+ *
83
+ * ```sql
84
+ * select `id`, (
85
+ * select json_object(
86
+ * 'pet_id', `obj`.`pet_id`,
87
+ * 'name', `obj`.`name`
88
+ * ) from (
89
+ * select `pet`.`id` as `pet_id`, `pet`.`name`
90
+ * from `pet`
91
+ * where `pet`.`owner_id` = `person`.`id`
92
+ * and `pet`.`is_favorite` = ?
93
+ * ) as obj
94
+ * ) as `favorite_pet`
95
+ * from `person`
96
+ * ```
97
+ */
98
+ export declare function jsonObjectFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O>>;
99
+ /**
100
+ * The MySQL `json_object` function.
101
+ *
102
+ * NOTE: This helper is only guaranteed to fully work with the built-in `MysqlDialect`.
103
+ * While the produced SQL is compatibe with all MySQL databases, some 3rd party dialects
104
+ * may not parse the nested results into objects.
105
+ *
106
+ * ### Examples
107
+ *
108
+ * ```ts
109
+ * const result = await db
110
+ * .selectFrom('person')
111
+ * .select((eb) => [
112
+ * 'id',
113
+ * jsonBuildObject({
114
+ * first: eb.ref('first_name'),
115
+ * last: eb.ref('last_name'),
116
+ * full: eb.fn('concat', ['first_name', eb.val(' '), 'last_name'])
117
+ * }).as('name')
118
+ * ])
119
+ * .execute()
120
+ *
121
+ * result[0].id
122
+ * result[0].name.first
123
+ * result[0].name.last
124
+ * result[0].name.full
125
+ * ```
126
+ *
127
+ * The generated SQL (MySQL):
128
+ *
129
+ * ```sql
130
+ * select "id", json_object(
131
+ * 'first', first_name,
132
+ * 'last', last_name,
133
+ * 'full', concat(`first_name`, ?, `last_name`)
134
+ * ) as "name"
135
+ * from "person"
136
+ * ```
137
+ */
138
+ export declare function jsonBuildObject<O extends Record<string, Expression<unknown>>>(obj: O): RawBuilder<Simplify<{
139
+ [K in keyof O]: O[K] extends Expression<infer V> ? V : never;
140
+ }>>;
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsonBuildObject = exports.jsonObjectFrom = exports.jsonArrayFrom = void 0;
4
+ const alias_node_js_1 = require("../operation-node/alias-node.js");
5
+ const column_node_js_1 = require("../operation-node/column-node.js");
6
+ const identifier_node_js_1 = require("../operation-node/identifier-node.js");
7
+ const reference_node_js_1 = require("../operation-node/reference-node.js");
8
+ const sql_js_1 = require("../raw-builder/sql.js");
9
+ /**
10
+ * A MySQL helper for aggregating a subquery (or other expression) into a JSON array.
11
+ *
12
+ * NOTE: This helper is only guaranteed to fully work with the built-in `MysqlDialect`.
13
+ * While the produced SQL is compatibe with all MySQL databases, some 3rd party dialects
14
+ * may not parse the nested results into arrays.
15
+ *
16
+ * ### Examples
17
+ *
18
+ * ```ts
19
+ * const result = await db
20
+ * .selectFrom('person')
21
+ * .select((eb) => [
22
+ * 'id',
23
+ * jsonArrayFrom(
24
+ * eb.selectFrom('pet')
25
+ * .select(['pet.id as pet_id', 'pet.name'])
26
+ * .where('pet.owner_id', '=', 'person.id')
27
+ * .orderBy('pet.name')
28
+ * ).as('pets')
29
+ * ])
30
+ * .execute()
31
+ *
32
+ * result[0].id
33
+ * result[0].pets[0].pet_id
34
+ * result[0].pets[0].name
35
+ * ```
36
+ *
37
+ * The generated SQL (MySQL):
38
+ *
39
+ * ```sql
40
+ * select `id`, (
41
+ * select cast(coalesce(json_arrayagg(json_object(
42
+ * 'pet_id', `agg`.`pet_id`,
43
+ * 'name', `agg`.`name`
44
+ * )), '[]') as json) from (
45
+ * select `pet`.`id` as `pet_id`, `pet`.`name`
46
+ * from `pet`
47
+ * where `pet`.`owner_id` = `person`.`id`
48
+ * order by `pet`.`name`
49
+ * ) as `agg`
50
+ * ) as `pets`
51
+ * from `person`
52
+ * ```
53
+ */
54
+ function jsonArrayFrom(expr) {
55
+ return (0, sql_js_1.sql) `(select cast(coalesce(json_arrayagg(json_object(${sql_js_1.sql.join(getJsonObjectArgs(expr.toOperationNode(), 'agg'))})), '[]') as json) from ${expr} as agg)`;
56
+ }
57
+ exports.jsonArrayFrom = jsonArrayFrom;
58
+ /**
59
+ * A MySQL helper for turning a subquery (or other expression) into a JSON object.
60
+ *
61
+ * The subquery must only return one row.
62
+ *
63
+ * NOTE: This helper is only guaranteed to fully work with the built-in `MysqlDialect`.
64
+ * While the produced SQL is compatibe with all MySQL databases, some 3rd party dialects
65
+ * may not parse the nested results into objects.
66
+ *
67
+ * ### Examples
68
+ *
69
+ * ```ts
70
+ * const result = await db
71
+ * .selectFrom('person')
72
+ * .select((eb) => [
73
+ * 'id',
74
+ * jsonObjectFrom(
75
+ * eb.selectFrom('pet')
76
+ * .select(['pet.id as pet_id', 'pet.name'])
77
+ * .where('pet.owner_id', '=', 'person.id')
78
+ * .where('pet.is_favorite', '=', true)
79
+ * ).as('favorite_pet')
80
+ * ])
81
+ * .execute()
82
+ *
83
+ * result[0].id
84
+ * result[0].favorite_pet.pet_id
85
+ * result[0].favorite_pet.name
86
+ * ```
87
+ *
88
+ * The generated SQL (MySQL):
89
+ *
90
+ * ```sql
91
+ * select `id`, (
92
+ * select json_object(
93
+ * 'pet_id', `obj`.`pet_id`,
94
+ * 'name', `obj`.`name`
95
+ * ) from (
96
+ * select `pet`.`id` as `pet_id`, `pet`.`name`
97
+ * from `pet`
98
+ * where `pet`.`owner_id` = `person`.`id`
99
+ * and `pet`.`is_favorite` = ?
100
+ * ) as obj
101
+ * ) as `favorite_pet`
102
+ * from `person`
103
+ * ```
104
+ */
105
+ function jsonObjectFrom(expr) {
106
+ return (0, sql_js_1.sql) `(select json_object(${sql_js_1.sql.join(getJsonObjectArgs(expr.toOperationNode(), 'obj'))}) from ${expr} as obj)`;
107
+ }
108
+ exports.jsonObjectFrom = jsonObjectFrom;
109
+ /**
110
+ * The MySQL `json_object` function.
111
+ *
112
+ * NOTE: This helper is only guaranteed to fully work with the built-in `MysqlDialect`.
113
+ * While the produced SQL is compatibe with all MySQL databases, some 3rd party dialects
114
+ * may not parse the nested results into objects.
115
+ *
116
+ * ### Examples
117
+ *
118
+ * ```ts
119
+ * const result = await db
120
+ * .selectFrom('person')
121
+ * .select((eb) => [
122
+ * 'id',
123
+ * jsonBuildObject({
124
+ * first: eb.ref('first_name'),
125
+ * last: eb.ref('last_name'),
126
+ * full: eb.fn('concat', ['first_name', eb.val(' '), 'last_name'])
127
+ * }).as('name')
128
+ * ])
129
+ * .execute()
130
+ *
131
+ * result[0].id
132
+ * result[0].name.first
133
+ * result[0].name.last
134
+ * result[0].name.full
135
+ * ```
136
+ *
137
+ * The generated SQL (MySQL):
138
+ *
139
+ * ```sql
140
+ * select "id", json_object(
141
+ * 'first', first_name,
142
+ * 'last', last_name,
143
+ * 'full', concat(`first_name`, ?, `last_name`)
144
+ * ) as "name"
145
+ * from "person"
146
+ * ```
147
+ */
148
+ function jsonBuildObject(obj) {
149
+ return (0, sql_js_1.sql) `json_object(${sql_js_1.sql.join(Object.keys(obj).flatMap((k) => [sql_js_1.sql.lit(k), obj[k]]))})`;
150
+ }
151
+ exports.jsonBuildObject = jsonBuildObject;
152
+ function getJsonObjectArgs(node, table) {
153
+ return node.selections.flatMap(({ selection: s }) => {
154
+ if (reference_node_js_1.ReferenceNode.is(s) && column_node_js_1.ColumnNode.is(s.column)) {
155
+ return [
156
+ sql_js_1.sql.lit(s.column.column.name),
157
+ sql_js_1.sql.id(table, s.column.column.name),
158
+ ];
159
+ }
160
+ else if (column_node_js_1.ColumnNode.is(s)) {
161
+ return [sql_js_1.sql.lit(s.column.name), sql_js_1.sql.id(table, s.column.name)];
162
+ }
163
+ else if (alias_node_js_1.AliasNode.is(s) && identifier_node_js_1.IdentifierNode.is(s.alias)) {
164
+ return [sql_js_1.sql.lit(s.alias.name), sql_js_1.sql.id(table, s.alias.name)];
165
+ }
166
+ else {
167
+ throw new Error('MySQL jsonArrayFrom and jsonObjectFrom functions can only handle explicit selections due to limitations of the json_object function. selectAll() is not allowed in the subquery.');
168
+ }
169
+ });
170
+ }
@@ -0,0 +1,133 @@
1
+ import { Expression } from '../expression/expression.js';
2
+ import { RawBuilder } from '../raw-builder/raw-builder.js';
3
+ import { Simplify } from '../util/type-utils.js';
4
+ /**
5
+ * A postgres helper for aggregating a subquery (or other expression) into a JSONB array.
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
+ * ### Examples
12
+ *
13
+ * ```ts
14
+ * const result = await db
15
+ * .selectFrom('person')
16
+ * .select((eb) => [
17
+ * 'id',
18
+ * jsonArrayFrom(
19
+ * eb.selectFrom('pet')
20
+ * .select(['pet.id as pet_id', 'pet.name'])
21
+ * .where('pet.owner_id', '=', 'person.id')
22
+ * .orderBy('pet.name')
23
+ * ).as('pets')
24
+ * ])
25
+ * .execute()
26
+ *
27
+ * result[0].id
28
+ * result[0].pets[0].pet_id
29
+ * result[0].pets[0].name
30
+ * ```
31
+ *
32
+ * The generated SQL (PostgreSQL):
33
+ *
34
+ * ```sql
35
+ * select "id", (
36
+ * select coalesce(json_agg(agg), '[]') from (
37
+ * select "pet"."id" as "pet_id", "pet"."name"
38
+ * from "pet"
39
+ * where "pet"."owner_id" = "person"."id"
40
+ * order by "pet"."name"
41
+ * ) as agg
42
+ * ) as "pets"
43
+ * from "person"
44
+ * ```
45
+ */
46
+ export declare function jsonArrayFrom<O>(expr: Expression<O>): RawBuilder<Simplify<O>[]>;
47
+ /**
48
+ * A postgres helper for turning a subquery (or other expression) into a JSON object.
49
+ *
50
+ * The subquery must only return one row.
51
+ *
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
+ * ### Examples
57
+ *
58
+ * ```ts
59
+ * const result = await db
60
+ * .selectFrom('person')
61
+ * .select((eb) => [
62
+ * 'id',
63
+ * jsonObjectFrom(
64
+ * eb.selectFrom('pet')
65
+ * .select(['pet.id as pet_id', 'pet.name'])
66
+ * .where('pet.owner_id', '=', 'person.id')
67
+ * .where('pet.is_favorite', '=', true)
68
+ * ).as('favorite_pet')
69
+ * ])
70
+ * .execute()
71
+ *
72
+ * result[0].id
73
+ * result[0].favorite_pet.pet_id
74
+ * result[0].favorite_pet.name
75
+ * ```
76
+ *
77
+ * The generated SQL (PostgreSQL):
78
+ *
79
+ * ```sql
80
+ * select "id", (
81
+ * select to_json(obj) from (
82
+ * select "pet"."id" as "pet_id", "pet"."name"
83
+ * from "pet"
84
+ * where "pet"."owner_id" = "person"."id"
85
+ * and "pet"."is_favorite" = $1
86
+ * ) as obj
87
+ * ) as "favorite_pet"
88
+ * from "person"
89
+ * ```
90
+ */
91
+ export declare function jsonObjectFrom<O>(expr: Expression<O>): RawBuilder<Simplify<O>>;
92
+ /**
93
+ * The PostgreSQL `json_build_object` function.
94
+ *
95
+ * NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
96
+ * While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
97
+ * may not parse the nested results into objects.
98
+ *
99
+ * ### Examples
100
+ *
101
+ * ```ts
102
+ * const result = await db
103
+ * .selectFrom('person')
104
+ * .select((eb) => [
105
+ * 'id',
106
+ * jsonBuildObject({
107
+ * first: eb.ref('first_name'),
108
+ * last: eb.ref('last_name'),
109
+ * full: sql<string>`first_name || ' ' || last_name`
110
+ * }).as('name')
111
+ * ])
112
+ * .execute()
113
+ *
114
+ * result[0].id
115
+ * result[0].name.first
116
+ * result[0].name.last
117
+ * result[0].name.full
118
+ * ```
119
+ *
120
+ * The generated SQL (PostgreSQL):
121
+ *
122
+ * ```sql
123
+ * select "id", json_build_object(
124
+ * 'first', first_name,
125
+ * 'last', last_name,
126
+ * 'full', first_name || ' ' || last_name
127
+ * ) as "name"
128
+ * from "person"
129
+ * ```
130
+ */
131
+ export declare function jsonBuildObject<O extends Record<string, Expression<unknown>>>(obj: O): RawBuilder<Simplify<{
132
+ [K in keyof O]: O[K] extends Expression<infer V> ? V : never;
133
+ }>>;