@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,348 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const interface_database_catalog_1 = require("@antelopejs/interface-database-catalog");
|
|
5
|
+
const schema_1 = require("@antelopejs/interface-database/schema");
|
|
6
|
+
const config_1 = require("../config");
|
|
7
|
+
const external_measures_1 = require("../implementations/database/external-measures");
|
|
8
|
+
const schema_2 = require("../implementations/database/schema");
|
|
9
|
+
const fixture_1 = require("./fixture");
|
|
10
|
+
const sales_1 = require("./sales");
|
|
11
|
+
const SALES = "sales";
|
|
12
|
+
const SAMPLE_THRESHOLD = 1_000_000;
|
|
13
|
+
function Named(relations, name) {
|
|
14
|
+
const found = relations.find((relation) => relation.name === name);
|
|
15
|
+
(0, chai_1.expect)(found, name).to.not.equal(undefined);
|
|
16
|
+
return found;
|
|
17
|
+
}
|
|
18
|
+
function Generated(relations) {
|
|
19
|
+
const definition = {};
|
|
20
|
+
for (const relation of relations) {
|
|
21
|
+
const fields = relation.key
|
|
22
|
+
? { _id: "string" }
|
|
23
|
+
: {};
|
|
24
|
+
for (const column of relation.columns) {
|
|
25
|
+
if (column.accepts.length > 0) {
|
|
26
|
+
fields[column.name] = column.accepts[0].declared;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
definition[relation.name] = { fields, indexes: {} };
|
|
30
|
+
}
|
|
31
|
+
return definition;
|
|
32
|
+
}
|
|
33
|
+
async function Mappable() {
|
|
34
|
+
const listed = await (0, interface_database_catalog_1.ListRelations)([SALES]);
|
|
35
|
+
const names = listed
|
|
36
|
+
.filter((relation) => !relation.unmappable)
|
|
37
|
+
.map((relation) => `${SALES}.${relation.name}`);
|
|
38
|
+
return (0, interface_database_catalog_1.DescribeRelations)(names);
|
|
39
|
+
}
|
|
40
|
+
describe("the catalog of an external instance", function () {
|
|
41
|
+
this.timeout(120_000);
|
|
42
|
+
it("names the connection's database and role", async () => {
|
|
43
|
+
const info = await (0, interface_database_catalog_1.Info)();
|
|
44
|
+
(0, chai_1.expect)(info.engine).to.equal("postgresql");
|
|
45
|
+
(0, chai_1.expect)(info.role).to.equal(fixture_1.CLIENT_ROLE);
|
|
46
|
+
});
|
|
47
|
+
it("lists each relation with the key registration aliases _id to", async () => {
|
|
48
|
+
const listed = await (0, interface_database_catalog_1.ListRelations)([SALES]);
|
|
49
|
+
(0, chai_1.expect)(Named(listed, "accounts").key).to.deep.equal({
|
|
50
|
+
columns: ["id"],
|
|
51
|
+
source: "primary",
|
|
52
|
+
});
|
|
53
|
+
(0, chai_1.expect)(Named(listed, "order_lines").key).to.deep.equal({
|
|
54
|
+
columns: ["order_id", "line_no"],
|
|
55
|
+
source: "primary",
|
|
56
|
+
});
|
|
57
|
+
(0, chai_1.expect)(Named(listed, "events").key).to.deep.equal({
|
|
58
|
+
columns: ["event_ref"],
|
|
59
|
+
source: "unique",
|
|
60
|
+
});
|
|
61
|
+
(0, chai_1.expect)(Named(listed, "tags").key).to.deep.equal({
|
|
62
|
+
columns: ["id"],
|
|
63
|
+
source: "primary",
|
|
64
|
+
});
|
|
65
|
+
for (const keyless of ["raw_log", "big_accounts", "daily_signups"]) {
|
|
66
|
+
(0, chai_1.expect)(Named(listed, keyless).key, keyless).to.equal(null);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
it("lists a partitioned table once, without its partitions", async () => {
|
|
70
|
+
const names = (await (0, interface_database_catalog_1.ListRelations)([SALES])).map((relation) => relation.name);
|
|
71
|
+
(0, chai_1.expect)(names).to.include("tags");
|
|
72
|
+
(0, chai_1.expect)(names).to.not.include("tags_0");
|
|
73
|
+
(0, chai_1.expect)(Named(await (0, interface_database_catalog_1.ListRelations)([SALES]), "tags").kind).to.equal("partitioned");
|
|
74
|
+
});
|
|
75
|
+
it("estimates rows from statistics, from live tuples when never analyzed, and by plan for a view", async () => {
|
|
76
|
+
const listed = await (0, interface_database_catalog_1.ListRelations)([SALES]);
|
|
77
|
+
(0, chai_1.expect)(Named(listed, "accounts")).to.include({
|
|
78
|
+
estimatedRows: 20000,
|
|
79
|
+
estimate: "statistics",
|
|
80
|
+
});
|
|
81
|
+
(0, chai_1.expect)(Named(listed, "big_events")).to.include({
|
|
82
|
+
estimatedRows: fixture_1.BIG_EVENTS_ROWS,
|
|
83
|
+
estimate: "live-tuples",
|
|
84
|
+
});
|
|
85
|
+
(0, chai_1.expect)(Named(listed, "big_accounts").estimate).to.equal("plan");
|
|
86
|
+
});
|
|
87
|
+
it("lists a relation with column-only grants as unmappable, saying why", async () => {
|
|
88
|
+
(0, chai_1.expect)(Named(await (0, interface_database_catalog_1.ListRelations)([SALES]), "people").unmappable).to.match(/some of its columns/);
|
|
89
|
+
});
|
|
90
|
+
it("reports what the connected role may write", async () => {
|
|
91
|
+
const listed = await (0, interface_database_catalog_1.ListRelations)([SALES]);
|
|
92
|
+
(0, chai_1.expect)(Named(listed, "w_accounts").writes).to.deep.equal({
|
|
93
|
+
insert: true,
|
|
94
|
+
update: true,
|
|
95
|
+
delete: true,
|
|
96
|
+
});
|
|
97
|
+
(0, chai_1.expect)(Named(listed, "accounts").writes.insert).to.equal(false);
|
|
98
|
+
});
|
|
99
|
+
it("describes foreign keys both ways, enum labels and comments", async () => {
|
|
100
|
+
const [accounts, contacts] = await (0, interface_database_catalog_1.DescribeRelations)([
|
|
101
|
+
"sales.accounts",
|
|
102
|
+
"sales.contacts",
|
|
103
|
+
]);
|
|
104
|
+
const reference = {
|
|
105
|
+
name: "contacts_account_id_fkey",
|
|
106
|
+
from: { relation: "sales.contacts", columns: ["account_id"] },
|
|
107
|
+
to: { relation: "sales.accounts", columns: ["id"] },
|
|
108
|
+
};
|
|
109
|
+
(0, chai_1.expect)(contacts.references).to.deep.include(reference);
|
|
110
|
+
(0, chai_1.expect)(accounts.referencedBy).to.deep.include(reference);
|
|
111
|
+
const status = accounts.columns.find((column) => column.name === "status");
|
|
112
|
+
(0, chai_1.expect)(status?.enumLabels).to.deep.equal(["lead", "active", "churned"]);
|
|
113
|
+
(0, chai_1.expect)(accounts.comment).to.equal("Customer accounts");
|
|
114
|
+
(0, chai_1.expect)(accounts.columns.find((column) => column.name === "name")?.comment).to.equal("Display name");
|
|
115
|
+
});
|
|
116
|
+
it("marks generated, identity-always and array columns read-only", async () => {
|
|
117
|
+
const [accounts] = await (0, interface_database_catalog_1.DescribeRelations)(["sales.accounts"]);
|
|
118
|
+
const readOnly = accounts.columns
|
|
119
|
+
.filter((column) => column.readOnly)
|
|
120
|
+
.map((column) => column.name);
|
|
121
|
+
(0, chai_1.expect)(readOnly).to.include.members(["id", "name_upper", "tags"]);
|
|
122
|
+
(0, chai_1.expect)(readOnly).to.not.include("name");
|
|
123
|
+
});
|
|
124
|
+
it("refuses to describe a relation the role cannot see, naming it", async () => {
|
|
125
|
+
try {
|
|
126
|
+
await (0, interface_database_catalog_1.DescribeRelations)(["sales.nope"]);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
(0, chai_1.expect)(error.message).to.include("sales.nope");
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
throw new Error("DescribeRelations was expected to refuse");
|
|
133
|
+
});
|
|
134
|
+
it("offers only declarations registration takes: a schema written from its first offers registers", async () => {
|
|
135
|
+
new schema_1.Schema(SALES, Generated(await Mappable()));
|
|
136
|
+
await (0, schema_2.WaitForSchemaReady)(SALES);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
describe("a profile of an external relation", function () {
|
|
140
|
+
this.timeout(120_000);
|
|
141
|
+
let profiles;
|
|
142
|
+
before(async () => {
|
|
143
|
+
profiles = [];
|
|
144
|
+
for (const relation of await Mappable()) {
|
|
145
|
+
profiles.push(await (0, interface_database_catalog_1.Profile)({ relation: `${SALES}.${relation.name}` }));
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
function Of(name) {
|
|
149
|
+
return profiles.find((profile) => profile.relation === `${SALES}.${name}`);
|
|
150
|
+
}
|
|
151
|
+
it("never answers a text value, a text extreme or a value counted fewer than 5 times", () => {
|
|
152
|
+
const answered = JSON.stringify(profiles);
|
|
153
|
+
(0, chai_1.expect)(answered).to.not.match(/@Example\.com/i);
|
|
154
|
+
(0, chai_1.expect)(answered).to.not.include("Acct ");
|
|
155
|
+
(0, chai_1.expect)(answered).to.not.include("First1");
|
|
156
|
+
(0, chai_1.expect)(answered).to.not.include("disputed");
|
|
157
|
+
});
|
|
158
|
+
it("answers an enum's categories with their counts", async () => {
|
|
159
|
+
const status = Of("accounts").columns.find((column) => column.name === "status");
|
|
160
|
+
(0, chai_1.expect)(status.traits).to.include("enum-like");
|
|
161
|
+
const native = await (0, sales_1.Native)("SELECT status::text AS status, count(*) AS n FROM sales.accounts GROUP BY 1");
|
|
162
|
+
(0, chai_1.expect)(status.categories).to.deep.include({ status: "ok" });
|
|
163
|
+
const value = status.categories?.status === "ok" ? status.categories.value : undefined;
|
|
164
|
+
for (const row of native) {
|
|
165
|
+
(0, chai_1.expect)(value?.values).to.deep.include({
|
|
166
|
+
value: row.status,
|
|
167
|
+
rows: Number(row.n),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
it("folds a value seen fewer than 5 times into other", () => {
|
|
172
|
+
const kind = Of("invoices").columns.find((column) => column.name === "kind");
|
|
173
|
+
(0, chai_1.expect)(kind.traits).to.include("enum-like");
|
|
174
|
+
(0, chai_1.expect)(kind.categories).to.deep.include({ status: "ok" });
|
|
175
|
+
if (kind.categories?.status === "ok") {
|
|
176
|
+
(0, chai_1.expect)(kind.categories.value.other).to.equal(2);
|
|
177
|
+
(0, chai_1.expect)(kind.categories.value.values).to.have.length(3);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
it("finds a label, a time axis and a measure", () => {
|
|
181
|
+
const columns = Of("accounts").columns;
|
|
182
|
+
const traits = (name) => columns.find((column) => column.name === name).traits;
|
|
183
|
+
(0, chai_1.expect)(traits("name")).to.include("label-candidate");
|
|
184
|
+
(0, chai_1.expect)(traits("created_at")).to.include("time-axis");
|
|
185
|
+
(0, chai_1.expect)(traits("revenue")).to.include("measure");
|
|
186
|
+
(0, chai_1.expect)(traits("id")).to.not.include("measure");
|
|
187
|
+
});
|
|
188
|
+
it("counts children per parent over a foreign key", async () => {
|
|
189
|
+
const [reference] = Of("contacts").references;
|
|
190
|
+
(0, chai_1.expect)(reference.fanOut).to.deep.include({ status: "ok" });
|
|
191
|
+
const parents = await (0, sales_1.NativeCount)("SELECT count(DISTINCT account_id) FROM sales.contacts");
|
|
192
|
+
if (reference.fanOut.status === "ok") {
|
|
193
|
+
(0, chai_1.expect)(reference.fanOut.value.average).to.be.closeTo(20000 / parents, 1e-9);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
it("samples a relation above the threshold, and says so", async () => {
|
|
197
|
+
const big = await (0, interface_database_catalog_1.Profile)({ relation: "sales.big_events" });
|
|
198
|
+
(0, chai_1.expect)(big.sample).to.not.equal(null);
|
|
199
|
+
(0, chai_1.expect)(big.sample.rows).to.be.above(0).and.below(SAMPLE_THRESHOLD);
|
|
200
|
+
(0, chai_1.expect)(big.rows).to.deep.equal({
|
|
201
|
+
status: "ok",
|
|
202
|
+
value: { rows: fixture_1.BIG_EVENTS_ROWS, exact: false },
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
it("answers timeout for a measure past its time, and still answers the profile", async () => {
|
|
206
|
+
(0, external_measures_1.SetMeasureTimeoutForTests)(1);
|
|
207
|
+
try {
|
|
208
|
+
const big = await (0, interface_database_catalog_1.Profile)({
|
|
209
|
+
relation: "sales.big_events",
|
|
210
|
+
columns: ["kind"],
|
|
211
|
+
});
|
|
212
|
+
const [kind] = big.columns;
|
|
213
|
+
(0, chai_1.expect)(kind.distinct).to.deep.equal({ status: "timeout" });
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
(0, external_measures_1.SetMeasureTimeoutForTests)();
|
|
217
|
+
}
|
|
218
|
+
const again = await (0, interface_database_catalog_1.Profile)({
|
|
219
|
+
relation: "sales.big_events",
|
|
220
|
+
columns: ["kind"],
|
|
221
|
+
});
|
|
222
|
+
(0, chai_1.expect)(again.columns[0].distinct?.status).to.equal("ok");
|
|
223
|
+
});
|
|
224
|
+
it("writes nothing, even through a role that may write", async () => {
|
|
225
|
+
const id = 987654321;
|
|
226
|
+
const outcome = await (0, external_measures_1.WithMeasures)((session) => session.measure(`INSERT INTO sales.w_big VALUES (${id}, 'x') RETURNING id`));
|
|
227
|
+
(0, chai_1.expect)(outcome).to.deep.equal({ status: "error", code: "25006" });
|
|
228
|
+
(0, chai_1.expect)(await (0, sales_1.NativeCount)(`SELECT count(*) FROM sales.w_big WHERE id = ${id}`)).to.equal(0);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
describe("a sample of rows", function () {
|
|
232
|
+
this.timeout(60_000);
|
|
233
|
+
it("answers every value as text, cut at 200 characters", async () => {
|
|
234
|
+
const sample = await (0, interface_database_catalog_1.SampleRows)({
|
|
235
|
+
relation: "sales.attachments",
|
|
236
|
+
columns: ["id", "note"],
|
|
237
|
+
limit: 20,
|
|
238
|
+
});
|
|
239
|
+
(0, chai_1.expect)(sample.columns).to.deep.equal(["id", "note"]);
|
|
240
|
+
(0, chai_1.expect)(sample.sample).to.equal(null);
|
|
241
|
+
const byId = new Map(sample.rows.map((row) => [JSON.stringify(row[0]), row[1]]));
|
|
242
|
+
(0, chai_1.expect)(byId.get(JSON.stringify({ text: "1", truncated: false }))).to.deep.equal({
|
|
243
|
+
text: "n".repeat(200),
|
|
244
|
+
truncated: true,
|
|
245
|
+
});
|
|
246
|
+
(0, chai_1.expect)(byId.get(JSON.stringify({ text: "2", truncated: false }))).to.deep.equal({
|
|
247
|
+
text: "short",
|
|
248
|
+
truncated: false,
|
|
249
|
+
});
|
|
250
|
+
(0, chai_1.expect)(byId.get(JSON.stringify({ text: "3", truncated: false }))).to.equal(null);
|
|
251
|
+
});
|
|
252
|
+
it("answers a binary value by its length only", async () => {
|
|
253
|
+
const sample = await (0, interface_database_catalog_1.SampleRows)({
|
|
254
|
+
relation: "sales.attachments",
|
|
255
|
+
columns: ["body"],
|
|
256
|
+
limit: 20,
|
|
257
|
+
});
|
|
258
|
+
(0, chai_1.expect)(sample.rows.map((row) => row[0])).to.have.deep.members([
|
|
259
|
+
{ bytes: 4 },
|
|
260
|
+
null,
|
|
261
|
+
{ bytes: 1 },
|
|
262
|
+
]);
|
|
263
|
+
});
|
|
264
|
+
it("answers at most the rows asked for, and refuses more than 20", async () => {
|
|
265
|
+
const sample = await (0, interface_database_catalog_1.SampleRows)({ relation: "sales.accounts", limit: 3 });
|
|
266
|
+
(0, chai_1.expect)(sample.rows).to.have.length(3);
|
|
267
|
+
let refused;
|
|
268
|
+
try {
|
|
269
|
+
await (0, interface_database_catalog_1.SampleRows)({ relation: "sales.accounts", limit: 21 });
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
refused = error;
|
|
273
|
+
}
|
|
274
|
+
(0, chai_1.expect)(refused?.message).to.match(/from 1 to 20 rows/);
|
|
275
|
+
});
|
|
276
|
+
it("samples a relation above the threshold, and says so", async () => {
|
|
277
|
+
const sample = await (0, interface_database_catalog_1.SampleRows)({
|
|
278
|
+
relation: "sales.big_events",
|
|
279
|
+
limit: 5,
|
|
280
|
+
});
|
|
281
|
+
(0, chai_1.expect)(sample.sample).to.not.equal(null);
|
|
282
|
+
(0, chai_1.expect)(sample.rows).to.have.length(5);
|
|
283
|
+
});
|
|
284
|
+
it("reads inside a read-only transaction", async () => {
|
|
285
|
+
const sample = await (0, interface_database_catalog_1.SampleRows)({
|
|
286
|
+
relation: "sales.v_transaction",
|
|
287
|
+
limit: 1,
|
|
288
|
+
});
|
|
289
|
+
(0, chai_1.expect)(sample.rows).to.deep.equal([[{ text: "on", truncated: false }]]);
|
|
290
|
+
});
|
|
291
|
+
it("refuses a relation the role can read only in part", async () => {
|
|
292
|
+
let refused;
|
|
293
|
+
try {
|
|
294
|
+
await (0, interface_database_catalog_1.SampleRows)({ relation: "sales.people", limit: 5 });
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
refused = error;
|
|
298
|
+
}
|
|
299
|
+
(0, chai_1.expect)(refused?.message).to.match(/cannot be read/);
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
describe("a reference the database does not declare", function () {
|
|
303
|
+
this.timeout(60_000);
|
|
304
|
+
it("is found whole when every value is in the target's key", async () => {
|
|
305
|
+
const match = await (0, interface_database_catalog_1.CheckReference)({
|
|
306
|
+
from: { relation: "sales.invoices", column: "account_ref" },
|
|
307
|
+
to: { relation: "sales.accounts", column: "id" },
|
|
308
|
+
});
|
|
309
|
+
(0, chai_1.expect)(match).to.deep.equal({
|
|
310
|
+
status: "ok",
|
|
311
|
+
value: {
|
|
312
|
+
containment: 1,
|
|
313
|
+
checkedRows: 1000,
|
|
314
|
+
sampled: false,
|
|
315
|
+
targetIsKey: true,
|
|
316
|
+
},
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
it("is found in part when some values have no target", async () => {
|
|
320
|
+
const match = await (0, interface_database_catalog_1.CheckReference)({
|
|
321
|
+
from: { relation: "sales.invoices", column: "broken_ref" },
|
|
322
|
+
to: { relation: "sales.accounts", column: "id" },
|
|
323
|
+
});
|
|
324
|
+
(0, chai_1.expect)(match.status).to.equal("ok");
|
|
325
|
+
if (match.status === "ok") {
|
|
326
|
+
(0, chai_1.expect)(match.value.containment).to.equal(0.75);
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
describe("the catalog outside development", () => {
|
|
331
|
+
it("refuses when the catalog is not enabled", async () => {
|
|
332
|
+
const options = (0, config_1.GetOptions)();
|
|
333
|
+
const enabled = options.catalog.enabled;
|
|
334
|
+
options.catalog.enabled = false;
|
|
335
|
+
try {
|
|
336
|
+
await (0, interface_database_catalog_1.Info)();
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
(0, chai_1.expect)(error.message).to.match(/development tool/);
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
finally {
|
|
343
|
+
options.catalog.enabled = enabled;
|
|
344
|
+
}
|
|
345
|
+
throw new Error("Info was expected to refuse");
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
//# sourceMappingURL=catalog.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.test.js","sourceRoot":"","sources":["../../src/test-external/catalog.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const CLIENT_DATABASE = "antelopejs_external";
|
|
2
|
+
export declare const CLIENT_ROLE = "dms_client";
|
|
3
|
+
export declare const READER_PASSWORD = "reader";
|
|
4
|
+
export declare const FIXTURE: readonly string[];
|
|
5
|
+
export declare const BIG_EVENTS_ROWS = 1100000;
|
|
6
|
+
export declare function WriterGrants(role: string): string[];
|
|
7
|
+
export declare function ReaderGrants(role: string): string[];
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BIG_EVENTS_ROWS = exports.FIXTURE = exports.READER_PASSWORD = exports.CLIENT_ROLE = exports.CLIENT_DATABASE = void 0;
|
|
4
|
+
exports.WriterGrants = WriterGrants;
|
|
5
|
+
exports.ReaderGrants = ReaderGrants;
|
|
6
|
+
exports.CLIENT_DATABASE = "antelopejs_external";
|
|
7
|
+
exports.CLIENT_ROLE = "dms_client";
|
|
8
|
+
exports.READER_PASSWORD = "reader";
|
|
9
|
+
exports.FIXTURE = [
|
|
10
|
+
"CREATE EXTENSION IF NOT EXISTS citext",
|
|
11
|
+
"CREATE SCHEMA sales",
|
|
12
|
+
"CREATE TYPE sales.status AS ENUM ('lead', 'active', 'churned')",
|
|
13
|
+
`CREATE TABLE sales.accounts (
|
|
14
|
+
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
15
|
+
name varchar(200) NOT NULL,
|
|
16
|
+
email citext,
|
|
17
|
+
status sales.status NOT NULL DEFAULT 'lead',
|
|
18
|
+
revenue numeric(12,2),
|
|
19
|
+
score integer,
|
|
20
|
+
rating real,
|
|
21
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
22
|
+
signed_on date,
|
|
23
|
+
last_seen timestamp,
|
|
24
|
+
external_ref uuid UNIQUE,
|
|
25
|
+
tags text[],
|
|
26
|
+
meta jsonb,
|
|
27
|
+
raw json,
|
|
28
|
+
active boolean,
|
|
29
|
+
big_counter bigint,
|
|
30
|
+
name_upper text GENERATED ALWAYS AS (upper(name)) STORED
|
|
31
|
+
)`,
|
|
32
|
+
"CREATE INDEX accounts_score ON sales.accounts (score)",
|
|
33
|
+
"CREATE INDEX accounts_revenue ON sales.accounts (revenue)",
|
|
34
|
+
"CREATE INDEX accounts_created ON sales.accounts (created_at)",
|
|
35
|
+
"CREATE INDEX accounts_signed ON sales.accounts (signed_on)",
|
|
36
|
+
"CREATE INDEX accounts_last_seen ON sales.accounts (last_seen)",
|
|
37
|
+
"CREATE INDEX accounts_status ON sales.accounts (status)",
|
|
38
|
+
"CREATE INDEX accounts_name ON sales.accounts (name)",
|
|
39
|
+
"CREATE INDEX accounts_email ON sales.accounts (email)",
|
|
40
|
+
`CREATE TABLE sales.contacts (
|
|
41
|
+
contact_id uuid PRIMARY KEY,
|
|
42
|
+
account_id bigint REFERENCES sales.accounts (id),
|
|
43
|
+
first_name text NOT NULL,
|
|
44
|
+
created_at timestamp NOT NULL
|
|
45
|
+
)`,
|
|
46
|
+
"CREATE INDEX contacts_account ON sales.contacts (account_id)",
|
|
47
|
+
"CREATE INDEX contacts_created ON sales.contacts (created_at)",
|
|
48
|
+
`CREATE TABLE sales.order_lines (
|
|
49
|
+
order_id int NOT NULL, line_no int NOT NULL, sku text, qty int,
|
|
50
|
+
PRIMARY KEY (order_id, line_no)
|
|
51
|
+
)`,
|
|
52
|
+
`CREATE TABLE sales.events (event_ref uuid NOT NULL, at timestamptz NOT NULL, msg text)`,
|
|
53
|
+
"CREATE UNIQUE INDEX events_ref ON sales.events (event_ref)",
|
|
54
|
+
"CREATE UNIQUE INDEX events_at_msg ON sales.events (at, msg)",
|
|
55
|
+
"CREATE TABLE sales.raw_log (at timestamptz, msg text)",
|
|
56
|
+
"CREATE TABLE sales.countries (code char(2) PRIMARY KEY, name text)",
|
|
57
|
+
"CREATE TABLE sales.flags (id int PRIMARY KEY, ref uuid, n int)",
|
|
58
|
+
"INSERT INTO sales.flags VALUES (1, md5('flag1')::uuid, 5), (2, NULL, NULL)",
|
|
59
|
+
`CREATE TABLE sales.tags (id int PRIMARY KEY, label text) PARTITION BY HASH (id)`,
|
|
60
|
+
"CREATE TABLE sales.tags_0 PARTITION OF sales.tags FOR VALUES WITH (MODULUS 2, REMAINDER 0)",
|
|
61
|
+
"CREATE TABLE sales.tags_1 PARTITION OF sales.tags FOR VALUES WITH (MODULUS 2, REMAINDER 1)",
|
|
62
|
+
`INSERT INTO sales.accounts (name, email, status, revenue, score, rating, created_at, signed_on,
|
|
63
|
+
last_seen, external_ref, tags, meta, raw, active, big_counter)
|
|
64
|
+
SELECT 'Acct ' || g, 'User' || g || '@Example.com',
|
|
65
|
+
(ARRAY['lead', 'active', 'churned'])[1 + g % 3]::sales.status,
|
|
66
|
+
(g * 13.37)::numeric(12,2), g % 100, (g % 50) / 10.0,
|
|
67
|
+
timestamptz '2026-01-01 00:00:00+00' + (g || ' hours')::interval,
|
|
68
|
+
date '2026-01-01' + (g % 300), timestamp '2026-01-01 00:00' + (g || ' minutes')::interval,
|
|
69
|
+
md5('account' || g)::uuid, ARRAY['t' || (g % 5)], jsonb_build_object('k', g),
|
|
70
|
+
json_build_object('k', g), g % 2 = 0, 9007199254740993 + g
|
|
71
|
+
FROM generate_series(1, 20000) g`,
|
|
72
|
+
`INSERT INTO sales.contacts (contact_id, account_id, first_name, created_at)
|
|
73
|
+
SELECT md5('contact' || g)::uuid, 1 + (g % 20000), 'First' || g,
|
|
74
|
+
timestamp '2026-03-01 23:30' + (g || ' minutes')::interval
|
|
75
|
+
FROM generate_series(1, 20000) g`,
|
|
76
|
+
`INSERT INTO sales.order_lines SELECT g / 10, g % 10, 'sku' || g, g % 7 FROM generate_series(1, 5000) g`,
|
|
77
|
+
`INSERT INTO sales.events
|
|
78
|
+
SELECT md5('event' || g)::uuid, timestamptz '2026-01-01' + (g || ' minutes')::interval, 'm' || g
|
|
79
|
+
FROM generate_series(1, 5000) g`,
|
|
80
|
+
`INSERT INTO sales.raw_log
|
|
81
|
+
SELECT timestamptz '2026-01-01' + (g || ' seconds')::interval, 'r' || g FROM generate_series(1, 5000) g`,
|
|
82
|
+
"INSERT INTO sales.countries VALUES ('FR', 'France'), ('IT', 'Italy')",
|
|
83
|
+
"INSERT INTO sales.tags SELECT g, 'tag' || g FROM generate_series(1, 1000) g",
|
|
84
|
+
`CREATE VIEW sales.big_accounts AS
|
|
85
|
+
SELECT a.id, a.name AS account_name, a.revenue FROM sales.accounts a WHERE a.revenue > 1000`,
|
|
86
|
+
`CREATE MATERIALIZED VIEW sales.daily_signups AS
|
|
87
|
+
SELECT signed_on AS day, count(*) AS n FROM sales.accounts GROUP BY signed_on`,
|
|
88
|
+
"CREATE UNIQUE INDEX daily_signups_day ON sales.daily_signups (day)",
|
|
89
|
+
`CREATE TABLE sales.w_accounts (
|
|
90
|
+
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
91
|
+
code varchar(5) NOT NULL UNIQUE,
|
|
92
|
+
email citext,
|
|
93
|
+
status sales.status NOT NULL DEFAULT 'lead',
|
|
94
|
+
revenue numeric(12,2) CHECK (revenue >= 0),
|
|
95
|
+
big bigint,
|
|
96
|
+
rating real,
|
|
97
|
+
seen timestamp,
|
|
98
|
+
at timestamptz NOT NULL DEFAULT now(),
|
|
99
|
+
raw json,
|
|
100
|
+
tags text[],
|
|
101
|
+
upper_code text GENERATED ALWAYS AS (upper(code)) STORED
|
|
102
|
+
)`,
|
|
103
|
+
`CREATE TABLE sales.w_items (
|
|
104
|
+
sku uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
105
|
+
account_id bigint REFERENCES sales.w_accounts (id),
|
|
106
|
+
qty int NOT NULL
|
|
107
|
+
)`,
|
|
108
|
+
"CREATE TABLE sales.w_serial (id serial PRIMARY KEY, label text)",
|
|
109
|
+
"CREATE TABLE sales.w_events (at timestamptz PRIMARY KEY, msg text)",
|
|
110
|
+
"CREATE TABLE sales.w_big (id bigint PRIMARY KEY, label text)",
|
|
111
|
+
`CREATE TABLE sales.w_lines (
|
|
112
|
+
order_id int NOT NULL, line_no int NOT NULL, qty int, PRIMARY KEY (order_id, line_no)
|
|
113
|
+
)`,
|
|
114
|
+
"COMMENT ON TABLE sales.accounts IS 'Customer accounts'",
|
|
115
|
+
"COMMENT ON COLUMN sales.accounts.name IS 'Display name'",
|
|
116
|
+
"CREATE TABLE sales.people (id int PRIMARY KEY, name text, ssn text)",
|
|
117
|
+
"INSERT INTO sales.people SELECT g, 'Person ' || g, lpad(g::text, 9, '0') FROM generate_series(1, 100) g",
|
|
118
|
+
"CREATE TABLE sales.attachments (id int PRIMARY KEY, note text, body bytea)",
|
|
119
|
+
"CREATE VIEW sales.v_transaction AS SELECT current_setting('transaction_read_only') AS read_only",
|
|
120
|
+
`INSERT INTO sales.attachments VALUES
|
|
121
|
+
(1, repeat('n', 300), decode('00010203', 'hex')),
|
|
122
|
+
(2, 'short', NULL),
|
|
123
|
+
(3, NULL, decode('ff', 'hex'))`,
|
|
124
|
+
`CREATE TABLE sales.invoices (
|
|
125
|
+
id int PRIMARY KEY, kind text NOT NULL, account_ref bigint, broken_ref bigint, issued_on date
|
|
126
|
+
)`,
|
|
127
|
+
`INSERT INTO sales.invoices
|
|
128
|
+
SELECT g, CASE WHEN g <= 2 THEN 'disputed' ELSE (ARRAY['paid', 'open', 'void'])[1 + g % 3] END,
|
|
129
|
+
1 + (g % 20000), CASE WHEN g % 4 = 0 THEN 900000 + g ELSE 1 + g END,
|
|
130
|
+
date '2025-01-01' + (g % 400)
|
|
131
|
+
FROM generate_series(1, 1000) g`,
|
|
132
|
+
"ANALYZE",
|
|
133
|
+
`CREATE TABLE sales.big_events (
|
|
134
|
+
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, kind text NOT NULL, at timestamptz NOT NULL
|
|
135
|
+
) WITH (autovacuum_enabled = false)`,
|
|
136
|
+
`INSERT INTO sales.big_events (kind, at)
|
|
137
|
+
SELECT (ARRAY['click', 'view', 'buy'])[1 + g % 3], timestamptz '2025-01-01' + (g || ' seconds')::interval
|
|
138
|
+
FROM generate_series(1, 1100000) g`,
|
|
139
|
+
];
|
|
140
|
+
exports.BIG_EVENTS_ROWS = 1_100_000;
|
|
141
|
+
const WRITABLE_TABLES = [
|
|
142
|
+
"sales.w_accounts",
|
|
143
|
+
"sales.w_items",
|
|
144
|
+
"sales.w_serial",
|
|
145
|
+
"sales.w_lines",
|
|
146
|
+
"sales.w_events",
|
|
147
|
+
"sales.w_big",
|
|
148
|
+
];
|
|
149
|
+
function WriterGrants(role) {
|
|
150
|
+
return [
|
|
151
|
+
`GRANT INSERT, UPDATE, DELETE ON ${WRITABLE_TABLES.join(", ")} TO ${role}`,
|
|
152
|
+
`GRANT USAGE ON ALL SEQUENCES IN SCHEMA sales TO ${role}`,
|
|
153
|
+
];
|
|
154
|
+
}
|
|
155
|
+
function ReaderGrants(role) {
|
|
156
|
+
return [
|
|
157
|
+
`GRANT USAGE ON SCHEMA sales TO ${role}`,
|
|
158
|
+
`GRANT SELECT ON ALL TABLES IN SCHEMA sales TO ${role}`,
|
|
159
|
+
`REVOKE SELECT ON sales.people FROM ${role}`,
|
|
160
|
+
`GRANT SELECT (id, name) ON sales.people TO ${role}`,
|
|
161
|
+
];
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=fixture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/test-external/fixture.ts"],"names":[],"mappings":";;;AA6JA,oCAKC;AAGD,oCAOC;AAvKY,QAAA,eAAe,GAAG,qBAAqB,CAAC;AAExC,QAAA,WAAW,GAAG,YAAY,CAAC;AAE3B,QAAA,eAAe,GAAG,QAAQ,CAAC;AAE3B,QAAA,OAAO,GAAsB;IACxC,uCAAuC;IACvC,qBAAqB;IACrB,gEAAgE;IAChE;;;;;;;;;;;;;;;;;;IAkBE;IACF,uDAAuD;IACvD,2DAA2D;IAC3D,8DAA8D;IAC9D,4DAA4D;IAC5D,+DAA+D;IAC/D,yDAAyD;IACzD,qDAAqD;IACrD,uDAAuD;IACvD;;;;;IAKE;IACF,8DAA8D;IAC9D,8DAA8D;IAC9D;;;IAGE;IACF,wFAAwF;IACxF,4DAA4D;IAC5D,6DAA6D;IAC7D,uDAAuD;IACvD,oEAAoE;IACpE,gEAAgE;IAChE,4EAA4E;IAC5E,iFAAiF;IACjF,4FAA4F;IAC5F,4FAA4F;IAC5F;;;;;;;;;qCASmC;IACnC;;;qCAGmC;IACnC,wGAAwG;IACxG;;oCAEkC;IAClC;4GAC0G;IAC1G,sEAAsE;IACtE,6EAA6E;IAC7E;gGAC8F;IAC9F;kFACgF;IAChF,oEAAoE;IACpE;;;;;;;;;;;;;IAaE;IACF;;;;IAIE;IACF,iEAAiE;IACjE,oEAAoE;IACpE,8DAA8D;IAC9D;;IAEE;IACF,wDAAwD;IACxD,yDAAyD;IACzD,qEAAqE;IACrE,yGAAyG;IACzG,4EAA4E;IAC5E,iGAAiG;IACjG;;;mCAGiC;IACjC;;IAEE;IACF;;;;oCAIkC;IAClC,SAAS;IACT;;sCAEoC;IACpC;;uCAEqC;CACtC,CAAC;AAGW,QAAA,eAAe,GAAG,SAAS,CAAC;AAGzC,MAAM,eAAe,GAAsB;IACzC,kBAAkB;IAClB,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,aAAa;CACd,CAAC;AAGF,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,mCAAmC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;QAC1E,mDAAmD,IAAI,EAAE;KAC1D,CAAC;AACJ,CAAC;AAGD,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,kCAAkC,IAAI,EAAE;QACxC,iDAAiD,IAAI,EAAE;QACvD,sCAAsC,IAAI,EAAE;QAC5C,8CAA8C,IAAI,EAAE;KACrD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|