typhex 0.1.0-alpha.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 (421) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +417 -0
  4. package/SECURITY.md +32 -0
  5. package/dist/arrow/aggregates.d.ts +12 -0
  6. package/dist/arrow/aggregates.d.ts.map +1 -0
  7. package/dist/arrow/aggregates.js +32 -0
  8. package/dist/arrow/aggregates.js.map +1 -0
  9. package/dist/arrow/constants.d.ts +15 -0
  10. package/dist/arrow/constants.d.ts.map +1 -0
  11. package/dist/arrow/constants.js +42 -0
  12. package/dist/arrow/constants.js.map +1 -0
  13. package/dist/arrow/index.d.ts +7 -0
  14. package/dist/arrow/index.d.ts.map +1 -0
  15. package/dist/arrow/index.js +7 -0
  16. package/dist/arrow/index.js.map +1 -0
  17. package/dist/config/index.d.ts +6 -0
  18. package/dist/config/index.d.ts.map +1 -0
  19. package/dist/config/index.js +4 -0
  20. package/dist/config/index.js.map +1 -0
  21. package/dist/config/load-config.d.ts +19 -0
  22. package/dist/config/load-config.d.ts.map +1 -0
  23. package/dist/config/load-config.js +84 -0
  24. package/dist/config/load-config.js.map +1 -0
  25. package/dist/config/load-env.d.ts +7 -0
  26. package/dist/config/load-env.d.ts.map +1 -0
  27. package/dist/config/load-env.js +62 -0
  28. package/dist/config/load-env.js.map +1 -0
  29. package/dist/config/types.d.ts +20 -0
  30. package/dist/config/types.d.ts.map +1 -0
  31. package/dist/config/types.js +10 -0
  32. package/dist/config/types.js.map +1 -0
  33. package/dist/dbs/base-migrator.d.ts +20 -0
  34. package/dist/dbs/base-migrator.d.ts.map +1 -0
  35. package/dist/dbs/base-migrator.js +112 -0
  36. package/dist/dbs/base-migrator.js.map +1 -0
  37. package/dist/dbs/index.d.ts +9 -0
  38. package/dist/dbs/index.d.ts.map +1 -0
  39. package/dist/dbs/index.js +17 -0
  40. package/dist/dbs/index.js.map +1 -0
  41. package/dist/dbs/postgres/dialect.d.ts +8 -0
  42. package/dist/dbs/postgres/dialect.d.ts.map +1 -0
  43. package/dist/dbs/postgres/dialect.js +17 -0
  44. package/dist/dbs/postgres/dialect.js.map +1 -0
  45. package/dist/dbs/postgres/driver.d.ts +42 -0
  46. package/dist/dbs/postgres/driver.d.ts.map +1 -0
  47. package/dist/dbs/postgres/driver.js +111 -0
  48. package/dist/dbs/postgres/driver.js.map +1 -0
  49. package/dist/dbs/postgres/index.d.ts +6 -0
  50. package/dist/dbs/postgres/index.d.ts.map +1 -0
  51. package/dist/dbs/postgres/index.js +5 -0
  52. package/dist/dbs/postgres/index.js.map +1 -0
  53. package/dist/dbs/postgres/migrator.d.ts +13 -0
  54. package/dist/dbs/postgres/migrator.d.ts.map +1 -0
  55. package/dist/dbs/postgres/migrator.js +22 -0
  56. package/dist/dbs/postgres/migrator.js.map +1 -0
  57. package/dist/dbs/postgres/query-compiler.d.ts +22 -0
  58. package/dist/dbs/postgres/query-compiler.d.ts.map +1 -0
  59. package/dist/dbs/postgres/query-compiler.js +140 -0
  60. package/dist/dbs/postgres/query-compiler.js.map +1 -0
  61. package/dist/dbs/postgres/trx.d.ts +16 -0
  62. package/dist/dbs/postgres/trx.d.ts.map +1 -0
  63. package/dist/dbs/postgres/trx.js +68 -0
  64. package/dist/dbs/postgres/trx.js.map +1 -0
  65. package/dist/dbs/query-compiler.d.ts +135 -0
  66. package/dist/dbs/query-compiler.d.ts.map +1 -0
  67. package/dist/dbs/query-compiler.js +775 -0
  68. package/dist/dbs/query-compiler.js.map +1 -0
  69. package/dist/dbs/sqlite/dialect.d.ts +8 -0
  70. package/dist/dbs/sqlite/dialect.d.ts.map +1 -0
  71. package/dist/dbs/sqlite/dialect.js +17 -0
  72. package/dist/dbs/sqlite/dialect.js.map +1 -0
  73. package/dist/dbs/sqlite/driver.d.ts +9 -0
  74. package/dist/dbs/sqlite/driver.d.ts.map +1 -0
  75. package/dist/dbs/sqlite/driver.js +66 -0
  76. package/dist/dbs/sqlite/driver.js.map +1 -0
  77. package/dist/dbs/sqlite/index.d.ts +6 -0
  78. package/dist/dbs/sqlite/index.d.ts.map +1 -0
  79. package/dist/dbs/sqlite/index.js +5 -0
  80. package/dist/dbs/sqlite/index.js.map +1 -0
  81. package/dist/dbs/sqlite/migrator.d.ts +13 -0
  82. package/dist/dbs/sqlite/migrator.d.ts.map +1 -0
  83. package/dist/dbs/sqlite/migrator.js +22 -0
  84. package/dist/dbs/sqlite/migrator.js.map +1 -0
  85. package/dist/dbs/sqlite/query-compiler.d.ts +26 -0
  86. package/dist/dbs/sqlite/query-compiler.d.ts.map +1 -0
  87. package/dist/dbs/sqlite/query-compiler.js +80 -0
  88. package/dist/dbs/sqlite/query-compiler.js.map +1 -0
  89. package/dist/dbs/sqlite/trx.d.ts +13 -0
  90. package/dist/dbs/sqlite/trx.d.ts.map +1 -0
  91. package/dist/dbs/sqlite/trx.js +69 -0
  92. package/dist/dbs/sqlite/trx.js.map +1 -0
  93. package/dist/dbs/types.d.ts +92 -0
  94. package/dist/dbs/types.d.ts.map +1 -0
  95. package/dist/dbs/types.js +26 -0
  96. package/dist/dbs/types.js.map +1 -0
  97. package/dist/dialect.d.ts +3 -0
  98. package/dist/dialect.d.ts.map +1 -0
  99. package/dist/dialect.js +2 -0
  100. package/dist/dialect.js.map +1 -0
  101. package/dist/driver/factory.d.ts +19 -0
  102. package/dist/driver/factory.d.ts.map +1 -0
  103. package/dist/driver/factory.js +24 -0
  104. package/dist/driver/factory.js.map +1 -0
  105. package/dist/driver/index.d.ts +6 -0
  106. package/dist/driver/index.d.ts.map +1 -0
  107. package/dist/driver/index.js +3 -0
  108. package/dist/driver/index.js.map +1 -0
  109. package/dist/driver/sqlite.d.ts +15 -0
  110. package/dist/driver/sqlite.d.ts.map +1 -0
  111. package/dist/driver/sqlite.js +74 -0
  112. package/dist/driver/sqlite.js.map +1 -0
  113. package/dist/driver/types.d.ts +75 -0
  114. package/dist/driver/types.d.ts.map +1 -0
  115. package/dist/driver/types.js +2 -0
  116. package/dist/driver/types.js.map +1 -0
  117. package/dist/entity/entity.d.ts +67 -0
  118. package/dist/entity/entity.d.ts.map +1 -0
  119. package/dist/entity/entity.js +139 -0
  120. package/dist/entity/entity.js.map +1 -0
  121. package/dist/entity/global-driver.d.ts +38 -0
  122. package/dist/entity/global-driver.d.ts.map +1 -0
  123. package/dist/entity/global-driver.js +109 -0
  124. package/dist/entity/global-driver.js.map +1 -0
  125. package/dist/entity/index.d.ts +8 -0
  126. package/dist/entity/index.d.ts.map +1 -0
  127. package/dist/entity/index.js +3 -0
  128. package/dist/entity/index.js.map +1 -0
  129. package/dist/entity/pk-columns.d.ts +5 -0
  130. package/dist/entity/pk-columns.d.ts.map +1 -0
  131. package/dist/entity/pk-columns.js +14 -0
  132. package/dist/entity/pk-columns.js.map +1 -0
  133. package/dist/entity/relations.d.ts +134 -0
  134. package/dist/entity/relations.d.ts.map +1 -0
  135. package/dist/entity/relations.js +23 -0
  136. package/dist/entity/relations.js.map +1 -0
  137. package/dist/entity/schema-inference.d.ts +77 -0
  138. package/dist/entity/schema-inference.d.ts.map +1 -0
  139. package/dist/entity/schema-inference.js +6 -0
  140. package/dist/entity/schema-inference.js.map +1 -0
  141. package/dist/entity/types.d.ts +30 -0
  142. package/dist/entity/types.d.ts.map +1 -0
  143. package/dist/entity/types.js +5 -0
  144. package/dist/entity/types.js.map +1 -0
  145. package/dist/index.d.ts +25 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +12 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/ir/index.d.ts +2 -0
  150. package/dist/ir/index.d.ts.map +1 -0
  151. package/dist/ir/index.js +2 -0
  152. package/dist/ir/index.js.map +1 -0
  153. package/dist/ir/types.d.ts +148 -0
  154. package/dist/ir/types.d.ts.map +1 -0
  155. package/dist/ir/types.js +97 -0
  156. package/dist/ir/types.js.map +1 -0
  157. package/dist/migration/cli.d.ts +18 -0
  158. package/dist/migration/cli.d.ts.map +1 -0
  159. package/dist/migration/cli.js +236 -0
  160. package/dist/migration/cli.js.map +1 -0
  161. package/dist/migration/diff.d.ts +10 -0
  162. package/dist/migration/diff.d.ts.map +1 -0
  163. package/dist/migration/diff.js +10 -0
  164. package/dist/migration/diff.js.map +1 -0
  165. package/dist/migration/generator.d.ts +12 -0
  166. package/dist/migration/generator.d.ts.map +1 -0
  167. package/dist/migration/generator.js +98 -0
  168. package/dist/migration/generator.js.map +1 -0
  169. package/dist/migration/index.d.ts +7 -0
  170. package/dist/migration/index.d.ts.map +1 -0
  171. package/dist/migration/index.js +5 -0
  172. package/dist/migration/index.js.map +1 -0
  173. package/dist/migration/runner.d.ts +32 -0
  174. package/dist/migration/runner.d.ts.map +1 -0
  175. package/dist/migration/runner.js +279 -0
  176. package/dist/migration/runner.js.map +1 -0
  177. package/dist/migration/topo-sort.d.ts +12 -0
  178. package/dist/migration/topo-sort.d.ts.map +1 -0
  179. package/dist/migration/topo-sort.js +42 -0
  180. package/dist/migration/topo-sort.js.map +1 -0
  181. package/dist/migration/types.d.ts +45 -0
  182. package/dist/migration/types.d.ts.map +1 -0
  183. package/dist/migration/types.js +2 -0
  184. package/dist/migration/types.js.map +1 -0
  185. package/dist/orm/aggregates.d.ts +19 -0
  186. package/dist/orm/aggregates.d.ts.map +1 -0
  187. package/dist/orm/aggregates.js +32 -0
  188. package/dist/orm/aggregates.js.map +1 -0
  189. package/dist/orm/db.d.ts +105 -0
  190. package/dist/orm/db.d.ts.map +1 -0
  191. package/dist/orm/db.js +172 -0
  192. package/dist/orm/db.js.map +1 -0
  193. package/dist/orm/expr.d.ts +125 -0
  194. package/dist/orm/expr.d.ts.map +1 -0
  195. package/dist/orm/expr.js +10 -0
  196. package/dist/orm/expr.js.map +1 -0
  197. package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.d.ts +9 -0
  198. package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.d.ts.map +1 -0
  199. package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.js +44 -0
  200. package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.js.map +1 -0
  201. package/dist/orm/helpers/insert-graph/insert-graph-executor.d.ts +13 -0
  202. package/dist/orm/helpers/insert-graph/insert-graph-executor.d.ts.map +1 -0
  203. package/dist/orm/helpers/insert-graph/insert-graph-executor.js +42 -0
  204. package/dist/orm/helpers/insert-graph/insert-graph-executor.js.map +1 -0
  205. package/dist/orm/helpers/insert-graph/insert-graph-planner.d.ts +46 -0
  206. package/dist/orm/helpers/insert-graph/insert-graph-planner.d.ts.map +1 -0
  207. package/dist/orm/helpers/insert-graph/insert-graph-planner.js +258 -0
  208. package/dist/orm/helpers/insert-graph/insert-graph-planner.js.map +1 -0
  209. package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.d.ts +7 -0
  210. package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.d.ts.map +1 -0
  211. package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.js +8 -0
  212. package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.js.map +1 -0
  213. package/dist/orm/helpers/insert-graph/sequence-id-assigner.d.ts +15 -0
  214. package/dist/orm/helpers/insert-graph/sequence-id-assigner.d.ts.map +1 -0
  215. package/dist/orm/helpers/insert-graph/sequence-id-assigner.js +48 -0
  216. package/dist/orm/helpers/insert-graph/sequence-id-assigner.js.map +1 -0
  217. package/dist/orm/helpers/query-plan/expr-builder.d.ts +155 -0
  218. package/dist/orm/helpers/query-plan/expr-builder.d.ts.map +1 -0
  219. package/dist/orm/helpers/query-plan/expr-builder.js +297 -0
  220. package/dist/orm/helpers/query-plan/expr-builder.js.map +1 -0
  221. package/dist/orm/helpers/query-plan/query-ir-analyzer.d.ts +48 -0
  222. package/dist/orm/helpers/query-plan/query-ir-analyzer.d.ts.map +1 -0
  223. package/dist/orm/helpers/query-plan/query-ir-analyzer.js +262 -0
  224. package/dist/orm/helpers/query-plan/query-ir-analyzer.js.map +1 -0
  225. package/dist/orm/helpers/query-plan/query-plan.d.ts +164 -0
  226. package/dist/orm/helpers/query-plan/query-plan.d.ts.map +1 -0
  227. package/dist/orm/helpers/query-plan/query-plan.js +549 -0
  228. package/dist/orm/helpers/query-plan/query-plan.js.map +1 -0
  229. package/dist/orm/helpers/query-plan/select-classifier.d.ts +161 -0
  230. package/dist/orm/helpers/query-plan/select-classifier.d.ts.map +1 -0
  231. package/dist/orm/helpers/query-plan/select-classifier.js +359 -0
  232. package/dist/orm/helpers/query-plan/select-classifier.js.map +1 -0
  233. package/dist/orm/helpers/relations/relation-assembler.d.ts +21 -0
  234. package/dist/orm/helpers/relations/relation-assembler.d.ts.map +1 -0
  235. package/dist/orm/helpers/relations/relation-assembler.js +60 -0
  236. package/dist/orm/helpers/relations/relation-assembler.js.map +1 -0
  237. package/dist/orm/helpers/relations/relation-fetcher.d.ts +30 -0
  238. package/dist/orm/helpers/relations/relation-fetcher.d.ts.map +1 -0
  239. package/dist/orm/helpers/relations/relation-fetcher.js +128 -0
  240. package/dist/orm/helpers/relations/relation-fetcher.js.map +1 -0
  241. package/dist/orm/helpers/relations/relation-joins.d.ts +74 -0
  242. package/dist/orm/helpers/relations/relation-joins.d.ts.map +1 -0
  243. package/dist/orm/helpers/relations/relation-joins.js +138 -0
  244. package/dist/orm/helpers/relations/relation-joins.js.map +1 -0
  245. package/dist/orm/helpers/relations/relation-resolver.d.ts +14 -0
  246. package/dist/orm/helpers/relations/relation-resolver.d.ts.map +1 -0
  247. package/dist/orm/helpers/relations/relation-resolver.js +25 -0
  248. package/dist/orm/helpers/relations/relation-resolver.js.map +1 -0
  249. package/dist/orm/index.d.ts +7 -0
  250. package/dist/orm/index.d.ts.map +1 -0
  251. package/dist/orm/index.js +5 -0
  252. package/dist/orm/index.js.map +1 -0
  253. package/dist/orm/query-builder.d.ts +136 -0
  254. package/dist/orm/query-builder.d.ts.map +1 -0
  255. package/dist/orm/query-builder.js +433 -0
  256. package/dist/orm/query-builder.js.map +1 -0
  257. package/dist/orm/query-helpers.d.ts +35 -0
  258. package/dist/orm/query-helpers.d.ts.map +1 -0
  259. package/dist/orm/query-helpers.js +83 -0
  260. package/dist/orm/query-helpers.js.map +1 -0
  261. package/dist/orm/query-state.d.ts +56 -0
  262. package/dist/orm/query-state.d.ts.map +1 -0
  263. package/dist/orm/query-state.js +112 -0
  264. package/dist/orm/query-state.js.map +1 -0
  265. package/dist/orm/single-row-query-builder.d.ts +18 -0
  266. package/dist/orm/single-row-query-builder.d.ts.map +1 -0
  267. package/dist/orm/single-row-query-builder.js +90 -0
  268. package/dist/orm/single-row-query-builder.js.map +1 -0
  269. package/dist/orm/trx.d.ts +40 -0
  270. package/dist/orm/trx.d.ts.map +1 -0
  271. package/dist/orm/trx.js +118 -0
  272. package/dist/orm/trx.js.map +1 -0
  273. package/dist/parser/acorn-helpers.d.ts +43 -0
  274. package/dist/parser/acorn-helpers.d.ts.map +1 -0
  275. package/dist/parser/acorn-helpers.js +104 -0
  276. package/dist/parser/acorn-helpers.js.map +1 -0
  277. package/dist/parser/acorn-member.d.ts +16 -0
  278. package/dist/parser/acorn-member.d.ts.map +1 -0
  279. package/dist/parser/acorn-member.js +31 -0
  280. package/dist/parser/acorn-member.js.map +1 -0
  281. package/dist/parser/acorn-types.d.ts +14 -0
  282. package/dist/parser/acorn-types.d.ts.map +1 -0
  283. package/dist/parser/acorn-types.js +6 -0
  284. package/dist/parser/acorn-types.js.map +1 -0
  285. package/dist/parser/arrow-source.d.ts +23 -0
  286. package/dist/parser/arrow-source.d.ts.map +1 -0
  287. package/dist/parser/arrow-source.js +70 -0
  288. package/dist/parser/arrow-source.js.map +1 -0
  289. package/dist/parser/group-by.d.ts +17 -0
  290. package/dist/parser/group-by.d.ts.map +1 -0
  291. package/dist/parser/group-by.js +62 -0
  292. package/dist/parser/group-by.js.map +1 -0
  293. package/dist/parser/index.d.ts +5 -0
  294. package/dist/parser/index.d.ts.map +1 -0
  295. package/dist/parser/index.js +3 -0
  296. package/dist/parser/index.js.map +1 -0
  297. package/dist/parser/parse-arrow.d.ts +10 -0
  298. package/dist/parser/parse-arrow.d.ts.map +1 -0
  299. package/dist/parser/parse-arrow.js +9 -0
  300. package/dist/parser/parse-arrow.js.map +1 -0
  301. package/dist/parser/predicate-walk.d.ts +24 -0
  302. package/dist/parser/predicate-walk.d.ts.map +1 -0
  303. package/dist/parser/predicate-walk.js +247 -0
  304. package/dist/parser/predicate-walk.js.map +1 -0
  305. package/dist/parser/resolve.d.ts +25 -0
  306. package/dist/parser/resolve.d.ts.map +1 -0
  307. package/dist/parser/resolve.js +134 -0
  308. package/dist/parser/resolve.js.map +1 -0
  309. package/dist/parser/select.d.ts +7 -0
  310. package/dist/parser/select.d.ts.map +1 -0
  311. package/dist/parser/select.js +333 -0
  312. package/dist/parser/select.js.map +1 -0
  313. package/dist/parser/update.d.ts +7 -0
  314. package/dist/parser/update.d.ts.map +1 -0
  315. package/dist/parser/update.js +51 -0
  316. package/dist/parser/update.js.map +1 -0
  317. package/dist/postgres/aggregates.d.ts +12 -0
  318. package/dist/postgres/aggregates.d.ts.map +1 -0
  319. package/dist/postgres/aggregates.js +19 -0
  320. package/dist/postgres/aggregates.js.map +1 -0
  321. package/dist/postgres.d.ts +6 -0
  322. package/dist/postgres.d.ts.map +1 -0
  323. package/dist/postgres.js +6 -0
  324. package/dist/postgres.js.map +1 -0
  325. package/dist/schema/index.d.ts +2 -0
  326. package/dist/schema/index.d.ts.map +1 -0
  327. package/dist/schema/index.js +2 -0
  328. package/dist/schema/index.js.map +1 -0
  329. package/dist/schema/types.d.ts +16 -0
  330. package/dist/schema/types.d.ts.map +1 -0
  331. package/dist/schema/types.js +40 -0
  332. package/dist/schema/types.js.map +1 -0
  333. package/dist/sqlite/aggregates.d.ts +8 -0
  334. package/dist/sqlite/aggregates.d.ts.map +1 -0
  335. package/dist/sqlite/aggregates.js +11 -0
  336. package/dist/sqlite/aggregates.js.map +1 -0
  337. package/dist/sqlite.d.ts +6 -0
  338. package/dist/sqlite.d.ts.map +1 -0
  339. package/dist/sqlite.js +6 -0
  340. package/dist/sqlite.js.map +1 -0
  341. package/dist/transformer/bindings.d.ts +18 -0
  342. package/dist/transformer/bindings.d.ts.map +1 -0
  343. package/dist/transformer/bindings.js +52 -0
  344. package/dist/transformer/bindings.js.map +1 -0
  345. package/dist/transformer/index.d.ts +17 -0
  346. package/dist/transformer/index.d.ts.map +1 -0
  347. package/dist/transformer/index.js +75 -0
  348. package/dist/transformer/index.js.map +1 -0
  349. package/dist/transformer/ir-emit.d.ts +12 -0
  350. package/dist/transformer/ir-emit.d.ts.map +1 -0
  351. package/dist/transformer/ir-emit.js +144 -0
  352. package/dist/transformer/ir-emit.js.map +1 -0
  353. package/dist/transformer/join-transformer.d.ts +12 -0
  354. package/dist/transformer/join-transformer.d.ts.map +1 -0
  355. package/dist/transformer/join-transformer.js +102 -0
  356. package/dist/transformer/join-transformer.js.map +1 -0
  357. package/dist/transformer/orderby-transformer.d.ts +13 -0
  358. package/dist/transformer/orderby-transformer.d.ts.map +1 -0
  359. package/dist/transformer/orderby-transformer.js +84 -0
  360. package/dist/transformer/orderby-transformer.js.map +1 -0
  361. package/dist/transformer/select-transformer.d.ts +9 -0
  362. package/dist/transformer/select-transformer.d.ts.map +1 -0
  363. package/dist/transformer/select-transformer.js +222 -0
  364. package/dist/transformer/select-transformer.js.map +1 -0
  365. package/dist/transformer/shared.d.ts +12 -0
  366. package/dist/transformer/shared.d.ts.map +1 -0
  367. package/dist/transformer/shared.js +12 -0
  368. package/dist/transformer/shared.js.map +1 -0
  369. package/dist/transformer/subquery-transformer.d.ts +15 -0
  370. package/dist/transformer/subquery-transformer.d.ts.map +1 -0
  371. package/dist/transformer/subquery-transformer.js +43 -0
  372. package/dist/transformer/subquery-transformer.js.map +1 -0
  373. package/dist/transformer/ts-aggregates.d.ts +13 -0
  374. package/dist/transformer/ts-aggregates.d.ts.map +1 -0
  375. package/dist/transformer/ts-aggregates.js +83 -0
  376. package/dist/transformer/ts-aggregates.js.map +1 -0
  377. package/dist/transformer/ts-binary.d.ts +8 -0
  378. package/dist/transformer/ts-binary.d.ts.map +1 -0
  379. package/dist/transformer/ts-binary.js +32 -0
  380. package/dist/transformer/ts-binary.js.map +1 -0
  381. package/dist/transformer/ts-member.d.ts +12 -0
  382. package/dist/transformer/ts-member.d.ts.map +1 -0
  383. package/dist/transformer/ts-member.js +22 -0
  384. package/dist/transformer/ts-member.js.map +1 -0
  385. package/dist/transformer/ts-utils.d.ts +10 -0
  386. package/dist/transformer/ts-utils.d.ts.map +1 -0
  387. package/dist/transformer/ts-utils.js +38 -0
  388. package/dist/transformer/ts-utils.js.map +1 -0
  389. package/dist/transformer/typhex-type.d.ts +8 -0
  390. package/dist/transformer/typhex-type.d.ts.map +1 -0
  391. package/dist/transformer/typhex-type.js +52 -0
  392. package/dist/transformer/typhex-type.js.map +1 -0
  393. package/dist/transformer/where-transformer.d.ts +33 -0
  394. package/dist/transformer/where-transformer.d.ts.map +1 -0
  395. package/dist/transformer/where-transformer.js +400 -0
  396. package/dist/transformer/where-transformer.js.map +1 -0
  397. package/dist/utils.d.ts +5 -0
  398. package/dist/utils.d.ts.map +1 -0
  399. package/dist/utils.js +30 -0
  400. package/dist/utils.js.map +1 -0
  401. package/docs/drivers/postgres.md +54 -0
  402. package/docs/drivers/sqlite.md +33 -0
  403. package/docs/guide/aggregations.md +272 -0
  404. package/docs/guide/bulk-operations.md +204 -0
  405. package/docs/guide/cte-and-unions.md +270 -0
  406. package/docs/guide/entities-relations.md +208 -0
  407. package/docs/guide/expressions.md +98 -0
  408. package/docs/guide/filtering-by-relations.md +166 -0
  409. package/docs/guide/getting-started.md +277 -0
  410. package/docs/guide/querying-relations.md +133 -0
  411. package/docs/guide/subqueries.md +152 -0
  412. package/docs/guide/transactions.md +146 -0
  413. package/docs/guide/typescript-transformer.md +138 -0
  414. package/docs/index.md +33 -0
  415. package/docs/migrations/overview.md +143 -0
  416. package/docs/public-api.md +133 -0
  417. package/docs/reference/api.md +665 -0
  418. package/docs/reference/architecture.md +83 -0
  419. package/docs/release-checklist.md +55 -0
  420. package/etc/typhex.api.md +774 -0
  421. package/package.json +137 -0
