@antelopejs/postgres 0.0.1-stage → 0.2.1

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 (390) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +152 -0
  3. package/dist/config.d.ts +38 -0
  4. package/dist/config.js +91 -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/catalog/index.d.ts +7 -0
  10. package/dist/implementations/catalog/index.js +60 -0
  11. package/dist/implementations/catalog/index.js.map +1 -0
  12. package/dist/implementations/database/changes.d.ts +19 -0
  13. package/dist/implementations/database/changes.js +100 -0
  14. package/dist/implementations/database/changes.js.map +1 -0
  15. package/dist/implementations/database/coerce.d.ts +15 -0
  16. package/dist/implementations/database/coerce.js +195 -0
  17. package/dist/implementations/database/coerce.js.map +1 -0
  18. package/dist/implementations/database/context.d.ts +32 -0
  19. package/dist/implementations/database/context.js +50 -0
  20. package/dist/implementations/database/context.js.map +1 -0
  21. package/dist/implementations/database/cursors.d.ts +16 -0
  22. package/dist/implementations/database/cursors.js +269 -0
  23. package/dist/implementations/database/cursors.js.map +1 -0
  24. package/dist/implementations/database/ddl.d.ts +62 -0
  25. package/dist/implementations/database/ddl.js +355 -0
  26. package/dist/implementations/database/ddl.js.map +1 -0
  27. package/dist/implementations/database/expression.d.ts +7 -0
  28. package/dist/implementations/database/expression.js +30 -0
  29. package/dist/implementations/database/expression.js.map +1 -0
  30. package/dist/implementations/database/external-catalog.d.ts +37 -0
  31. package/dist/implementations/database/external-catalog.js +96 -0
  32. package/dist/implementations/database/external-catalog.js.map +1 -0
  33. package/dist/implementations/database/external-column-profile.d.ts +18 -0
  34. package/dist/implementations/database/external-column-profile.js +223 -0
  35. package/dist/implementations/database/external-column-profile.js.map +1 -0
  36. package/dist/implementations/database/external-declarations.d.ts +9 -0
  37. package/dist/implementations/database/external-declarations.js +67 -0
  38. package/dist/implementations/database/external-declarations.js.map +1 -0
  39. package/dist/implementations/database/external-discovery.d.ts +39 -0
  40. package/dist/implementations/database/external-discovery.js +219 -0
  41. package/dist/implementations/database/external-discovery.js.map +1 -0
  42. package/dist/implementations/database/external-errors.d.ts +20 -0
  43. package/dist/implementations/database/external-errors.js +67 -0
  44. package/dist/implementations/database/external-errors.js.map +1 -0
  45. package/dist/implementations/database/external-measures.d.ts +11 -0
  46. package/dist/implementations/database/external-measures.js +82 -0
  47. package/dist/implementations/database/external-measures.js.map +1 -0
  48. package/dist/implementations/database/external-payload.d.ts +32 -0
  49. package/dist/implementations/database/external-payload.js +206 -0
  50. package/dist/implementations/database/external-payload.js.map +1 -0
  51. package/dist/implementations/database/external-profile.d.ts +4 -0
  52. package/dist/implementations/database/external-profile.js +129 -0
  53. package/dist/implementations/database/external-profile.js.map +1 -0
  54. package/dist/implementations/database/external-reference.d.ts +2 -0
  55. package/dist/implementations/database/external-reference.js +49 -0
  56. package/dist/implementations/database/external-reference.js.map +1 -0
  57. package/dist/implementations/database/external-refusals.d.ts +5 -0
  58. package/dist/implementations/database/external-refusals.js +23 -0
  59. package/dist/implementations/database/external-refusals.js.map +1 -0
  60. package/dist/implementations/database/external-rows.d.ts +2 -0
  61. package/dist/implementations/database/external-rows.js +81 -0
  62. package/dist/implementations/database/external-rows.js.map +1 -0
  63. package/dist/implementations/database/external-sample.d.ts +9 -0
  64. package/dist/implementations/database/external-sample.js +29 -0
  65. package/dist/implementations/database/external-sample.js.map +1 -0
  66. package/dist/implementations/database/external-schema.d.ts +3 -0
  67. package/dist/implementations/database/external-schema.js +111 -0
  68. package/dist/implementations/database/external-schema.js.map +1 -0
  69. package/dist/implementations/database/external-types.d.ts +37 -0
  70. package/dist/implementations/database/external-types.js +387 -0
  71. package/dist/implementations/database/external-types.js.map +1 -0
  72. package/dist/implementations/database/external-writes.d.ts +3 -0
  73. package/dist/implementations/database/external-writes.js +298 -0
  74. package/dist/implementations/database/external-writes.js.map +1 -0
  75. package/dist/implementations/database/feed-pipeline.d.ts +12 -0
  76. package/dist/implementations/database/feed-pipeline.js +92 -0
  77. package/dist/implementations/database/feed-pipeline.js.map +1 -0
  78. package/dist/implementations/database/feeds.d.ts +34 -0
  79. package/dist/implementations/database/feeds.js +338 -0
  80. package/dist/implementations/database/feeds.js.map +1 -0
  81. package/dist/implementations/database/fields.d.ts +37 -0
  82. package/dist/implementations/database/fields.js +114 -0
  83. package/dist/implementations/database/fields.js.map +1 -0
  84. package/dist/implementations/database/identifier.d.ts +8 -0
  85. package/dist/implementations/database/identifier.js +62 -0
  86. package/dist/implementations/database/identifier.js.map +1 -0
  87. package/dist/implementations/database/instances.d.ts +4 -0
  88. package/dist/implementations/database/instances.js +57 -0
  89. package/dist/implementations/database/instances.js.map +1 -0
  90. package/dist/implementations/database/introspect.d.ts +3 -0
  91. package/dist/implementations/database/introspect.js +36 -0
  92. package/dist/implementations/database/introspect.js.map +1 -0
  93. package/dist/implementations/database/jsonb.d.ts +29 -0
  94. package/dist/implementations/database/jsonb.js +54 -0
  95. package/dist/implementations/database/jsonb.js.map +1 -0
  96. package/dist/implementations/database/listener.d.ts +3 -0
  97. package/dist/implementations/database/listener.js +93 -0
  98. package/dist/implementations/database/listener.js.map +1 -0
  99. package/dist/implementations/database/migrate.d.ts +6 -0
  100. package/dist/implementations/database/migrate.js +282 -0
  101. package/dist/implementations/database/migrate.js.map +1 -0
  102. package/dist/implementations/database/payload.d.ts +24 -0
  103. package/dist/implementations/database/payload.js +113 -0
  104. package/dist/implementations/database/payload.js.map +1 -0
  105. package/dist/implementations/database/pipeline.d.ts +10 -0
  106. package/dist/implementations/database/pipeline.js +56 -0
  107. package/dist/implementations/database/pipeline.js.map +1 -0
  108. package/dist/implementations/database/query.d.ts +11 -0
  109. package/dist/implementations/database/query.js +189 -0
  110. package/dist/implementations/database/query.js.map +1 -0
  111. package/dist/implementations/database/readings.d.ts +17 -0
  112. package/dist/implementations/database/readings.js +133 -0
  113. package/dist/implementations/database/readings.js.map +1 -0
  114. package/dist/implementations/database/reaper.d.ts +6 -0
  115. package/dist/implementations/database/reaper.js +121 -0
  116. package/dist/implementations/database/reaper.js.map +1 -0
  117. package/dist/implementations/database/relation.d.ts +65 -0
  118. package/dist/implementations/database/relation.js +237 -0
  119. package/dist/implementations/database/relation.js.map +1 -0
  120. package/dist/implementations/database/result.d.ts +4 -0
  121. package/dist/implementations/database/result.js +70 -0
  122. package/dist/implementations/database/result.js.map +1 -0
  123. package/dist/implementations/database/row-source.d.ts +64 -0
  124. package/dist/implementations/database/row-source.js +279 -0
  125. package/dist/implementations/database/row-source.js.map +1 -0
  126. package/dist/implementations/database/schema.d.ts +15 -0
  127. package/dist/implementations/database/schema.js +143 -0
  128. package/dist/implementations/database/schema.js.map +1 -0
  129. package/dist/implementations/database/selection.d.ts +18 -0
  130. package/dist/implementations/database/selection.js +129 -0
  131. package/dist/implementations/database/selection.js.map +1 -0
  132. package/dist/implementations/database/sql.d.ts +24 -0
  133. package/dist/implementations/database/sql.js +48 -0
  134. package/dist/implementations/database/sql.js.map +1 -0
  135. package/dist/implementations/database/stage.d.ts +22 -0
  136. package/dist/implementations/database/stage.js +76 -0
  137. package/dist/implementations/database/stage.js.map +1 -0
  138. package/dist/implementations/database/stages-aggregate.d.ts +11 -0
  139. package/dist/implementations/database/stages-aggregate.js +112 -0
  140. package/dist/implementations/database/stages-aggregate.js.map +1 -0
  141. package/dist/implementations/database/stages-array.d.ts +2 -0
  142. package/dist/implementations/database/stages-array.js +162 -0
  143. package/dist/implementations/database/stages-array.js.map +1 -0
  144. package/dist/implementations/database/stages-core.d.ts +2 -0
  145. package/dist/implementations/database/stages-core.js +107 -0
  146. package/dist/implementations/database/stages-core.js.map +1 -0
  147. package/dist/implementations/database/stages-date.d.ts +2 -0
  148. package/dist/implementations/database/stages-date.js +65 -0
  149. package/dist/implementations/database/stages-date.js.map +1 -0
  150. package/dist/implementations/database/stages-group.d.ts +5 -0
  151. package/dist/implementations/database/stages-group.js +151 -0
  152. package/dist/implementations/database/stages-group.js.map +1 -0
  153. package/dist/implementations/database/stages-join.d.ts +2 -0
  154. package/dist/implementations/database/stages-join.js +162 -0
  155. package/dist/implementations/database/stages-join.js.map +1 -0
  156. package/dist/implementations/database/stages-numeric.d.ts +2 -0
  157. package/dist/implementations/database/stages-numeric.js +152 -0
  158. package/dist/implementations/database/stages-numeric.js.map +1 -0
  159. package/dist/implementations/database/stages-object.d.ts +2 -0
  160. package/dist/implementations/database/stages-object.js +81 -0
  161. package/dist/implementations/database/stages-object.js.map +1 -0
  162. package/dist/implementations/database/stages-projection.d.ts +2 -0
  163. package/dist/implementations/database/stages-projection.js +75 -0
  164. package/dist/implementations/database/stages-projection.js.map +1 -0
  165. package/dist/implementations/database/stages-rows.d.ts +2 -0
  166. package/dist/implementations/database/stages-rows.js +101 -0
  167. package/dist/implementations/database/stages-rows.js.map +1 -0
  168. package/dist/implementations/database/stages-selection.d.ts +2 -0
  169. package/dist/implementations/database/stages-selection.js +146 -0
  170. package/dist/implementations/database/stages-selection.js.map +1 -0
  171. package/dist/implementations/database/stages-string.d.ts +2 -0
  172. package/dist/implementations/database/stages-string.js +101 -0
  173. package/dist/implementations/database/stages-string.js.map +1 -0
  174. package/dist/implementations/database/subquery.d.ts +4 -0
  175. package/dist/implementations/database/subquery.js +49 -0
  176. package/dist/implementations/database/subquery.js.map +1 -0
  177. package/dist/implementations/database/types.d.ts +37 -0
  178. package/dist/implementations/database/types.js +57 -0
  179. package/dist/implementations/database/types.js.map +1 -0
  180. package/dist/implementations/database/utils.d.ts +16 -0
  181. package/dist/implementations/database/utils.js +38 -0
  182. package/dist/implementations/database/utils.js.map +1 -0
  183. package/dist/implementations/database/value.d.ts +10 -0
  184. package/dist/implementations/database/value.js +153 -0
  185. package/dist/implementations/database/value.js.map +1 -0
  186. package/dist/implementations/database/writes-atomic.d.ts +6 -0
  187. package/dist/implementations/database/writes-atomic.js +93 -0
  188. package/dist/implementations/database/writes-atomic.js.map +1 -0
  189. package/dist/implementations/database/writes-identity.d.ts +4 -0
  190. package/dist/implementations/database/writes-identity.js +181 -0
  191. package/dist/implementations/database/writes-identity.js.map +1 -0
  192. package/dist/implementations/database/writes-insert.d.ts +2 -0
  193. package/dist/implementations/database/writes-insert.js +136 -0
  194. package/dist/implementations/database/writes-insert.js.map +1 -0
  195. package/dist/implementations/database/writes-shared.d.ts +36 -0
  196. package/dist/implementations/database/writes-shared.js +64 -0
  197. package/dist/implementations/database/writes-shared.js.map +1 -0
  198. package/dist/implementations/database/writes.d.ts +16 -0
  199. package/dist/implementations/database/writes.js +52 -0
  200. package/dist/implementations/database/writes.js.map +1 -0
  201. package/dist/index.d.ts +4 -0
  202. package/dist/index.js +53 -0
  203. package/dist/index.js.map +1 -0
  204. package/dist/logger.d.ts +2 -0
  205. package/dist/logger.js +6 -0
  206. package/dist/logger.js.map +1 -0
  207. package/dist/test/antelope.test.d.ts +2 -0
  208. package/dist/test/antelope.test.js +89 -0
  209. package/dist/test/antelope.test.js.map +1 -0
  210. package/dist/test/atomic.test.d.ts +1 -0
  211. package/dist/test/atomic.test.js +132 -0
  212. package/dist/test/atomic.test.js.map +1 -0
  213. package/dist/test/catalog-owned.test.d.ts +1 -0
  214. package/dist/test/catalog-owned.test.js +17 -0
  215. package/dist/test/catalog-owned.test.js.map +1 -0
  216. package/dist/test/contention.test.d.ts +1 -0
  217. package/dist/test/contention.test.js +183 -0
  218. package/dist/test/contention.test.js.map +1 -0
  219. package/dist/test/indexes.test.d.ts +1 -0
  220. package/dist/test/indexes.test.js +311 -0
  221. package/dist/test/indexes.test.js.map +1 -0
  222. package/dist/test/unit/changes.spec.d.ts +1 -0
  223. package/dist/test/unit/changes.spec.js +103 -0
  224. package/dist/test/unit/changes.spec.js.map +1 -0
  225. package/dist/test/unit/coerce.spec.d.ts +1 -0
  226. package/dist/test/unit/coerce.spec.js +162 -0
  227. package/dist/test/unit/coerce.spec.js.map +1 -0
  228. package/dist/test/unit/config.spec.d.ts +1 -0
  229. package/dist/test/unit/config.spec.js +123 -0
  230. package/dist/test/unit/config.spec.js.map +1 -0
  231. package/dist/test/unit/connection.spec.d.ts +1 -0
  232. package/dist/test/unit/connection.spec.js +171 -0
  233. package/dist/test/unit/connection.spec.js.map +1 -0
  234. package/dist/test/unit/cursors.spec.d.ts +1 -0
  235. package/dist/test/unit/cursors.spec.js +823 -0
  236. package/dist/test/unit/cursors.spec.js.map +1 -0
  237. package/dist/test/unit/ddl.spec.d.ts +1 -0
  238. package/dist/test/unit/ddl.spec.js +571 -0
  239. package/dist/test/unit/ddl.spec.js.map +1 -0
  240. package/dist/test/unit/expression-array.spec.d.ts +1 -0
  241. package/dist/test/unit/expression-array.spec.js +488 -0
  242. package/dist/test/unit/expression-array.spec.js.map +1 -0
  243. package/dist/test/unit/expression-date.spec.d.ts +1 -0
  244. package/dist/test/unit/expression-date.spec.js +329 -0
  245. package/dist/test/unit/expression-date.spec.js.map +1 -0
  246. package/dist/test/unit/expression-numeric.spec.d.ts +1 -0
  247. package/dist/test/unit/expression-numeric.spec.js +362 -0
  248. package/dist/test/unit/expression-numeric.spec.js.map +1 -0
  249. package/dist/test/unit/expression-object.spec.d.ts +1 -0
  250. package/dist/test/unit/expression-object.spec.js +230 -0
  251. package/dist/test/unit/expression-object.spec.js.map +1 -0
  252. package/dist/test/unit/expression-stages.spec.d.ts +1 -0
  253. package/dist/test/unit/expression-stages.spec.js +82 -0
  254. package/dist/test/unit/expression-stages.spec.js.map +1 -0
  255. package/dist/test/unit/expression-string.spec.d.ts +1 -0
  256. package/dist/test/unit/expression-string.spec.js +249 -0
  257. package/dist/test/unit/expression-string.spec.js.map +1 -0
  258. package/dist/test/unit/expression.spec.d.ts +1 -0
  259. package/dist/test/unit/expression.spec.js +449 -0
  260. package/dist/test/unit/expression.spec.js.map +1 -0
  261. package/dist/test/unit/external-comparisons.spec.d.ts +1 -0
  262. package/dist/test/unit/external-comparisons.spec.js +147 -0
  263. package/dist/test/unit/external-comparisons.spec.js.map +1 -0
  264. package/dist/test/unit/external-types.spec.d.ts +1 -0
  265. package/dist/test/unit/external-types.spec.js +228 -0
  266. package/dist/test/unit/external-types.spec.js.map +1 -0
  267. package/dist/test/unit/feeds.spec.d.ts +1 -0
  268. package/dist/test/unit/feeds.spec.js +374 -0
  269. package/dist/test/unit/feeds.spec.js.map +1 -0
  270. package/dist/test/unit/fields.spec.d.ts +1 -0
  271. package/dist/test/unit/fields.spec.js +79 -0
  272. package/dist/test/unit/fields.spec.js.map +1 -0
  273. package/dist/test/unit/identifier.spec.d.ts +1 -0
  274. package/dist/test/unit/identifier.spec.js +50 -0
  275. package/dist/test/unit/identifier.spec.js.map +1 -0
  276. package/dist/test/unit/payload.spec.d.ts +1 -0
  277. package/dist/test/unit/payload.spec.js +278 -0
  278. package/dist/test/unit/payload.spec.js.map +1 -0
  279. package/dist/test/unit/pipeline-aggregate.spec.d.ts +1 -0
  280. package/dist/test/unit/pipeline-aggregate.spec.js +199 -0
  281. package/dist/test/unit/pipeline-aggregate.spec.js.map +1 -0
  282. package/dist/test/unit/pipeline-fixture.d.ts +79 -0
  283. package/dist/test/unit/pipeline-fixture.js +277 -0
  284. package/dist/test/unit/pipeline-fixture.js.map +1 -0
  285. package/dist/test/unit/pipeline-group.spec.d.ts +1 -0
  286. package/dist/test/unit/pipeline-group.spec.js +390 -0
  287. package/dist/test/unit/pipeline-group.spec.js.map +1 -0
  288. package/dist/test/unit/pipeline-join.spec.d.ts +1 -0
  289. package/dist/test/unit/pipeline-join.spec.js +165 -0
  290. package/dist/test/unit/pipeline-join.spec.js.map +1 -0
  291. package/dist/test/unit/pipeline-lookup.spec.d.ts +1 -0
  292. package/dist/test/unit/pipeline-lookup.spec.js +268 -0
  293. package/dist/test/unit/pipeline-lookup.spec.js.map +1 -0
  294. package/dist/test/unit/pipeline-projection.spec.d.ts +1 -0
  295. package/dist/test/unit/pipeline-projection.spec.js +183 -0
  296. package/dist/test/unit/pipeline-projection.spec.js.map +1 -0
  297. package/dist/test/unit/pipeline-rows.spec.d.ts +1 -0
  298. package/dist/test/unit/pipeline-rows.spec.js +321 -0
  299. package/dist/test/unit/pipeline-rows.spec.js.map +1 -0
  300. package/dist/test/unit/pipeline-selection.spec.d.ts +1 -0
  301. package/dist/test/unit/pipeline-selection.spec.js +257 -0
  302. package/dist/test/unit/pipeline-selection.spec.js.map +1 -0
  303. package/dist/test/unit/pipeline-stages.spec.d.ts +1 -0
  304. package/dist/test/unit/pipeline-stages.spec.js +226 -0
  305. package/dist/test/unit/pipeline-stages.spec.js.map +1 -0
  306. package/dist/test/unit/pipeline.spec.d.ts +1 -0
  307. package/dist/test/unit/pipeline.spec.js +72 -0
  308. package/dist/test/unit/pipeline.spec.js.map +1 -0
  309. package/dist/test/unit/query.spec.d.ts +1 -0
  310. package/dist/test/unit/query.spec.js +212 -0
  311. package/dist/test/unit/query.spec.js.map +1 -0
  312. package/dist/test/unit/reaper.spec.d.ts +1 -0
  313. package/dist/test/unit/reaper.spec.js +122 -0
  314. package/dist/test/unit/reaper.spec.js.map +1 -0
  315. package/dist/test/unit/relation.spec.d.ts +1 -0
  316. package/dist/test/unit/relation.spec.js +348 -0
  317. package/dist/test/unit/relation.spec.js.map +1 -0
  318. package/dist/test/unit/result.spec.d.ts +1 -0
  319. package/dist/test/unit/result.spec.js +128 -0
  320. package/dist/test/unit/result.spec.js.map +1 -0
  321. package/dist/test/unit/row-source.spec.d.ts +1 -0
  322. package/dist/test/unit/row-source.spec.js +141 -0
  323. package/dist/test/unit/row-source.spec.js.map +1 -0
  324. package/dist/test/unit/schema.spec.d.ts +1 -0
  325. package/dist/test/unit/schema.spec.js +44 -0
  326. package/dist/test/unit/schema.spec.js.map +1 -0
  327. package/dist/test/unit/selection.spec.d.ts +1 -0
  328. package/dist/test/unit/selection.spec.js +182 -0
  329. package/dist/test/unit/selection.spec.js.map +1 -0
  330. package/dist/test/unit/spec-fixture.d.ts +11 -0
  331. package/dist/test/unit/spec-fixture.js +71 -0
  332. package/dist/test/unit/spec-fixture.js.map +1 -0
  333. package/dist/test/unit/sql.spec.d.ts +1 -0
  334. package/dist/test/unit/sql.spec.js +38 -0
  335. package/dist/test/unit/sql.spec.js.map +1 -0
  336. package/dist/test/unit/subquery.spec.d.ts +1 -0
  337. package/dist/test/unit/subquery.spec.js +154 -0
  338. package/dist/test/unit/subquery.spec.js.map +1 -0
  339. package/dist/test/unit/types.spec.d.ts +1 -0
  340. package/dist/test/unit/types.spec.js +39 -0
  341. package/dist/test/unit/types.spec.js.map +1 -0
  342. package/dist/test/unit/utils.spec.d.ts +1 -0
  343. package/dist/test/unit/utils.spec.js +22 -0
  344. package/dist/test/unit/utils.spec.js.map +1 -0
  345. package/dist/test/unit/value.spec.d.ts +1 -0
  346. package/dist/test/unit/value.spec.js +195 -0
  347. package/dist/test/unit/value.spec.js.map +1 -0
  348. package/dist/test/unit/writes-atomic.spec.d.ts +1 -0
  349. package/dist/test/unit/writes-atomic.spec.js +66 -0
  350. package/dist/test/unit/writes-atomic.spec.js.map +1 -0
  351. package/dist/test/unit/writes-insert.spec.d.ts +1 -0
  352. package/dist/test/unit/writes-insert.spec.js +270 -0
  353. package/dist/test/unit/writes-insert.spec.js.map +1 -0
  354. package/dist/test/unit/writes-replace.spec.d.ts +1 -0
  355. package/dist/test/unit/writes-replace.spec.js +100 -0
  356. package/dist/test/unit/writes-replace.spec.js.map +1 -0
  357. package/dist/test/unit/writes-target.spec.d.ts +1 -0
  358. package/dist/test/unit/writes-target.spec.js +118 -0
  359. package/dist/test/unit/writes-target.spec.js.map +1 -0
  360. package/dist/test/unit/writes-update.spec.d.ts +1 -0
  361. package/dist/test/unit/writes-update.spec.js +297 -0
  362. package/dist/test/unit/writes-update.spec.js.map +1 -0
  363. package/dist/test-external/catalog.test.d.ts +1 -0
  364. package/dist/test-external/catalog.test.js +348 -0
  365. package/dist/test-external/catalog.test.js.map +1 -0
  366. package/dist/test-external/fixture.d.ts +7 -0
  367. package/dist/test-external/fixture.js +163 -0
  368. package/dist/test-external/fixture.js.map +1 -0
  369. package/dist/test-external/native.test.d.ts +1 -0
  370. package/dist/test-external/native.test.js +132 -0
  371. package/dist/test-external/native.test.js.map +1 -0
  372. package/dist/test-external/reads.test.d.ts +1 -0
  373. package/dist/test-external/reads.test.js +232 -0
  374. package/dist/test-external/reads.test.js.map +1 -0
  375. package/dist/test-external/refusals.test.d.ts +1 -0
  376. package/dist/test-external/refusals.test.js +93 -0
  377. package/dist/test-external/refusals.test.js.map +1 -0
  378. package/dist/test-external/registration.test.d.ts +1 -0
  379. package/dist/test-external/registration.test.js +127 -0
  380. package/dist/test-external/registration.test.js.map +1 -0
  381. package/dist/test-external/sales.d.ts +5 -0
  382. package/dist/test-external/sales.js +126 -0
  383. package/dist/test-external/sales.js.map +1 -0
  384. package/dist/test-external/startup.test.d.ts +1 -0
  385. package/dist/test-external/startup.test.js +15 -0
  386. package/dist/test-external/startup.test.js.map +1 -0
  387. package/dist/test-external/writes.test.d.ts +1 -0
  388. package/dist/test-external/writes.test.js +315 -0
  389. package/dist/test-external/writes.test.js.map +1 -0
  390. package/package.json +77 -7
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Profiled = Profiled;
4
+ exports.ProfileColumn = ProfileColumn;
5
+ const external_measures_1 = require("./external-measures");
6
+ const external_sample_1 = require("./external-sample");
7
+ const external_declarations_1 = require("./external-declarations");
8
+ const external_types_1 = require("./external-types");
9
+ const sql_1 = require("./sql");
10
+ const CATEGORY_LIMIT = 25;
11
+ const CATEGORY_MIN_ROWS = 5;
12
+ const ENUM_LIKE_MIN_ROWS = 100;
13
+ const MONTH_LIMIT = 36;
14
+ const LABEL_DISTINCT_SHARE = 0.9;
15
+ const LABEL_MAX_LENGTH = 80;
16
+ const TIME_AXIS_FILLED_SHARE = 0.9;
17
+ const TIME_AXIS_MIN_MONTHS = 3;
18
+ const MONTHS_PER_YEAR = 12;
19
+ const TEXT_FAMILIES = ["text", "citext", "bpchar"];
20
+ const CATEGORY_FAMILIES = [
21
+ ...TEXT_FAMILIES,
22
+ "enum",
23
+ "int",
24
+ "int8",
25
+ "bool",
26
+ ];
27
+ const RANGED_KINDS = ["float", "timestamp"];
28
+ const DISTINCT_KINDS = [
29
+ "text",
30
+ "float",
31
+ "bool",
32
+ "timestamp",
33
+ ];
34
+ function Profiled(column) {
35
+ const family = (0, external_types_1.FamilyOf)(column);
36
+ const [proposed] = (0, external_declarations_1.AcceptedDeclarations)(column);
37
+ if (!family || !proposed) {
38
+ return undefined;
39
+ }
40
+ return {
41
+ name: column.name,
42
+ family,
43
+ kind: proposed.kind,
44
+ quoted: `${external_sample_1.SOURCE_ALIAS}.${(0, sql_1.QuoteIdentifier)(column.name)}`,
45
+ };
46
+ }
47
+ function RangeExpression(column) {
48
+ if (column.family === "enum") {
49
+ return `(${column.quoted})`;
50
+ }
51
+ if (!RANGED_KINDS.includes(column.kind.kind)) {
52
+ return undefined;
53
+ }
54
+ return column.kind.kind === "timestamp"
55
+ ? InstantExpression(column)
56
+ : `(${column.quoted})::float8`;
57
+ }
58
+ const INSTANTS = {
59
+ timestamptz: (column) => column,
60
+ timestamp: (column) => `(${column} AT TIME ZONE 'UTC')`,
61
+ date: (column) => `((${column})::timestamp AT TIME ZONE 'UTC')`,
62
+ };
63
+ function InstantExpression(column) {
64
+ return (INSTANTS[column.family] ?? ((value) => value))(column.quoted);
65
+ }
66
+ function BaseSql(column, source) {
67
+ const range = RangeExpression(column);
68
+ const isText = TEXT_FAMILIES.includes(column.family);
69
+ const length = `length(${column.quoted})`;
70
+ return `SELECT (count(*) - count(${column.quoted}))::float8 AS nulls,
71
+ ${range ? `min(${range})` : "NULL"} AS min, ${range ? `max(${range})` : "NULL"} AS max,
72
+ ${isText ? `min(${length})` : "NULL"}::float8 AS "minLength",
73
+ ${isText ? `avg(${length})` : "NULL"}::float8 AS "avgLength",
74
+ ${isText ? `max(${length})` : "NULL"}::float8 AS "maxLength"
75
+ FROM ${source.from}`;
76
+ }
77
+ function RangeValue(column, row) {
78
+ if (row.min === null || row.max === null) {
79
+ return undefined;
80
+ }
81
+ return { min: RangeEnd(row.min), max: RangeEnd(row.max) };
82
+ }
83
+ function RangeEnd(value) {
84
+ return value instanceof Date ? value.toISOString() : value;
85
+ }
86
+ function LengthValue(row) {
87
+ if (row.minLength === null ||
88
+ row.avgLength === null ||
89
+ row.maxLength === null) {
90
+ return undefined;
91
+ }
92
+ return { min: row.minLength, avg: row.avgLength, max: row.maxLength };
93
+ }
94
+ async function MeasureBase(session, column, source) {
95
+ const measured = await session.measure(BaseSql(column, source));
96
+ const base = { nulls: (0, external_measures_1.FirstRow)(measured, (row) => row.nulls) };
97
+ const row = (0, external_measures_1.ValueOf)(measured)?.[0];
98
+ if (RangeExpression(column)) {
99
+ base.range =
100
+ measured.status === "ok"
101
+ ? Present(row && RangeValue(column, row))
102
+ : measured;
103
+ }
104
+ if (TEXT_FAMILIES.includes(column.family)) {
105
+ base.length =
106
+ measured.status === "ok" ? Present(row && LengthValue(row)) : measured;
107
+ }
108
+ return base;
109
+ }
110
+ function Present(value) {
111
+ return value === undefined
112
+ ? { status: "error", code: "empty" }
113
+ : { status: "ok", value };
114
+ }
115
+ async function MeasureDistinct(session, column, source) {
116
+ if (!DISTINCT_KINDS.includes(column.kind.kind)) {
117
+ return undefined;
118
+ }
119
+ const measured = await session.measure(`SELECT count(DISTINCT ${column.quoted})::float8 AS distinct FROM ${source.from}`);
120
+ return (0, external_measures_1.FirstRow)(measured, (row) => row.distinct);
121
+ }
122
+ const CATEGORY_VALUES = {
123
+ int: (column) => `(${column})::float8`,
124
+ int8: (column) => `(${column})::float8`,
125
+ bool: (column) => column,
126
+ };
127
+ function CategoryValue(column) {
128
+ return (CATEGORY_VALUES[column.family] ?? ((value) => `(${value})::text`))(column.quoted);
129
+ }
130
+ function AsCategories(rows) {
131
+ const named = rows.filter((row) => row.rows >= CATEGORY_MIN_ROWS);
132
+ const other = rows
133
+ .filter((row) => row.rows < CATEGORY_MIN_ROWS)
134
+ .reduce((total, row) => total + row.rows, 0);
135
+ return {
136
+ values: named.map(({ value, rows: count }) => ({ value, rows: count })),
137
+ other,
138
+ };
139
+ }
140
+ async function MeasureCategories(session, column, source, distinct) {
141
+ const isCategorical = column.family === "enum" || (distinct ?? Infinity) <= CATEGORY_LIMIT;
142
+ if (!CATEGORY_FAMILIES.includes(column.family) || !isCategorical) {
143
+ return undefined;
144
+ }
145
+ const measured = await session.measure(`SELECT ${CategoryValue(column)} AS value, count(*)::float8 AS rows FROM ${source.from}
146
+ WHERE ${column.quoted} IS NOT NULL GROUP BY 1 ORDER BY 2 DESC, 1 LIMIT ${CATEGORY_LIMIT + 1}`);
147
+ return (0, external_measures_1.Mapped)(measured, AsCategories);
148
+ }
149
+ async function MeasureMonths(session, column, source) {
150
+ if (column.kind.kind !== "timestamp") {
151
+ return undefined;
152
+ }
153
+ const measured = await session.measure(`SELECT to_char(date_trunc('month', ${InstantExpression(column)} AT TIME ZONE 'UTC'), 'YYYY-MM') AS month,
154
+ count(*)::float8 AS rows FROM ${source.from}
155
+ WHERE ${column.quoted} IS NOT NULL GROUP BY 1 ORDER BY 1 DESC LIMIT ${MONTH_LIMIT}`);
156
+ return (0, external_measures_1.Mapped)(measured, (rows) => rows.reverse());
157
+ }
158
+ function MonthsSpanned(range) {
159
+ const start = new Date(String(range.min));
160
+ const end = new Date(String(range.max));
161
+ return ((end.getUTCFullYear() - start.getUTCFullYear()) * MONTHS_PER_YEAR +
162
+ end.getUTCMonth() -
163
+ start.getUTCMonth() +
164
+ 1);
165
+ }
166
+ function Filled(facts) {
167
+ const nulls = (0, external_measures_1.ValueOf)(facts.profile.nulls);
168
+ return facts.rows === undefined || nulls === undefined
169
+ ? undefined
170
+ : facts.rows - nulls;
171
+ }
172
+ const TRAIT_RULES = {
173
+ "enum-like": (facts) => facts.column.family === "enum" ||
174
+ (CATEGORY_FAMILIES.includes(facts.column.family) &&
175
+ ((0, external_measures_1.ValueOf)(facts.profile.distinct) ?? Infinity) <= CATEGORY_LIMIT &&
176
+ (facts.rows ?? 0) >= ENUM_LIKE_MIN_ROWS),
177
+ "identifier-like": (facts) => (facts.rows ?? 0) > 0 &&
178
+ (0, external_measures_1.ValueOf)(facts.profile.nulls) === 0 &&
179
+ (0, external_measures_1.ValueOf)(facts.profile.distinct) === facts.rows,
180
+ "label-candidate": (facts) => {
181
+ const filled = Filled(facts) ?? 0;
182
+ const distinct = (0, external_measures_1.ValueOf)(facts.profile.distinct) ?? 0;
183
+ const length = (0, external_measures_1.ValueOf)(facts.profile.length);
184
+ return (TEXT_FAMILIES.includes(facts.column.family) &&
185
+ filled > 0 &&
186
+ distinct >= LABEL_DISTINCT_SHARE * filled &&
187
+ length !== undefined &&
188
+ length.avg <= LABEL_MAX_LENGTH);
189
+ },
190
+ "time-axis": (facts) => {
191
+ const range = (0, external_measures_1.ValueOf)(facts.profile.range);
192
+ return (facts.column.kind.kind === "timestamp" &&
193
+ range !== undefined &&
194
+ (Filled(facts) ?? 0) >=
195
+ TIME_AXIS_FILLED_SHARE * (facts.rows ?? Infinity) &&
196
+ MonthsSpanned(range) >= TIME_AXIS_MIN_MONTHS);
197
+ },
198
+ measure: (facts) => facts.column.kind.kind === "float" &&
199
+ !facts.roles.keys.has(facts.column.name) &&
200
+ !facts.roles.references.has(facts.column.name),
201
+ };
202
+ function TraitsOf(facts) {
203
+ return Object.keys(TRAIT_RULES).filter((trait) => TRAIT_RULES[trait](facts));
204
+ }
205
+ async function ProfileColumn(session, column, source, rows, roles) {
206
+ const base = await MeasureBase(session, column, source);
207
+ const distinct = await MeasureDistinct(session, column, source);
208
+ const categories = await MeasureCategories(session, column, source, (0, external_measures_1.ValueOf)(distinct));
209
+ const months = await MeasureMonths(session, column, source);
210
+ const profile = { name: column.name, ...base, traits: [] };
211
+ if (distinct) {
212
+ profile.distinct = distinct;
213
+ }
214
+ if (categories) {
215
+ profile.categories = categories;
216
+ }
217
+ if (months) {
218
+ profile.months = months;
219
+ }
220
+ profile.traits = TraitsOf({ column, profile, rows, roles });
221
+ return profile;
222
+ }
223
+ //# sourceMappingURL=external-column-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-column-profile.js","sourceRoot":"","sources":["../../../src/implementations/database/external-column-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { CatalogColumn } from "./external-catalog";
2
+ import { type SqlType } from "./types";
3
+ export interface AcceptedDeclaration {
4
+ declared: string;
5
+ kind: SqlType;
6
+ lossy?: string;
7
+ }
8
+ export declare function AcceptedDeclarations(column: CatalogColumn): AcceptedDeclaration[];
9
+ export declare function UnsupportedReason(column: CatalogColumn): string;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AcceptedDeclarations = AcceptedDeclarations;
4
+ exports.UnsupportedReason = UnsupportedReason;
5
+ const external_types_1 = require("./external-types");
6
+ const types_1 = require("./types");
7
+ const PROPOSED_KIND = {
8
+ text: types_1.TEXT,
9
+ citext: types_1.TEXT,
10
+ bpchar: types_1.TEXT,
11
+ uuid: types_1.TEXT,
12
+ enum: types_1.TEXT,
13
+ rendered: types_1.TEXT,
14
+ int: types_1.FLOAT,
15
+ int8: types_1.FLOAT,
16
+ numeric: types_1.FLOAT,
17
+ float4: types_1.FLOAT,
18
+ float8: types_1.FLOAT,
19
+ bool: types_1.BOOL,
20
+ timestamptz: types_1.TIMESTAMP,
21
+ timestamp: types_1.TIMESTAMP,
22
+ date: types_1.TIMESTAMP,
23
+ jsonb: types_1.OPAQUE,
24
+ json: types_1.OPAQUE,
25
+ };
26
+ const SCALAR_KINDS = [types_1.TEXT, types_1.FLOAT, types_1.BOOL, types_1.TIMESTAMP, types_1.OPAQUE];
27
+ const FIELD_TOKENS = {
28
+ text: "string",
29
+ float: "number",
30
+ bool: "boolean",
31
+ timestamp: "date",
32
+ json: "object",
33
+ };
34
+ const ARRAY_SUFFIX = "[]";
35
+ function FieldToken(kind) {
36
+ return kind.kind === "array"
37
+ ? `${FieldToken(kind.elem)}${ARRAY_SUFFIX}`
38
+ : FIELD_TOKENS[kind.kind];
39
+ }
40
+ function ProposedFirst(kinds, proposed) {
41
+ return [
42
+ ...kinds.filter((kind) => kind === proposed),
43
+ ...kinds.filter((kind) => kind !== proposed),
44
+ ];
45
+ }
46
+ function CandidateKinds(column) {
47
+ const family = (0, external_types_1.FamilyOf)(column);
48
+ if (family === "array") {
49
+ const element = (0, external_types_1.ElementFamily)(column);
50
+ const proposed = element && element !== "array" ? PROPOSED_KIND[element] : undefined;
51
+ return ProposedFirst([...SCALAR_KINDS], proposed ?? types_1.TEXT).map(types_1.ArrayOf);
52
+ }
53
+ return family ? ProposedFirst([...SCALAR_KINDS], PROPOSED_KIND[family]) : [];
54
+ }
55
+ function AcceptedDeclarations(column) {
56
+ const family = (0, external_types_1.FamilyOf)(column);
57
+ return CandidateKinds(column).flatMap((kind) => {
58
+ const reading = (0, external_types_1.ReadingOf)(kind, family, column);
59
+ return reading
60
+ ? [{ declared: FieldToken(kind), kind, lossy: reading.lossy }]
61
+ : [];
62
+ });
63
+ }
64
+ function UnsupportedReason(column) {
65
+ return `no field type reads a ${column.native} column`;
66
+ }
67
+ //# sourceMappingURL=external-declarations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-declarations.js","sourceRoot":"","sources":["../../../src/implementations/database/external-declarations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { CatalogInfo, EstimateSource, Reference, RelationDescription, RelationKey, RelationSummary } from "@antelopejs/interface-database-catalog";
2
+ import { type CatalogColumn, type CatalogIndex } from "./external-catalog";
3
+ export interface RelationRow {
4
+ oid: number;
5
+ schema: string;
6
+ name: string;
7
+ kind: string;
8
+ readable: boolean;
9
+ someColumns: boolean;
10
+ insert: boolean;
11
+ update: boolean;
12
+ delete: boolean;
13
+ analyzed: boolean;
14
+ statistics: number | null;
15
+ liveTuples: number | null;
16
+ comment: string | null;
17
+ }
18
+ interface ReferenceRow {
19
+ name: string;
20
+ fromRelation: string;
21
+ fromColumns: string[];
22
+ toRelation: string;
23
+ toColumns: string[];
24
+ }
25
+ export declare function RelationName(row: RelationRow): string;
26
+ export declare function ReadInfo(): Promise<CatalogInfo>;
27
+ export declare function ReadRelationRows(schemas?: string[]): Promise<RelationRow[]>;
28
+ export declare function ReadNamedRelationRows(relations: string[]): Promise<RelationRow[]>;
29
+ interface Estimate {
30
+ estimatedRows: number | null;
31
+ estimate: EstimateSource | null;
32
+ }
33
+ export declare function EstimateOf(row: RelationRow): Promise<Estimate>;
34
+ export declare function KeyFrom(indexes: CatalogIndex[], columns: CatalogColumn[]): RelationKey | null;
35
+ export declare function Summarize(row: RelationRow): Promise<RelationSummary>;
36
+ export declare function ReferenceOf(row: ReferenceRow): Reference;
37
+ export declare function ReadReferences(oid: number): Promise<ReferenceRow[]>;
38
+ export declare function DescribeRow(row: RelationRow): Promise<RelationDescription>;
39
+ export {};
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RelationName = RelationName;
4
+ exports.ReadInfo = ReadInfo;
5
+ exports.ReadRelationRows = ReadRelationRows;
6
+ exports.ReadNamedRelationRows = ReadNamedRelationRows;
7
+ exports.EstimateOf = EstimateOf;
8
+ exports.KeyFrom = KeyFrom;
9
+ exports.Summarize = Summarize;
10
+ exports.ReferenceOf = ReferenceOf;
11
+ exports.ReadReferences = ReadReferences;
12
+ exports.DescribeRow = DescribeRow;
13
+ const connection_1 = require("../../connection");
14
+ const external_catalog_1 = require("./external-catalog");
15
+ const external_declarations_1 = require("./external-declarations");
16
+ const external_types_1 = require("./external-types");
17
+ const identifier_1 = require("./identifier");
18
+ const ENGINE = "postgresql";
19
+ const SYSTEM_SCHEMAS = "('pg_catalog', 'information_schema')";
20
+ const RELATIONS_SQL = `
21
+ WITH leaves AS (
22
+ SELECT c.oid, coalesce(sum(CASE WHEN l.reltuples >= 0 THEN l.reltuples END), 0) AS statistics,
23
+ coalesce(sum(s.n_live_tup), 0) AS live, bool_and(l.reltuples >= 0) AS analyzed
24
+ FROM pg_class c
25
+ JOIN LATERAL pg_partition_tree(c.oid) t ON t.isleaf
26
+ JOIN pg_class l ON l.oid = t.relid
27
+ LEFT JOIN pg_stat_all_tables s ON s.relid = l.oid
28
+ WHERE c.relkind = 'p'
29
+ GROUP BY c.oid
30
+ )
31
+ SELECT c.oid, n.nspname AS schema, c.relname AS name, c.relkind AS kind,
32
+ has_table_privilege(c.oid, 'SELECT') AS readable,
33
+ has_any_column_privilege(c.oid, 'SELECT') AS "someColumns",
34
+ has_table_privilege(c.oid, 'INSERT') AS insert,
35
+ has_table_privilege(c.oid, 'UPDATE') AS update,
36
+ has_table_privilege(c.oid, 'DELETE') AS delete,
37
+ coalesce(p.analyzed, c.reltuples >= 0) AS analyzed,
38
+ coalesce(p.statistics, CASE WHEN c.reltuples >= 0 THEN c.reltuples END)::float8 AS statistics,
39
+ coalesce(p.live, s.n_live_tup)::float8 AS "liveTuples",
40
+ obj_description(c.oid, 'pg_class') AS comment
41
+ FROM pg_class c
42
+ JOIN pg_namespace n ON n.oid = c.relnamespace
43
+ LEFT JOIN pg_stat_all_tables s ON s.relid = c.oid
44
+ LEFT JOIN leaves p ON p.oid = c.oid
45
+ WHERE c.relkind IN ${external_catalog_1.RELATION_KINDS} AND NOT c.relispartition
46
+ AND n.nspname NOT IN ${SYSTEM_SCHEMAS}
47
+ AND n.nspname NOT LIKE 'pg\\_%'
48
+ AND has_schema_privilege(n.oid, 'USAGE')
49
+ AND ($1::text[] IS NULL OR n.nspname = ANY($1::text[]))
50
+ ORDER BY n.nspname, c.relname`;
51
+ const NAMED_RELATIONS_SQL = RELATIONS_SQL.replace("AND ($1::text[] IS NULL OR n.nspname = ANY($1::text[]))", "AND (n.nspname || '.' || c.relname) = ANY($1::text[])");
52
+ const COLUMN_LIST = (relation, keys) => `ARRAY(
53
+ SELECT a.attname::text FROM unnest(con.${keys}) WITH ORDINALITY k(n, o)
54
+ JOIN pg_attribute a ON a.attrelid = con.${relation} AND a.attnum = k.n
55
+ ORDER BY k.o
56
+ )`;
57
+ const REFERENCES_SQL = `
58
+ SELECT con.conname AS name,
59
+ fn.nspname || '.' || fc.relname AS "fromRelation", ${COLUMN_LIST("conrelid", "conkey")} AS "fromColumns",
60
+ tn.nspname || '.' || tc.relname AS "toRelation", ${COLUMN_LIST("confrelid", "confkey")} AS "toColumns"
61
+ FROM pg_constraint con
62
+ JOIN pg_class fc ON fc.oid = con.conrelid
63
+ JOIN pg_namespace fn ON fn.oid = fc.relnamespace
64
+ JOIN pg_class tc ON tc.oid = con.confrelid
65
+ JOIN pg_namespace tn ON tn.oid = tc.relnamespace
66
+ WHERE con.contype = 'f' AND con.conparentid = 0 AND (con.conrelid = $1 OR con.confrelid = $1)
67
+ ORDER BY con.conname`;
68
+ const INFO_SQL = `
69
+ SELECT current_setting('server_version') AS version, current_database() AS database,
70
+ current_user AS role`;
71
+ const KINDS = {
72
+ r: "table",
73
+ p: "partitioned",
74
+ v: "view",
75
+ m: "materialized",
76
+ f: "foreign",
77
+ };
78
+ const PARTIAL_GRANTS = "SELECT is granted on some of its columns only";
79
+ const NOT_READABLE = "the connected role cannot SELECT from it";
80
+ function RelationName(row) {
81
+ return `${row.schema}.${row.name}`;
82
+ }
83
+ async function ReadInfo() {
84
+ const [row] = (await (0, connection_1.Query)(INFO_SQL)).rows;
85
+ return { engine: ENGINE, ...row };
86
+ }
87
+ async function ReadRelationRows(schemas) {
88
+ return (await (0, connection_1.Query)(RELATIONS_SQL, [schemas ?? null])).rows;
89
+ }
90
+ async function ReadNamedRelationRows(relations) {
91
+ return (await (0, connection_1.Query)(NAMED_RELATIONS_SQL, [relations])).rows;
92
+ }
93
+ async function PlannedRows(row) {
94
+ try {
95
+ const sql = `EXPLAIN (FORMAT JSON) SELECT * FROM ${(0, identifier_1.QualifiedName)(row.schema, row.name)}`;
96
+ const [plan] = (await (0, connection_1.Query)(sql)).rows;
97
+ return plan["QUERY PLAN"][0].Plan["Plan Rows"];
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ }
103
+ async function EstimateOf(row) {
104
+ if (row.analyzed && row.statistics !== null) {
105
+ return { estimatedRows: row.statistics, estimate: "statistics" };
106
+ }
107
+ if (row.liveTuples !== null) {
108
+ return { estimatedRows: row.liveTuples, estimate: "live-tuples" };
109
+ }
110
+ if (!row.readable) {
111
+ return { estimatedRows: null, estimate: null };
112
+ }
113
+ const planned = await PlannedRows(row);
114
+ return planned === null
115
+ ? { estimatedRows: null, estimate: null }
116
+ : { estimatedRows: planned, estimate: "plan" };
117
+ }
118
+ function UnmappableReason(row) {
119
+ if (row.readable) {
120
+ return undefined;
121
+ }
122
+ return row.someColumns ? PARTIAL_GRANTS : NOT_READABLE;
123
+ }
124
+ function KeyFrom(indexes, columns) {
125
+ const key = (0, external_catalog_1.KeyOf)(indexes);
126
+ const byName = new Map(columns.map((column) => [column.name, column]));
127
+ if (!key || !(0, external_types_1.DescribeKeyColumns)(key.columns, byName)) {
128
+ return null;
129
+ }
130
+ return { columns: key.columns, source: key.primary ? "primary" : "unique" };
131
+ }
132
+ async function SummaryOf(row, key) {
133
+ return {
134
+ schema: row.schema,
135
+ name: row.name,
136
+ kind: KINDS[row.kind],
137
+ ...(await EstimateOf(row)),
138
+ key,
139
+ unmappable: UnmappableReason(row),
140
+ writes: { insert: row.insert, update: row.update, delete: row.delete },
141
+ comment: row.comment,
142
+ };
143
+ }
144
+ async function Summarize(row) {
145
+ const [columns, indexes] = await Promise.all([
146
+ (0, external_catalog_1.ReadColumns)(row.oid),
147
+ (0, external_catalog_1.ReadIndexes)(row.oid),
148
+ ]);
149
+ return SummaryOf(row, KeyFrom(indexes, columns));
150
+ }
151
+ function ReadOnlyOf(column, path) {
152
+ const [proposed] = (0, external_declarations_1.AcceptedDeclarations)(column);
153
+ if (!proposed) {
154
+ return undefined;
155
+ }
156
+ const descriptor = (0, external_types_1.Describe)(column.name, proposed.kind, column, path);
157
+ return (0, external_types_1.IsReadOnly)(descriptor) ? (0, external_types_1.ReadOnlyReason)(descriptor) : undefined;
158
+ }
159
+ const IDENTITIES = {
160
+ a: "always",
161
+ d: "by default",
162
+ };
163
+ function DescribeColumn(column, relation) {
164
+ const accepts = (0, external_declarations_1.AcceptedDeclarations)(column).map(({ declared, lossy }) => lossy ? { declared, lossy } : { declared });
165
+ const described = {
166
+ name: column.name,
167
+ native: column.native,
168
+ nullable: !column.notNull,
169
+ hasDefault: column.hasDefault,
170
+ generated: column.generated,
171
+ identity: IDENTITIES[column.identity] ?? null,
172
+ accepts,
173
+ comment: column.comment,
174
+ };
175
+ if (column.enumLabels) {
176
+ described.enumLabels = column.enumLabels;
177
+ }
178
+ if (accepts.length === 0) {
179
+ described.unsupported = (0, external_declarations_1.UnsupportedReason)(column);
180
+ }
181
+ const readOnly = ReadOnlyOf(column, `${relation}.${column.name}`);
182
+ if (readOnly) {
183
+ described.readOnly = readOnly;
184
+ }
185
+ return described;
186
+ }
187
+ function IndexOf(index) {
188
+ return { name: index.name, columns: index.columns, unique: index.unique };
189
+ }
190
+ function ReferenceOf(row) {
191
+ return {
192
+ name: row.name,
193
+ from: { relation: row.fromRelation, columns: row.fromColumns },
194
+ to: { relation: row.toRelation, columns: row.toColumns },
195
+ };
196
+ }
197
+ async function ReadReferences(oid) {
198
+ return (await (0, connection_1.Query)(REFERENCES_SQL, [oid])).rows;
199
+ }
200
+ async function DescribeRow(row) {
201
+ const relation = RelationName(row);
202
+ const [columns, indexes, references] = await Promise.all([
203
+ (0, external_catalog_1.ReadColumns)(row.oid),
204
+ (0, external_catalog_1.ReadIndexes)(row.oid),
205
+ ReadReferences(row.oid),
206
+ ]);
207
+ return {
208
+ ...(await SummaryOf(row, KeyFrom(indexes, columns))),
209
+ columns: columns.map((column) => DescribeColumn(column, relation)),
210
+ indexes: indexes.filter((index) => index.columns.length > 0).map(IndexOf),
211
+ references: references
212
+ .filter((reference) => reference.fromRelation === relation)
213
+ .map(ReferenceOf),
214
+ referencedBy: references
215
+ .filter((reference) => reference.toRelation === relation)
216
+ .map(ReferenceOf),
217
+ };
218
+ }
219
+ //# sourceMappingURL=external-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-discovery.js","sourceRoot":"","sources":["../../../src/implementations/database/external-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ExternalRelation } from "./fields";
2
+ export type ExternalWriteErrorKind = "invalid" | "missing" | "duplicate" | "reference" | "referenced" | "check" | "forbidden";
3
+ export declare class ExternalWriteError extends Error {
4
+ readonly kind: ExternalWriteErrorKind;
5
+ readonly fields: string[];
6
+ readonly constraint?: string;
7
+ readonly code?: string;
8
+ readonly detail?: string;
9
+ constructor(message: string, facts: ExternalWriteFacts);
10
+ }
11
+ interface ExternalWriteFacts {
12
+ kind: ExternalWriteErrorKind;
13
+ fields?: string[];
14
+ constraint?: string;
15
+ code?: string;
16
+ detail?: string;
17
+ }
18
+ export declare function ExternalWriteFailure(err: unknown, external: ExternalRelation): unknown;
19
+ export declare function InvalidValues(failures: string[]): ExternalWriteError;
20
+ export {};