@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.
- package/LICENSE +190 -0
- package/README.md +152 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.js +91 -0
- package/dist/config.js.map +1 -0
- package/dist/connection.d.ts +14 -0
- package/dist/connection.js +128 -0
- package/dist/connection.js.map +1 -0
- package/dist/implementations/catalog/index.d.ts +7 -0
- package/dist/implementations/catalog/index.js +60 -0
- package/dist/implementations/catalog/index.js.map +1 -0
- package/dist/implementations/database/changes.d.ts +19 -0
- package/dist/implementations/database/changes.js +100 -0
- package/dist/implementations/database/changes.js.map +1 -0
- package/dist/implementations/database/coerce.d.ts +15 -0
- package/dist/implementations/database/coerce.js +195 -0
- package/dist/implementations/database/coerce.js.map +1 -0
- package/dist/implementations/database/context.d.ts +32 -0
- package/dist/implementations/database/context.js +50 -0
- package/dist/implementations/database/context.js.map +1 -0
- package/dist/implementations/database/cursors.d.ts +16 -0
- package/dist/implementations/database/cursors.js +269 -0
- package/dist/implementations/database/cursors.js.map +1 -0
- package/dist/implementations/database/ddl.d.ts +62 -0
- package/dist/implementations/database/ddl.js +355 -0
- package/dist/implementations/database/ddl.js.map +1 -0
- package/dist/implementations/database/expression.d.ts +7 -0
- package/dist/implementations/database/expression.js +30 -0
- package/dist/implementations/database/expression.js.map +1 -0
- package/dist/implementations/database/external-catalog.d.ts +37 -0
- package/dist/implementations/database/external-catalog.js +96 -0
- package/dist/implementations/database/external-catalog.js.map +1 -0
- package/dist/implementations/database/external-column-profile.d.ts +18 -0
- package/dist/implementations/database/external-column-profile.js +223 -0
- package/dist/implementations/database/external-column-profile.js.map +1 -0
- package/dist/implementations/database/external-declarations.d.ts +9 -0
- package/dist/implementations/database/external-declarations.js +67 -0
- package/dist/implementations/database/external-declarations.js.map +1 -0
- package/dist/implementations/database/external-discovery.d.ts +39 -0
- package/dist/implementations/database/external-discovery.js +219 -0
- package/dist/implementations/database/external-discovery.js.map +1 -0
- package/dist/implementations/database/external-errors.d.ts +20 -0
- package/dist/implementations/database/external-errors.js +67 -0
- package/dist/implementations/database/external-errors.js.map +1 -0
- package/dist/implementations/database/external-measures.d.ts +11 -0
- package/dist/implementations/database/external-measures.js +82 -0
- package/dist/implementations/database/external-measures.js.map +1 -0
- package/dist/implementations/database/external-payload.d.ts +32 -0
- package/dist/implementations/database/external-payload.js +206 -0
- package/dist/implementations/database/external-payload.js.map +1 -0
- package/dist/implementations/database/external-profile.d.ts +4 -0
- package/dist/implementations/database/external-profile.js +129 -0
- package/dist/implementations/database/external-profile.js.map +1 -0
- package/dist/implementations/database/external-reference.d.ts +2 -0
- package/dist/implementations/database/external-reference.js +49 -0
- package/dist/implementations/database/external-reference.js.map +1 -0
- package/dist/implementations/database/external-refusals.d.ts +5 -0
- package/dist/implementations/database/external-refusals.js +23 -0
- package/dist/implementations/database/external-refusals.js.map +1 -0
- package/dist/implementations/database/external-rows.d.ts +2 -0
- package/dist/implementations/database/external-rows.js +81 -0
- package/dist/implementations/database/external-rows.js.map +1 -0
- package/dist/implementations/database/external-sample.d.ts +9 -0
- package/dist/implementations/database/external-sample.js +29 -0
- package/dist/implementations/database/external-sample.js.map +1 -0
- package/dist/implementations/database/external-schema.d.ts +3 -0
- package/dist/implementations/database/external-schema.js +111 -0
- package/dist/implementations/database/external-schema.js.map +1 -0
- package/dist/implementations/database/external-types.d.ts +37 -0
- package/dist/implementations/database/external-types.js +387 -0
- package/dist/implementations/database/external-types.js.map +1 -0
- package/dist/implementations/database/external-writes.d.ts +3 -0
- package/dist/implementations/database/external-writes.js +298 -0
- package/dist/implementations/database/external-writes.js.map +1 -0
- package/dist/implementations/database/feed-pipeline.d.ts +12 -0
- package/dist/implementations/database/feed-pipeline.js +92 -0
- package/dist/implementations/database/feed-pipeline.js.map +1 -0
- package/dist/implementations/database/feeds.d.ts +34 -0
- package/dist/implementations/database/feeds.js +338 -0
- package/dist/implementations/database/feeds.js.map +1 -0
- package/dist/implementations/database/fields.d.ts +37 -0
- package/dist/implementations/database/fields.js +114 -0
- package/dist/implementations/database/fields.js.map +1 -0
- package/dist/implementations/database/identifier.d.ts +8 -0
- package/dist/implementations/database/identifier.js +62 -0
- package/dist/implementations/database/identifier.js.map +1 -0
- package/dist/implementations/database/instances.d.ts +4 -0
- package/dist/implementations/database/instances.js +57 -0
- package/dist/implementations/database/instances.js.map +1 -0
- package/dist/implementations/database/introspect.d.ts +3 -0
- package/dist/implementations/database/introspect.js +36 -0
- package/dist/implementations/database/introspect.js.map +1 -0
- package/dist/implementations/database/jsonb.d.ts +29 -0
- package/dist/implementations/database/jsonb.js +54 -0
- package/dist/implementations/database/jsonb.js.map +1 -0
- package/dist/implementations/database/listener.d.ts +3 -0
- package/dist/implementations/database/listener.js +93 -0
- package/dist/implementations/database/listener.js.map +1 -0
- package/dist/implementations/database/migrate.d.ts +6 -0
- package/dist/implementations/database/migrate.js +282 -0
- package/dist/implementations/database/migrate.js.map +1 -0
- package/dist/implementations/database/payload.d.ts +24 -0
- package/dist/implementations/database/payload.js +113 -0
- package/dist/implementations/database/payload.js.map +1 -0
- package/dist/implementations/database/pipeline.d.ts +10 -0
- package/dist/implementations/database/pipeline.js +56 -0
- package/dist/implementations/database/pipeline.js.map +1 -0
- package/dist/implementations/database/query.d.ts +11 -0
- package/dist/implementations/database/query.js +189 -0
- package/dist/implementations/database/query.js.map +1 -0
- package/dist/implementations/database/readings.d.ts +17 -0
- package/dist/implementations/database/readings.js +133 -0
- package/dist/implementations/database/readings.js.map +1 -0
- package/dist/implementations/database/reaper.d.ts +6 -0
- package/dist/implementations/database/reaper.js +121 -0
- package/dist/implementations/database/reaper.js.map +1 -0
- package/dist/implementations/database/relation.d.ts +65 -0
- package/dist/implementations/database/relation.js +237 -0
- package/dist/implementations/database/relation.js.map +1 -0
- package/dist/implementations/database/result.d.ts +4 -0
- package/dist/implementations/database/result.js +70 -0
- package/dist/implementations/database/result.js.map +1 -0
- package/dist/implementations/database/row-source.d.ts +64 -0
- package/dist/implementations/database/row-source.js +279 -0
- package/dist/implementations/database/row-source.js.map +1 -0
- package/dist/implementations/database/schema.d.ts +15 -0
- package/dist/implementations/database/schema.js +143 -0
- package/dist/implementations/database/schema.js.map +1 -0
- package/dist/implementations/database/selection.d.ts +18 -0
- package/dist/implementations/database/selection.js +129 -0
- package/dist/implementations/database/selection.js.map +1 -0
- package/dist/implementations/database/sql.d.ts +24 -0
- package/dist/implementations/database/sql.js +48 -0
- package/dist/implementations/database/sql.js.map +1 -0
- package/dist/implementations/database/stage.d.ts +22 -0
- package/dist/implementations/database/stage.js +76 -0
- package/dist/implementations/database/stage.js.map +1 -0
- package/dist/implementations/database/stages-aggregate.d.ts +11 -0
- package/dist/implementations/database/stages-aggregate.js +112 -0
- package/dist/implementations/database/stages-aggregate.js.map +1 -0
- package/dist/implementations/database/stages-array.d.ts +2 -0
- package/dist/implementations/database/stages-array.js +162 -0
- package/dist/implementations/database/stages-array.js.map +1 -0
- package/dist/implementations/database/stages-core.d.ts +2 -0
- package/dist/implementations/database/stages-core.js +107 -0
- package/dist/implementations/database/stages-core.js.map +1 -0
- package/dist/implementations/database/stages-date.d.ts +2 -0
- package/dist/implementations/database/stages-date.js +65 -0
- package/dist/implementations/database/stages-date.js.map +1 -0
- package/dist/implementations/database/stages-group.d.ts +5 -0
- package/dist/implementations/database/stages-group.js +151 -0
- package/dist/implementations/database/stages-group.js.map +1 -0
- package/dist/implementations/database/stages-join.d.ts +2 -0
- package/dist/implementations/database/stages-join.js +162 -0
- package/dist/implementations/database/stages-join.js.map +1 -0
- package/dist/implementations/database/stages-numeric.d.ts +2 -0
- package/dist/implementations/database/stages-numeric.js +152 -0
- package/dist/implementations/database/stages-numeric.js.map +1 -0
- package/dist/implementations/database/stages-object.d.ts +2 -0
- package/dist/implementations/database/stages-object.js +81 -0
- package/dist/implementations/database/stages-object.js.map +1 -0
- package/dist/implementations/database/stages-projection.d.ts +2 -0
- package/dist/implementations/database/stages-projection.js +75 -0
- package/dist/implementations/database/stages-projection.js.map +1 -0
- package/dist/implementations/database/stages-rows.d.ts +2 -0
- package/dist/implementations/database/stages-rows.js +101 -0
- package/dist/implementations/database/stages-rows.js.map +1 -0
- package/dist/implementations/database/stages-selection.d.ts +2 -0
- package/dist/implementations/database/stages-selection.js +146 -0
- package/dist/implementations/database/stages-selection.js.map +1 -0
- package/dist/implementations/database/stages-string.d.ts +2 -0
- package/dist/implementations/database/stages-string.js +101 -0
- package/dist/implementations/database/stages-string.js.map +1 -0
- package/dist/implementations/database/subquery.d.ts +4 -0
- package/dist/implementations/database/subquery.js +49 -0
- package/dist/implementations/database/subquery.js.map +1 -0
- package/dist/implementations/database/types.d.ts +37 -0
- package/dist/implementations/database/types.js +57 -0
- package/dist/implementations/database/types.js.map +1 -0
- package/dist/implementations/database/utils.d.ts +16 -0
- package/dist/implementations/database/utils.js +38 -0
- package/dist/implementations/database/utils.js.map +1 -0
- package/dist/implementations/database/value.d.ts +10 -0
- package/dist/implementations/database/value.js +153 -0
- package/dist/implementations/database/value.js.map +1 -0
- package/dist/implementations/database/writes-atomic.d.ts +6 -0
- package/dist/implementations/database/writes-atomic.js +93 -0
- package/dist/implementations/database/writes-atomic.js.map +1 -0
- package/dist/implementations/database/writes-identity.d.ts +4 -0
- package/dist/implementations/database/writes-identity.js +181 -0
- package/dist/implementations/database/writes-identity.js.map +1 -0
- package/dist/implementations/database/writes-insert.d.ts +2 -0
- package/dist/implementations/database/writes-insert.js +136 -0
- package/dist/implementations/database/writes-insert.js.map +1 -0
- package/dist/implementations/database/writes-shared.d.ts +36 -0
- package/dist/implementations/database/writes-shared.js +64 -0
- package/dist/implementations/database/writes-shared.js.map +1 -0
- package/dist/implementations/database/writes.d.ts +16 -0
- package/dist/implementations/database/writes.js +52 -0
- package/dist/implementations/database/writes.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +2 -0
- package/dist/logger.js +6 -0
- package/dist/logger.js.map +1 -0
- package/dist/test/antelope.test.d.ts +2 -0
- package/dist/test/antelope.test.js +89 -0
- package/dist/test/antelope.test.js.map +1 -0
- package/dist/test/atomic.test.d.ts +1 -0
- package/dist/test/atomic.test.js +132 -0
- package/dist/test/atomic.test.js.map +1 -0
- package/dist/test/catalog-owned.test.d.ts +1 -0
- package/dist/test/catalog-owned.test.js +17 -0
- package/dist/test/catalog-owned.test.js.map +1 -0
- package/dist/test/contention.test.d.ts +1 -0
- package/dist/test/contention.test.js +183 -0
- package/dist/test/contention.test.js.map +1 -0
- package/dist/test/indexes.test.d.ts +1 -0
- package/dist/test/indexes.test.js +311 -0
- package/dist/test/indexes.test.js.map +1 -0
- package/dist/test/unit/changes.spec.d.ts +1 -0
- package/dist/test/unit/changes.spec.js +103 -0
- package/dist/test/unit/changes.spec.js.map +1 -0
- package/dist/test/unit/coerce.spec.d.ts +1 -0
- package/dist/test/unit/coerce.spec.js +162 -0
- package/dist/test/unit/coerce.spec.js.map +1 -0
- package/dist/test/unit/config.spec.d.ts +1 -0
- package/dist/test/unit/config.spec.js +123 -0
- package/dist/test/unit/config.spec.js.map +1 -0
- package/dist/test/unit/connection.spec.d.ts +1 -0
- package/dist/test/unit/connection.spec.js +171 -0
- package/dist/test/unit/connection.spec.js.map +1 -0
- package/dist/test/unit/cursors.spec.d.ts +1 -0
- package/dist/test/unit/cursors.spec.js +823 -0
- package/dist/test/unit/cursors.spec.js.map +1 -0
- package/dist/test/unit/ddl.spec.d.ts +1 -0
- package/dist/test/unit/ddl.spec.js +571 -0
- package/dist/test/unit/ddl.spec.js.map +1 -0
- package/dist/test/unit/expression-array.spec.d.ts +1 -0
- package/dist/test/unit/expression-array.spec.js +488 -0
- package/dist/test/unit/expression-array.spec.js.map +1 -0
- package/dist/test/unit/expression-date.spec.d.ts +1 -0
- package/dist/test/unit/expression-date.spec.js +329 -0
- package/dist/test/unit/expression-date.spec.js.map +1 -0
- package/dist/test/unit/expression-numeric.spec.d.ts +1 -0
- package/dist/test/unit/expression-numeric.spec.js +362 -0
- package/dist/test/unit/expression-numeric.spec.js.map +1 -0
- package/dist/test/unit/expression-object.spec.d.ts +1 -0
- package/dist/test/unit/expression-object.spec.js +230 -0
- package/dist/test/unit/expression-object.spec.js.map +1 -0
- package/dist/test/unit/expression-stages.spec.d.ts +1 -0
- package/dist/test/unit/expression-stages.spec.js +82 -0
- package/dist/test/unit/expression-stages.spec.js.map +1 -0
- package/dist/test/unit/expression-string.spec.d.ts +1 -0
- package/dist/test/unit/expression-string.spec.js +249 -0
- package/dist/test/unit/expression-string.spec.js.map +1 -0
- package/dist/test/unit/expression.spec.d.ts +1 -0
- package/dist/test/unit/expression.spec.js +449 -0
- package/dist/test/unit/expression.spec.js.map +1 -0
- package/dist/test/unit/external-comparisons.spec.d.ts +1 -0
- package/dist/test/unit/external-comparisons.spec.js +147 -0
- package/dist/test/unit/external-comparisons.spec.js.map +1 -0
- package/dist/test/unit/external-types.spec.d.ts +1 -0
- package/dist/test/unit/external-types.spec.js +228 -0
- package/dist/test/unit/external-types.spec.js.map +1 -0
- package/dist/test/unit/feeds.spec.d.ts +1 -0
- package/dist/test/unit/feeds.spec.js +374 -0
- package/dist/test/unit/feeds.spec.js.map +1 -0
- package/dist/test/unit/fields.spec.d.ts +1 -0
- package/dist/test/unit/fields.spec.js +79 -0
- package/dist/test/unit/fields.spec.js.map +1 -0
- package/dist/test/unit/identifier.spec.d.ts +1 -0
- package/dist/test/unit/identifier.spec.js +50 -0
- package/dist/test/unit/identifier.spec.js.map +1 -0
- package/dist/test/unit/payload.spec.d.ts +1 -0
- package/dist/test/unit/payload.spec.js +278 -0
- package/dist/test/unit/payload.spec.js.map +1 -0
- package/dist/test/unit/pipeline-aggregate.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-aggregate.spec.js +199 -0
- package/dist/test/unit/pipeline-aggregate.spec.js.map +1 -0
- package/dist/test/unit/pipeline-fixture.d.ts +79 -0
- package/dist/test/unit/pipeline-fixture.js +277 -0
- package/dist/test/unit/pipeline-fixture.js.map +1 -0
- package/dist/test/unit/pipeline-group.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-group.spec.js +390 -0
- package/dist/test/unit/pipeline-group.spec.js.map +1 -0
- package/dist/test/unit/pipeline-join.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-join.spec.js +165 -0
- package/dist/test/unit/pipeline-join.spec.js.map +1 -0
- package/dist/test/unit/pipeline-lookup.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-lookup.spec.js +268 -0
- package/dist/test/unit/pipeline-lookup.spec.js.map +1 -0
- package/dist/test/unit/pipeline-projection.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-projection.spec.js +183 -0
- package/dist/test/unit/pipeline-projection.spec.js.map +1 -0
- package/dist/test/unit/pipeline-rows.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-rows.spec.js +321 -0
- package/dist/test/unit/pipeline-rows.spec.js.map +1 -0
- package/dist/test/unit/pipeline-selection.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-selection.spec.js +257 -0
- package/dist/test/unit/pipeline-selection.spec.js.map +1 -0
- package/dist/test/unit/pipeline-stages.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-stages.spec.js +226 -0
- package/dist/test/unit/pipeline-stages.spec.js.map +1 -0
- package/dist/test/unit/pipeline.spec.d.ts +1 -0
- package/dist/test/unit/pipeline.spec.js +72 -0
- package/dist/test/unit/pipeline.spec.js.map +1 -0
- package/dist/test/unit/query.spec.d.ts +1 -0
- package/dist/test/unit/query.spec.js +212 -0
- package/dist/test/unit/query.spec.js.map +1 -0
- package/dist/test/unit/reaper.spec.d.ts +1 -0
- package/dist/test/unit/reaper.spec.js +122 -0
- package/dist/test/unit/reaper.spec.js.map +1 -0
- package/dist/test/unit/relation.spec.d.ts +1 -0
- package/dist/test/unit/relation.spec.js +348 -0
- package/dist/test/unit/relation.spec.js.map +1 -0
- package/dist/test/unit/result.spec.d.ts +1 -0
- package/dist/test/unit/result.spec.js +128 -0
- package/dist/test/unit/result.spec.js.map +1 -0
- package/dist/test/unit/row-source.spec.d.ts +1 -0
- package/dist/test/unit/row-source.spec.js +141 -0
- package/dist/test/unit/row-source.spec.js.map +1 -0
- package/dist/test/unit/schema.spec.d.ts +1 -0
- package/dist/test/unit/schema.spec.js +44 -0
- package/dist/test/unit/schema.spec.js.map +1 -0
- package/dist/test/unit/selection.spec.d.ts +1 -0
- package/dist/test/unit/selection.spec.js +182 -0
- package/dist/test/unit/selection.spec.js.map +1 -0
- package/dist/test/unit/spec-fixture.d.ts +11 -0
- package/dist/test/unit/spec-fixture.js +71 -0
- package/dist/test/unit/spec-fixture.js.map +1 -0
- package/dist/test/unit/sql.spec.d.ts +1 -0
- package/dist/test/unit/sql.spec.js +38 -0
- package/dist/test/unit/sql.spec.js.map +1 -0
- package/dist/test/unit/subquery.spec.d.ts +1 -0
- package/dist/test/unit/subquery.spec.js +154 -0
- package/dist/test/unit/subquery.spec.js.map +1 -0
- package/dist/test/unit/types.spec.d.ts +1 -0
- package/dist/test/unit/types.spec.js +39 -0
- package/dist/test/unit/types.spec.js.map +1 -0
- package/dist/test/unit/utils.spec.d.ts +1 -0
- package/dist/test/unit/utils.spec.js +22 -0
- package/dist/test/unit/utils.spec.js.map +1 -0
- package/dist/test/unit/value.spec.d.ts +1 -0
- package/dist/test/unit/value.spec.js +195 -0
- package/dist/test/unit/value.spec.js.map +1 -0
- package/dist/test/unit/writes-atomic.spec.d.ts +1 -0
- package/dist/test/unit/writes-atomic.spec.js +66 -0
- package/dist/test/unit/writes-atomic.spec.js.map +1 -0
- package/dist/test/unit/writes-insert.spec.d.ts +1 -0
- package/dist/test/unit/writes-insert.spec.js +270 -0
- package/dist/test/unit/writes-insert.spec.js.map +1 -0
- package/dist/test/unit/writes-replace.spec.d.ts +1 -0
- package/dist/test/unit/writes-replace.spec.js +100 -0
- package/dist/test/unit/writes-replace.spec.js.map +1 -0
- package/dist/test/unit/writes-target.spec.d.ts +1 -0
- package/dist/test/unit/writes-target.spec.js +118 -0
- package/dist/test/unit/writes-target.spec.js.map +1 -0
- package/dist/test/unit/writes-update.spec.d.ts +1 -0
- package/dist/test/unit/writes-update.spec.js +297 -0
- package/dist/test/unit/writes-update.spec.js.map +1 -0
- package/dist/test-external/catalog.test.d.ts +1 -0
- package/dist/test-external/catalog.test.js +348 -0
- package/dist/test-external/catalog.test.js.map +1 -0
- package/dist/test-external/fixture.d.ts +7 -0
- package/dist/test-external/fixture.js +163 -0
- package/dist/test-external/fixture.js.map +1 -0
- package/dist/test-external/native.test.d.ts +1 -0
- package/dist/test-external/native.test.js +132 -0
- package/dist/test-external/native.test.js.map +1 -0
- package/dist/test-external/reads.test.d.ts +1 -0
- package/dist/test-external/reads.test.js +232 -0
- package/dist/test-external/reads.test.js.map +1 -0
- package/dist/test-external/refusals.test.d.ts +1 -0
- package/dist/test-external/refusals.test.js +93 -0
- package/dist/test-external/refusals.test.js.map +1 -0
- package/dist/test-external/registration.test.d.ts +1 -0
- package/dist/test-external/registration.test.js +127 -0
- package/dist/test-external/registration.test.js.map +1 -0
- package/dist/test-external/sales.d.ts +5 -0
- package/dist/test-external/sales.js +126 -0
- package/dist/test-external/sales.js.map +1 -0
- package/dist/test-external/startup.test.d.ts +1 -0
- package/dist/test-external/startup.test.js +15 -0
- package/dist/test-external/startup.test.js.map +1 -0
- package/dist/test-external/writes.test.d.ts +1 -0
- package/dist/test-external/writes.test.js +315 -0
- package/dist/test-external/writes.test.js.map +1 -0
- 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 {};
|