kysely 0.23.4 → 0.24.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 (314) hide show
  1. package/README.md +49 -25
  2. package/dist/cjs/dialect/database-introspector.d.ts +4 -2
  3. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
  4. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -1
  5. package/dist/cjs/dialect/mysql/mysql-driver.js +1 -1
  6. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +1 -1
  7. package/dist/cjs/dialect/mysql/mysql-introspector.js +19 -13
  8. package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
  9. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +1 -1
  10. package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -1
  11. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -0
  12. package/dist/cjs/dialect/sqlite/sqlite-dialect.js +1 -0
  13. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  14. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +6 -5
  15. package/dist/cjs/driver/runtime-driver.js +4 -2
  16. package/dist/cjs/expression/expression-builder.d.ts +386 -0
  17. package/dist/cjs/expression/expression-builder.js +92 -0
  18. package/dist/cjs/expression/expression-wrapper.d.ts +92 -0
  19. package/dist/cjs/expression/expression-wrapper.js +54 -0
  20. package/dist/cjs/expression/expression.d.ts +1 -1
  21. package/dist/cjs/helpers/postgres.d.ts +133 -0
  22. package/dist/cjs/helpers/postgres.js +141 -0
  23. package/dist/cjs/index.d.ts +4 -3
  24. package/dist/cjs/index.js +4 -2
  25. package/dist/cjs/kysely.d.ts +10 -0
  26. package/dist/cjs/kysely.js +12 -1
  27. package/dist/cjs/migration/file-migration-provider.d.ts +5 -2
  28. package/dist/cjs/migration/migrator.d.ts +5 -2
  29. package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -2
  30. package/dist/cjs/operation-node/aggregate-function-node.js +2 -2
  31. package/dist/cjs/operation-node/create-index-node.d.ts +2 -0
  32. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
  33. package/dist/cjs/operation-node/delete-query-node.js +2 -8
  34. package/dist/cjs/operation-node/function-node.d.ts +13 -0
  35. package/dist/cjs/operation-node/function-node.js +19 -0
  36. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  37. package/dist/cjs/operation-node/operation-node-transformer.js +11 -2
  38. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  39. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  40. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  41. package/dist/cjs/operation-node/operator-node.d.ts +13 -2
  42. package/dist/cjs/operation-node/operator-node.js +38 -3
  43. package/dist/cjs/operation-node/query-node.d.ts +25 -8
  44. package/dist/cjs/operation-node/query-node.js +9 -2
  45. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  46. package/dist/cjs/operation-node/select-query-node.js +0 -6
  47. package/dist/cjs/operation-node/update-query-node.d.ts +0 -1
  48. package/dist/cjs/operation-node/update-query-node.js +0 -6
  49. package/dist/cjs/parser/binary-operation-parser.d.ts +9 -10
  50. package/dist/cjs/parser/binary-operation-parser.js +89 -39
  51. package/dist/cjs/parser/coalesce-parser.d.ts +0 -2
  52. package/dist/cjs/parser/coalesce-parser.js +0 -9
  53. package/dist/cjs/parser/expression-parser.d.ts +7 -3
  54. package/dist/cjs/parser/expression-parser.js +4 -4
  55. package/dist/cjs/parser/group-by-parser.d.ts +3 -2
  56. package/dist/cjs/parser/group-by-parser.js +3 -0
  57. package/dist/cjs/parser/insert-values-parser.d.ts +4 -1
  58. package/dist/cjs/parser/insert-values-parser.js +19 -13
  59. package/dist/cjs/parser/join-parser.js +1 -1
  60. package/dist/cjs/parser/parse-utils.d.ts +0 -2
  61. package/dist/cjs/parser/parse-utils.js +1 -8
  62. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  63. package/dist/cjs/parser/select-parser.d.ts +5 -13
  64. package/dist/cjs/parser/select-parser.js +8 -4
  65. package/dist/cjs/parser/table-parser.d.ts +6 -3
  66. package/dist/cjs/parser/unary-operation-parser.d.ts +5 -2
  67. package/dist/cjs/parser/unary-operation-parser.js +9 -8
  68. package/dist/cjs/parser/update-set-parser.d.ts +4 -1
  69. package/dist/cjs/parser/update-set-parser.js +9 -4
  70. package/dist/cjs/parser/value-parser.d.ts +5 -0
  71. package/dist/cjs/parser/value-parser.js +1 -3
  72. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +7 -0
  73. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +10 -4
  74. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
  75. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  76. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +40 -113
  77. package/dist/cjs/query-builder/aggregate-function-builder.js +23 -63
  78. package/dist/cjs/query-builder/delete-query-builder.d.ts +224 -205
  79. package/dist/cjs/query-builder/delete-query-builder.js +21 -27
  80. package/dist/cjs/query-builder/delete-result.js +3 -0
  81. package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +62 -0
  82. package/dist/cjs/query-builder/deprecated-having-expression-builder.js +2 -0
  83. package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +62 -0
  84. package/dist/cjs/query-builder/deprecated-on-expression-builder.js +2 -0
  85. package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +62 -0
  86. package/dist/cjs/query-builder/deprecated-where-expression-builder.js +2 -0
  87. package/dist/cjs/query-builder/function-module.d.ts +304 -42
  88. package/dist/cjs/query-builder/function-module.js +44 -208
  89. package/dist/cjs/query-builder/having-interface.d.ts +19 -16
  90. package/dist/cjs/query-builder/insert-query-builder.d.ts +78 -30
  91. package/dist/cjs/query-builder/insert-query-builder.js +21 -30
  92. package/dist/cjs/query-builder/insert-result.js +3 -0
  93. package/dist/cjs/query-builder/join-builder.d.ts +23 -26
  94. package/dist/cjs/query-builder/join-builder.js +17 -22
  95. package/dist/cjs/query-builder/no-result-error.d.ts +1 -0
  96. package/dist/cjs/query-builder/no-result-error.js +5 -1
  97. package/dist/cjs/query-builder/on-conflict-builder.d.ts +158 -276
  98. package/dist/cjs/query-builder/on-conflict-builder.js +52 -36
  99. package/dist/cjs/query-builder/over-builder.d.ts +5 -0
  100. package/dist/cjs/query-builder/over-builder.js +7 -0
  101. package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
  102. package/dist/cjs/query-builder/select-query-builder.d.ts +155 -243
  103. package/dist/cjs/query-builder/select-query-builder.js +333 -78
  104. package/dist/cjs/query-builder/update-query-builder.d.ts +149 -217
  105. package/dist/cjs/query-builder/update-query-builder.js +21 -115
  106. package/dist/cjs/query-builder/update-result.js +3 -0
  107. package/dist/cjs/query-builder/where-interface.d.ts +71 -184
  108. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  109. package/dist/cjs/query-compiler/default-query-compiler.js +18 -2
  110. package/dist/cjs/query-creator.d.ts +38 -2
  111. package/dist/cjs/query-creator.js +3 -45
  112. package/dist/cjs/query-executor/query-executor.d.ts +3 -3
  113. package/dist/cjs/raw-builder/raw-builder.d.ts +5 -3
  114. package/dist/cjs/raw-builder/raw-builder.js +13 -7
  115. package/dist/cjs/raw-builder/sql.d.ts +17 -9
  116. package/dist/cjs/raw-builder/sql.js +8 -2
  117. package/dist/cjs/schema/alter-column-builder.d.ts +5 -0
  118. package/dist/cjs/schema/alter-column-builder.js +7 -0
  119. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
  120. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
  121. package/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts +5 -0
  122. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +7 -0
  123. package/dist/cjs/schema/column-definition-builder.d.ts +6 -1
  124. package/dist/cjs/schema/column-definition-builder.js +8 -1
  125. package/dist/cjs/schema/create-index-builder.d.ts +51 -9
  126. package/dist/cjs/schema/create-index-builder.js +17 -0
  127. package/dist/cjs/schema/create-schema-builder.d.ts +5 -0
  128. package/dist/cjs/schema/create-schema-builder.js +7 -0
  129. package/dist/cjs/schema/create-table-builder.d.ts +3 -1
  130. package/dist/cjs/schema/create-table-builder.js +3 -1
  131. package/dist/cjs/schema/create-type-builder.d.ts +5 -0
  132. package/dist/cjs/schema/create-type-builder.js +7 -0
  133. package/dist/cjs/schema/create-view-builder.d.ts +5 -0
  134. package/dist/cjs/schema/create-view-builder.js +7 -0
  135. package/dist/cjs/schema/drop-index-builder.d.ts +5 -0
  136. package/dist/cjs/schema/drop-index-builder.js +7 -0
  137. package/dist/cjs/schema/drop-schema-builder.d.ts +5 -0
  138. package/dist/cjs/schema/drop-schema-builder.js +7 -0
  139. package/dist/cjs/schema/drop-table-builder.d.ts +5 -0
  140. package/dist/cjs/schema/drop-table-builder.js +7 -0
  141. package/dist/cjs/schema/drop-type-builder.d.ts +5 -0
  142. package/dist/cjs/schema/drop-type-builder.js +7 -0
  143. package/dist/cjs/schema/drop-view-builder.d.ts +5 -0
  144. package/dist/cjs/schema/drop-view-builder.js +7 -0
  145. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +5 -0
  146. package/dist/cjs/schema/foreign-key-constraint-builder.js +7 -0
  147. package/dist/cjs/util/compilable.d.ts +1 -0
  148. package/dist/cjs/util/compilable.js +6 -0
  149. package/dist/cjs/util/explainable.d.ts +35 -0
  150. package/dist/cjs/util/log.d.ts +2 -0
  151. package/dist/cjs/util/object-utils.js +1 -1
  152. package/dist/cjs/util/streamable.d.ts +29 -0
  153. package/dist/cjs/util/streamable.js +2 -0
  154. package/dist/cjs/util/type-utils.d.ts +6 -4
  155. package/dist/esm/dialect/database-introspector.d.ts +4 -2
  156. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  157. package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -1
  158. package/dist/esm/dialect/mysql/mysql-driver.js +1 -1
  159. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +1 -1
  160. package/dist/esm/dialect/mysql/mysql-introspector.js +19 -13
  161. package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
  162. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +1 -1
  163. package/dist/esm/dialect/postgres/postgres-introspector.js +3 -1
  164. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -0
  165. package/dist/esm/dialect/sqlite/sqlite-dialect.js +1 -0
  166. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  167. package/dist/esm/dialect/sqlite/sqlite-introspector.js +6 -5
  168. package/dist/esm/driver/runtime-driver.js +4 -2
  169. package/dist/esm/expression/expression-builder.d.ts +386 -0
  170. package/dist/esm/expression/expression-builder.js +88 -0
  171. package/dist/esm/expression/expression-wrapper.d.ts +92 -0
  172. package/dist/esm/expression/expression-wrapper.js +50 -0
  173. package/dist/esm/expression/expression.d.ts +1 -1
  174. package/dist/esm/helpers/postgres.d.ts +133 -0
  175. package/dist/esm/helpers/postgres.js +136 -0
  176. package/dist/esm/index.d.ts +4 -3
  177. package/dist/esm/index.js +2 -1
  178. package/dist/esm/kysely.d.ts +10 -0
  179. package/dist/esm/kysely.js +13 -2
  180. package/dist/esm/migration/file-migration-provider.d.ts +5 -2
  181. package/dist/esm/migration/migrator.d.ts +5 -2
  182. package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -2
  183. package/dist/esm/operation-node/aggregate-function-node.js +2 -2
  184. package/dist/esm/operation-node/create-index-node.d.ts +2 -0
  185. package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
  186. package/dist/esm/operation-node/delete-query-node.js +2 -8
  187. package/dist/esm/operation-node/function-node.d.ts +13 -0
  188. package/dist/esm/operation-node/function-node.js +17 -0
  189. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  190. package/dist/esm/operation-node/operation-node-transformer.js +11 -2
  191. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  192. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  193. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  194. package/dist/esm/operation-node/operator-node.d.ts +13 -2
  195. package/dist/esm/operation-node/operator-node.js +34 -3
  196. package/dist/esm/operation-node/query-node.d.ts +25 -8
  197. package/dist/esm/operation-node/query-node.js +9 -2
  198. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  199. package/dist/esm/operation-node/select-query-node.js +0 -6
  200. package/dist/esm/operation-node/update-query-node.d.ts +0 -1
  201. package/dist/esm/operation-node/update-query-node.js +0 -6
  202. package/dist/esm/parser/binary-operation-parser.d.ts +9 -10
  203. package/dist/esm/parser/binary-operation-parser.js +85 -37
  204. package/dist/esm/parser/coalesce-parser.d.ts +0 -2
  205. package/dist/esm/parser/coalesce-parser.js +1 -7
  206. package/dist/esm/parser/expression-parser.d.ts +7 -3
  207. package/dist/esm/parser/expression-parser.js +5 -5
  208. package/dist/esm/parser/group-by-parser.d.ts +3 -2
  209. package/dist/esm/parser/group-by-parser.js +3 -0
  210. package/dist/esm/parser/insert-values-parser.d.ts +4 -1
  211. package/dist/esm/parser/insert-values-parser.js +18 -12
  212. package/dist/esm/parser/join-parser.js +2 -2
  213. package/dist/esm/parser/parse-utils.d.ts +0 -2
  214. package/dist/esm/parser/parse-utils.js +0 -6
  215. package/dist/esm/parser/returning-parser.d.ts +2 -1
  216. package/dist/esm/parser/select-parser.d.ts +5 -13
  217. package/dist/esm/parser/select-parser.js +7 -3
  218. package/dist/esm/parser/table-parser.d.ts +6 -3
  219. package/dist/esm/parser/unary-operation-parser.d.ts +5 -2
  220. package/dist/esm/parser/unary-operation-parser.js +8 -8
  221. package/dist/esm/parser/update-set-parser.d.ts +4 -1
  222. package/dist/esm/parser/update-set-parser.js +7 -2
  223. package/dist/esm/parser/value-parser.d.ts +5 -0
  224. package/dist/esm/parser/value-parser.js +1 -3
  225. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +7 -0
  226. package/dist/esm/plugin/camel-case/camel-case-plugin.js +10 -4
  227. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
  228. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  229. package/dist/esm/query-builder/aggregate-function-builder.d.ts +40 -113
  230. package/dist/esm/query-builder/aggregate-function-builder.js +24 -64
  231. package/dist/esm/query-builder/delete-query-builder.d.ts +224 -205
  232. package/dist/esm/query-builder/delete-query-builder.js +24 -30
  233. package/dist/esm/query-builder/delete-result.js +3 -0
  234. package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +62 -0
  235. package/dist/esm/query-builder/deprecated-having-expression-builder.js +2 -0
  236. package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +62 -0
  237. package/dist/esm/query-builder/deprecated-on-expression-builder.js +2 -0
  238. package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +62 -0
  239. package/dist/esm/query-builder/deprecated-where-expression-builder.js +2 -0
  240. package/dist/esm/query-builder/function-module.d.ts +304 -42
  241. package/dist/esm/query-builder/function-module.js +43 -207
  242. package/dist/esm/query-builder/having-interface.d.ts +19 -16
  243. package/dist/esm/query-builder/insert-query-builder.d.ts +78 -30
  244. package/dist/esm/query-builder/insert-query-builder.js +25 -34
  245. package/dist/esm/query-builder/insert-result.js +3 -0
  246. package/dist/esm/query-builder/join-builder.d.ts +23 -26
  247. package/dist/esm/query-builder/join-builder.js +18 -23
  248. package/dist/esm/query-builder/no-result-error.d.ts +1 -0
  249. package/dist/esm/query-builder/no-result-error.js +3 -0
  250. package/dist/esm/query-builder/on-conflict-builder.d.ts +158 -276
  251. package/dist/esm/query-builder/on-conflict-builder.js +54 -38
  252. package/dist/esm/query-builder/over-builder.d.ts +5 -0
  253. package/dist/esm/query-builder/over-builder.js +7 -0
  254. package/dist/esm/query-builder/returning-interface.d.ts +2 -2
  255. package/dist/esm/query-builder/select-query-builder.d.ts +155 -243
  256. package/dist/esm/query-builder/select-query-builder.js +337 -82
  257. package/dist/esm/query-builder/update-query-builder.d.ts +149 -217
  258. package/dist/esm/query-builder/update-query-builder.js +25 -119
  259. package/dist/esm/query-builder/update-result.js +3 -0
  260. package/dist/esm/query-builder/where-interface.d.ts +71 -184
  261. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  262. package/dist/esm/query-compiler/default-query-compiler.js +18 -2
  263. package/dist/esm/query-creator.d.ts +38 -2
  264. package/dist/esm/query-creator.js +3 -45
  265. package/dist/esm/query-executor/query-executor.d.ts +3 -3
  266. package/dist/esm/raw-builder/raw-builder.d.ts +5 -3
  267. package/dist/esm/raw-builder/raw-builder.js +13 -7
  268. package/dist/esm/raw-builder/sql.d.ts +17 -9
  269. package/dist/esm/raw-builder/sql.js +8 -2
  270. package/dist/esm/schema/alter-column-builder.d.ts +5 -0
  271. package/dist/esm/schema/alter-column-builder.js +7 -0
  272. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
  273. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
  274. package/dist/esm/schema/alter-table-drop-constraint-builder.d.ts +5 -0
  275. package/dist/esm/schema/alter-table-drop-constraint-builder.js +7 -0
  276. package/dist/esm/schema/column-definition-builder.d.ts +6 -1
  277. package/dist/esm/schema/column-definition-builder.js +8 -1
  278. package/dist/esm/schema/create-index-builder.d.ts +51 -9
  279. package/dist/esm/schema/create-index-builder.js +17 -0
  280. package/dist/esm/schema/create-schema-builder.d.ts +5 -0
  281. package/dist/esm/schema/create-schema-builder.js +7 -0
  282. package/dist/esm/schema/create-table-builder.d.ts +3 -1
  283. package/dist/esm/schema/create-table-builder.js +3 -1
  284. package/dist/esm/schema/create-type-builder.d.ts +5 -0
  285. package/dist/esm/schema/create-type-builder.js +7 -0
  286. package/dist/esm/schema/create-view-builder.d.ts +5 -0
  287. package/dist/esm/schema/create-view-builder.js +7 -0
  288. package/dist/esm/schema/drop-index-builder.d.ts +5 -0
  289. package/dist/esm/schema/drop-index-builder.js +7 -0
  290. package/dist/esm/schema/drop-schema-builder.d.ts +5 -0
  291. package/dist/esm/schema/drop-schema-builder.js +7 -0
  292. package/dist/esm/schema/drop-table-builder.d.ts +5 -0
  293. package/dist/esm/schema/drop-table-builder.js +7 -0
  294. package/dist/esm/schema/drop-type-builder.d.ts +5 -0
  295. package/dist/esm/schema/drop-type-builder.js +7 -0
  296. package/dist/esm/schema/drop-view-builder.d.ts +5 -0
  297. package/dist/esm/schema/drop-view-builder.js +7 -0
  298. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +5 -0
  299. package/dist/esm/schema/foreign-key-constraint-builder.js +7 -0
  300. package/dist/esm/util/compilable.d.ts +1 -0
  301. package/dist/esm/util/compilable.js +4 -1
  302. package/dist/esm/util/explainable.d.ts +35 -0
  303. package/dist/esm/util/log.d.ts +2 -0
  304. package/dist/esm/util/object-utils.js +1 -1
  305. package/dist/esm/util/streamable.d.ts +29 -0
  306. package/dist/esm/util/streamable.js +2 -0
  307. package/dist/esm/util/type-utils.d.ts +6 -4
  308. package/helpers/postgres.d.ts +1 -0
  309. package/helpers/postgres.js +1 -0
  310. package/package.json +20 -9
  311. package/dist/cjs/query-builder/expression-builder.d.ts +0 -126
  312. package/dist/cjs/query-builder/expression-builder.js +0 -107
  313. package/dist/esm/query-builder/expression-builder.d.ts +0 -126
  314. package/dist/esm/query-builder/expression-builder.js +0 -104