@@ -0,0 +1,297 @@
1
+ /**
2
+ * IR → Expr conversion.
3
+ *
4
+ * The planner-side IR (`src/ir/types.ts`) is the parser's output: arrow
5
+ * predicates and select bodies turned into a tree of nodes that still
6
+ * reference user-facing names like the row parameter (`u`, `c`, …) and
7
+ * relation keys (`u.author`). The runtime Expr model (`src/orm/expr.ts`)
8
+ * is what the dialect compiles to SQL: every column reference has been
9
+ * resolved to a (table-alias, column-path) pair, every captured
10
+ * `QueryBuilder` has been inlined as a child `QueryPlan`, and every
11
+ * one-to-many `EXISTS` has been pre-resolved to its target table and
12
+ * join keys.
13
+ *
14
+ * `ExprBuilder` performs that conversion. The planner constructs it once
15
+ * per plan with precomputed context: row-param aliases, relation join
16
+ * aliases, one-to-many EXISTS metadata, and already-built child subquery
17
+ * plans. It does not build child plans itself; when conversion reaches a
18
+ * subquery placeholder, it only swaps in the `QueryPlan` the planner
19
+ * prepared earlier.
20
+ */
21
+ /**
22
+ * Converts IR nodes to runtime `Expr` against a precomputed alias context.
23
+ *
24
+ * Constructor inputs:
25
+ * - `paramToAlias` — maps every row-param name in scope (including
26
+ * outer-correlated ones) to its SQL table alias. Built by the planner's
27
+ * `buildParamToAlias` phase.
28
+ * - `relationPathToAlias` — maps `"<param>.<relKey>"` to the join alias
29
+ * the planner allocated for that relation. Drives the column-path
30
+ * rewrite in `resolveColumn` (a member access through a joined relation
31
+ * becomes a column reference on the join's alias).
32
+ * - `oneToManyExists` — pre-resolved EXISTS metadata keyed by
33
+ * `"<rootParam>.<relationKey>"`. Lets `convertExists` emit a fully
34
+ * structured `ExprExists` without redoing the relation lookup.
35
+ * - `subqueryPlans` — child plans keyed by the runtime param/subquery
36
+ * placeholder names that reference captured `QueryBuilder`s.
37
+ */
38
+ export class ExprBuilder {
39
+ paramToAlias;
40
+ relationPathToAlias;
41
+ oneToManyExists;
42
+ subqueryPlans;
43
+ relationKeys;
44
+ cteNames;
45
+ constructor(paramToAlias, relationPathToAlias, oneToManyExists, subqueryPlans, relationKeys = new Set(), cteNames = new Set()) {
46
+ this.paramToAlias = paramToAlias;
47
+ this.relationPathToAlias = relationPathToAlias;
48
+ this.oneToManyExists = oneToManyExists;
49
+ this.subqueryPlans = subqueryPlans;
50
+ this.relationKeys = relationKeys;
51
+ this.cteNames = cteNames;
52
+ }
53
+ /**
54
+ * Recursively convert any IR node to an `Expr`.
55
+ *
56
+ * `scope` is the row-param-to-table-alias mapping in effect for this
57
+ * conversion. It defaults to the builder's `paramToAlias` (the top-level
58
+ * scope of the plan being built). `convertExists` augments and re-passes
59
+ * it: when an `EXISTS` predicate binds a fresh inner row-param (e.g.
60
+ * `d.employees.some(e => e.name === "Alice")` binds `e`), the recursive
61
+ * call uses `{ ...scope, [innerParam]: innerAlias }` so the inner
62
+ * predicate's `e.name` resolves against the inner-relation table alias
63
+ * rather than the outer row's.
64
+ *
65
+ * Throws on unknown node kinds — the IR types are a closed union, so
66
+ * hitting the default branch means a future-added kind wasn't handled.
67
+ */
68
+ convert(node, scope = this.paramToAlias, inlineParams) {
69
+ switch (node.kind) {
70
+ case "binary":
71
+ return {
72
+ kind: "binary",
73
+ op: node.op,
74
+ left: this.convert(node.left, scope, inlineParams),
75
+ right: this.convert(node.right, scope, inlineParams),
76
+ };
77
+ case "unary":
78
+ return {
79
+ kind: "unary",
80
+ op: node.op,
81
+ operand: this.convert(node.operand, scope, inlineParams),
82
+ };
83
+ case "member":
84
+ return this.resolveColumn(node.param, node.path, scope);
85
+ case "const":
86
+ return { kind: "const", value: node.value };
87
+ case "param":
88
+ return this.resolveParamRef(node.key, inlineParams);
89
+ case "in":
90
+ return this.convertIn(node, scope, inlineParams);
91
+ case "call":
92
+ return {
93
+ kind: "call",
94
+ method: node.method,
95
+ receiver: this.convert(node.receiver, scope, inlineParams),
96
+ args: node.args.map((a) => this.convert(a, scope, inlineParams)),
97
+ };
98
+ case "exists":
99
+ return this.convertExists(node, scope, inlineParams);
100
+ case "subqueryRef":
101
+ return this.convertSubqueryRef(node);
102
+ case "aggregate":
103
+ return this.convertAggregate(node, scope, inlineParams);
104
+ case "case":
105
+ return {
106
+ kind: "case",
107
+ branches: node.branches.map((b) => ({
108
+ when: this.convert(b.when, scope, inlineParams),
109
+ then: this.convert(b.then, scope, inlineParams),
110
+ })),
111
+ ...(node.else !== undefined
112
+ ? { else: this.convert(node.else, scope, inlineParams) }
113
+ : {}),
114
+ };
115
+ default:
116
+ throw new Error(`[typhex] Unknown IR node kind: ${node.kind}`);
117
+ }
118
+ }
119
+ /**
120
+ * Resolve `param.path` (an IR member reference) to a (alias, column-path)
121
+ * pair the dialect can render directly.
122
+ *
123
+ * Resolution proceeds in two steps:
124
+ *
125
+ * 1. **Alias lookup.** The starting alias is `scope[param]`. The planner
126
+ * builds that scope before conversion, including local and correlated
127
+ * row params.
128
+ *
129
+ * 2. **Relation rewrite.** If `path[0]` names a relation that has been
130
+ * joined into the query (`relationPathToAlias` has an entry for
131
+ * `"<param>.<path[0]>"`), the alias is replaced with the join's
132
+ * alias and the leading segment is dropped from the path. Example:
133
+ * `u.author.name` with `relationPathToAlias["u.author"] = "t1"`
134
+ * rewrites to `(alias: "t1", column: ["name"])`.
135
+ *
136
+ * The returned `ExprColumn.column` is a path array: empty means the
137
+ * alias itself (rare — only when relation rewrite consumed the entire
138
+ * path), single element is a leaf column, multiple elements is a
139
+ * dotted path (rare; preserved for forward compatibility).
140
+ */
141
+ resolveColumn(param, path, scope = this.paramToAlias) {
142
+ this.assertColumnPath(path);
143
+ if (path.length > 0 && this.cteNames.has(path[0])) {
144
+ return { kind: "column", alias: path[0], column: path.slice(1) };
145
+ }
146
+ let alias = scope[param];
147
+ let p = path;
148
+ const relAlias = path.length > 1 ? this.relationPathToAlias[`${param}.${path[0]}`] : undefined;
149
+ if (relAlias) {
150
+ alias = relAlias;
151
+ p = path.slice(1);
152
+ }
153
+ return { kind: "column", alias, column: p };
154
+ }
155
+ assertColumnPath(path) {
156
+ const key = path[0];
157
+ if (!key)
158
+ return;
159
+ if (this.cteNames.has(key)) {
160
+ if (path.length === 1) {
161
+ throw new Error(`[typhex] CTE "${key}" must reference a column`);
162
+ }
163
+ return;
164
+ }
165
+ if (path.length === 1 && this.relationKeys.has(key)) {
166
+ throw new Error(`[typhex] relation "${key}" must reference a column`);
167
+ }
168
+ }
169
+ /**
170
+ * Convert an `IrAggregate` (e.g. `count(u.id)`, `sum(p.price)`) to an
171
+ * `ExprAggregate`. The argument expression — when present — is converted
172
+ * recursively so nested member paths resolve through the same alias
173
+ * scope. `null` arg means `COUNT(*)` style.
174
+ *
175
+ * Public so the planner's `buildSelectItems` can convert select-list
176
+ * aggregates directly without a wrapping `IrNode` that would otherwise
177
+ * route through `convert`.
178
+ */
179
+ convertAggregate(agg, scope = this.paramToAlias, inlineParams) {
180
+ return {
181
+ kind: "aggregate",
182
+ func: agg.func,
183
+ arg: agg.arg ? this.convert(agg.arg, scope, inlineParams) : null,
184
+ alias: agg.alias,
185
+ distinct: agg.distinct,
186
+ separator: agg.separator,
187
+ };
188
+ }
189
+ /**
190
+ * Convert an `IrSubqueryRef` (a transformer-emitted placeholder pointing
191
+ * at a captured `QueryBuilder` in the param bags) to an `ExprSubquery`
192
+ * by looking up the child plan the planner already built.
193
+ * Public so `buildSelectItems` can use it for select-list subqueries
194
+ * (`Entity.query()....` projected as a column value).
195
+ */
196
+ convertSubqueryRef(ref) {
197
+ return { kind: "subquery", plan: this.getSubqueryPlan(ref.key) };
198
+ }
199
+ /**
200
+ * Resolve an `IrParam` (free variable referenced by name from a runtime-
201
+ * parsed predicate). Captured subqueries are represented as
202
+ * `IrSubqueryRef`, so params always stay late-bound.
203
+ */
204
+ resolveParamRef(key, inlineParams) {
205
+ if (inlineParams === undefined) {
206
+ return { kind: "param", name: key };
207
+ }
208
+ if (key in inlineParams) {
209
+ const value = inlineParams[key];
210
+ if (value !== null &&
211
+ typeof value !== "string" &&
212
+ typeof value !== "number" &&
213
+ typeof value !== "boolean") {
214
+ throw new Error(`[typhex] Cannot inline SQL literal "${key}" of type ${typeof value}`);
215
+ }
216
+ return { kind: "const", value };
217
+ }
218
+ throw new Error(`[typhex] inline param "${key}" not provided`);
219
+ }
220
+ /**
221
+ * Convert `<expr> IN <rhs>` (or `NOT IN`). The right-hand side has three
222
+ * legal IR shapes that map to three different `ExprInRhs` shapes:
223
+ *
224
+ * - `IrConst` array → `{ kind: "values", values }` — inline literal list,
225
+ * compiled to `(?, ?, ?)` placeholders.
226
+ * - `IrParam` → a late-bound param reference. It expands at execution
227
+ * time when the dialect resolves `__param` sentinels.
228
+ * - `IrSubqueryRef` → a pre-built inline subquery plan.
229
+ *
230
+ * Anything else throws — IN's right side is a closed union by spec.
231
+ */
232
+ convertIn(node, scope, inlineParams) {
233
+ const left = this.convert(node.left, scope, inlineParams);
234
+ const { negated } = node;
235
+ const right = node.right;
236
+ if (right.kind === "const" && Array.isArray(right.value)) {
237
+ return { kind: "in", left, right: { kind: "values", values: right.value }, negated };
238
+ }
239
+ if (right.kind === "param") {
240
+ return { kind: "in", left, right: { kind: "param", name: right.key }, negated };
241
+ }
242
+ if (right.kind === "subqueryRef") {
243
+ return {
244
+ kind: "in",
245
+ left,
246
+ right: { kind: "subquery", plan: this.subqueryPlans.get(right.key) },
247
+ negated,
248
+ };
249
+ }
250
+ throw new Error("[typhex] IN right side must be const array, param, or subqueryRef");
251
+ }
252
+ /**
253
+ * Convert an `IrExists` (a one-to-many `EXISTS (...)` subquery).
254
+ *
255
+ * The relation lookup was done up-front by the planner's
256
+ * `OneToManyExistsBuilder`, which produced `oneToManyExists` keyed by
257
+ * `"<rootParam>.<relationKey>"`. We just look up the entry and stamp it
258
+ * onto the runtime `ExprExists`.
259
+ *
260
+ * Two scope details worth noting:
261
+ *
262
+ * 1. **outerAlias.** This is the alias the EXISTS predicate joins
263
+ * against (typically the main table). Resolving via
264
+ * `scope[node.rootParam]` is what makes nested EXISTS work: when an
265
+ * EXISTS is itself inside another EXISTS' inner predicate, the
266
+ * inner-most rootParam is actually the parent EXISTS' bound row,
267
+ * and `scope` will have been augmented to map it to the parent's
268
+ * inner alias.
269
+ *
270
+ * 2. **innerScope.** Augmenting with `[innerParam]: info.alias` is what
271
+ * lets the inner predicate's column references (`e.name` in
272
+ * `.some(e => e.name === ...)`) resolve to the inner relation's
273
+ * table alias rather than the outer row's.
274
+ */
275
+ convertExists(node, scope, inlineParams) {
276
+ const key = `${node.rootParam}.${node.relationKey}`;
277
+ const meta = this.oneToManyExists[key];
278
+ if (!meta) {
279
+ throw new Error(`[typhex] EXISTS predicate for relation "${node.relationKey}" could not be planned`);
280
+ }
281
+ const innerScope = { ...scope, [node.innerParam]: meta.alias };
282
+ return {
283
+ kind: "exists",
284
+ negated: node.negated,
285
+ outerAlias: scope[node.rootParam],
286
+ innerAlias: meta.alias,
287
+ targetTable: meta.targetTable,
288
+ fkColumns: meta.fkColumns,
289
+ mainPk: meta.mainPk,
290
+ predicate: this.convert(node.innerWhere, innerScope, inlineParams),
291
+ };
292
+ }
293
+ getSubqueryPlan(key) {
294
+ return this.subqueryPlans.get(key);
295
+ }
296
+ }
297
+ //# sourceMappingURL=expr-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expr-builder.js","sourceRoot":"","sources":["../../../../src/orm/helpers/query-plan/expr-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { IrExists, IrSubqueryRef } from "../../../ir/types.js";
2
+ import type { QueryState } from "../../query-state.js";
3
+ export interface ExprIrAnalysis {
4
+ paramNames: Set<string>;
5
+ relationKeys: Set<string>;
6
+ subqueryRefs: Record<string, IrSubqueryRef>;
7
+ existsNodes: IrExists[];
8
+ referencedRegisteredCtes: Set<string>;
9
+ }
10
+ export interface QueryIrAnalysis {
11
+ rootParam: string;
12
+ localParamNames: string[];
13
+ correlatedParamNames: Set<string>;
14
+ subqueries: Record<string, QueryIrAnalysis>;
15
+ where: ExprIrAnalysis;
16
+ having: ExprIrAnalysis;
17
+ orderBy: ExprIrAnalysis;
18
+ select: ExprIrAnalysis;
19
+ all: ExprIrAnalysis;
20
+ joinRelationKeys: Set<string>;
21
+ reusableJoinKeys: Set<string>;
22
+ }
23
+ export declare class QueryIrAnalyzer {
24
+ private readonly state;
25
+ private readonly fallbackParam;
26
+ private readonly relations;
27
+ private readonly registeredCteNames;
28
+ constructor(state: QueryState<unknown>, fallbackParam: string);
29
+ analyze(): QueryIrAnalysis;
30
+ private inferRootParam;
31
+ private getLocalParamNames;
32
+ private analyzeSubqueries;
33
+ private getCorrelatedParamNames;
34
+ private analyzeOrderBy;
35
+ private analyzeSelectIr;
36
+ private analyzeUpsertIr;
37
+ private analyzeExprIr;
38
+ /** Pre-order: accumulate analysis, then recurse. Child edges match ExprBuilder; skips exists.innerWhere. */
39
+ private visitExprIr;
40
+ private relationKeysWithHints;
41
+ private reusableJoinKeys;
42
+ private merge;
43
+ private empty;
44
+ private mergeInto;
45
+ /** Ordered registered CTE names referenced in IR (where/having/select + updateSetIr / insertIr from analyze()). */
46
+ planReferencedRegisteredCtes(analysis: QueryIrAnalysis): string[];
47
+ }
48
+ //# sourceMappingURL=query-ir-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-ir-analyzer.d.ts","sourceRoot":"","sources":["../../../../src/orm/helpers/query-plan/query-ir-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA+B,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC5C,WAAW,EAAE,QAAQ,EAAE,CAAC;IACxB,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC5C,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,cAAc,CAAC;IACpB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAQD,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IACrD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAc;gBAG9B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAC1B,aAAa,EAAE,MAAM;IASxC,OAAO,IAAI,eAAe;IA4B1B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,aAAa;IAWrB,4GAA4G;IAC5G,OAAO,CAAC,WAAW;IAgEnB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,SAAS;IAUjB,mHAAmH;IACnH,4BAA4B,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,EAAE;CAOlE"}
@@ -0,0 +1,262 @@
1
+ export class QueryIrAnalyzer {
2
+ state;
3
+ fallbackParam;
4
+ relations;
5
+ registeredCteNames;
6
+ constructor(state, fallbackParam) {
7
+ this.state = state;
8
+ this.fallbackParam = fallbackParam;
9
+ this.relations = state.relations;
10
+ this.registeredCteNames = new Set([
11
+ ...(state.inScopeRegisteredCteNames ?? []),
12
+ ...(state.ctes ?? []).map((c) => c.name),
13
+ ]);
14
+ }
15
+ analyze() {
16
+ const rootParam = this.inferRootParam();
17
+ const where = this.analyzeExprIr(this.state.whereIr?.node, rootParam);
18
+ const having = this.analyzeExprIr(this.state.havingIr?.node, rootParam);
19
+ const orderBy = this.analyzeOrderBy(this.state.orderBy ?? [], rootParam);
20
+ const select = this.analyzeSelectIr(this.state.selectIr);
21
+ const updateSet = this.analyzeUpsertIr(this.state.updateSetIr, rootParam);
22
+ const insertValues = this.analyzeUpsertIr(this.state.insertIr, rootParam);
23
+ const joinSources = this.merge(where, orderBy);
24
+ const joinRelationKeys = this.relationKeysWithHints(joinSources.relationKeys);
25
+ const subqueries = this.analyzeSubqueries();
26
+ const correlatedParamNames = this.getCorrelatedParamNames(subqueries);
27
+ return {
28
+ rootParam,
29
+ localParamNames: this.getLocalParamNames(),
30
+ correlatedParamNames,
31
+ subqueries,
32
+ where,
33
+ having,
34
+ orderBy,
35
+ select,
36
+ all: this.merge(where, having, orderBy, select, updateSet, insertValues),
37
+ joinRelationKeys,
38
+ reusableJoinKeys: this.reusableJoinKeys(where.relationKeys, select.relationKeys),
39
+ };
40
+ }
41
+ inferRootParam() {
42
+ if (this.state.selectIr?.param)
43
+ return this.state.selectIr.param;
44
+ if (this.state.whereIr?.rootParam)
45
+ return this.state.whereIr.rootParam;
46
+ if (this.state.havingIr?.rootParam)
47
+ return this.state.havingIr.rootParam;
48
+ const firstOrder = this.state.orderBy?.[0]?.expr;
49
+ if (firstOrder?.kind === "member")
50
+ return firstOrder.param;
51
+ return this.fallbackParam;
52
+ }
53
+ getLocalParamNames() {
54
+ const names = new Set();
55
+ if (this.state.selectIr?.param)
56
+ names.add(this.state.selectIr.param);
57
+ if (this.state.whereIr) {
58
+ for (const param of this.state.whereIr.localParamNames ?? [this.state.whereIr.rootParam]) {
59
+ names.add(param);
60
+ }
61
+ }
62
+ if (this.state.havingIr) {
63
+ for (const param of this.state.havingIr.localParamNames ?? [this.state.havingIr.rootParam]) {
64
+ names.add(param);
65
+ }
66
+ }
67
+ for (const order of this.state.orderBy ?? []) {
68
+ if (order.expr.kind === "member")
69
+ names.add(order.expr.param);
70
+ }
71
+ return [...names];
72
+ }
73
+ analyzeSubqueries() {
74
+ const analyses = {};
75
+ for (const [key, captured] of Object.entries(this.state.subqueryParams ?? {})) {
76
+ analyses[key] = new QueryIrAnalyzer(captured.state, this.fallbackParam).analyze();
77
+ }
78
+ return analyses;
79
+ }
80
+ getCorrelatedParamNames(subqueries) {
81
+ const names = new Set();
82
+ for (const analysis of Object.values(subqueries)) {
83
+ const required = new Set([...analysis.all.paramNames, ...analysis.correlatedParamNames]);
84
+ for (const param of analysis.localParamNames)
85
+ required.delete(param);
86
+ for (const param of required)
87
+ names.add(param);
88
+ }
89
+ return names;
90
+ }
91
+ analyzeOrderBy(orderBy, rootParam) {
92
+ const out = this.empty();
93
+ for (const order of orderBy) {
94
+ this.mergeInto(out, this.analyzeExprIr(order.expr, rootParam, 2, false));
95
+ }
96
+ return out;
97
+ }
98
+ analyzeSelectIr(select) {
99
+ const out = this.empty();
100
+ if (!select)
101
+ return out;
102
+ out.paramNames.add(select.param);
103
+ for (const path of select.paths) {
104
+ if (path.length > 0 && this.relations?.[path[0]])
105
+ out.relationKeys.add(path[0]);
106
+ }
107
+ for (const relation of select.relations ?? []) {
108
+ if (this.relations?.[relation.name])
109
+ out.relationKeys.add(relation.name);
110
+ if (relation.whereIr) {
111
+ this.mergeInto(out, this.analyzeExprIr(relation.whereIr.node, relation.whereIr.rootParam));
112
+ }
113
+ for (const order of relation.orderBy ?? []) {
114
+ this.mergeInto(out, this.analyzeExprIr(order.expr, select.param, 2));
115
+ }
116
+ }
117
+ for (const aggregate of select.aggregates ?? []) {
118
+ this.mergeInto(out, this.analyzeExprIr(aggregate.arg, select.param));
119
+ }
120
+ for (const entry of select.subqueries ?? []) {
121
+ out.subqueryRefs[entry.subquery.key] = entry.subquery;
122
+ }
123
+ return out;
124
+ }
125
+ analyzeUpsertIr(values, rootParam) {
126
+ const out = this.empty();
127
+ for (const node of Object.values(values ?? {})) {
128
+ this.mergeInto(out, this.analyzeExprIr(node, rootParam));
129
+ }
130
+ return out;
131
+ }
132
+ analyzeExprIr(node, rootParam, relationMinPathLength = 1, requireRootParamForRelations = true) {
133
+ const out = this.empty();
134
+ this.visitExprIr(node, { rootParam, relationMinPathLength, requireRootParamForRelations }, out);
135
+ return out;
136
+ }
137
+ /** Pre-order: accumulate analysis, then recurse. Child edges match ExprBuilder; skips exists.innerWhere. */
138
+ visitExprIr(node, ctx, out) {
139
+ if (!node)
140
+ return;
141
+ switch (node.kind) {
142
+ case "member":
143
+ out.paramNames.add(node.param);
144
+ if (node.path.length > 0 && this.registeredCteNames.has(node.path[0])) {
145
+ out.referencedRegisteredCtes.add(node.path[0]);
146
+ }
147
+ if ((!ctx.requireRootParamForRelations || node.param === ctx.rootParam) &&
148
+ node.path.length >= ctx.relationMinPathLength &&
149
+ this.relations?.[node.path[0]]) {
150
+ out.relationKeys.add(node.path[0]);
151
+ }
152
+ return;
153
+ case "subqueryRef":
154
+ out.subqueryRefs[node.key] = node;
155
+ return;
156
+ case "exists":
157
+ out.paramNames.add(node.rootParam);
158
+ if (node.rootParam === ctx.rootParam)
159
+ out.relationKeys.add(node.relationKey);
160
+ out.existsNodes.push(node);
161
+ return;
162
+ case "binary":
163
+ this.visitExprIr(node.left, ctx, out);
164
+ this.visitExprIr(node.right, ctx, out);
165
+ return;
166
+ case "unary":
167
+ this.visitExprIr(node.operand, ctx, out);
168
+ return;
169
+ case "in":
170
+ this.visitExprIr(node.left, ctx, out);
171
+ this.visitExprIr(node.right, ctx, out);
172
+ return;
173
+ case "call":
174
+ this.visitExprIr(node.receiver, ctx, out);
175
+ for (const arg of node.args)
176
+ this.visitExprIr(arg, ctx, out);
177
+ return;
178
+ case "aggregate":
179
+ this.visitExprIr(node.arg, ctx, out);
180
+ return;
181
+ case "case":
182
+ for (const b of node.branches) {
183
+ this.visitExprIr(b.when, ctx, out);
184
+ this.visitExprIr(b.then, ctx, out);
185
+ }
186
+ if (node.else)
187
+ this.visitExprIr(node.else, ctx, out);
188
+ return;
189
+ case "const":
190
+ case "param":
191
+ return;
192
+ default: {
193
+ const _exhaustive = node;
194
+ return _exhaustive;
195
+ }
196
+ }
197
+ }
198
+ relationKeysWithHints(relationKeys) {
199
+ const out = new Set(relationKeys);
200
+ if (!this.relations || !this.state.joinHints)
201
+ return out;
202
+ for (const hint of this.state.joinHints) {
203
+ if (hint.relationKey in this.relations)
204
+ out.add(hint.relationKey);
205
+ }
206
+ return out;
207
+ }
208
+ reusableJoinKeys(whereKeys, selectKeys) {
209
+ const out = new Set();
210
+ if (!this.relations)
211
+ return out;
212
+ for (const key of whereKeys) {
213
+ if (!selectKeys.has(key))
214
+ continue;
215
+ if (this.relations[key]?._relType === "one-to-many")
216
+ continue;
217
+ out.add(key);
218
+ }
219
+ return out;
220
+ }
221
+ merge(...items) {
222
+ const out = this.empty();
223
+ for (const item of items)
224
+ this.mergeInto(out, item);
225
+ return out;
226
+ }
227
+ empty() {
228
+ return {
229
+ paramNames: new Set(),
230
+ relationKeys: new Set(),
231
+ subqueryRefs: {},
232
+ existsNodes: [],
233
+ referencedRegisteredCtes: new Set(),
234
+ };
235
+ }
236
+ mergeInto(target, source) {
237
+ for (const param of source.paramNames)
238
+ target.paramNames.add(param);
239
+ for (const key of source.relationKeys)
240
+ target.relationKeys.add(key);
241
+ Object.assign(target.subqueryRefs, source.subqueryRefs);
242
+ target.existsNodes.push(...source.existsNodes);
243
+ for (const name of source.referencedRegisteredCtes) {
244
+ target.referencedRegisteredCtes.add(name);
245
+ }
246
+ }
247
+ /** Ordered registered CTE names referenced in IR (where/having/select + updateSetIr / insertIr from analyze()). */
248
+ planReferencedRegisteredCtes(analysis) {
249
+ return orderReferencedRegisteredCtes(analysis.all.referencedRegisteredCtes, this.state.inScopeRegisteredCteNames, this.state.ctes?.map((c) => c.name));
250
+ }
251
+ }
252
+ function orderReferencedRegisteredCtes(referenced, inScopeRegisteredCteNames, cteNames) {
253
+ const order = [...(inScopeRegisteredCteNames ?? []), ...(cteNames ?? [])];
254
+ const seen = new Set();
255
+ return order.filter((n) => {
256
+ if (!referenced.has(n) || seen.has(n))
257
+ return false;
258
+ seen.add(n);
259
+ return true;
260
+ });
261
+ }
262
+ //# sourceMappingURL=query-ir-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-ir-analyzer.js","sourceRoot":"","sources":["../../../../src/orm/helpers/query-plan/query-ir-analyzer.ts"],"names":[],"mappings":"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"}