neoorm 0.7.3 → 0.8.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 (361) hide show
  1. package/README.md +4 -4
  2. package/dist/bin/neoorm.js +36 -27
  3. package/dist/bin/neoorm.js.map +1 -1
  4. package/dist/codegen/diff-manifest.d.ts.map +1 -1
  5. package/dist/codegen/diff-manifest.js +55 -30
  6. package/dist/codegen/diff-manifest.js.map +1 -1
  7. package/dist/codegen/emit-includes.d.ts.map +1 -1
  8. package/dist/codegen/emit-includes.js +6 -6
  9. package/dist/codegen/emit-includes.js.map +1 -1
  10. package/dist/codegen/emit-models.d.ts.map +1 -1
  11. package/dist/codegen/emit-models.js +14 -14
  12. package/dist/codegen/emit-models.js.map +1 -1
  13. package/dist/codegen/generate.d.ts +11 -1
  14. package/dist/codegen/generate.d.ts.map +1 -1
  15. package/dist/codegen/generate.js +30 -11
  16. package/dist/codegen/generate.js.map +1 -1
  17. package/dist/codegen/manifest-relations.d.ts +2 -1
  18. package/dist/codegen/manifest-relations.d.ts.map +1 -1
  19. package/dist/codegen/manifest-relations.js +4 -27
  20. package/dist/codegen/manifest-relations.js.map +1 -1
  21. package/dist/codegen/schema-to-manifest.d.ts +3 -2
  22. package/dist/codegen/schema-to-manifest.d.ts.map +1 -1
  23. package/dist/codegen/schema-to-manifest.js +9 -38
  24. package/dist/codegen/schema-to-manifest.js.map +1 -1
  25. package/dist/config.d.ts +6 -2
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +21 -13
  28. package/dist/config.js.map +1 -1
  29. package/dist/datasource-provider.d.ts +7 -0
  30. package/dist/datasource-provider.d.ts.map +1 -0
  31. package/dist/datasource-provider.js +11 -0
  32. package/dist/datasource-provider.js.map +1 -0
  33. package/dist/dialect/fk.d.ts.map +1 -1
  34. package/dist/dialect/fk.js +4 -2
  35. package/dist/dialect/fk.js.map +1 -1
  36. package/dist/dialect/postgres.d.ts.map +1 -1
  37. package/dist/dialect/postgres.js +11 -15
  38. package/dist/dialect/postgres.js.map +1 -1
  39. package/dist/dialect/shared.d.ts +3 -1
  40. package/dist/dialect/shared.d.ts.map +1 -1
  41. package/dist/dialect/shared.js +4 -0
  42. package/dist/dialect/shared.js.map +1 -1
  43. package/dist/dialect/sqlite.d.ts.map +1 -1
  44. package/dist/dialect/sqlite.js +15 -18
  45. package/dist/dialect/sqlite.js.map +1 -1
  46. package/dist/dialect/sqlite.test.d.ts +2 -0
  47. package/dist/dialect/sqlite.test.d.ts.map +1 -0
  48. package/dist/dialect/sqlite.test.js +122 -0
  49. package/dist/dialect/sqlite.test.js.map +1 -0
  50. package/dist/dialect/types.d.ts +2 -1
  51. package/dist/dialect/types.d.ts.map +1 -1
  52. package/dist/docs/render.d.ts.map +1 -1
  53. package/dist/docs/render.js.map +1 -1
  54. package/dist/docs/search.d.ts.map +1 -1
  55. package/dist/docs/search.js +4 -4
  56. package/dist/docs/search.js.map +1 -1
  57. package/dist/docs/server.d.ts.map +1 -1
  58. package/dist/docs/server.js +3 -3
  59. package/dist/docs/server.js.map +1 -1
  60. package/dist/index.d.ts +12 -10
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +5 -4
  63. package/dist/index.js.map +1 -1
  64. package/dist/init/scaffold.d.ts.map +1 -1
  65. package/dist/init/scaffold.js +3 -1
  66. package/dist/init/scaffold.js.map +1 -1
  67. package/dist/introspect/pull.d.ts.map +1 -1
  68. package/dist/introspect/pull.js +209 -154
  69. package/dist/introspect/pull.js.map +1 -1
  70. package/dist/introspect/queries.d.ts +6 -0
  71. package/dist/introspect/queries.d.ts.map +1 -1
  72. package/dist/introspect/queries.js +19 -0
  73. package/dist/introspect/queries.js.map +1 -1
  74. package/dist/introspect/sqlite/to-manifest.d.ts.map +1 -1
  75. package/dist/introspect/sqlite/to-manifest.js +6 -9
  76. package/dist/introspect/sqlite/to-manifest.js.map +1 -1
  77. package/dist/introspect/to-manifest.d.ts +8 -1
  78. package/dist/introspect/to-manifest.d.ts.map +1 -1
  79. package/dist/introspect/to-manifest.js +96 -21
  80. package/dist/introspect/to-manifest.js.map +1 -1
  81. package/dist/migrate/runner.d.ts +16 -0
  82. package/dist/migrate/runner.d.ts.map +1 -1
  83. package/dist/migrate/runner.js +147 -24
  84. package/dist/migrate/runner.js.map +1 -1
  85. package/dist/plugins/builtin.d.ts.map +1 -1
  86. package/dist/plugins/builtin.js +15 -16
  87. package/dist/plugins/builtin.js.map +1 -1
  88. package/dist/plugins/json/operators.d.ts.map +1 -1
  89. package/dist/plugins/json/operators.js +100 -27
  90. package/dist/plugins/json/operators.js.map +1 -1
  91. package/dist/plugins/postgis/columns.d.ts +18 -4
  92. package/dist/plugins/postgis/columns.d.ts.map +1 -1
  93. package/dist/plugins/postgis/columns.js +69 -10
  94. package/dist/plugins/postgis/columns.js.map +1 -1
  95. package/dist/plugins/postgis/columns.test.d.ts +2 -0
  96. package/dist/plugins/postgis/columns.test.d.ts.map +1 -0
  97. package/dist/plugins/postgis/columns.test.js +67 -0
  98. package/dist/plugins/postgis/columns.test.js.map +1 -0
  99. package/dist/plugins/postgis/index.d.ts +4 -2
  100. package/dist/plugins/postgis/index.d.ts.map +1 -1
  101. package/dist/plugins/postgis/index.js +2 -1
  102. package/dist/plugins/postgis/index.js.map +1 -1
  103. package/dist/plugins/postgis/where-types.d.ts +18 -0
  104. package/dist/plugins/postgis/where-types.d.ts.map +1 -0
  105. package/dist/plugins/postgis/where-types.js +2 -0
  106. package/dist/plugins/postgis/where-types.js.map +1 -0
  107. package/dist/plugins/registry.d.ts.map +1 -1
  108. package/dist/plugins/registry.js +20 -5
  109. package/dist/plugins/registry.js.map +1 -1
  110. package/dist/plugins/types.d.ts +1 -1
  111. package/dist/plugins/types.d.ts.map +1 -1
  112. package/dist/runtime/client.d.ts +60 -11
  113. package/dist/runtime/client.d.ts.map +1 -1
  114. package/dist/runtime/client.js +85 -39
  115. package/dist/runtime/client.js.map +1 -1
  116. package/dist/runtime/client.test.d.ts +2 -0
  117. package/dist/runtime/client.test.d.ts.map +1 -0
  118. package/dist/runtime/client.test.js +170 -0
  119. package/dist/runtime/client.test.js.map +1 -0
  120. package/dist/runtime/compile-error.d.ts +14 -0
  121. package/dist/runtime/compile-error.d.ts.map +1 -0
  122. package/dist/runtime/compile-error.js +14 -0
  123. package/dist/runtime/compile-error.js.map +1 -0
  124. package/dist/runtime/driver-sqlite.test.d.ts +2 -0
  125. package/dist/runtime/driver-sqlite.test.d.ts.map +1 -0
  126. package/dist/runtime/driver-sqlite.test.js +195 -0
  127. package/dist/runtime/driver-sqlite.test.js.map +1 -0
  128. package/dist/runtime/driver.d.ts +16 -1
  129. package/dist/runtime/driver.d.ts.map +1 -1
  130. package/dist/runtime/driver.js +118 -96
  131. package/dist/runtime/driver.js.map +1 -1
  132. package/dist/runtime/error-builders.d.ts +7 -6
  133. package/dist/runtime/error-builders.d.ts.map +1 -1
  134. package/dist/runtime/error-builders.js +2 -2
  135. package/dist/runtime/error-builders.js.map +1 -1
  136. package/dist/runtime/error-codes.d.ts +50 -0
  137. package/dist/runtime/error-codes.d.ts.map +1 -0
  138. package/dist/runtime/error-codes.js +54 -0
  139. package/dist/runtime/error-codes.js.map +1 -0
  140. package/dist/runtime/error-hints.d.ts +1 -0
  141. package/dist/runtime/error-hints.d.ts.map +1 -1
  142. package/dist/runtime/error-hints.js +13 -1
  143. package/dist/runtime/error-hints.js.map +1 -1
  144. package/dist/runtime/errors.d.ts +55 -8
  145. package/dist/runtime/errors.d.ts.map +1 -1
  146. package/dist/runtime/errors.js +143 -12
  147. package/dist/runtime/errors.js.map +1 -1
  148. package/dist/runtime/errors.test.d.ts +2 -0
  149. package/dist/runtime/errors.test.d.ts.map +1 -0
  150. package/dist/runtime/errors.test.js +115 -0
  151. package/dist/runtime/errors.test.js.map +1 -0
  152. package/dist/runtime/executor.d.ts +22 -3
  153. package/dist/runtime/executor.d.ts.map +1 -1
  154. package/dist/runtime/executor.js +93 -39
  155. package/dist/runtime/executor.js.map +1 -1
  156. package/dist/runtime/parse-db-json.d.ts +8 -0
  157. package/dist/runtime/parse-db-json.d.ts.map +1 -0
  158. package/dist/runtime/parse-db-json.js +33 -0
  159. package/dist/runtime/parse-db-json.js.map +1 -0
  160. package/dist/runtime/pg-error.d.ts.map +1 -1
  161. package/dist/runtime/pg-error.js +16 -16
  162. package/dist/runtime/pg-error.js.map +1 -1
  163. package/dist/runtime/pg-rollback.test.d.ts +2 -0
  164. package/dist/runtime/pg-rollback.test.d.ts.map +1 -0
  165. package/dist/runtime/pg-rollback.test.js +39 -0
  166. package/dist/runtime/pg-rollback.test.js.map +1 -0
  167. package/dist/runtime/query/aggregate.d.ts.map +1 -1
  168. package/dist/runtime/query/aggregate.js +15 -4
  169. package/dist/runtime/query/aggregate.js.map +1 -1
  170. package/dist/runtime/query/compile-aggregate.d.ts +39 -0
  171. package/dist/runtime/query/compile-aggregate.d.ts.map +1 -0
  172. package/dist/runtime/query/compile-aggregate.js +456 -0
  173. package/dist/runtime/query/compile-aggregate.js.map +1 -0
  174. package/dist/runtime/query/compile-where.d.ts +32 -0
  175. package/dist/runtime/query/compile-where.d.ts.map +1 -0
  176. package/dist/runtime/query/compile-where.js +708 -0
  177. package/dist/runtime/query/compile-where.js.map +1 -0
  178. package/dist/runtime/query/compile-write.d.ts +53 -0
  179. package/dist/runtime/query/compile-write.d.ts.map +1 -0
  180. package/dist/runtime/query/compile-write.js +467 -0
  181. package/dist/runtime/query/compile-write.js.map +1 -0
  182. package/dist/runtime/query/compile.d.ts +3 -114
  183. package/dist/runtime/query/compile.d.ts.map +1 -1
  184. package/dist/runtime/query/compile.js +3 -1536
  185. package/dist/runtime/query/compile.js.map +1 -1
  186. package/dist/runtime/query/count.d.ts +1 -0
  187. package/dist/runtime/query/count.d.ts.map +1 -1
  188. package/dist/runtime/query/count.js +12 -14
  189. package/dist/runtime/query/count.js.map +1 -1
  190. package/dist/runtime/query/create.d.ts.map +1 -1
  191. package/dist/runtime/query/create.js +20 -49
  192. package/dist/runtime/query/create.js.map +1 -1
  193. package/dist/runtime/query/cursor-codec.d.ts.map +1 -1
  194. package/dist/runtime/query/cursor-codec.js +8 -2
  195. package/dist/runtime/query/cursor-codec.js.map +1 -1
  196. package/dist/runtime/query/cursor.d.ts.map +1 -1
  197. package/dist/runtime/query/cursor.js +31 -7
  198. package/dist/runtime/query/cursor.js.map +1 -1
  199. package/dist/runtime/query/delete.d.ts.map +1 -1
  200. package/dist/runtime/query/delete.js +17 -17
  201. package/dist/runtime/query/delete.js.map +1 -1
  202. package/dist/runtime/query/execute.d.ts.map +1 -1
  203. package/dist/runtime/query/execute.js +11 -12
  204. package/dist/runtime/query/execute.js.map +1 -1
  205. package/dist/runtime/query/find-or-create.d.ts +4 -2
  206. package/dist/runtime/query/find-or-create.d.ts.map +1 -1
  207. package/dist/runtime/query/find-or-create.js +53 -43
  208. package/dist/runtime/query/find-or-create.js.map +1 -1
  209. package/dist/runtime/query/find-or-create.test.d.ts +2 -0
  210. package/dist/runtime/query/find-or-create.test.d.ts.map +1 -0
  211. package/dist/runtime/query/find-or-create.test.js +189 -0
  212. package/dist/runtime/query/find-or-create.test.js.map +1 -0
  213. package/dist/runtime/query/find.d.ts.map +1 -1
  214. package/dist/runtime/query/find.js +86 -58
  215. package/dist/runtime/query/find.js.map +1 -1
  216. package/dist/runtime/query/group-by.d.ts.map +1 -1
  217. package/dist/runtime/query/group-by.js +3 -2
  218. package/dist/runtime/query/group-by.js.map +1 -1
  219. package/dist/runtime/query/manifest-lookup.d.ts.map +1 -1
  220. package/dist/runtime/query/manifest-lookup.js +1 -1
  221. package/dist/runtime/query/manifest-lookup.js.map +1 -1
  222. package/dist/runtime/query/map-row.d.ts.map +1 -1
  223. package/dist/runtime/query/map-row.js +1 -1
  224. package/dist/runtime/query/map-row.js.map +1 -1
  225. package/dist/runtime/query/paginate.d.ts +3 -0
  226. package/dist/runtime/query/paginate.d.ts.map +1 -1
  227. package/dist/runtime/query/paginate.js +49 -11
  228. package/dist/runtime/query/paginate.js.map +1 -1
  229. package/dist/runtime/query/primary-key.d.ts +1 -1
  230. package/dist/runtime/query/primary-key.d.ts.map +1 -1
  231. package/dist/runtime/query/primary-key.js +45 -8
  232. package/dist/runtime/query/primary-key.js.map +1 -1
  233. package/dist/runtime/query/projection.d.ts +1 -0
  234. package/dist/runtime/query/projection.d.ts.map +1 -1
  235. package/dist/runtime/query/projection.js +23 -7
  236. package/dist/runtime/query/projection.js.map +1 -1
  237. package/dist/runtime/query/relation-planner.d.ts.map +1 -1
  238. package/dist/runtime/query/relation-planner.js +82 -53
  239. package/dist/runtime/query/relation-planner.js.map +1 -1
  240. package/dist/runtime/query/relation-writes.d.ts +3 -1
  241. package/dist/runtime/query/relation-writes.d.ts.map +1 -1
  242. package/dist/runtime/query/relation-writes.js +145 -54
  243. package/dist/runtime/query/relation-writes.js.map +1 -1
  244. package/dist/runtime/query/serialize-dialect.test.d.ts +2 -0
  245. package/dist/runtime/query/serialize-dialect.test.d.ts.map +1 -0
  246. package/dist/runtime/query/serialize-dialect.test.js +79 -0
  247. package/dist/runtime/query/serialize-dialect.test.js.map +1 -0
  248. package/dist/runtime/query/sqlite-constraint-errors.test.d.ts +2 -0
  249. package/dist/runtime/query/sqlite-constraint-errors.test.d.ts.map +1 -0
  250. package/dist/runtime/query/sqlite-constraint-errors.test.js +60 -0
  251. package/dist/runtime/query/sqlite-constraint-errors.test.js.map +1 -0
  252. package/dist/runtime/query/strip.d.ts.map +1 -1
  253. package/dist/runtime/query/strip.js.map +1 -1
  254. package/dist/runtime/query/table-index.d.ts.map +1 -1
  255. package/dist/runtime/query/table-index.js +4 -3
  256. package/dist/runtime/query/table-index.js.map +1 -1
  257. package/dist/runtime/query/unique.d.ts +8 -1
  258. package/dist/runtime/query/unique.d.ts.map +1 -1
  259. package/dist/runtime/query/unique.js +89 -4
  260. package/dist/runtime/query/unique.js.map +1 -1
  261. package/dist/runtime/query/unique.test.d.ts +2 -0
  262. package/dist/runtime/query/unique.test.d.ts.map +1 -0
  263. package/dist/runtime/query/unique.test.js +231 -0
  264. package/dist/runtime/query/unique.test.js.map +1 -0
  265. package/dist/runtime/query/update.d.ts.map +1 -1
  266. package/dist/runtime/query/update.js +30 -35
  267. package/dist/runtime/query/update.js.map +1 -1
  268. package/dist/runtime/query/update.test.d.ts +2 -0
  269. package/dist/runtime/query/update.test.d.ts.map +1 -0
  270. package/dist/runtime/query/update.test.js +186 -0
  271. package/dist/runtime/query/update.test.js.map +1 -0
  272. package/dist/runtime/query/updated-at.d.ts.map +1 -1
  273. package/dist/runtime/query/updated-at.js.map +1 -1
  274. package/dist/runtime/query/upsert.d.ts.map +1 -1
  275. package/dist/runtime/query/upsert.js +5 -7
  276. package/dist/runtime/query/upsert.js.map +1 -1
  277. package/dist/runtime/schema-error.d.ts.map +1 -1
  278. package/dist/runtime/schema-error.js +6 -2
  279. package/dist/runtime/schema-error.js.map +1 -1
  280. package/dist/runtime/sqlite-error.d.ts.map +1 -1
  281. package/dist/runtime/sqlite-error.js +11 -12
  282. package/dist/runtime/sqlite-error.js.map +1 -1
  283. package/dist/runtime/sqlite-open.d.ts +2 -0
  284. package/dist/runtime/sqlite-open.d.ts.map +1 -1
  285. package/dist/runtime/sqlite-open.js +18 -1
  286. package/dist/runtime/sqlite-open.js.map +1 -1
  287. package/dist/runtime/transaction.d.ts +4 -0
  288. package/dist/runtime/transaction.d.ts.map +1 -1
  289. package/dist/runtime/transaction.js +31 -1
  290. package/dist/runtime/transaction.js.map +1 -1
  291. package/dist/runtime/transaction.test.d.ts +2 -0
  292. package/dist/runtime/transaction.test.d.ts.map +1 -0
  293. package/dist/runtime/transaction.test.js +43 -0
  294. package/dist/runtime/transaction.test.js.map +1 -0
  295. package/dist/runtime/types.d.ts +50 -17
  296. package/dist/runtime/types.d.ts.map +1 -1
  297. package/dist/schema/column-where.d.ts +11 -1
  298. package/dist/schema/column-where.d.ts.map +1 -1
  299. package/dist/schema/column.d.ts +1 -1
  300. package/dist/schema/column.d.ts.map +1 -1
  301. package/dist/schema/column.js +1 -1
  302. package/dist/schema/column.js.map +1 -1
  303. package/dist/schema/define-schema.d.ts +1 -1
  304. package/dist/schema/define-schema.d.ts.map +1 -1
  305. package/dist/schema/define-schema.js +5 -23
  306. package/dist/schema/define-schema.js.map +1 -1
  307. package/dist/schema/index.d.ts +2 -2
  308. package/dist/schema/index.d.ts.map +1 -1
  309. package/dist/schema/index.js +1 -1
  310. package/dist/schema/index.js.map +1 -1
  311. package/dist/schema/relation-types.d.ts +29 -22
  312. package/dist/schema/relation-types.d.ts.map +1 -1
  313. package/dist/schema/relation.d.ts.map +1 -1
  314. package/dist/schema/relation.js +6 -4
  315. package/dist/schema/relation.js.map +1 -1
  316. package/dist/schema/table-registry.d.ts.map +1 -1
  317. package/dist/schema/table-registry.js +8 -2
  318. package/dist/schema/table-registry.js.map +1 -1
  319. package/dist/schema/table.d.ts +6 -3
  320. package/dist/schema/table.d.ts.map +1 -1
  321. package/dist/schema/table.js +30 -31
  322. package/dist/schema/table.js.map +1 -1
  323. package/dist/schema/types.d.ts +33 -25
  324. package/dist/schema/types.d.ts.map +1 -1
  325. package/dist/sql/builder.d.ts +5 -1
  326. package/dist/sql/builder.d.ts.map +1 -1
  327. package/dist/sql/builder.js +23 -3
  328. package/dist/sql/builder.js.map +1 -1
  329. package/dist/sql/index.d.ts +5 -2
  330. package/dist/sql/index.d.ts.map +1 -1
  331. package/dist/sql/index.js +5 -2
  332. package/dist/sql/index.js.map +1 -1
  333. package/dist/utils/case.d.ts +4 -0
  334. package/dist/utils/case.d.ts.map +1 -1
  335. package/dist/utils/case.js +11 -0
  336. package/dist/utils/case.js.map +1 -1
  337. package/dist/utils/dotenv.d.ts +8 -0
  338. package/dist/utils/dotenv.d.ts.map +1 -0
  339. package/dist/utils/dotenv.js +70 -0
  340. package/dist/utils/dotenv.js.map +1 -0
  341. package/dist/utils/dotenv.test.d.ts +2 -0
  342. package/dist/utils/dotenv.test.d.ts.map +1 -0
  343. package/dist/utils/dotenv.test.js +32 -0
  344. package/dist/utils/dotenv.test.js.map +1 -0
  345. package/dist/utils/inflect.d.ts +6 -0
  346. package/dist/utils/inflect.d.ts.map +1 -0
  347. package/dist/utils/inflect.js +80 -0
  348. package/dist/utils/inflect.js.map +1 -0
  349. package/docs/cli.md +6 -2
  350. package/docs/configuration.md +3 -1
  351. package/docs/errors.md +61 -6
  352. package/docs/examples.md +63 -13
  353. package/docs/getting-started.md +24 -1
  354. package/docs/migrations.md +15 -2
  355. package/docs/plugins.md +13 -1
  356. package/docs/queries.md +109 -10
  357. package/docs/relations.md +5 -1
  358. package/docs/schema.md +12 -5
  359. package/docs/sqlite.md +24 -10
  360. package/docs/transactions.md +13 -2
  361. package/package.json +4 -2
