@antelopejs/postgres 0.0.0-stage → 0.2.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 (357) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +151 -2
  3. package/dist/config.d.ts +33 -0
  4. package/dist/config.js +90 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/connection.d.ts +14 -0
  7. package/dist/connection.js +128 -0
  8. package/dist/connection.js.map +1 -0
  9. package/dist/implementations/database/changes.d.ts +19 -0
  10. package/dist/implementations/database/changes.js +100 -0
  11. package/dist/implementations/database/changes.js.map +1 -0
  12. package/dist/implementations/database/coerce.d.ts +15 -0
  13. package/dist/implementations/database/coerce.js +195 -0
  14. package/dist/implementations/database/coerce.js.map +1 -0
  15. package/dist/implementations/database/context.d.ts +32 -0
  16. package/dist/implementations/database/context.js +50 -0
  17. package/dist/implementations/database/context.js.map +1 -0
  18. package/dist/implementations/database/cursors.d.ts +16 -0
  19. package/dist/implementations/database/cursors.js +269 -0
  20. package/dist/implementations/database/cursors.js.map +1 -0
  21. package/dist/implementations/database/ddl.d.ts +62 -0
  22. package/dist/implementations/database/ddl.js +355 -0
  23. package/dist/implementations/database/ddl.js.map +1 -0
  24. package/dist/implementations/database/expression.d.ts +7 -0
  25. package/dist/implementations/database/expression.js +30 -0
  26. package/dist/implementations/database/expression.js.map +1 -0
  27. package/dist/implementations/database/external-catalog.d.ts +22 -0
  28. package/dist/implementations/database/external-catalog.js +82 -0
  29. package/dist/implementations/database/external-catalog.js.map +1 -0
  30. package/dist/implementations/database/external-errors.d.ts +20 -0
  31. package/dist/implementations/database/external-errors.js +67 -0
  32. package/dist/implementations/database/external-errors.js.map +1 -0
  33. package/dist/implementations/database/external-payload.d.ts +32 -0
  34. package/dist/implementations/database/external-payload.js +206 -0
  35. package/dist/implementations/database/external-payload.js.map +1 -0
  36. package/dist/implementations/database/external-refusals.d.ts +5 -0
  37. package/dist/implementations/database/external-refusals.js +23 -0
  38. package/dist/implementations/database/external-refusals.js.map +1 -0
  39. package/dist/implementations/database/external-schema.d.ts +3 -0
  40. package/dist/implementations/database/external-schema.js +121 -0
  41. package/dist/implementations/database/external-schema.js.map +1 -0
  42. package/dist/implementations/database/external-types.d.ts +29 -0
  43. package/dist/implementations/database/external-types.js +373 -0
  44. package/dist/implementations/database/external-types.js.map +1 -0
  45. package/dist/implementations/database/external-writes.d.ts +3 -0
  46. package/dist/implementations/database/external-writes.js +298 -0
  47. package/dist/implementations/database/external-writes.js.map +1 -0
  48. package/dist/implementations/database/feed-pipeline.d.ts +12 -0
  49. package/dist/implementations/database/feed-pipeline.js +92 -0
  50. package/dist/implementations/database/feed-pipeline.js.map +1 -0
  51. package/dist/implementations/database/feeds.d.ts +34 -0
  52. package/dist/implementations/database/feeds.js +338 -0
  53. package/dist/implementations/database/feeds.js.map +1 -0
  54. package/dist/implementations/database/fields.d.ts +37 -0
  55. package/dist/implementations/database/fields.js +114 -0
  56. package/dist/implementations/database/fields.js.map +1 -0
  57. package/dist/implementations/database/identifier.d.ts +8 -0
  58. package/dist/implementations/database/identifier.js +62 -0
  59. package/dist/implementations/database/identifier.js.map +1 -0
  60. package/dist/implementations/database/instances.d.ts +4 -0
  61. package/dist/implementations/database/instances.js +57 -0
  62. package/dist/implementations/database/instances.js.map +1 -0
  63. package/dist/implementations/database/introspect.d.ts +3 -0
  64. package/dist/implementations/database/introspect.js +36 -0
  65. package/dist/implementations/database/introspect.js.map +1 -0
  66. package/dist/implementations/database/jsonb.d.ts +29 -0
  67. package/dist/implementations/database/jsonb.js +54 -0
  68. package/dist/implementations/database/jsonb.js.map +1 -0
  69. package/dist/implementations/database/listener.d.ts +3 -0
  70. package/dist/implementations/database/listener.js +93 -0
  71. package/dist/implementations/database/listener.js.map +1 -0
  72. package/dist/implementations/database/migrate.d.ts +6 -0
  73. package/dist/implementations/database/migrate.js +282 -0
  74. package/dist/implementations/database/migrate.js.map +1 -0
  75. package/dist/implementations/database/payload.d.ts +24 -0
  76. package/dist/implementations/database/payload.js +113 -0
  77. package/dist/implementations/database/payload.js.map +1 -0
  78. package/dist/implementations/database/pipeline.d.ts +10 -0
  79. package/dist/implementations/database/pipeline.js +56 -0
  80. package/dist/implementations/database/pipeline.js.map +1 -0
  81. package/dist/implementations/database/query.d.ts +11 -0
  82. package/dist/implementations/database/query.js +189 -0
  83. package/dist/implementations/database/query.js.map +1 -0
  84. package/dist/implementations/database/readings.d.ts +17 -0
  85. package/dist/implementations/database/readings.js +133 -0
  86. package/dist/implementations/database/readings.js.map +1 -0
  87. package/dist/implementations/database/reaper.d.ts +6 -0
  88. package/dist/implementations/database/reaper.js +121 -0
  89. package/dist/implementations/database/reaper.js.map +1 -0
  90. package/dist/implementations/database/relation.d.ts +65 -0
  91. package/dist/implementations/database/relation.js +237 -0
  92. package/dist/implementations/database/relation.js.map +1 -0
  93. package/dist/implementations/database/result.d.ts +4 -0
  94. package/dist/implementations/database/result.js +70 -0
  95. package/dist/implementations/database/result.js.map +1 -0
  96. package/dist/implementations/database/row-source.d.ts +64 -0
  97. package/dist/implementations/database/row-source.js +279 -0
  98. package/dist/implementations/database/row-source.js.map +1 -0
  99. package/dist/implementations/database/schema.d.ts +15 -0
  100. package/dist/implementations/database/schema.js +143 -0
  101. package/dist/implementations/database/schema.js.map +1 -0
  102. package/dist/implementations/database/selection.d.ts +18 -0
  103. package/dist/implementations/database/selection.js +129 -0
  104. package/dist/implementations/database/selection.js.map +1 -0
  105. package/dist/implementations/database/sql.d.ts +24 -0
  106. package/dist/implementations/database/sql.js +48 -0
  107. package/dist/implementations/database/sql.js.map +1 -0
  108. package/dist/implementations/database/stage.d.ts +22 -0
  109. package/dist/implementations/database/stage.js +76 -0
  110. package/dist/implementations/database/stage.js.map +1 -0
  111. package/dist/implementations/database/stages-aggregate.d.ts +11 -0
  112. package/dist/implementations/database/stages-aggregate.js +112 -0
  113. package/dist/implementations/database/stages-aggregate.js.map +1 -0
  114. package/dist/implementations/database/stages-array.d.ts +2 -0
  115. package/dist/implementations/database/stages-array.js +162 -0
  116. package/dist/implementations/database/stages-array.js.map +1 -0
  117. package/dist/implementations/database/stages-core.d.ts +2 -0
  118. package/dist/implementations/database/stages-core.js +107 -0
  119. package/dist/implementations/database/stages-core.js.map +1 -0
  120. package/dist/implementations/database/stages-date.d.ts +2 -0
  121. package/dist/implementations/database/stages-date.js +65 -0
  122. package/dist/implementations/database/stages-date.js.map +1 -0
  123. package/dist/implementations/database/stages-group.d.ts +5 -0
  124. package/dist/implementations/database/stages-group.js +151 -0
  125. package/dist/implementations/database/stages-group.js.map +1 -0
  126. package/dist/implementations/database/stages-join.d.ts +2 -0
  127. package/dist/implementations/database/stages-join.js +162 -0
  128. package/dist/implementations/database/stages-join.js.map +1 -0
  129. package/dist/implementations/database/stages-numeric.d.ts +2 -0
  130. package/dist/implementations/database/stages-numeric.js +152 -0
  131. package/dist/implementations/database/stages-numeric.js.map +1 -0
  132. package/dist/implementations/database/stages-object.d.ts +2 -0
  133. package/dist/implementations/database/stages-object.js +81 -0
  134. package/dist/implementations/database/stages-object.js.map +1 -0
  135. package/dist/implementations/database/stages-projection.d.ts +2 -0
  136. package/dist/implementations/database/stages-projection.js +75 -0
  137. package/dist/implementations/database/stages-projection.js.map +1 -0
  138. package/dist/implementations/database/stages-rows.d.ts +2 -0
  139. package/dist/implementations/database/stages-rows.js +101 -0
  140. package/dist/implementations/database/stages-rows.js.map +1 -0
  141. package/dist/implementations/database/stages-selection.d.ts +2 -0
  142. package/dist/implementations/database/stages-selection.js +146 -0
  143. package/dist/implementations/database/stages-selection.js.map +1 -0
  144. package/dist/implementations/database/stages-string.d.ts +2 -0
  145. package/dist/implementations/database/stages-string.js +101 -0
  146. package/dist/implementations/database/stages-string.js.map +1 -0
  147. package/dist/implementations/database/subquery.d.ts +4 -0
  148. package/dist/implementations/database/subquery.js +49 -0
  149. package/dist/implementations/database/subquery.js.map +1 -0
  150. package/dist/implementations/database/types.d.ts +37 -0
  151. package/dist/implementations/database/types.js +57 -0
  152. package/dist/implementations/database/types.js.map +1 -0
  153. package/dist/implementations/database/utils.d.ts +16 -0
  154. package/dist/implementations/database/utils.js +38 -0
  155. package/dist/implementations/database/utils.js.map +1 -0
  156. package/dist/implementations/database/value.d.ts +10 -0
  157. package/dist/implementations/database/value.js +153 -0
  158. package/dist/implementations/database/value.js.map +1 -0
  159. package/dist/implementations/database/writes-atomic.d.ts +6 -0
  160. package/dist/implementations/database/writes-atomic.js +93 -0
  161. package/dist/implementations/database/writes-atomic.js.map +1 -0
  162. package/dist/implementations/database/writes-identity.d.ts +4 -0
  163. package/dist/implementations/database/writes-identity.js +181 -0
  164. package/dist/implementations/database/writes-identity.js.map +1 -0
  165. package/dist/implementations/database/writes-insert.d.ts +2 -0
  166. package/dist/implementations/database/writes-insert.js +136 -0
  167. package/dist/implementations/database/writes-insert.js.map +1 -0
  168. package/dist/implementations/database/writes-shared.d.ts +36 -0
  169. package/dist/implementations/database/writes-shared.js +64 -0
  170. package/dist/implementations/database/writes-shared.js.map +1 -0
  171. package/dist/implementations/database/writes.d.ts +16 -0
  172. package/dist/implementations/database/writes.js +52 -0
  173. package/dist/implementations/database/writes.js.map +1 -0
  174. package/dist/index.d.ts +4 -0
  175. package/dist/index.js +52 -0
  176. package/dist/index.js.map +1 -0
  177. package/dist/logger.d.ts +2 -0
  178. package/dist/logger.js +6 -0
  179. package/dist/logger.js.map +1 -0
  180. package/dist/test/antelope.test.d.ts +2 -0
  181. package/dist/test/antelope.test.js +88 -0
  182. package/dist/test/antelope.test.js.map +1 -0
  183. package/dist/test/atomic.test.d.ts +1 -0
  184. package/dist/test/atomic.test.js +132 -0
  185. package/dist/test/atomic.test.js.map +1 -0
  186. package/dist/test/contention.test.d.ts +1 -0
  187. package/dist/test/contention.test.js +183 -0
  188. package/dist/test/contention.test.js.map +1 -0
  189. package/dist/test/indexes.test.d.ts +1 -0
  190. package/dist/test/indexes.test.js +311 -0
  191. package/dist/test/indexes.test.js.map +1 -0
  192. package/dist/test/unit/changes.spec.d.ts +1 -0
  193. package/dist/test/unit/changes.spec.js +103 -0
  194. package/dist/test/unit/changes.spec.js.map +1 -0
  195. package/dist/test/unit/coerce.spec.d.ts +1 -0
  196. package/dist/test/unit/coerce.spec.js +162 -0
  197. package/dist/test/unit/coerce.spec.js.map +1 -0
  198. package/dist/test/unit/config.spec.d.ts +1 -0
  199. package/dist/test/unit/config.spec.js +123 -0
  200. package/dist/test/unit/config.spec.js.map +1 -0
  201. package/dist/test/unit/connection.spec.d.ts +1 -0
  202. package/dist/test/unit/connection.spec.js +171 -0
  203. package/dist/test/unit/connection.spec.js.map +1 -0
  204. package/dist/test/unit/cursors.spec.d.ts +1 -0
  205. package/dist/test/unit/cursors.spec.js +823 -0
  206. package/dist/test/unit/cursors.spec.js.map +1 -0
  207. package/dist/test/unit/ddl.spec.d.ts +1 -0
  208. package/dist/test/unit/ddl.spec.js +571 -0
  209. package/dist/test/unit/ddl.spec.js.map +1 -0
  210. package/dist/test/unit/expression-array.spec.d.ts +1 -0
  211. package/dist/test/unit/expression-array.spec.js +488 -0
  212. package/dist/test/unit/expression-array.spec.js.map +1 -0
  213. package/dist/test/unit/expression-date.spec.d.ts +1 -0
  214. package/dist/test/unit/expression-date.spec.js +329 -0
  215. package/dist/test/unit/expression-date.spec.js.map +1 -0
  216. package/dist/test/unit/expression-numeric.spec.d.ts +1 -0
  217. package/dist/test/unit/expression-numeric.spec.js +362 -0
  218. package/dist/test/unit/expression-numeric.spec.js.map +1 -0
  219. package/dist/test/unit/expression-object.spec.d.ts +1 -0
  220. package/dist/test/unit/expression-object.spec.js +230 -0
  221. package/dist/test/unit/expression-object.spec.js.map +1 -0
  222. package/dist/test/unit/expression-stages.spec.d.ts +1 -0
  223. package/dist/test/unit/expression-stages.spec.js +82 -0
  224. package/dist/test/unit/expression-stages.spec.js.map +1 -0
  225. package/dist/test/unit/expression-string.spec.d.ts +1 -0
  226. package/dist/test/unit/expression-string.spec.js +249 -0
  227. package/dist/test/unit/expression-string.spec.js.map +1 -0
  228. package/dist/test/unit/expression.spec.d.ts +1 -0
  229. package/dist/test/unit/expression.spec.js +449 -0
  230. package/dist/test/unit/expression.spec.js.map +1 -0
  231. package/dist/test/unit/external-comparisons.spec.d.ts +1 -0
  232. package/dist/test/unit/external-comparisons.spec.js +145 -0
  233. package/dist/test/unit/external-comparisons.spec.js.map +1 -0
  234. package/dist/test/unit/external-types.spec.d.ts +1 -0
  235. package/dist/test/unit/external-types.spec.js +191 -0
  236. package/dist/test/unit/external-types.spec.js.map +1 -0
  237. package/dist/test/unit/feeds.spec.d.ts +1 -0
  238. package/dist/test/unit/feeds.spec.js +374 -0
  239. package/dist/test/unit/feeds.spec.js.map +1 -0
  240. package/dist/test/unit/fields.spec.d.ts +1 -0
  241. package/dist/test/unit/fields.spec.js +79 -0
  242. package/dist/test/unit/fields.spec.js.map +1 -0
  243. package/dist/test/unit/identifier.spec.d.ts +1 -0
  244. package/dist/test/unit/identifier.spec.js +50 -0
  245. package/dist/test/unit/identifier.spec.js.map +1 -0
  246. package/dist/test/unit/payload.spec.d.ts +1 -0
  247. package/dist/test/unit/payload.spec.js +278 -0
  248. package/dist/test/unit/payload.spec.js.map +1 -0
  249. package/dist/test/unit/pipeline-aggregate.spec.d.ts +1 -0
  250. package/dist/test/unit/pipeline-aggregate.spec.js +199 -0
  251. package/dist/test/unit/pipeline-aggregate.spec.js.map +1 -0
  252. package/dist/test/unit/pipeline-fixture.d.ts +79 -0
  253. package/dist/test/unit/pipeline-fixture.js +277 -0
  254. package/dist/test/unit/pipeline-fixture.js.map +1 -0
  255. package/dist/test/unit/pipeline-group.spec.d.ts +1 -0
  256. package/dist/test/unit/pipeline-group.spec.js +390 -0
  257. package/dist/test/unit/pipeline-group.spec.js.map +1 -0
  258. package/dist/test/unit/pipeline-join.spec.d.ts +1 -0
  259. package/dist/test/unit/pipeline-join.spec.js +165 -0
  260. package/dist/test/unit/pipeline-join.spec.js.map +1 -0
  261. package/dist/test/unit/pipeline-lookup.spec.d.ts +1 -0
  262. package/dist/test/unit/pipeline-lookup.spec.js +268 -0
  263. package/dist/test/unit/pipeline-lookup.spec.js.map +1 -0
  264. package/dist/test/unit/pipeline-projection.spec.d.ts +1 -0
  265. package/dist/test/unit/pipeline-projection.spec.js +183 -0
  266. package/dist/test/unit/pipeline-projection.spec.js.map +1 -0
  267. package/dist/test/unit/pipeline-rows.spec.d.ts +1 -0
  268. package/dist/test/unit/pipeline-rows.spec.js +321 -0
  269. package/dist/test/unit/pipeline-rows.spec.js.map +1 -0
  270. package/dist/test/unit/pipeline-selection.spec.d.ts +1 -0
  271. package/dist/test/unit/pipeline-selection.spec.js +257 -0
  272. package/dist/test/unit/pipeline-selection.spec.js.map +1 -0
  273. package/dist/test/unit/pipeline-stages.spec.d.ts +1 -0
  274. package/dist/test/unit/pipeline-stages.spec.js +226 -0
  275. package/dist/test/unit/pipeline-stages.spec.js.map +1 -0
  276. package/dist/test/unit/pipeline.spec.d.ts +1 -0
  277. package/dist/test/unit/pipeline.spec.js +72 -0
  278. package/dist/test/unit/pipeline.spec.js.map +1 -0
  279. package/dist/test/unit/query.spec.d.ts +1 -0
  280. package/dist/test/unit/query.spec.js +212 -0
  281. package/dist/test/unit/query.spec.js.map +1 -0
  282. package/dist/test/unit/reaper.spec.d.ts +1 -0
  283. package/dist/test/unit/reaper.spec.js +122 -0
  284. package/dist/test/unit/reaper.spec.js.map +1 -0
  285. package/dist/test/unit/relation.spec.d.ts +1 -0
  286. package/dist/test/unit/relation.spec.js +348 -0
  287. package/dist/test/unit/relation.spec.js.map +1 -0
  288. package/dist/test/unit/result.spec.d.ts +1 -0
  289. package/dist/test/unit/result.spec.js +128 -0
  290. package/dist/test/unit/result.spec.js.map +1 -0
  291. package/dist/test/unit/row-source.spec.d.ts +1 -0
  292. package/dist/test/unit/row-source.spec.js +141 -0
  293. package/dist/test/unit/row-source.spec.js.map +1 -0
  294. package/dist/test/unit/schema.spec.d.ts +1 -0
  295. package/dist/test/unit/schema.spec.js +44 -0
  296. package/dist/test/unit/schema.spec.js.map +1 -0
  297. package/dist/test/unit/selection.spec.d.ts +1 -0
  298. package/dist/test/unit/selection.spec.js +182 -0
  299. package/dist/test/unit/selection.spec.js.map +1 -0
  300. package/dist/test/unit/spec-fixture.d.ts +11 -0
  301. package/dist/test/unit/spec-fixture.js +71 -0
  302. package/dist/test/unit/spec-fixture.js.map +1 -0
  303. package/dist/test/unit/sql.spec.d.ts +1 -0
  304. package/dist/test/unit/sql.spec.js +38 -0
  305. package/dist/test/unit/sql.spec.js.map +1 -0
  306. package/dist/test/unit/subquery.spec.d.ts +1 -0
  307. package/dist/test/unit/subquery.spec.js +154 -0
  308. package/dist/test/unit/subquery.spec.js.map +1 -0
  309. package/dist/test/unit/types.spec.d.ts +1 -0
  310. package/dist/test/unit/types.spec.js +39 -0
  311. package/dist/test/unit/types.spec.js.map +1 -0
  312. package/dist/test/unit/utils.spec.d.ts +1 -0
  313. package/dist/test/unit/utils.spec.js +22 -0
  314. package/dist/test/unit/utils.spec.js.map +1 -0
  315. package/dist/test/unit/value.spec.d.ts +1 -0
  316. package/dist/test/unit/value.spec.js +195 -0
  317. package/dist/test/unit/value.spec.js.map +1 -0
  318. package/dist/test/unit/writes-atomic.spec.d.ts +1 -0
  319. package/dist/test/unit/writes-atomic.spec.js +66 -0
  320. package/dist/test/unit/writes-atomic.spec.js.map +1 -0
  321. package/dist/test/unit/writes-insert.spec.d.ts +1 -0
  322. package/dist/test/unit/writes-insert.spec.js +270 -0
  323. package/dist/test/unit/writes-insert.spec.js.map +1 -0
  324. package/dist/test/unit/writes-replace.spec.d.ts +1 -0
  325. package/dist/test/unit/writes-replace.spec.js +100 -0
  326. package/dist/test/unit/writes-replace.spec.js.map +1 -0
  327. package/dist/test/unit/writes-target.spec.d.ts +1 -0
  328. package/dist/test/unit/writes-target.spec.js +118 -0
  329. package/dist/test/unit/writes-target.spec.js.map +1 -0
  330. package/dist/test/unit/writes-update.spec.d.ts +1 -0
  331. package/dist/test/unit/writes-update.spec.js +297 -0
  332. package/dist/test/unit/writes-update.spec.js.map +1 -0
  333. package/dist/test-external/fixture.d.ts +6 -0
  334. package/dist/test-external/fixture.js +136 -0
  335. package/dist/test-external/fixture.js.map +1 -0
  336. package/dist/test-external/native.test.d.ts +1 -0
  337. package/dist/test-external/native.test.js +132 -0
  338. package/dist/test-external/native.test.js.map +1 -0
  339. package/dist/test-external/reads.test.d.ts +1 -0
  340. package/dist/test-external/reads.test.js +232 -0
  341. package/dist/test-external/reads.test.js.map +1 -0
  342. package/dist/test-external/refusals.test.d.ts +1 -0
  343. package/dist/test-external/refusals.test.js +93 -0
  344. package/dist/test-external/refusals.test.js.map +1 -0
  345. package/dist/test-external/registration.test.d.ts +1 -0
  346. package/dist/test-external/registration.test.js +127 -0
  347. package/dist/test-external/registration.test.js.map +1 -0
  348. package/dist/test-external/sales.d.ts +5 -0
  349. package/dist/test-external/sales.js +126 -0
  350. package/dist/test-external/sales.js.map +1 -0
  351. package/dist/test-external/startup.test.d.ts +1 -0
  352. package/dist/test-external/startup.test.js +15 -0
  353. package/dist/test-external/startup.test.js.map +1 -0
  354. package/dist/test-external/writes.test.d.ts +1 -0
  355. package/dist/test-external/writes.test.js +315 -0
  356. package/dist/test-external/writes.test.js.map +1 -0
  357. package/package.json +78 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes-target.spec.js","sourceRoot":"","sources":["../../../src/test/unit/writes-target.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const query_1 = require("@antelopejs/interface-database/query");
