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
@@ -6,11 +6,82 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
6
6
  import { BinaryOperatorExpression, ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
7
7
  import { Expression } from './expression.js';
8
8
  import { ExpressionWrapper } from './expression-wrapper.js';
9
- import { ComparisonOperator, UnaryOperator } from '../operation-node/operator-node.js';
9
+ import { ComparisonOperator, JSONOperatorWith$, UnaryOperator } from '../operation-node/operator-node.js';
10
10
  import { SqlBool } from '../util/type-utils.js';
11
11
  import { ExtractTypeFromValueExpressionOrList } from '../parser/value-parser.js';
12
12
  import { CaseBuilder } from '../query-builder/case-builder.js';
13
+ import { JSONPathBuilder } from '../query-builder/json-path-builder.js';
13
14
  export interface ExpressionBuilder<DB, TB extends keyof DB> {
15
+ /**
16
+ * Creates a binary expression.
17
+ *
18
+ * This function returns an {@link Expression} and can be used pretty much anywhere.
19
+ * See the examples for a couple of possible use cases.
20
+ *
21
+ * ### Examples
22
+ *
23
+ * In the following example `eb` is used to increment an integer column:
24
+ *
25
+ * ```ts
26
+ * db.updateTable('person')
27
+ * .set((eb) => ({
28
+ * age: eb('age', '+', 1)
29
+ * }))
30
+ * .where('id', '=', id)
31
+ * ```
32
+ *
33
+ * The generated SQL (PostgreSQL):
34
+ *
35
+ * ```sql
36
+ * update "person"
37
+ * set "age" = "age" + $1
38
+ * where "id" = $2
39
+ * ```
40
+ *
41
+ * By default the third argument is a value. {@link ref} can be used to
42
+ * pass in a column reference instead:
43
+ *
44
+ * ```ts
45
+ * db.updateTable('person')
46
+ * .set((eb) => ({
47
+ * age: eb('age', '+', eb.ref('age'))
48
+ * }))
49
+ * .where('id', '=', id)
50
+ * ```
51
+ *
52
+ * The generated SQL (PostgreSQL):
53
+ *
54
+ * ```sql
55
+ * update "person"
56
+ * set "age" = "age" + "age"
57
+ * where "id" = $1
58
+ * ```
59
+ */
60
+ <RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
61
+ /**
62
+ * Returns a copy of `this` expression builder, for destructuring purposes.
63
+ *
64
+ * ### Examples
65
+ *
66
+ * ```ts
67
+ * db.selectFrom('person')
68
+ * .where(({ eb, exists, selectFrom }) =>
69
+ * eb('first_name', '=', 'Jennifer').and(
70
+ * exists(selectFrom('pet').whereRef('owner_id', '=', 'person.id').select('pet.id'))
71
+ * )
72
+ * )
73
+ * .selectAll()
74
+ * ```
75
+ *
76
+ * The generated SQL (PostgreSQL):
77
+ *
78
+ * ```sql
79
+ * select * from "person" where "first_name" = $1 and exists (
80
+ * select "pet.id" from "pet" where "owner_id" = "person.id"
81
+ * )
82
+ * ```
83
+ */
84
+ eb: ExpressionBuilder<DB, TB>;
14
85
  /**
15
86
  * Returns a {@link FunctionModule} that can be used to write type safe function
16
87
  * calls.
@@ -28,7 +99,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
28
99
  * eb.fn.count('pet.id').as('pet_count')
29
100
  * ])
30
101
  * .groupBy('person.id')
31
- * .having(count('pet.id'), '>', 10)
102
+ * .having((eb) => eb.fn.count('pet.id'), '>', 10)
32
103
  * .execute()
33
104
  * ```
34
105
  *
@@ -147,25 +218,28 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
147
218
  case<C extends SimpleReferenceExpression<DB, TB>>(column: C): CaseBuilder<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, C>>;
148
219
  case<O>(expression: Expression<O>): CaseBuilder<DB, TB, O>;
149
220
  /**
150
- * This can be used to reference columns.
221
+ * This method can be used to reference columns within the query's context. For
222
+ * a non-type-safe version of this method see {@link sql}'s version.
223
+ *
224
+ * Additionally, this method can be used to reference nested JSON properties or
225
+ * array elements. See {@link JSONPathBuilder} for more information.
151
226
  *
152
227
  * ### Examples
153
228
  *
154
- * By default the third argument of {@link bxp} and {@link cmpr} is a value.
229
+ * By default the third argument of binary expressions is a value.
155
230
  * This function can be used to pass in a column reference instead:
156
231
  *
157
232
  * ```ts
158
233
  * db.selectFrom('person')
159
234
  * .selectAll('person')
160
- * .where(({ or, cmpr, ref }) => or([
161
- * cmpr('first_name', '=', ref('last_name')),
162
- * cmpr('first_name', '=', ref('middle_name'))
235
+ * .where((eb) => eb.or([
236
+ * eb('first_name', '=', eb.ref('last_name')),
237
+ * eb('first_name', '=', eb.ref('middle_name'))
163
238
  * ]))
164
239
  * ```
165
240
  *
166
- * In the next example we use the `ref` method to reference
167
- * columns of the virtual table `excluded` in a type-safe way
168
- * to create an upsert operation:
241
+ * In the next example we use the `ref` method to reference columns of the virtual
242
+ * table `excluded` in a type-safe way to create an upsert operation:
169
243
  *
170
244
  * ```ts
171
245
  * db.insertInto('person')
@@ -179,142 +253,126 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
179
253
  * )
180
254
  * ```
181
255
  *
182
- * In the next example we use `ref` in a raw sql expression. Unless you
183
- * want to be as type-safe as possible, this is probably overkill:
256
+ * In the next example we use `ref` in a raw sql expression. Unless you want
257
+ * to be as type-safe as possible, this is probably overkill:
184
258
  *
185
259
  * ```ts
186
260
  * db.update('pet').set((eb) => ({
187
261
  * name: sql`concat(${eb.ref('pet.name')}, ${suffix})`
188
262
  * }))
189
263
  * ```
190
- */
191
- ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
192
- /**
193
- * Returns a value expression.
194
264
  *
195
- * This can be used to pass in a value where a reference is taken by default.
265
+ * In the next example we use `ref` to reference a nested JSON property:
196
266
  *
197
- * This function returns an {@link Expression} and can be used pretty much anywhere.
267
+ * ```ts
268
+ * db.selectFrom('person')
269
+ * .where(({ cmpr, ref }) => cmpr(
270
+ * ref('address', '->').key('state').key('abbr'),
271
+ * '=',
272
+ * 'CA'
273
+ * ))
274
+ * .selectAll()
275
+ * ```
198
276
  *
199
- * ### Examples
277
+ * The generated SQL (PostgreSQL):
200
278
  *
201
- * The {@link cmpr} function takes a reference by default as the first argument. `val` could
202
- * be used to pass in a value instead:
279
+ * ```sql
280
+ * select * from "person" where "address"->'state'->'abbr' = $1
281
+ * ```
282
+ *
283
+ * You can also compile to a JSON path expression by using the `->$`or `->>$` operator:
203
284
  *
204
285
  * ```ts
205
- * cmpr(val(38), '=', ref('age'))
286
+ * db.selectFrom('person')
287
+ * .select(({ ref }) =>
288
+ * ref('experience', '->$')
289
+ * .at('last')
290
+ * .key('title')
291
+ * .as('current_job')
292
+ * )
206
293
  * ```
207
294
  *
208
- * The generated SQL (PostgreSQL):
295
+ * The generated SQL (MySQL):
209
296
  *
210
297
  * ```sql
211
- * $1 = "age"
298
+ * select `experience`->'$[last].title' as `current_job` from `person`
212
299
  * ```
213
300
  */
214
- val<VE>(value: VE): ExpressionWrapper<ExtractTypeFromValueExpressionOrList<VE>>;
301
+ ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
302
+ ref<RE extends StringReference<DB, TB>>(reference: RE, op: JSONOperatorWith$): JSONPathBuilder<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
215
303
  /**
216
- * Creates a binary comparison expression.
304
+ * Returns a value expression.
217
305
  *
218
- * This function returns an {@link Expression} and can be used pretty much anywhere.
219
- * See the examples for a couple of possible use cases.
306
+ * This can be used to pass in a value where a reference is taken by default.
220
307
  *
221
- * @see {@link bxp}
308
+ * This function returns an {@link Expression} and can be used pretty much anywhere.
222
309
  *
223
310
  * ### Examples
224
311
  *
225
- * In this example we use `cmpr` and {@link or} to create a `WHERE expr1 OR expr2 OR expr3`
226
- * statement:
312
+ * Binary expressions take a reference by default as the first argument. `val` could
313
+ * be used to pass in a value instead:
227
314
  *
228
315
  * ```ts
229
- * db.selectFrom('person')
230
- * .selectAll('person')
231
- * .where(({ or, cmpr }) => or([
232
- * cmpr('first_name', '=', 'Jennifer'),
233
- * cmpr('fist_name', '=', 'Arnold'),
234
- * cmpr('fist_name', '=', 'Sylvester')
235
- * ]))
316
+ * eb(val(38), '=', ref('age'))
236
317
  * ```
237
318
  *
238
319
  * The generated SQL (PostgreSQL):
239
320
  *
240
321
  * ```sql
241
- * select "person".*
242
- * from "person"
243
- * where "first_name" = $1
244
- * or "first_name" = $2
245
- * or "first_name" = $3
322
+ * $1 = "age"
246
323
  * ```
324
+ */
325
+ val<VE>(value: VE): ExpressionWrapper<DB, TB, ExtractTypeFromValueExpressionOrList<VE>>;
326
+ /**
327
+ * @deprecated Use the expression builder as a function instead.
247
328
  *
248
- * By default the third argument is a value. {@link ref} can be used to
249
- * pass in a column reference instead:
329
+ * Before:
250
330
  *
251
331
  * ```ts
252
- * db.selectFrom('person')
253
- * .selectAll('person')
254
- * .where(({ or, cmpr, ref }) => or([
255
- * cmpr('first_name', '=', ref('last_name')),
256
- * cmpr('first_name', '=', ref('middle_name'))
257
- * ]))
332
+ * where((eb) => eb.cmpr('first_name', '=', 'Jennifer'))
258
333
  * ```
259
334
  *
260
- * The generated SQL (PostgreSQL):
335
+ * After:
261
336
  *
262
- * ```sql
263
- * select "person".*
264
- * from "person"
265
- * where "first_name" = "last_name"
266
- * or "first_name" = "middle_name"
337
+ * ```ts
338
+ * where((eb) => eb('first_name', '=', 'Jennifer'))
267
339
  * ```
268
- */
269
- cmpr<O extends SqlBool = SqlBool, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<O>;
270
- /**
271
- * Creates a binary expression.
272
- *
273
- * See {@link cmpr} for creating binary comparison operations.
274
- *
275
- * This function returns an {@link Expression} and can be used pretty much anywhere.
276
- * See the examples for a couple of possible use cases.
277
340
  *
278
- * ### Examples
279
- *
280
- * In the following example `bxp` is used to increment an integer column:
341
+ * or
281
342
  *
282
343
  * ```ts
283
- * db.updateTable('person')
284
- * .set((eb) => ({
285
- * age: eb.bxp('age', '+', 1)
286
- * }))
287
- * .where('id', '=', id)
344
+ * where(({ eb }) => eb('first_name', '=', 'Jennifer'))
288
345
  * ```
346
+ */
347
+ cmpr<O extends SqlBool = SqlBool, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, O>;
348
+ /**
349
+ * @deprecated Use the expression builder as a function instead.
289
350
  *
290
- * The generated SQL (PostgreSQL):
351
+ * Before:
291
352
  *
292
- * ```sql
293
- * update "person"
294
- * set "age" = "age" + $1
295
- * where "id" = $2
353
+ * ```ts
354
+ * set((eb) => ({
355
+ * age: eb.bxp('age', '+', 10)
356
+ * }))
296
357
  * ```
297
358
  *
298
- * By default the third argument is a value. {@link ref} can be used to
299
- * pass in a column reference instead:
359
+ * After:
300
360
  *
301
361
  * ```ts
302
- * db.updateTable('person')
303
- * .set((eb) => ({
304
- * age: eb.bxp('age', '+', eb.ref('age'))
305
- * }))
306
- * .where('id', '=', id)
362
+ * set((eb) => ({
363
+ * age: eb('age', '+', 10)
364
+ * }))
307
365
  * ```
308
366
  *
309
- * The generated SQL (PostgreSQL):
367
+ * or
310
368
  *
311
- * ```sql
312
- * update "person"
313
- * set "age" = "age" + "age"
314
- * where "id" = $1
369
+ * ```ts
370
+ * set(({ eb }) => ({
371
+ * age: eb('age', '+', 10)
372
+ * }))
315
373
  * ```
316
374
  */
317
- bxp<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
375
+ bxp<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
318
376
  /**
319
377
  * Creates an unary expression.
320
378
  *
@@ -340,7 +398,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
340
398
  * from "person"
341
399
  * ```
342
400
  */
343
- unary<RE extends ReferenceExpression<DB, TB>>(op: UnaryOperator, expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
401
+ unary<RE extends ReferenceExpression<DB, TB>>(op: UnaryOperator, expr: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
344
402
  /**
345
403
  * Creates a `not` operation.
346
404
  *
@@ -348,7 +406,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
348
406
  *
349
407
  * @see {@link unary}
350
408
  */
351
- not<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
409
+ not<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
352
410
  /**
353
411
  * Creates an `exists` operation.
354
412
  *
@@ -356,7 +414,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
356
414
  *
357
415
  * @see {@link unary}
358
416
  */
359
- exists<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<SqlBool>;
417
+ exists<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<DB, TB, SqlBool>;
360
418
  /**
361
419
  * Creates a negation operation.
362
420
  *
@@ -364,7 +422,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
364
422
  *
365
423
  * @see {@link unary}
366
424
  */
367
- neg<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
425
+ neg<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
368
426
  /**
369
427
  * Combines two or more expressions using the logical `and` operator.
370
428
  *
@@ -373,16 +431,16 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
373
431
  *
374
432
  * ### Examples
375
433
  *
376
- * In this example we use `and` with {@link cmpr} to create a `WHERE expr1 AND expr2 AND expr3`
434
+ * In this example we use `and` to create a `WHERE expr1 AND expr2 AND expr3`
377
435
  * statement:
378
436
  *
379
437
  * ```ts
380
438
  * db.selectFrom('person')
381
439
  * .selectAll('person')
382
- * .where(({ and, cmpr }) => and([
383
- * cmpr('first_name', '=', 'Jennifer'),
384
- * cmpr('fist_name', '=', 'Arnold'),
385
- * cmpr('fist_name', '=', 'Sylvester')
440
+ * .where((eb) => eb.and([
441
+ * eb('first_name', '=', 'Jennifer'),
442
+ * eb('fist_name', '=', 'Arnold'),
443
+ * eb('fist_name', '=', 'Sylvester')
386
444
  * ]))
387
445
  * ```
388
446
  *
@@ -396,7 +454,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
396
454
  * and "first_name" = $3
397
455
  * ```
398
456
  */
399
- and(expres: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<SqlBool>;
457
+ and(exprs: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
400
458
  /**
401
459
  * Combines two or more expressions using the logical `or` operator.
402
460
  *
@@ -405,16 +463,16 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
405
463
  *
406
464
  * ### Examples
407
465
  *
408
- * In this example we use `or` with {@link cmpr} to create a `WHERE expr1 OR expr2 OR expr3`
466
+ * In this example we use `or` to create a `WHERE expr1 OR expr2 OR expr3`
409
467
  * statement:
410
468
  *
411
469
  * ```ts
412
470
  * db.selectFrom('person')
413
471
  * .selectAll('person')
414
- * .where(({ or, cmpr }) => or([
415
- * cmpr('first_name', '=', 'Jennifer'),
416
- * cmpr('fist_name', '=', 'Arnold'),
417
- * cmpr('fist_name', '=', 'Sylvester')
472
+ * .where((eb) => or([
473
+ * eb('first_name', '=', 'Jennifer'),
474
+ * eb('fist_name', '=', 'Arnold'),
475
+ * eb('fist_name', '=', 'Sylvester')
418
476
  * ]))
419
477
  * ```
420
478
  *
@@ -428,7 +486,48 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
428
486
  * or "first_name" = $3
429
487
  * ```
430
488
  */
431
- or(expres: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<SqlBool>;
489
+ or(exprs: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
490
+ /**
491
+ * Wraps the expression in parentheses.
492
+ *
493
+ * ### Examples
494
+ *
495
+ * ```ts
496
+ * db.selectFrom('person')
497
+ * .selectAll('person')
498
+ * .where((eb) => eb(eb.parens('age', '+', 1), '/', 100), '<', 0.1))
499
+ * ```
500
+ *
501
+ * The generated SQL (PostgreSQL):
502
+ *
503
+ * ```sql
504
+ * select "person".*
505
+ * from "person"
506
+ * where ("age" + $1) / $2 < $3
507
+ * ```
508
+ *
509
+ * You can also pass in any expression as the only argument:
510
+ *
511
+ * ```ts
512
+ * db.selectFrom('person')
513
+ * .selectAll('person')
514
+ * .where((eb) => parens(
515
+ * eb('age', '=', 1).or('age', '=', 2))
516
+ * ).and(
517
+ * eb('first_name', '=', 'Jennifer').or('first_name', '=', 'Arnold')
518
+ * ))
519
+ * ```
520
+ *
521
+ * The generated SQL (PostgreSQL):
522
+ *
523
+ * ```sql
524
+ * select "person".*
525
+ * from "person"
526
+ * where ("age" = $1 or "age" = $2) and ("first_name" = $3 or "first_name" = $4)
527
+ * ```
528
+ */
529
+ parens<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
530
+ parens<T>(expr: Expression<T>): ExpressionWrapper<DB, TB, T>;
432
531
  /**
433
532
  * See {@link QueryCreator.withSchema}
434
533
  *
@@ -5,8 +5,8 @@ import { parseTableExpressionOrList, } from '../parser/table-parser.js';
5
5
  import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';
6
6
  import { createQueryId } from '../util/query-id.js';
7
7
  import { createFunctionModule, } from '../query-builder/function-module.js';
8
- import { parseReferenceExpression, parseStringReference, } from '../parser/reference-parser.js';
9
- import { parseValueBinaryOperation, } from '../parser/binary-operation-parser.js';
8
+ import { parseJSONReference, parseReferenceExpression, parseStringReference, } from '../parser/reference-parser.js';
9
+ import { parseValueBinaryOperation, parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';
10
10
  import { AndNode } from '../operation-node/and-node.js';
11
11
  import { OrNode } from '../operation-node/or-node.js';
12
12
  import { ParensNode } from '../operation-node/parens-node.js';
@@ -18,14 +18,17 @@ import { ValueNode } from '../operation-node/value-node.js';
18
18
  import { CaseBuilder } from '../query-builder/case-builder.js';
19
19
  import { CaseNode } from '../operation-node/case-node.js';
20
20
  import { isUndefined } from '../util/object-utils.js';
21
+ import { JSONPathBuilder } from '../query-builder/json-path-builder.js';
21
22
  export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
23
+ function binary(lhs, op, rhs) {
24
+ return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
25
+ }
22
26
  function unary(op, expr) {
23
27
  return new ExpressionWrapper(parseUnaryOperation(op, expr));
24
28
  }
25
- return {
26
- get fn() {
27
- return createFunctionModule();
28
- },
29
+ const eb = Object.assign(binary, {
30
+ fn: undefined,
31
+ eb: undefined,
29
32
  selectFrom(table) {
30
33
  return new SelectQueryBuilder({
31
34
  queryId: createQueryId(),
@@ -40,15 +43,20 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
40
43
  : parseReferenceExpression(reference)),
41
44
  });
42
45
  },
43
- ref(reference) {
44
- return new ExpressionWrapper(parseStringReference(reference));
46
+ ref(reference, op) {
47
+ if (isUndefined(op)) {
48
+ return new ExpressionWrapper(parseStringReference(reference));
49
+ }
50
+ return new JSONPathBuilder(parseJSONReference(reference, op));
45
51
  },
46
52
  val(value) {
47
53
  return new ExpressionWrapper(parseValueExpressionOrList(value));
48
54
  },
55
+ // @deprecated
49
56
  cmpr(lhs, op, rhs) {
50
57
  return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
51
58
  },
59
+ // @deprecated
52
60
  bxp(lhs, op, rhs) {
53
61
  return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
54
62
  },
@@ -88,10 +96,23 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
88
96
  }
89
97
  return new ExpressionWrapper(ParensNode.create(node));
90
98
  },
99
+ parens(...args) {
100
+ const node = parseValueBinaryOperationOrExpression(args);
101
+ if (ParensNode.is(node)) {
102
+ // No double wrapping.
103
+ return new ExpressionWrapper(node);
104
+ }
105
+ else {
106
+ return new ExpressionWrapper(ParensNode.create(node));
107
+ }
108
+ },
91
109
  withSchema(schema) {
92
110
  return createExpressionBuilder(executor.withPluginAtFront(new WithSchemaPlugin(schema)));
93
111
  },
94
- };
112
+ });
113
+ eb.fn = createFunctionModule();
114
+ eb.eb = eb;
115
+ return eb;
95
116
  }
96
117
  export function expressionBuilder(_) {
97
118
  return createExpressionBuilder();