@@ -1 +1 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/delete.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAW/C,OAAO,EACN,KAAK,YAAY,EAIjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAI1D,wBAAsB,YAAY,CACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB,GACC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAmEzC;AAED,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE;IACN,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACC,OAAO,CAAC,MAAM,CAAC,CAiCjB;AAED,wBAAsB,0BAA0B,CAC/C,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE;IACN,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAiCpC;AAED,wBAAsB,UAAU,CAC/B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CASzC"}
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/delete.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAU/C,OAAO,EACN,KAAK,YAAY,EAIjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAM1D,wBAAsB,YAAY,CACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB,GACC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CA4EzC;AAED,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE;IACN,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACC,OAAO,CAAC,MAAM,CAAC,CAgCjB;AAED,wBAAsB,0BAA0B,CAC/C,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE;IACN,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAgCpC;AAED,wBAAsB,UAAU,CAC/B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAQzC"}
@@ -1,19 +1,25 @@
1
1
  import { postgresDialect } from "../../dialect/postgres.js";
2
+ import { queryCompileError } from "../error-builders.js";
3
+ import { QueryErrorCode } from "../error-codes.js";
2
4
  import { buildDeleteManyQuery, buildDeleteQuery, buildSelectColumns, compileWhere, getCachedDeleteManyQuery, getCachedWhereClause, isImpossibleWhere, } from "./compile.js";