5
+ const common_1 = require("@antelopejs/interface-database/common");
6
+ const pipeline_fixture_1 = require("./pipeline-fixture");
7
+ const UPDATE = `UPDATE ${pipeline_fixture_1.TABLE} AS "w0" SET`;
8
+ const INSTANCE_PREDICATE = '"_instance" = ';
9
+ const EXISTING_EXTRA = `COALESCE("w0"."_extra", '{}'::jsonb)`;
10
+ const EXTRA_ASSIGNMENT = '"_extra" = ';
11
+ const KEY = "k";
12
+ const NICKNAME = "z";
13
+ const AGE = 40;
14
+ const MINIMUM_AGE = 18;
15
+ const SLICE_OFFSET = 1;
16
+ const SLICE_COUNT = 2;
17
+ const NTH_ROW = 0;
18
+ const RECORDED_ARGUMENT = 1;
19
+ const RAISE = 1;
20
+ const RESPELLED = 2;
21
+ const MEMBER = 1;
22
+ const MAPPED_HELD = "t1";
23
+ const MAPPED_WRAP = "t2";
24
+ const MERGED_HELD = "t1";
25
+ const MERGED_MAPPED = "t2";
26
+ const MERGED_MEMBER = "jsonb_build_object('x', to_jsonb(($2::double precision)))";
27
+ const RETURNS_NOTHING = () => undefined;
28
+ function Updates(assignments, asserted) {
29
+ const narrowed = asserted ? ` AND ${asserted}` : "";
30
+ return (`${UPDATE} ${assignments} WHERE ${(0, pipeline_fixture_1.IdentityPredicate)(pipeline_fixture_1.SELECTED_ROW)}` +
31
+ `${narrowed} AND ${(0, pipeline_fixture_1.UnchangedRows)(assignments)}`);
32
+ }
33
+ function Changes(assignments, alias) {
34
+ return (`${UPDATE} ${assignments} WHERE ${(0, pipeline_fixture_1.IdentityPredicate)(pipeline_fixture_1.EVERY_ROW, alias)}` +
35
+ ` AND ${(0, pipeline_fixture_1.UnchangedRows)(assignments)}`);
36
+ }
37
+ function Assigns(assignments, alias) {
38
+ return `${UPDATE} ${assignments} WHERE ${(0, pipeline_fixture_1.IdentityPredicate)(pipeline_fixture_1.EVERY_ROW, alias)}`;
39
+ }
40
+ function Member(alias, name) {
41
+ return `("${alias}"."doc" -> '${name}')`;
42
+ }
43
+ function MappedExtra(alias) {
44
+ const document = `"${alias}"."doc"`;
45
+ return (`COALESCE((CASE WHEN jsonb_typeof(${document}) = 'object' THEN (${document} -` +
46
+ " array['_id', '_instance', 'name', 'age', 'isActive', 'joined', 'meta']::text[]) END), '{}'::jsonb)");
47
+ }
48
+ function MappedReads(alias) {
49
+ const joined = Member(alias, "joined");
50
+ return [
51
+ `(CASE WHEN jsonb_typeof(${Member(alias, "name")}) = 'string'` +
52
+ ` THEN (${Member(alias, "name")} #>> '{}') END)`,
53
+ `(CASE WHEN jsonb_typeof(${Member(alias, "age")}) = 'number'` +
54
+ ` THEN ((${Member(alias, "age")} #>> '{}')::double precision) END)`,
55
+ `(CASE WHEN jsonb_typeof(${Member(alias, "isActive")}) = 'boolean'` +
56
+ ` THEN ((${Member(alias, "isActive")} #>> '{}')::boolean) END)`,
57
+ `(CASE WHEN jsonb_typeof(${joined}) = 'string' AND` +
58
+ ` pg_input_is_valid((${joined} #>> '{}'), 'timestamptz')` +
59
+ ` THEN ((${joined} #>> '{}')::timestamptz) END)`,
60
+ Member(alias, "meta"),
61
+ MappedExtra(alias),
62
+ ].join(", ");
63
+ }
64
+ function Mapped(body, alias) {
65
+ return ('("name", "age", "isActive", "joined", "meta", "_extra") =' +
66
+ ` (SELECT ${MappedReads(alias)} FROM (SELECT ${body} AS "doc") AS "${alias}")`);
67
+ }
68
+ function Merged(alias) {
69
+ const value = `${(0, pipeline_fixture_1.PeopleDocument)("w0")} || ${MERGED_MEMBER}`;
70
+ return (`(SELECT "${alias}"."merged" FROM (SELECT ${value} AS "merged")` +
71
+ ` AS "${alias}" WHERE jsonb_typeof("${alias}"."merged") = 'object')`);
72
+ }
73
+ function NthUpdate(document) {
74
+ return new query_1.Query((0, common_1.QueryStage)("update", undefined, document), (0, pipeline_fixture_1.Root)().nth(NTH_ROW));
75
+ }
76
+ function Update(document) {
77
+ return (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)()
78
+ .get(KEY)
79
+ .update(document));
80
+ }
81
+ describe("the update statement", () => {
82
+ it("sets one declared column and touches the overflow document not at all", () => {
83
+ const written = Update({ age: AGE });
84
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Updates('"age" = ($3::double precision)'));
85
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.not.contain(EXTRA_ASSIGNMENT);
86
+ });
87
+ it("names a declared field by its column rather than by its field name", () => {
88
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.NotesRoot)().update({ summary: "s" }));
89
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.contain(`UPDATE ${pipeline_fixture_1.NOTES_TABLE} AS "w0" SET "summ" = ($2::text) WHERE`);
90
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.not.contain("summary");
91
+ });
92
+ it("clears a declared field the payload named as undefined", () => {
93
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(Update({ name: undefined }))).to.equal(Updates('"name" = NULL'));
94
+ });
95
+ it("sets every column the payload named, in the order it named them", () => {
96
+ const written = Update({ age: AGE, name: "a" });
97
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Updates('"age" = ($3::double precision), "name" = ($4::text)'));
98
+ });
99
+ it("answers a count rather than a list of keys", () => {
100
+ (0, chai_1.expect)(Update({ age: AGE }).statement.ids).to.equal(undefined);
101
+ });
102
+ it("targets every row the pipeline selected, not only a single one", () => {
103
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update({ age: AGE }));
104
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Changes('"age" = ($2::double precision)'));
105
+ });
106
+ it("refuses a payload that is not a document, naming the stage", () => {
107
+ (0, chai_1.expect)(() => Update("a")).to.throw("The 'update' stage takes a document, received a string");
108
+ });
109
+ it("refuses an array rather than writing its indices as keys", () => {
110
+ (0, chai_1.expect)(() => Update([])).to.throw("The 'update' stage takes a document, received an array");
111
+ });
112
+ });
113
+ describe("the update statement's overflow column", () => {
114
+ it("writes an undeclared key into the overflow document and no declared column", () => {
115
+ const written = Update({ nickname: NICKNAME });
116
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Updates(`"_extra" = (${EXISTING_EXTRA} ||` +
117
+ ` jsonb_build_object('nickname', to_jsonb(($3::text))))`));
118
+ });
119
+ it("subtracts an undeclared key the payload named as undefined", () => {
120
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(Update({ nickname: undefined }))).to.equal(Updates(`"_extra" = (${EXISTING_EXTRA} - array['nickname']::text[])`));
121
+ });
122
+ it("composes an addition and a removal into one assignment, concatenating first", () => {
123
+ const written = Update({ age: AGE, nickname: NICKNAME, stale: undefined });
124
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Updates('"age" = ($3::double precision),' +
125
+ ` "_extra" = ((${EXISTING_EXTRA} ||` +
126
+ ` jsonb_build_object('nickname', to_jsonb(($4::text))))` +
127
+ " - array['stale']::text[])"));
128
+ (0, chai_1.expect)((0, pipeline_fixture_1.Occurrences)((0, pipeline_fixture_1.WrittenSql)(written), EXTRA_ASSIGNMENT)).to.equal(1);
129
+ });
130
+ });
131
+ describe("the update statement's asserted identity", () => {
132
+ it("narrows the target to the row the payload's key names, assigning nothing", () => {
133
+ const written = Update({ _id: KEY, age: AGE });
134
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Updates('"age" = ($4::double precision)', (0, pipeline_fixture_1.AssertedIdentity)("$3")));
135
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.not.contain('SET "_id"');
136
+ });
137
+ it("asserts the key wherever in the payload it was named", () => {
138
+ const written = Update({ age: AGE, _id: KEY });
139
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Updates('"age" = ($3::double precision)', (0, pipeline_fixture_1.AssertedIdentity)("$4")));
140
+ });
141
+ it("asserts nothing for a key the payload only names", () => {
142
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(Update({ _id: undefined, age: AGE }))).to.equal(Updates('"age" = ($3::double precision)'));
143
+ });
144
+ it("asserts nothing for a key the payload set to null", () => {
145
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(Update({ _id: null, age: AGE }))).to.equal((0, pipeline_fixture_1.WrittenSql)(Update({ age: AGE })));
146
+ });
147
+ it("refuses a key asserted over a selection of many rows, naming what to do", () => {
148
+ (0, chai_1.expect)(() => (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update({ _id: KEY, age: AGE }))).to.throw("The 'update' stage was given a payload naming '_id' over a selection of many rows: address the row with get(_id) first, or leave '_id' out of the payload");
149
+ });
150
+ it("refuses the key a mapper's document body names over the same selection", () => {
151
+ (0, chai_1.expect)(() => (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => ({ _id: KEY, age: doc.key("age") })))).to.throw("over a selection of many rows");
152
+ });
153
+ it("takes the key over any selection that answers one row, not only a get", () => {
154
+ const written = (0, pipeline_fixture_1.Write)(NthUpdate({ _id: KEY, age: AGE }));
155
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.contain((0, pipeline_fixture_1.AssertedIdentity)("$3"));
156
+ });
157
+ it("asserts the key a mapper's document body names, exactly as a payload does", () => {
158
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)()
159
+ .get(KEY)
160
+ .update((doc) => ({ _id: KEY, age: doc.key("age").add(RAISE) })));
161
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Updates('"age" = ("w0"."age" + ($4::double precision))', (0, pipeline_fixture_1.AssertedIdentity)("$3")));
162
+ });
163
+ });
164
+ describe("the count an update answers", () => {
165
+ it("leaves a row the assignment would not change out of the rows it writes", () => {
166
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(Update({ age: AGE }))).to.contain(' AND (("w0"."age") IS DISTINCT FROM (($3::double precision)))');
167
+ });
168
+ it("tests every column it assigns at once, the overflow document included", () => {
169
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(Update({ age: AGE, nickname: NICKNAME }))).to.contain(` AND (("w0"."age", "w0"."_extra") IS DISTINCT FROM` +
170
+ ` (($3::double precision), (${EXISTING_EXTRA} ||` +
171
+ " jsonb_build_object('nickname', to_jsonb(($4::text))))))");
172
+ });
173
+ it("spells the values it compares against rather than binding them a second time", () => {
174
+ const written = Update({ age: AGE });
175
+ (0, chai_1.expect)(written.context.params.all()).to.deep.equal(["", KEY, AGE]);
176
+ (0, chai_1.expect)((0, pipeline_fixture_1.Occurrences)((0, pipeline_fixture_1.WrittenSql)(written), "$3")).to.equal(RESPELLED);
177
+ });
178
+ it("names the column rather than the field it was declared under", () => {
179
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.NotesRoot)().update({ summary: "s" }));
180
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.contain(' AND (("w0"."summ") IS DISTINCT FROM (($2::text)))');
181
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.not.contain("summary");
182
+ });
183
+ it("counts a cleared column as changed only where it held something", () => {
184
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(Update({ name: undefined }))).to.contain(' AND (("w0"."name") IS DISTINCT FROM (NULL))');
185
+ });
186
+ it("leaves the mapper's expression body counting the rows it matched", () => {
187
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => doc.key("meta")));
188
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.not.contain("IS DISTINCT FROM");
189
+ });
190
+ });
191
+ describe("the update statement's refusals", () => {
192
+ it("refuses a payload with nothing to write, naming the stage", () => {
193
+ (0, chai_1.expect)(() => Update({})).to.throw("The 'update' stage was given a payload with nothing to write");
194
+ });
195
+ it("drops the instance column, leaving a payload with nothing else to write", () => {
196
+ (0, chai_1.expect)(() => Update({ _instance: "x" })).to.throw("The 'update' stage was given a payload with nothing to write");
197
+ });
198
+ it("refuses the overflow column, naming it", () => {
199
+ (0, chai_1.expect)(() => Update({ _extra: {} })).to.throw("Payload key '_extra' is a column this adapter owns and no payload may write it");
200
+ });
201
+ it("refuses a payload that names the key and nothing else to write", () => {
202
+ (0, chai_1.expect)(() => Update({ _id: KEY })).to.throw("The 'update' stage was given a payload with nothing to write");
203
+ });
204
+ it("writes a document whose leading argument is a list of something else", () => {
205
+ const written = Update({ stage: "func", args: [["a"], RECORDED_ARGUMENT] });
206
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.contain(`"_extra" = (${EXISTING_EXTRA} ||`);
207
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.not.contain('AS "doc"');
208
+ });
209
+ it("writes a document whose two keys happen to spell a mapper", () => {
210
+ const written = Update({ stage: "func", args: [RECORDED_ARGUMENT] });
211
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Updates(`"_extra" = (${EXISTING_EXTRA} || jsonb_build_object(` +
212
+ `'stage', to_jsonb(($3::text)),` +
213
+ " 'args', ($4::jsonb)))"));
214
+ });
215
+ });
216
+ describe("update under CROSS_INSTANCE", () => {
217
+ it("changes the rows of every instance without naming one anywhere", () => {
218
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.CrossInstanceRoot)().update({ age: AGE }));
219
+ const assignment = '"age" = ($1::double precision)';
220
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(`${UPDATE} ${assignment} WHERE ` +
221
+ `${(0, pipeline_fixture_1.IdentityPredicate)(`SELECT ${pipeline_fixture_1.ROW_COLUMNS} ${pipeline_fixture_1.FROM_TABLE}`)}` +
222
+ ` AND ${(0, pipeline_fixture_1.UnchangedRows)(assignment)}`);
223
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.not.contain(INSTANCE_PREDICATE);
224
+ });
225
+ });
226
+ describe("the update statement's mapper, whose body is a document", () => {
227
+ it("reads the row being written, as its own column rather than out of a document", () => {
228
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => ({ age: doc.key("age").add(RAISE) })));
229
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Changes('"age" = ("w0"."age" + ($2::double precision))'));
230
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.not.contain("jsonb_build_object");
231
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.not.contain('"_extra" ->');
232
+ });
233
+ it("splits the body's keys into columns exactly as a document payload does", () => {
234
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => ({ nickname: doc.key("name") })));
235
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Changes(`"_extra" = (${EXISTING_EXTRA} ||` +
236
+ ` jsonb_build_object('nickname', to_jsonb("w0"."name")))`));
237
+ });
238
+ it("refuses a body with nothing to write, naming the stage", () => {
239
+ (0, chai_1.expect)(() => (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update(() => ({})))).to.throw("The 'update' stage was given a payload with nothing to write");
240
+ });
241
+ it("refuses a reserved key the body names, exactly as a document payload does", () => {
242
+ (0, chai_1.expect)(() => (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => ({ _extra: doc.key("name") })))).to.throw("Payload key '_extra' is a column this adapter owns and no payload may write it");
243
+ });
244
+ });
245
+ describe("the update statement's mapper, whose body is an expression", () => {
246
+ it("assigns every column at once from one evaluation of the body", () => {
247
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => doc.key("meta")));
248
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.equal(Assigns(Mapped('"w0"."meta"', MAPPED_HELD), MAPPED_WRAP));
249
+ });
250
+ it("spells the body exactly once, however many columns read it back", () => {
251
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => doc.merge({ x: MEMBER })));
252
+ (0, chai_1.expect)((0, pipeline_fixture_1.Occurrences)((0, pipeline_fixture_1.WrittenSql)(written), MERGED_MEMBER)).to.equal(1);
253
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.contain(`FROM (SELECT ${Merged(MERGED_HELD)} AS "doc") AS "${MERGED_MAPPED}")`);
254
+ });
255
+ it("subtracts every declared name and the key column from the overflow document", () => {
256
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => doc.merge({ x: MEMBER })));
257
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.contain(MappedExtra(MERGED_MAPPED));
258
+ });
259
+ it("names a declared field by its column and reads it by its field name", () => {
260
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.NotesRoot)().update((doc) => doc.merge({ x: MEMBER })));
261
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.contain(`UPDATE ${pipeline_fixture_1.NOTES_TABLE} AS "w0" SET ("summ", "_extra") = (SELECT (CASE WHEN` +
262
+ ` jsonb_typeof(("${MERGED_MAPPED}"."doc" -> 'summary')) = 'string'`);
263
+ });
264
+ it("assigns a bare column where the table declares no fields of its own", () => {
265
+ const written = (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.LogsRoot)().update((doc) => doc.merge({ x: MEMBER })));
266
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.contain(`UPDATE ${pipeline_fixture_1.LOGS_TABLE} AS "w0" SET "_extra" = (SELECT COALESCE(`);
267
+ (0, chai_1.expect)((0, pipeline_fixture_1.WrittenSql)(written)).to.not.contain('("_extra") =');
268
+ });
269
+ it("refuses a mapper that returned nothing, naming the stage", () => {
270
+ (0, chai_1.expect)(() => (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update(RETURNS_NOTHING))).to.throw("The 'update' stage was given a mapper that returned nothing");
271
+ });
272
+ });
273
+ describe("the update statement's parameter ledger", () => {
274
+ it("references every parameter it binds, and binds every one it references", () => {
275
+ (0, pipeline_fixture_1.ExpectBalancedLedger)([
276
+ Update({ age: AGE }),
277
+ Update({ name: undefined }),
278
+ Update({ nickname: NICKNAME }),
279
+ Update({ nickname: undefined }),
280
+ Update({ age: AGE, nickname: NICKNAME, stale: undefined }),
281
+ Update({ _id: KEY, age: AGE }),
282
+ (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)()
283
+ .get(KEY)
284
+ .update((doc) => ({ _id: KEY, age: doc.key("age") }))),
285
+ (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.CrossInstanceRoot)().update({ age: AGE })),
286
+ (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)()
287
+ .filter((doc) => doc.key("age").ge(MINIMUM_AGE))
288
+ .slice(SLICE_OFFSET, SLICE_COUNT)
289
+ .update({ name: "a" })),
290
+ (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => ({ age: doc.key("age").add(RAISE) }))),
291
+ (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => doc.key("meta"))),
292
+ (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.Root)().update((doc) => doc.merge({ x: MEMBER }))),
293
+ (0, pipeline_fixture_1.Write)((0, pipeline_fixture_1.LogsRoot)().update((doc) => doc.merge({ x: MEMBER }))),
294
+ ]);
295
+ });
296
+ });
297
+ //# sourceMappingURL=writes-update.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes-update.spec.js","sourceRoot":"","sources":["../../../src/test/unit/writes-update.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const CLIENT_DATABASE = "antelopejs_external";
2
+ export declare const CLIENT_ROLE = "dms_client";
3
+ export declare const READER_PASSWORD = "reader";
4
+ export declare const FIXTURE: readonly string[];
5
+ export declare function WriterGrants(role: string): string[];
6
+ export declare function ReaderGrants(role: string): string[];
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FIXTURE = exports.READER_PASSWORD = exports.CLIENT_ROLE = exports.CLIENT_DATABASE = void 0;
4
+ exports.WriterGrants = WriterGrants;
5
+ exports.ReaderGrants = ReaderGrants;
6
+ exports.CLIENT_DATABASE = "antelopejs_external";
7
+ exports.CLIENT_ROLE = "dms_client";
8
+ exports.READER_PASSWORD = "reader";
9
+ exports.FIXTURE = [
10
+ "CREATE EXTENSION IF NOT EXISTS citext",
11
+ "CREATE SCHEMA sales",
12
+ "CREATE TYPE sales.status AS ENUM ('lead', 'active', 'churned')",
13
+ `CREATE TABLE sales.accounts (
14
+ id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
15
+ name varchar(200) NOT NULL,
16
+ email citext,
17
+ status sales.status NOT NULL DEFAULT 'lead',
18
+ revenue numeric(12,2),
19
+ score integer,
20
+ rating real,
21
+ created_at timestamptz NOT NULL DEFAULT now(),
22
+ signed_on date,
23
+ last_seen timestamp,
24
+ external_ref uuid UNIQUE,
25
+ tags text[],
26
+ meta jsonb,
27
+ raw json,
28
+ active boolean,
29
+ big_counter bigint,
30
+ name_upper text GENERATED ALWAYS AS (upper(name)) STORED
31
+ )`,
32
+ "CREATE INDEX accounts_score ON sales.accounts (score)",
33
+ "CREATE INDEX accounts_revenue ON sales.accounts (revenue)",
34
+ "CREATE INDEX accounts_created ON sales.accounts (created_at)",
35
+ "CREATE INDEX accounts_signed ON sales.accounts (signed_on)",
36
+ "CREATE INDEX accounts_last_seen ON sales.accounts (last_seen)",
37
+ "CREATE INDEX accounts_status ON sales.accounts (status)",
38
+ "CREATE INDEX accounts_name ON sales.accounts (name)",
39
+ "CREATE INDEX accounts_email ON sales.accounts (email)",
40
+ `CREATE TABLE sales.contacts (
41
+ contact_id uuid PRIMARY KEY,
42
+ account_id bigint REFERENCES sales.accounts (id),
43
+ first_name text NOT NULL,
44
+ created_at timestamp NOT NULL
45
+ )`,
46
+ "CREATE INDEX contacts_account ON sales.contacts (account_id)",
47
+ "CREATE INDEX contacts_created ON sales.contacts (created_at)",
48
+ `CREATE TABLE sales.order_lines (
49
+ order_id int NOT NULL, line_no int NOT NULL, sku text, qty int,
50
+ PRIMARY KEY (order_id, line_no)
51
+ )`,
52
+ `CREATE TABLE sales.events (event_ref uuid NOT NULL, at timestamptz NOT NULL, msg text)`,
53
+ "CREATE UNIQUE INDEX events_ref ON sales.events (event_ref)",
54
+ "CREATE UNIQUE INDEX events_at_msg ON sales.events (at, msg)",
55
+ "CREATE TABLE sales.raw_log (at timestamptz, msg text)",
56
+ "CREATE TABLE sales.countries (code char(2) PRIMARY KEY, name text)",
57
+ "CREATE TABLE sales.flags (id int PRIMARY KEY, ref uuid, n int)",
58
+ "INSERT INTO sales.flags VALUES (1, md5('flag1')::uuid, 5), (2, NULL, NULL)",
59
+ `CREATE TABLE sales.tags (id int PRIMARY KEY, label text) PARTITION BY HASH (id)`,
60
+ "CREATE TABLE sales.tags_0 PARTITION OF sales.tags FOR VALUES WITH (MODULUS 2, REMAINDER 0)",
61
+ "CREATE TABLE sales.tags_1 PARTITION OF sales.tags FOR VALUES WITH (MODULUS 2, REMAINDER 1)",
62
+ `INSERT INTO sales.accounts (name, email, status, revenue, score, rating, created_at, signed_on,
63
+ last_seen, external_ref, tags, meta, raw, active, big_counter)
64
+ SELECT 'Acct ' || g, 'User' || g || '@Example.com',
65
+ (ARRAY['lead', 'active', 'churned'])[1 + g % 3]::sales.status,
66
+ (g * 13.37)::numeric(12,2), g % 100, (g % 50) / 10.0,
67
+ timestamptz '2026-01-01 00:00:00+00' + (g || ' hours')::interval,
68
+ date '2026-01-01' + (g % 300), timestamp '2026-01-01 00:00' + (g || ' minutes')::interval,
69
+ md5('account' || g)::uuid, ARRAY['t' || (g % 5)], jsonb_build_object('k', g),
70
+ json_build_object('k', g), g % 2 = 0, 9007199254740993 + g
71
+ FROM generate_series(1, 20000) g`,
72
+ `INSERT INTO sales.contacts (contact_id, account_id, first_name, created_at)
73
+ SELECT md5('contact' || g)::uuid, 1 + (g % 20000), 'First' || g,
74
+ timestamp '2026-03-01 23:30' + (g || ' minutes')::interval
75
+ FROM generate_series(1, 20000) g`,
76
+ `INSERT INTO sales.order_lines SELECT g / 10, g % 10, 'sku' || g, g % 7 FROM generate_series(1, 5000) g`,
77
+ `INSERT INTO sales.events
78
+ SELECT md5('event' || g)::uuid, timestamptz '2026-01-01' + (g || ' minutes')::interval, 'm' || g
79
+ FROM generate_series(1, 5000) g`,
80
+ `INSERT INTO sales.raw_log
81
+ SELECT timestamptz '2026-01-01' + (g || ' seconds')::interval, 'r' || g FROM generate_series(1, 5000) g`,
82
+ "INSERT INTO sales.countries VALUES ('FR', 'France'), ('IT', 'Italy')",
83
+ "INSERT INTO sales.tags SELECT g, 'tag' || g FROM generate_series(1, 1000) g",
84
+ `CREATE VIEW sales.big_accounts AS
85
+ SELECT a.id, a.name AS account_name, a.revenue FROM sales.accounts a WHERE a.revenue > 1000`,
86
+ `CREATE MATERIALIZED VIEW sales.daily_signups AS
87
+ SELECT signed_on AS day, count(*) AS n FROM sales.accounts GROUP BY signed_on`,
88
+ "CREATE UNIQUE INDEX daily_signups_day ON sales.daily_signups (day)",
89
+ `CREATE TABLE sales.w_accounts (
90
+ id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
91
+ code varchar(5) NOT NULL UNIQUE,
92
+ email citext,
93
+ status sales.status NOT NULL DEFAULT 'lead',
94
+ revenue numeric(12,2) CHECK (revenue >= 0),
95
+ big bigint,
96
+ rating real,
97
+ seen timestamp,
98
+ at timestamptz NOT NULL DEFAULT now(),
99
+ raw json,
100
+ tags text[],
101
+ upper_code text GENERATED ALWAYS AS (upper(code)) STORED
102
+ )`,
103
+ `CREATE TABLE sales.w_items (
104
+ sku uuid PRIMARY KEY DEFAULT gen_random_uuid(),
105
+ account_id bigint REFERENCES sales.w_accounts (id),
106
+ qty int NOT NULL
107
+ )`,
108
+ "CREATE TABLE sales.w_serial (id serial PRIMARY KEY, label text)",
109
+ "CREATE TABLE sales.w_events (at timestamptz PRIMARY KEY, msg text)",
110
+ "CREATE TABLE sales.w_big (id bigint PRIMARY KEY, label text)",
111
+ `CREATE TABLE sales.w_lines (
112
+ order_id int NOT NULL, line_no int NOT NULL, qty int, PRIMARY KEY (order_id, line_no)
113
+ )`,
114
+ "ANALYZE",
115
+ ];
116
+ const WRITABLE_TABLES = [
117
+ "sales.w_accounts",
118
+ "sales.w_items",
119
+ "sales.w_serial",
120
+ "sales.w_lines",
121
+ "sales.w_events",
122
+ "sales.w_big",
123
+ ];
124
+ function WriterGrants(role) {
125
+ return [
126
+ `GRANT INSERT, UPDATE, DELETE ON ${WRITABLE_TABLES.join(", ")} TO ${role}`,
127
+ `GRANT USAGE ON ALL SEQUENCES IN SCHEMA sales TO ${role}`,
128
+ ];
129
+ }
130
+ function ReaderGrants(role) {
131
+ return [
132
+ `GRANT USAGE ON SCHEMA sales TO ${role}`,
133
+ `GRANT SELECT ON ALL TABLES IN SCHEMA sales TO ${role}`,
134
+ ];
135
+ }
136
+ //# sourceMappingURL=fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/test-external/fixture.ts"],"names":[],"mappings":";;;AAkIA,oCAKC;AAGD,oCAKC;AA1IY,QAAA,eAAe,GAAG,qBAAqB,CAAC;AAExC,QAAA,WAAW,GAAG,YAAY,CAAC;AAE3B,QAAA,eAAe,GAAG,QAAQ,CAAC;AAE3B,QAAA,OAAO,GAAsB;IACxC,uCAAuC;IACvC,qBAAqB;IACrB,gEAAgE;IAChE;;;;;;;;;;;;;;;;;;IAkBE;IACF,uDAAuD;IACvD,2DAA2D;IAC3D,8DAA8D;IAC9D,4DAA4D;IAC5D,+DAA+D;IAC/D,yDAAyD;IACzD,qDAAqD;IACrD,uDAAuD;IACvD;;;;;IAKE;IACF,8DAA8D;IAC9D,8DAA8D;IAC9D;;;IAGE;IACF,wFAAwF;IACxF,4DAA4D;IAC5D,6DAA6D;IAC7D,uDAAuD;IACvD,oEAAoE;IACpE,gEAAgE;IAChE,4EAA4E;IAC5E,iFAAiF;IACjF,4FAA4F;IAC5F,4FAA4F;IAC5F;;;;;;;;;qCASmC;IACnC;;;qCAGmC;IACnC,wGAAwG;IACxG;;oCAEkC;IAClC;4GAC0G;IAC1G,sEAAsE;IACtE,6EAA6E;IAC7E;gGAC8F;IAC9F;kFACgF;IAChF,oEAAoE;IACpE;;;;;;;;;;;;;IAaE;IACF;;;;IAIE;IACF,iEAAiE;IACjE,oEAAoE;IACpE,8DAA8D;IAC9D;;IAEE;IACF,SAAS;CACV,CAAC;AAGF,MAAM,eAAe,GAAsB;IACzC,kBAAkB;IAClB,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,aAAa;CACd,CAAC;AAGF,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,mCAAmC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;QAC1E,mDAAmD,IAAI,EAAE;KAC1D,CAAC;AACJ,CAAC;AAGD,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,kCAAkC,IAAI,EAAE;QACxC,iDAAiD,IAAI,EAAE;KACxD,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const connection_1 = require("../connection");
5
+ const relation_1 = require("../implementations/database/relation");
6
+ const selection_1 = require("../implementations/database/selection");
7
+ const context_1 = require("../implementations/database/context");
8
+ const subquery_1 = require("../implementations/database/subquery");
9
+ const expression_1 = require("../implementations/database/expression");
10
+ const pipeline_1 = require("../implementations/database/pipeline");
11
+ const sales_1 = require("./sales");
12
+ let sales;
13
+ function Table(tableId) {
14
+ return sales.instance().table(tableId);
15
+ }
16
+ async function Plan(query) {
17
+ const context = new context_1.DecodingContext({
18
+ expression: expression_1.CompileExpression,
19
+ subquery: subquery_1.CompileSubquery,
20
+ relation: pipeline_1.CompileRelation,
21
+ });
22
+ const root = (0, selection_1.BuildRoot)(query.build(), context);
23
+ const sql = (0, relation_1.Render)((0, pipeline_1.ApplyStages)(root.relation, root.rest, context));
24
+ const client = await (0, connection_1.AcquireClient)();
25
+ try {
26
+ await client.query("SET enable_seqscan = off");
27
+ const plan = await client.query(`EXPLAIN ${sql}`, context.params.all());
28
+ return plan.rows.map((row) => String(row["QUERY PLAN"])).join("\n");
29
+ }
30
+ finally {
31
+ await client.query("RESET enable_seqscan");
32
+ client.release();
33
+ }
34
+ }
35
+ describe("an external key that its column cannot hold", () => {
36
+ before(async () => {
37
+ sales = await (0, sales_1.RegisterSales)();
38
+ });
39
+ for (const [table, key] of [
40
+ ["contacts", "not-a-uuid"],
41
+ ["accounts", "42abc"],
42
+ ["accounts", "99999999999999999999"],
43
+ ["order_lines", "not json"],
44
+ ["order_lines", '"0"'],
45
+ ["order_lines", '["0"]'],
46
+ ["order_lines", '["0", "1", "9"]'],
47
+ ["order_lines", '["x", "1"]'],
48
+ ]) {
49
+ it(`gets nothing for ${key} on ${table}, rather than failing the request`, async () => {
50
+ (0, chai_1.expect)(await Table(table).get(key)).to.equal(undefined);
51
+ });
52
+ }
53
+ it("filters nothing for an enum label the type does not have", async () => {
54
+ const total = await Table("accounts")
55
+ .filter((row) => row.key("status").eq("archived"))
56
+ .count();
57
+ (0, chai_1.expect)(total).to.equal(0);
58
+ });
59
+ });
60
+ describe("the indexes that serve reads of an external relation", () => {
61
+ before(async () => {
62
+ sales = await (0, sales_1.RegisterSales)();
63
+ });
64
+ it("gets by a bigint _id through the primary key index", async () => {
65
+ (0, chai_1.expect)(await Plan(Table("accounts").get("42"))).to.contain("accounts_pkey");
66
+ });
67
+ it("gets by a composite _id through the primary key index", async () => {
68
+ (0, chai_1.expect)(await Plan(Table("order_lines").get('["4", "2"]'))).to.contain("order_lines_pkey");
69
+ });
70
+ it("looks a foreign key up through the referenced primary key index", async () => {
71
+ const query = Table("contacts")
72
+ .slice(0, 3)
73
+ .lookup(Table("accounts"), "account_id", "_id");
74
+ (0, chai_1.expect)(await Plan(query)).to.contain("accounts_pkey");
75
+ });
76
+ it("ranges over a naive timestamp through its own index", async () => {
77
+ const query = Table("contacts").filter((row) => row
78
+ .key("created_at")
79
+ .ge(new Date("2026-03-02T00:00:00Z"))
80
+ .and(row.key("created_at").lt(new Date("2026-03-03T00:00:00Z"))));
81
+ (0, chai_1.expect)(await Plan(query)).to.contain("contacts_created");
82
+ });
83
+ });
84
+ describe("numbers read from an external relation's exact types", () => {
85
+ before(async () => {
86
+ sales = await (0, sales_1.RegisterSales)();
87
+ });
88
+ it("sums a numeric column exactly", async () => {
89
+ const total = await Table("accounts")
90
+ .filter((row) => row.key("active").eq(true))
91
+ .sum("revenue");
92
+ const [expected] = await (0, sales_1.Native)("SELECT sum(revenue)::double precision AS total FROM sales.accounts WHERE active");
93
+ (0, chai_1.expect)(total).to.equal(expected.total);
94
+ });
95
+ for (const [method, operator] of [
96
+ ["gt", ">"],
97
+ ["ge", ">="],
98
+ ["lt", "<"],
99
+ ["le", "<="],
100
+ ["eq", "="],
101
+ ]) {
102
+ it(`keeps the meaning of '${operator} 5.5' on an integer column`, async () => {
103
+ const total = await Table("accounts")
104
+ .filter((row) => row.key("score")[method](5.5))
105
+ .count();
106
+ (0, chai_1.expect)(total).to.equal(await (0, sales_1.NativeCount)(`SELECT count(*) FROM sales.accounts WHERE score ${operator} 5.5`));
107
+ });
108
+ }
109
+ });
110
+ describe("inequality against an external column's own type", () => {
111
+ before(async () => {
112
+ sales = await (0, sales_1.RegisterSales)();
113
+ });
114
+ for (const [field, value, expected] of [
115
+ ["ref", "not-a-uuid", 2],
116
+ ["ref", "", 2],
117
+ ["n", 5.5, 2],
118
+ ["n", 5, 1],
119
+ ]) {
120
+ it(`answers ${field} ne ${JSON.stringify(value)} as the complement of eq, keeping NULL rows`, async () => {
121
+ const unequal = await Table("flags")
122
+ .filter((row) => row.key(field).ne(value))
123
+ .count();
124
+ const equal = await Table("flags")
125
+ .filter((row) => row.key(field).eq(value))
126
+ .count();
127
+ (0, chai_1.expect)(unequal).to.equal(expected);
128
+ (0, chai_1.expect)(unequal + equal).to.equal(2);
129
+ });
130
+ }
131
+ });
132
+ //# sourceMappingURL=native.test.js.map