@@ -0,0 +1,386 @@
1
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
2
+ import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from '../parser/table-parser.js';
3
+ import { FunctionModule } from '../query-builder/function-module.js';
4
+ import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference } from '../parser/reference-parser.js';
5
+ import { QueryExecutor } from '../query-executor/query-executor.js';
6
+ import { BinaryOperatorExpression, ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
7
+ import { Expression } from './expression.js';
8
+ import { ExpressionWrapper } from './expression-wrapper.js';
9
+ import { ComparisonOperator, UnaryOperator } from '../operation-node/operator-node.js';
10
+ import { SqlBool } from '../util/type-utils.js';
11
+ import { ExtractTypeFromValueExpressionOrList } from '../parser/value-parser.js';
12
+ export interface ExpressionBuilder<DB, TB extends keyof DB> {
13
+ /**
14
+ * Returns a {@link FunctionModule} that can be used to write type safe function
15
+ * calls.
16
+ *
17
+ * The difference between this and {@link Kysely.fn} is that this one is more
18
+ * type safe. You can only refer to columns visible to the part of the query
19
+ * you are building. {@link Kysely.fn} allows you to refer to columns in any
20
+ * table of the database even if it doesn't produce valid SQL.
21
+ *
22
+ * ```ts
23
+ * await db.selectFrom('person')
24
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
25
+ * .select((eb) => [
26
+ * 'person.id',
27
+ * eb.fn.count('pet.id').as('pet_count')
28
+ * ])
29
+ * .groupBy('person.id')
30
+ * .having(count('pet.id'), '>', 10)
31
+ * .execute()
32
+ * ```
33
+ *
34
+ * The generated SQL (PostgreSQL):
35
+ *
36
+ * ```sql
37
+ * select "person"."id", count("pet"."id") as "pet_count"
38
+ * from "person"
39
+ * inner join "pet" on "pet"."owner_id" = "person"."id"
40
+ * group by "person"."id"
41
+ * having count("pet"."id") > $1
42
+ * ```
43
+ */
44
+ get fn(): FunctionModule<DB, TB>;
45
+ /**
46
+ * Creates a subquery.
47
+ *
48
+ * The query builder returned by this method is typed in a way that you can refer to
49
+ * all tables of the parent query in addition to the subquery's tables.
50
+ *
51
+ * This method accepts all the same inputs as {@link QueryCreator.selectFrom}.
52
+ *
53
+ * ### Examples
54
+ *
55
+ * This example shows that you can refer to both `pet.owner_id` and `person.id`
56
+ * columns from the subquery. This is needed to be able to create correlated
57
+ * subqueries:
58
+ *
59
+ * ```ts
60
+ * const result = await db.selectFrom('pet')
61
+ * .select((eb) => [
62
+ * 'pet.name',
63
+ * eb.selectFrom('person')
64
+ * .whereRef('person.id', '=', 'pet.owner_id')
65
+ * .select('person.first_name')
66
+ * .as('owner_name')
67
+ * ])
68
+ * .execute()
69
+ *
70
+ * console.log(result[0].owner_name)
71
+ * ```
72
+ *
73
+ * The generated SQL (PostgreSQL):
74
+ *
75
+ * ```sql
76
+ * select
77
+ * "pet"."name",
78
+ * ( select "person"."first_name"
79
+ * from "person"
80
+ * where "person"."id" = "pet"."owner_id"
81
+ * ) as "owner_name"
82
+ * from "pet"
83
+ * ```
84
+ *
85
+ * You can use a normal query in place of `(qb) => qb.selectFrom(...)` but in
86
+ * that case Kysely typings wouldn't allow you to reference `pet.owner_id`
87
+ * because `pet` is not joined to that query.
88
+ */
89
+ selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
90
+ selectFrom<TE extends TableExpression<DB, TB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
91
+ selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
92
+ selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB, TE>, {}>;
93
+ selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
94
+ /**
95
+ * This can be used to reference columns.
96
+ *
97
+ * ### Examples
98
+ *
99
+ * By default the third argument of {@link bxp} and {@link cmpr} is a value.
100
+ * This function can be used to pass in a column reference instead:
101
+ *
102
+ * ```ts
103
+ * db.selectFrom('person')
104
+ * .selectAll('person')
105
+ * .where(({ or, cmpr, ref }) => or([
106
+ * cmpr('first_name', '=', ref('last_name')),
107
+ * cmpr('first_name', '=', ref('middle_name'))
108
+ * ]))
109
+ * ```
110
+ *
111
+ * In the next example we use the `ref` method to reference
112
+ * columns of the virtual table `excluded` in a type-safe way
113
+ * to create an upsert operation:
114
+ *
115
+ * ```ts
116
+ * db.insertInto('person')
117
+ * .values(person)
118
+ * .onConflict((oc) => oc
119
+ * .column('id')
120
+ * .doUpdateSet(({ ref }) => ({
121
+ * first_name: ref('excluded.first_name'),
122
+ * last_name: ref('excluded.last_name')
123
+ * }))
124
+ * )
125
+ * ```
126
+ *
127
+ * In the next example we use `ref` in a raw sql expression. Unless you
128
+ * want to be as type-safe as possible, this is probably overkill:
129
+ *
130
+ * ```ts
131
+ * db.update('pet').set((eb) => ({
132
+ * name: sql`concat(${eb.ref('pet.name')}, ${suffix})`
133
+ * }))
134
+ * ```
135
+ */
136
+ ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
137
+ /**
138
+ * Returns a value expression.
139
+ *
140
+ * This can be used to pass in a value where a reference is taken by default.
141
+ *
142
+ * This function returns an {@link Expression} and can be used pretty much anywhere.
143
+ *
144
+ * ### Examples
145
+ *
146
+ * The {@link cmpr} function takes a reference by default as the first argument. `val` could
147
+ * be used to pass in a value instead:
148
+ *
149
+ * ```ts
150
+ * cmpr(val(38), '=', ref('age'))
151
+ * ```
152
+ *
153
+ * The generated SQL (PostgreSQL):
154
+ *
155
+ * ```sql
156
+ * $1 = "age"
157
+ * ```
158
+ */
159
+ val<VE>(value: VE): ExpressionWrapper<ExtractTypeFromValueExpressionOrList<VE>>;
160
+ /**
161
+ * Creates a binary comparison expression.
162
+ *
163
+ * This function returns an {@link Expression} and can be used pretty much anywhere.
164
+ * See the examples for a couple of possible use cases.
165
+ *
166
+ * @see {@link bxp}
167
+ *
168
+ * ### Examples
169
+ *
170
+ * In this example we use `cmpr` and {@link or} to create a `WHERE expr1 OR expr2 OR expr3`
171
+ * statement:
172
+ *
173
+ * ```ts
174
+ * db.selectFrom('person')
175
+ * .selectAll('person')
176
+ * .where(({ or, cmpr }) => or([
177
+ * cmpr('first_name', '=', 'Jennifer'),
178
+ * cmpr('fist_name', '=', 'Arnold'),
179
+ * cmpr('fist_name', '=', 'Sylvester')
180
+ * ]))
181
+ * ```
182
+ *
183
+ * The generated SQL (PostgreSQL):
184
+ *
185
+ * ```sql
186
+ * select "person".*
187
+ * from "person"
188
+ * where "first_name" = $1
189
+ * or "first_name" = $2
190
+ * or "first_name" = $3
191
+ * ```
192
+ *
193
+ * By default the third argument is a value. {@link ref} can be used to
194
+ * pass in a column reference instead:
195
+ *
196
+ * ```ts
197
+ * db.selectFrom('person')
198
+ * .selectAll('person')
199
+ * .where(({ or, cmpr, ref }) => or([
200
+ * cmpr('first_name', '=', ref('last_name')),
201
+ * cmpr('first_name', '=', ref('middle_name'))
202
+ * ]))
203
+ * ```
204
+ *
205
+ * The generated SQL (PostgreSQL):
206
+ *
207
+ * ```sql
208
+ * select "person".*
209
+ * from "person"
210
+ * where "first_name" = "last_name"
211
+ * or "first_name" = "middle_name"
212
+ * ```
213
+ */
214
+ cmpr<O extends SqlBool = SqlBool, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<O>;
215
+ /**
216
+ * Creates a binary expression.
217
+ *
218
+ * See {@link cmpr} for creating binary comparison operations.
219
+ *
220
+ * This function returns an {@link Expression} and can be used pretty much anywhere.
221
+ * See the examples for a couple of possible use cases.
222
+ *
223
+ * ### Examples
224
+ *
225
+ * In the following example `bxp` is used to increment an integer column:
226
+ *
227
+ * ```ts
228
+ * db.updateTable('person')
229
+ * .set((eb) => ({
230
+ * age: eb.bxp('age', '+', 1)
231
+ * }))
232
+ * .where('id', '=', id)
233
+ * ```
234
+ *
235
+ * The generated SQL (PostgreSQL):
236
+ *
237
+ * ```sql
238
+ * update "person"
239
+ * set "age" = "age" + $1
240
+ * where "id" = $2
241
+ * ```
242
+ *
243
+ * By default the third argument is a value. {@link ref} can be used to
244
+ * pass in a column reference instead:
245
+ *
246
+ * ```ts
247
+ * db.updateTable('person')
248
+ * .set((eb) => ({
249
+ * age: eb.bxp('age', '+', eb.ref('age'))
250
+ * }))
251
+ * .where('id', '=', id)
252
+ * ```
253
+ *
254
+ * The generated SQL (PostgreSQL):
255
+ *
256
+ * ```sql
257
+ * update "person"
258
+ * set "age" = "age" + "age"
259
+ * where "id" = $1
260
+ * ```
261
+ */
262
+ 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>>;
263
+ /**
264
+ * Creates an unary expression.
265
+ *
266
+ * This function returns an {@link Expression} and can be used pretty much anywhere.
267
+ * See the examples for a couple of possible use cases.
268
+ *
269
+ * @see {@link not}, {@link exists} and {@link neg}.
270
+ *
271
+ * ### Examples
272
+ *
273
+ * ```ts
274
+ * db.selectFrom('person')
275
+ * .select((eb) => [
276
+ * 'first_name',
277
+ * eb.unary('-', 'age').as('negative_age')
278
+ * ])
279
+ * ```
280
+ *
281
+ * The generated SQL (PostgreSQL):
282
+ *
283
+ * ```sql
284
+ * select "first_name", -"age"
285
+ * from "person"
286
+ * ```
287
+ */
288
+ unary<RE extends ReferenceExpression<DB, TB>>(op: UnaryOperator, expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
289
+ /**
290
+ * Creates a `not` operation.
291
+ *
292
+ * A shortcut for `unary('not', expr)`.
293
+ *
294
+ * @see {@link unary}
295
+ */
296
+ not<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
297
+ /**
298
+ * Creates an `exists` operation.
299
+ *
300
+ * A shortcut for `unary('exists', expr)`.
301
+ *
302
+ * @see {@link unary}
303
+ */
304
+ exists<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<SqlBool>;
305
+ /**
306
+ * Creates a negation operation.
307
+ *
308
+ * A shortcut for `unary('-', expr)`.
309
+ *
310
+ * @see {@link unary}
311
+ */
312
+ neg<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
313
+ /**
314
+ * Combines two or more expressions using the logical `and` operator.
315
+ *
316
+ * This function returns an {@link Expression} and can be used pretty much anywhere.
317
+ * See the examples for a couple of possible use cases.
318
+ *
319
+ * ### Examples
320
+ *
321
+ * In this example we use `and` with {@link cmpr} to create a `WHERE expr1 AND expr2 AND expr3`
322
+ * statement:
323
+ *
324
+ * ```ts
325
+ * db.selectFrom('person')
326
+ * .selectAll('person')
327
+ * .where(({ and, cmpr }) => and([
328
+ * cmpr('first_name', '=', 'Jennifer'),
329
+ * cmpr('fist_name', '=', 'Arnold'),
330
+ * cmpr('fist_name', '=', 'Sylvester')
331
+ * ]))
332
+ * ```
333
+ *
334
+ * The generated SQL (PostgreSQL):
335
+ *
336
+ * ```sql
337
+ * select "person".*
338
+ * from "person"
339
+ * where "first_name" = $1
340
+ * and "first_name" = $2
341
+ * and "first_name" = $3
342
+ * ```
343
+ */
344
+ and(expres: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<SqlBool>;
345
+ /**
346
+ * Combines two or more expressions using the logical `or` operator.
347
+ *
348
+ * This function returns an {@link Expression} and can be used pretty much anywhere.
349
+ * See the examples for a couple of possible use cases.
350
+ *
351
+ * ### Examples
352
+ *
353
+ * In this example we use `or` with {@link cmpr} to create a `WHERE expr1 OR expr2 OR expr3`
354
+ * statement:
355
+ *
356
+ * ```ts
357
+ * db.selectFrom('person')
358
+ * .selectAll('person')
359
+ * .where(({ or, cmpr }) => or([
360
+ * cmpr('first_name', '=', 'Jennifer'),
361
+ * cmpr('fist_name', '=', 'Arnold'),
362
+ * cmpr('fist_name', '=', 'Sylvester')
363
+ * ]))
364
+ * ```
365
+ *
366
+ * The generated SQL (PostgreSQL):
367
+ *
368
+ * ```sql
369
+ * select "person".*
370
+ * from "person"
371
+ * where "first_name" = $1
372
+ * or "first_name" = $2
373
+ * or "first_name" = $3
374
+ * ```
375
+ */
376
+ or(expres: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<SqlBool>;
377
+ /**
378
+ * See {@link QueryCreator.withSchema}
379
+ *
380
+ * @deprecated Will be removed in kysely 0.25.0.
381
+ */
382
+ withSchema(schema: string): ExpressionBuilder<DB, TB>;
383
+ }
384
+ export declare function createExpressionBuilder<DB, TB extends keyof DB>(executor?: QueryExecutor): ExpressionBuilder<DB, TB>;
385
+ export declare function expressionBuilder<DB, TB extends keyof DB>(_: SelectQueryBuilder<DB, TB, any>): ExpressionBuilder<DB, TB>;
386
+ export declare function expressionBuilder<DB, TB extends keyof DB>(): ExpressionBuilder<DB, TB>;
@@ -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
  */