3
- import { mapRowToTs, mapRowsToTs } from "./map-row.js";
4
5
  import { runExecute, runQuery, runQueryOne, } from "./execute.js";
5
6
  import { loadRelations } from "./find.js";
7
+ import { mapRowsToTs, mapRowToTs } from "./map-row.js";
6
8
  import { resolvePkWhere } from "./primary-key.js";
7
- import { getTableIndex } from "./table-index.js";
9
+ import { getTableIndex, requireTable } from "./table-index.js";
10
+ import { assertUniqueWhere } from "./unique.js";
8
11
  export async function deleteRecord(executor, runtime, tableAccessor, args) {
9
12
  const dialect = runtime.dialect ?? postgresDialect;
10
13
  const { manifest } = runtime;
11
- const table = manifest.tables[tableAccessor];
12
- if (!table)
13
- throw new Error(`Unknown table: ${tableAccessor}`);
14
- const { sql: whereSql, params } = compileWhere(manifest, table, args.where, dialect, 1, runtime.tableIndex);
14
+ const table = requireTable(manifest, tableAccessor, "delete");
15
+ const { where } = assertUniqueWhere(table, args.where, "delete", getTableIndex(runtime.tableIndex, tableAccessor));
16
+ const { sql: whereSql, params } = compileWhere(manifest, table, where, dialect, 1, runtime.tableIndex);
15
17
  if (!whereSql) {
16
- throw new Error("Delete requires a where clause");
18
+ throw queryCompileError("delete", "Delete requires a where clause", {
19
+ code: QueryErrorCode.where_required,
20
+ tableAccessor,
21
+ tableSqlName: table.sqlName,
22
+ });
17
23
  }
18
24
  const needsReturning = args.returnDeleted || args.with;
19
25
  if (!needsReturning) {
@@ -21,7 +27,7 @@ export async function deleteRecord(executor, runtime, tableAccessor, args) {
21
27
  const { rowCount } = await runExecute(executor, runtime, { operation: "delete", tableAccessor }, query, params);
22
28
  return rowCount > 0 ? {} : null;
23
29
  }
24
- const returning = args.returnDeleted ? "full" : "pk";
30
+ const returning = args.returnDeleted || args.with ? "full" : "pk";
25
31
  const query = buildDeleteQuery(table, whereSql, returning, runtime.tableIndex);
26
32
  const row = await runQueryOne(executor, runtime, { operation: "delete", tableAccessor }, query, params);
27
33
  if (!row)
@@ -36,9 +42,7 @@ export async function deleteRecord(executor, runtime, tableAccessor, args) {
36
42
  export async function deleteManyRecords(executor, runtime, tableAccessor, args) {
37
43
  const dialect = runtime.dialect ?? postgresDialect;
38
44
  const { manifest } = runtime;
39
- const table = manifest.tables[tableAccessor];
40
- if (!table)
41
- throw new Error(`Unknown table: ${tableAccessor}`);
45
+ const table = requireTable(manifest, tableAccessor, "delete");
42
46
  const { sql: whereSql, params, impossible, } = getCachedWhereClause(manifest, table, args?.where, dialect, 1, runtime.tableIndex);
43
47
  if (impossible || isImpossibleWhere(whereSql)) {
44
48
  return 0;
@@ -51,9 +55,7 @@ export async function deleteManyRecords(executor, runtime, tableAccessor, args)
51
55
  export async function deleteManyAndReturnRecords(executor, runtime, tableAccessor, args) {
52
56
  const dialect = runtime.dialect ?? postgresDialect;
53
57
  const { manifest } = runtime;
54
- const table = manifest.tables[tableAccessor];
55
- if (!table)
56
- throw new Error(`Unknown table: ${tableAccessor}`);
58
+ const table = requireTable(manifest, tableAccessor, "delete");
57
59
  const { sql: whereSql, params, impossible, } = getCachedWhereClause(manifest, table, args?.where, dialect, 1, runtime.tableIndex);
58
60
  if (impossible || isImpossibleWhere(whereSql)) {
59
61
  return [];
@@ -65,9 +67,7 @@ export async function deleteManyAndReturnRecords(executor, runtime, tableAccesso
65
67
  }
66
68
  export async function deleteById(executor, runtime, tableAccessor, id) {
67
69
  const { manifest } = runtime;
68
- const table = manifest.tables[tableAccessor];
69
- if (!table)
70
- throw new Error(`Unknown table: ${tableAccessor}`);
70
+ const table = requireTable(manifest, tableAccessor, "delete");
71
71
  const where = resolvePkWhere(table, id);
72
72
  return deleteRecord(executor, runtime, tableAccessor, {
73
73
  where,
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/runtime/query/delete.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/runtime/query/delete.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAMhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAS/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,SAAS,EAAE,cAAc,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,mBAAmB,GAAG,eAAe,GAAG;IAC5C,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,cAAc,CAAC;IAChD,aAAa,EAAE,MAAM,CAAC;CACtB,CAAC;AA6FF,wBAAsB,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,GACpB,OAAO,CAAC,CAAC,EAAE,CAAC,CAUd;AAED,wBAAsB,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAU1C;AAED,wBAAsB,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,mBAAmB,EACxB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GAChB,OAAO,CAAC,CAAC,CAAC,CAAC;AACd,wBAAsB,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GAChB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/execute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAKhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAKnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAMnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAS/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,SAAS,EAAE,cAAc,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,mBAAmB,GAAG,eAAe,GAAG;IAC5C,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,cAAc,CAAC;IAChD,aAAa,EAAE,MAAM,CAAC;CACtB,CAAC;AAyFF,wBAAsB,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,GACpB,OAAO,CAAC,CAAC,EAAE,CAAC,CAUd;AAED,wBAAsB,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAU1C;AAED,wBAAsB,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,mBAAmB,EACxB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GAChB,OAAO,CAAC,CAAC,CAAC,CAAC;AACd,wBAAsB,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GAChB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { postgresDialect } from "../../dialect/postgres.js";
2
2
  import { getAppliedMigrations, listPendingMigrations, } from "../../migrate/runner.js";
3
- import { NeoOrmQueryError } from "../errors.js";
3
+ import { SCHEMA_DRIFT_QUERY_CODES, } from "../error-codes.js";
4
+ import { createQueryError, NeoOrmQueryError, } from "../errors.js";
4
5
  import { emptyReturningContext, enrichPgError, isPgError, isSchemaDriftPgCode, } from "../pg-error.js";
5
6
  import { enrichSqliteError, isSqliteError } from "../sqlite-error.js";
6
7
  async function resolveMigrationHint(driver, dialect, migrationsDir, schema, driftCode) {
@@ -35,23 +36,21 @@ function isSchemaDriftCode(code) {
35
36
  if (isSchemaDriftPgCode(code)) {
36
37
  return true;
37
38
  }
38
- return (code === "sqlite_no_such_table" ||
39
- code === "sqlite_no_such_column" ||
40
- code === "sqlite_foreign_key_violation");
39
+ return SCHEMA_DRIFT_QUERY_CODES.has(code);
41
40
  }
42
41
  async function enrichQueryError(runtime, ctx, sql, err) {
43
42
  const base = queryBaseContext(ctx, sql);
44
- if (isPgError(err)) {
45
- return enrichPgError(err, runtime.manifest, base);
46
- }
47
43
  if (isSqliteError(err)) {
48
44
  return enrichSqliteError(err, runtime.manifest, base);
49
45
  }
46
+ if (isPgError(err)) {
47
+ return enrichPgError(err, runtime.manifest, base);
48
+ }
50
49
  throw err;
51
50
  }
52
51
  async function throwQueryError(runtime, context, cause) {
53
- const migrationHint = await resolveMigrationHint(runtime.driver, runtime.dialect ?? postgresDialect, runtime.migrationsDir, runtime.schema, context.pgCode ?? context.code);
54
- throw new NeoOrmQueryError(migrationHint ? { ...context, migrationHint } : context, cause);
52
+ const migrationHint = await resolveMigrationHint(runtime.driver, runtime.dialect ?? postgresDialect, runtime.migrationsDir, runtime.schema, context.code);
53
+ throw createQueryError(migrationHint ? { ...context, migrationHint } : context, cause);
55
54
  }
56
55
  function queryBaseContext(ctx, sql) {
57
56
  return ctx.tableAccessor !== undefined
@@ -63,7 +62,7 @@ export async function runQuery(executor, runtime, ctx, sql, params = []) {
63
62
  return await executor.query(sql, params);
64
63
  }
65
64
  catch (err) {
66
- if (isPgError(err) || isSqliteError(err)) {
65
+ if (isSqliteError(err) || isPgError(err)) {
67
66
  const enriched = await enrichQueryError(runtime, ctx, sql, err);
68
67
  await throwQueryError(runtime, enriched, err);
69
68
  }
@@ -75,7 +74,7 @@ export async function runExecute(executor, runtime, ctx, sql, params = []) {
75
74
  return await executor.execute(sql, params);
76
75
  }
77
76
  catch (err) {
78
- if (isPgError(err) || isSqliteError(err)) {
77
+ if (isSqliteError(err) || isPgError(err)) {
79
78
  const enriched = await enrichQueryError(runtime, ctx, sql, err);
80
79
  await throwQueryError(runtime, enriched, err);
81
80
  }
@@ -98,7 +97,7 @@ export async function runQueryOne(executor, runtime, ctx, sql, params = []) {
98
97
  if (err instanceof NeoOrmQueryError) {
99
98
  throw err;
100
99
  }
101
- if (isPgError(err) || isSqliteError(err)) {
100
+ if (isSqliteError(err) || isPgError(err)) {
102
101
  const enriched = await enrichQueryError(runtime, ctx, sql, err);
103
102
  await throwQueryError(runtime, enriched, err);
104
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/runtime/query/execute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/runtime/query/execute.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,17 @@
1
1
  import type { Executor } from "../executor.js";
2
2
  import { type QueryRuntime } from "./execute.js";
3
3
  import { type WithInput } from "./find.js";
4
+ import { type ParentProjectionArgs } from "./projection.js";
4
5
  export type FindOrCreateResult = {
5
6
  record: Record<string, unknown>;
6
7
  created: boolean;
7
8
  };
8
- export declare function findOrCreateRecord(executor: Executor, runtime: QueryRuntime, tableAccessor: string, args: {
9
+ export type FindOrCreateArgs = {
9
10
  where: Record<string, unknown>;
10
11
  create: Record<string, unknown>;
11
12
  with?: Record<string, WithInput>;
12
- }): Promise<FindOrCreateResult>;
13
+ } & ParentProjectionArgs;
14
+ export declare function findOrCreateRecord(executor: Executor, runtime: QueryRuntime, tableAccessor: string, args: FindOrCreateArgs): Promise<FindOrCreateResult>;
13
15
  export declare function findOrCreatePk(executor: Executor, runtime: QueryRuntime, tableAccessor: string, item: {
14
16
  where: Record<string, unknown>;
15
17
  create: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"find-or-create.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/find-or-create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAS/C,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,cAAc,CAAC;AAC9D,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAKpE,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACjC,GACC,OAAO,CAAC,kBAAkB,CAAC,CAkF7B;AA+DD,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACC,OAAO,CAAC,MAAM,CAAC,CASjB"}
1
+ {"version":3,"file":"find-or-create.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/find-or-create.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO/C,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,cAAc,CAAC;AAC9D,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAGpE,OAAO,EACN,KAAK,oBAAoB,EAGzB,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACjC,GAAG,oBAAoB,CAAC;AAgDzB,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,gBAAgB,GACpB,OAAO,CAAC,kBAAkB,CAAC,CAiE7B;AA6DD,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACC,OAAO,CAAC,MAAM,CAAC,CASjB"}
@@ -1,80 +1,90 @@
1
1
  import { postgresDialect } from "../../dialect/postgres.js";
2
- import { buildFindOrCreateQuery, compileWhere, dataToSqlValues, FIND_OR_CREATE_FLAG, } from "./compile.js";
3
- import { mapRowToTs } from "./map-row.js";
2
+ import { compileError } from "../compile-error.js";
3
+ import { isUniqueViolation } from "../errors.js";
4
+ import { buildFindOrCreateQuery, dataToSqlValues, FIND_OR_CREATE_FLAG, } from "./compile.js";
4
5
  import { runCreate } from "./create.js";
5
6
  import { runQueryOne } from "./execute.js";
6
7
  import { findMany, loadRelations } from "./find.js";
8
+ import { mapRowToTs } from "./map-row.js";
7
9
  import { fillMissingPrimaryKeys, rowScalarPkValue } from "./primary-key.js";
8
- import { getTableIndex } from "./table-index.js";
10
+ import { projectFindRow, resolveParentProjection, } from "./projection.js";
11
+ import { getTableIndex, requireTable } from "./table-index.js";
9
12
  import { assertUniqueWhere } from "./unique.js";
13
+ function toFindLookupArgs(args) {
14
+ return {
15
+ where: args.where,
16
+ take: 1,
17
+ ...(args.select !== undefined ? { select: args.select } : {}),
18
+ ...(args.omit !== undefined ? { omit: args.omit } : {}),
19
+ ...(args.with !== undefined ? { with: args.with } : {}),
20
+ ...(args.includeHidden !== undefined
21
+ ? { includeHidden: args.includeHidden }
22
+ : {}),
23
+ };
24
+ }
25
+ async function finalizeFindOrCreateRecord(executor, runtime, table, tableAccessor, args, row, created, options = {}) {
26
+ const tableIndex = getTableIndex(runtime.tableIndex, tableAccessor);
27
+ const projection = resolveParentProjection(table, args, tableIndex);
28
+ let record = options.mapped ? row : mapRowToTs(tableIndex, table, row);
29
+ if (args.with && !options.relationsLoaded) {
30
+ const [withLoaded] = await loadRelations(executor, runtime, table, [record], args.with);
31
+ record = withLoaded ?? record;
32
+ }
33
+ return {
34
+ record: projectFindRow(record, projection, args.with),
35
+ created,
36
+ };
37
+ }
10
38
  export async function findOrCreateRecord(executor, runtime, tableAccessor, args) {
11
39
  const dialect = runtime.dialect ?? postgresDialect;
12
40
  const { manifest } = runtime;
13
- const table = manifest.tables[tableAccessor];
14
- if (!table)
15
- throw new Error(`Unknown table: ${tableAccessor}`);
41
+ const table = requireTable(manifest, tableAccessor, "select");
16
42
  const tableIndex = getTableIndex(runtime.tableIndex, tableAccessor);
17
- const constraint = assertUniqueWhere(table, args.where, "findOrCreate", tableIndex);
18
- const createData = { ...args.create, ...args.where };
43
+ const projection = resolveParentProjection(table, args, tableIndex);
44
+ const { constraint, where: uniqueWhere } = assertUniqueWhere(table, args.where, "findOrCreate", tableIndex);
45
+ const lookupArgs = { ...args, where: uniqueWhere };
46
+ const createData = { ...args.create, ...uniqueWhere };
19
47
  fillMissingPrimaryKeys(table, createData, tableIndex);
20
48
  if (dialect.name === "sqlite") {
21
- return findOrCreateSqlite(executor, runtime, tableAccessor, args, createData);
49
+ return findOrCreateSqlite(executor, runtime, tableAccessor, lookupArgs, createData);
22
50
  }
23
51
  const { keys: insertKeys, values: insertValues } = dataToSqlValues(table, createData, undefined, runtime.tableIndex, dialect);
24
- const { sql: whereSql, params: whereParams } = compileWhere(manifest, table, args.where, dialect, insertValues.length + 1, runtime.tableIndex);
25
- const fallbackWhereBody = whereSql.replace(/^WHERE\s+/i, "");
26
- const findOrCreateSql = buildFindOrCreateQuery(table, insertKeys, constraint.sqlColumns, fallbackWhereBody, runtime.tableIndex);
27
- const row = await runQueryOne(executor, runtime, { operation: "findOrCreate", tableAccessor }, findOrCreateSql, [...insertValues, ...whereParams]);
52
+ const findOrCreateSql = buildFindOrCreateQuery(table, insertKeys, constraint.sqlColumns, runtime.tableIndex, projection.hasProjection ? projection.sqlColumns : undefined, projection.includeHidden);
53
+ const row = await runQueryOne(executor, runtime, { operation: "findOrCreate", tableAccessor }, findOrCreateSql, insertValues);
28
54
  const created = row[FIND_OR_CREATE_FLAG] === true;
29
55
  const { [FIND_OR_CREATE_FLAG]: _createdFlag, ...rawRow } = row;
30
- const result = mapRowToTs(getTableIndex(runtime.tableIndex, tableAccessor), table, rawRow);
31
- let record = result;
32
- if (args.with) {
33
- const [withLoaded] = await loadRelations(executor, runtime, table, [result], args.with);
34
- record = withLoaded ?? result;
35
- }
36
- return { record, created };
56
+ return finalizeFindOrCreateRecord(executor, runtime, table, tableAccessor, args, rawRow, created);
37
57
  }
38
58
  async function findOrCreateSqlite(executor, runtime, tableAccessor, args, createData) {
39
59
  const { manifest } = runtime;
40
- const table = manifest.tables[tableAccessor];
41
- if (!table)
42
- throw new Error(`Unknown table: ${tableAccessor}`);
43
- const loadWith = async (record) => {
44
- if (!args.with)
45
- return record;
46
- const [withLoaded] = await loadRelations(executor, runtime, table, [record], args.with);
47
- return withLoaded ?? record;
48
- };
49
- const existing = await findMany(executor, runtime, tableAccessor, {
50
- where: args.where,
51
- take: 1,
52
- });
60
+ const table = requireTable(manifest, tableAccessor, "select");
61
+ const existing = await findMany(executor, runtime, tableAccessor, toFindLookupArgs(args));
53
62
  if (existing.length > 0) {
54
63
  const existingRow = existing[0];
55
64
  if (existingRow) {
56
- return { record: await loadWith(existingRow), created: false };
65
+ return { record: existingRow, created: false };
57
66
  }
58
67
  }
59
68
  try {
60
69
  const row = await runCreate(executor, runtime, tableAccessor, {
61
70
  data: createData,
62
71
  returnCreated: true,
72
+ ...(args.with !== undefined ? { with: args.with } : {}),
63
73
  });
64
- return { record: await loadWith(row), created: true };
74
+ return finalizeFindOrCreateRecord(executor, runtime, table, tableAccessor, args, row, true, { mapped: true, relationsLoaded: Boolean(args.with) });
65
75
  }
66
- catch {
67
- const retry = await findMany(executor, runtime, tableAccessor, {
68
- where: args.where,
69
- take: 1,
70
- });
76
+ catch (err) {
77
+ if (!isUniqueViolation(err)) {
78
+ throw err;
79
+ }
80
+ const retry = await findMany(executor, runtime, tableAccessor, toFindLookupArgs(args));
71
81
  if (retry.length > 0) {
72
82
  const retryRow = retry[0];
73
83
  if (retryRow) {
74
- return { record: await loadWith(retryRow), created: false };
84
+ return { record: retryRow, created: false };
75
85
  }
76
86
  }
77
- throw new Error("findOrCreate insert failed and record was not found");
87
+ compileError("findOrCreate insert failed and record was not found");
78
88
  }
79
89
  }
80
90
  export function findOrCreatePk(executor, runtime, tableAccessor, item) {
@@ -84,7 +94,7 @@ export function findOrCreatePk(executor, runtime, tableAccessor, item) {
84
94
  }).then(({ record }) => {
85
95
  const table = runtime.manifest.tables[tableAccessor];
86
96
  if (!table)
87
- throw new Error(`Unknown table: ${tableAccessor}`);
97
+ compileError(`Unknown table: ${tableAccessor}`);
88
98
  return rowScalarPkValue(record, table);
89
99
  });
90
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"find-or-create.js","sourceRoot":"","sources":["../../../src/runtime/query/find-or-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EACN,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,mBAAmB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAqB,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAkB,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOhD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,QAAkB,EAClB,OAAqB,EACrB,aAAqB,EACrB,IAIC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IACnD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;IAE/D,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,iBAAiB,CACnC,KAAK,EACL,IAAI,CAAC,KAAK,EACV,cAAc,EACd,UAAU,CACV,CAAC;IAEF,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACrD,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAEtD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,kBAAkB,CACxB,QAAQ,EACR,OAAO,EACP,aAAa,EACb,IAAI,EACJ,UAAU,CACV,CAAC;IACH,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,CACjE,KAAK,EACL,UAAU,EACV,SAAS,EACT,OAAO,CAAC,UAAU,EAClB,OAAO,CACP,CAAC;IAEF,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAC1D,QAAQ,EACR,KAAK,EACL,IAAI,CAAC,KAAK,EACV,OAAO,EACP,YAAY,CAAC,MAAM,GAAG,CAAC,EACvB,OAAO,CAAC,UAAU,CAClB,CAAC;IACF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAE7D,MAAM,eAAe,GAAG,sBAAsB,CAC7C,KAAK,EACL,UAAU,EACV,UAAU,CAAC,UAAU,EACrB,iBAAiB,EACjB,OAAO,CAAC,UAAU,CAClB,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,WAAW,CAC5B,QAAQ,EACR,OAAO,EACP,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,EAC5C,eAAe,EACf,CAAC,GAAG,YAAY,EAAE,GAAG,WAAW,CAAC,CACjC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,mBAAmB,CAAC,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC;IAC/D,MAAM,MAAM,GAAG,UAAU,CACxB,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,EAChD,KAAK,EACL,MAAM,CACN,CAAC;IAEF,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,aAAa,CACvC,QAAQ,EACR,OAAO,EACP,KAAK,EACL,CAAC,MAAM,CAAC,EACR,IAAI,CAAC,IAAI,CACT,CAAC;QACF,MAAM,GAAG,UAAU,IAAI,MAAM,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,kBAAkB,CAChC,QAAkB,EAClB,OAAqB,EACrB,aAAqB,EACrB,IAIC,EACD,UAAmC;IAEnC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,KAAK,EACrB,MAA+B,EACI,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC;QAC9B,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,aAAa,CACvC,QAAQ,EACR,OAAO,EACP,KAAK,EACL,CAAC,MAAM,CAAC,EACR,IAAI,CAAC,IAAI,CACT,CAAC;QACF,OAAO,UAAU,IAAI,MAAM,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;QACjE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,CAAC;KACP,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAChE,CAAC;IACF,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;YAC7D,IAAI,EAAE,UAAU;YAChB,aAAa,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;YAC9D,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,CAAC;SACP,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,QAAQ,EAAE,CAAC;gBACd,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC7D,CAAC;QACF,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACxE,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,QAAkB,EAClB,OAAqB,EACrB,aAAqB,EACrB,IAGC;IAED,OAAO,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;QAC3D,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;KACnB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;QAC/D,OAAO,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"find-or-create.js","sourceRoot":"","sources":["../../../src/runtime/query/find-or-create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=find-or-create.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-or-create.test.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/find-or-create.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,189 @@
1
+ import { DatabaseSync } from "node:sqlite";
2
+ import { describe, expect, it } from "vitest";
3
+ import { schemaToManifest } from "../../codegen/schema-to-manifest.js";
4
+ import { postgresDialect } from "../../dialect/postgres.js";
5
+ import { sqliteDialect } from "../../dialect/sqlite.js";
6
+ import { defineSchema, fk, id, table, text } from "../../schema/index.js";
7
+ import { QueryErrorCode } from "../error-codes.js";
8
+ import { createQueryError, ForeignKeyViolationError, NotNullViolationError, } from "../errors.js";
9
+ import { createSqliteExecutor } from "../executor.js";
10
+ import { buildFindOrCreateQuery, FIND_OR_CREATE_FLAG } from "./compile.js";
11
+ import { findOrCreateRecord } from "./find-or-create.js";
12
+ import { buildManifestIndex, requireTable } from "./table-index.js";
13
+ const schema = defineSchema({
14
+ users: table({
15
+ id: id(),
16
+ email: text().notNull().unique(),
17
+ name: text().notNull(),
18
+ }),
19
+ posts: table({
20
+ id: id(),
21
+ title: text().notNull(),
22
+ authorId: fk("users").notNull(),
23
+ }),
24
+ });
25
+ function sqliteRuntime() {
26
+ const manifest = schemaToManifest(schema);
27
+ return {
28
+ manifest,
29
+ tableIndex: buildManifestIndex(manifest, sqliteDialect),
30
+ dialect: sqliteDialect,
31
+ };
32
+ }
33
+ function queryError(code) {
34
+ return createQueryError({
35
+ operation: "insert",
36
+ code,
37
+ phase: "runtime",
38
+ sql: "INSERT INTO users",
39
+ detail: code,
40
+ });
41
+ }
42
+ function sequenceExecutor(opts) {
43
+ let selects = 0;
44
+ const executor = {
45
+ query: async () => {
46
+ selects++;
47
+ if (selects === 1)
48
+ return [];
49
+ return opts.retryRows;
50
+ },
51
+ queryOne: async () => {
52
+ throw opts.insertError;
53
+ },
54
+ execute: async () => ({ rows: [], rowCount: 0 }),
55
+ transaction: async (fn) => fn(executor),
56
+ };
57
+ return executor;
58
+ }
59
+ describe("findOrCreateSqlite", () => {
60
+ it("retries find only after a unique violation", async () => {
61
+ const existing = {
62
+ id: "user_1",
63
+ email: "a@b.com",
64
+ name: "Ada",
65
+ };
66
+ const result = await findOrCreateRecord(sequenceExecutor({
67
+ insertError: queryError(QueryErrorCode.unique_violation),
68
+ retryRows: [existing],
69
+ }), sqliteRuntime(), "users", {
70
+ where: { email: "a@b.com" },
71
+ create: { name: "Ada" },
72
+ });
73
+ expect(result.created).toBe(false);
74
+ expect(result.record).toEqual(existing);
75
+ });
76
+ it("rethrows not-null errors instead of returning a later find", async () => {
77
+ const planted = {
78
+ id: "user_1",
79
+ email: "a@b.com",
80
+ name: "Ada",
81
+ };
82
+ await expect(findOrCreateRecord(sequenceExecutor({
83
+ insertError: queryError(QueryErrorCode.not_null_violation),
84
+ retryRows: [planted],
85
+ }), sqliteRuntime(), "users", {
86
+ where: { email: "a@b.com" },
87
+ create: { name: "Ada" },
88
+ })).rejects.toBeInstanceOf(NotNullViolationError);
89
+ });
90
+ });
91
+ describe("findOrCreateSqlite (runtime)", () => {
92
+ function openDb() {
93
+ const db = new DatabaseSync(":memory:");
94
+ const runtime = sqliteRuntime();
95
+ db.exec(sqliteDialect.emitCreateTable(requireTable(runtime.manifest, "users", "select"), { manifest: runtime.manifest }));
96
+ db.exec(sqliteDialect.emitCreateTable(requireTable(runtime.manifest, "posts", "select"), { manifest: runtime.manifest }));
97
+ return { db, runtime, executor: createSqliteExecutor(db) };
98
+ }
99
+ it("rethrows NOT NULL instead of a generic compile error", async () => {
100
+ const { db, runtime, executor } = openDb();
101
+ await expect(findOrCreateRecord(executor, runtime, "users", {
102
+ where: { email: "a@b.com" },
103
+ create: {},
104
+ })).rejects.toBeInstanceOf(NotNullViolationError);
105
+ db.close();
106
+ });
107
+ it("rethrows foreign key failures", async () => {
108
+ const { db, runtime, executor } = openDb();
109
+ await expect(findOrCreateRecord(executor, runtime, "posts", {
110
+ where: { id: "post_1" },
111
+ create: { title: "Hello", authorId: "missing" },
112
+ })).rejects.toBeInstanceOf(ForeignKeyViolationError);
113
+ db.close();
114
+ });
115
+ it("returns the existing row on a unique conflict", async () => {
116
+ const { db, runtime, executor } = openDb();
117
+ const created = await findOrCreateRecord(executor, runtime, "users", {
118
+ where: { email: "a@b.com" },
119
+ create: { name: "Ada" },
120
+ });
121
+ expect(created.created).toBe(true);
122
+ const found = await findOrCreateRecord(executor, runtime, "users", {
123
+ where: { email: "a@b.com" },
124
+ create: { name: "Ada" },
125
+ });
126
+ expect(found.created).toBe(false);
127
+ expect(found.record.email).toBe("a@b.com");
128
+ db.close();
129
+ });
130
+ });
131
+ function postgresRuntime() {
132
+ const manifest = schemaToManifest(schema);
133
+ return {
134
+ manifest,
135
+ tableIndex: buildManifestIndex(manifest, postgresDialect),
136
+ dialect: postgresDialect,
137
+ };
138
+ }
139
+ describe("findOrCreate Postgres", () => {
140
+ it("emits no-op DO UPDATE RETURNING with xmax created flag", () => {
141
+ const runtime = postgresRuntime();
142
+ const table = requireTable(runtime.manifest, "users", "select");
143
+ const sql = buildFindOrCreateQuery(table, ["id", "email", "name"], ["email"], runtime.tableIndex);
144
+ expect(sql).toContain('ON CONFLICT ("email") DO UPDATE SET');
145
+ expect(sql).toContain('"email" = excluded."email"');
146
+ expect(sql).toContain(`(xmax = 0) AS "${FIND_OR_CREATE_FLAG}"`);
147
+ expect(sql).not.toContain("UNION ALL");
148
+ expect(sql).not.toContain("DO NOTHING");
149
+ });
150
+ it("treats xmax=0 as created and does not append a fallback SELECT", async () => {
151
+ const runtime = postgresRuntime();
152
+ let sql = "";
153
+ const executor = {
154
+ query: async () => [],
155
+ queryOne: async (text) => {
156
+ sql = text;
157
+ return {
158
+ id: "user_1",
159
+ email: "a@b.com",
160
+ name: "Ada",
161
+ [FIND_OR_CREATE_FLAG]: true,
162
+ };
163
+ },
164
+ execute: async () => ({ rows: [], rowCount: 0 }),
165
+ transaction: async (fn) => fn(executor),
166
+ };
167
+ const created = await findOrCreateRecord(executor, runtime, "users", {
168
+ where: { email: "a@b.com" },
169
+ create: { name: "Ada" },
170
+ });
171
+ expect(created.created).toBe(true);
172
+ expect(sql).toContain("DO UPDATE SET");
173
+ expect(sql).not.toContain("UNION ALL");
174
+ const found = await findOrCreateRecord({
175
+ ...executor,
176
+ queryOne: async () => ({
177
+ id: "user_1",
178
+ email: "a@b.com",
179
+ name: "Ada",
180
+ [FIND_OR_CREATE_FLAG]: false,
181
+ }),
182
+ }, runtime, "users", {
183
+ where: { email: "a@b.com" },
184
+ create: { name: "Ada" },
185
+ });
186
+ expect(found.created).toBe(false);
187
+ });
188
+ });
189
+ //# sourceMappingURL=find-or-create.test.js.map