mainsequence-metatable 0.1.61.dev92__tar.gz → 0.1.62.dev93__tar.gz
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.
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/client/metatables-meta-tables/SKILL.md +4 -0
- {mainsequence_metatable-0.1.61.dev92/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.62.dev93}/PKG-INFO +1 -1
- mainsequence_metatable-0.1.62.dev93/docs/adr/api/0027-compiled-sql-result-types.md +60 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/index.md +1 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/openapi.json +30 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/query-and-mutate.md +8 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/mkdocs.yml +1 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/pyproject.toml +1 -1
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/mainsequence_metatable.egg-info/SOURCES.txt +4 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_sql.py +4 -1
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/operations.py +2 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/restricted_sql.py +21 -2
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/compiled_sql/v1.py +26 -4
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/models.py +3 -0
- mainsequence_metatable-0.1.62.dev93/tests/contracts/test_compiled_result_types.py +61 -0
- mainsequence_metatable-0.1.62.dev93/tests/e2e/test_uuid_results.py +94 -0
- mainsequence_metatable-0.1.62.dev93/tests/integrations/test_sqlite_uuid_results.py +138 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/uv.lock +1 -1
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/design-agent-icons-and-motion/SKILL.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/design-agent-icons-and-motion/agents/openai.yaml +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/design-agent-icons-and-motion/references/metatables-example.html +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.mainsequence/workflows/metatables-api.yaml +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/LICENSE +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0016-impact-preflight.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0017-hosted-request-identity.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0018-table-search.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0023-daily-security-check.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0024-namespace-and-table-access-roles.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0026-atomic-statement-lists.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/client/0025-application-encrypted-columns.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/data-sources.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/reference.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/tables-and-migrations.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/assets/diagrams/namespace-access.svg +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/deploy-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/installation-and-connection.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/catalog-migrations.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/configuration.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/hosted-runtime.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/local-runtime.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/security/index.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/security/ownership-and-sharing.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/security/permissions.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/analysis.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/analyst/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/auth/team_membership.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/bootstrap.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/configuration.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/connection_count.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/error_logging.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/main.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/mcp.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/access_map.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/caller.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/managed_finalize.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_registration.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_search.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/runtime.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/runtime_database.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/access.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/batch_inspection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/connection_pool.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/timescale.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/access_roles.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/security_check_job.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0013_security_check.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0014_access_roles.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0015_namespace_creator.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/bootstrap_timing.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/register_catalog.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/security_check.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/impact.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/models.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/documents.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/embeddings.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/index.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/ranking.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/text.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/worker.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/metatables/configuration.yaml +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/request_timing.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/encryption.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/encryption.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/endpoint.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/envelope_contract.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/sqlite.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/runtime_contract.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/storage_layout_contract.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/analyst/test_agent_surface.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/analyst/test_api_search.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/analyst/test_mcp.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/analyst/test_tools.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_bootstrap_failure_cause.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_caller_endpoint.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_data_source_identity.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_hosted_agent.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_request_identity.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_runtime_database.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_runtime_selection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_team_membership.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_migration.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_schema_validation.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/capabilities.json +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_compiled_statement_lists.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_encryption.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_runtime_contract_compat.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_update_configuration_hash.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_catalog_contract.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_api_endpoint.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_application_owned_migrations.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_data_source_registry.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_encrypted_columns.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_managed_finalize_unchanged.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_migration_metadata_and_downgrade.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_runtime_upgrade.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_statement_lists.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_search_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_search_scale.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_timescale_policies_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_batch_introspection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_connection_reuse.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_request_timing.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_serving_policy.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_sqlite_expanded_in.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_sqlite_statement_lists.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_bootstrap_lock.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_requirements_export.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_access_map.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_deployment_security.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_incremental_security.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_security_check.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_table_queries.py +0 -0
- {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_workload_principals.py +0 -0
|
@@ -176,6 +176,10 @@ label=...)`; a miss rolls back and raises `MetaTableTransactionGuardError`. Neve
|
|
|
176
176
|
put `COMMIT` or savepoints in a list. PostgreSQL and SQLite only; see the query
|
|
177
177
|
guide's "Several statements in one transaction".
|
|
178
178
|
|
|
179
|
+
Select or return `Uuid` columns typed, not cast to text: compiled `Uuid` results come
|
|
180
|
+
back dashed on every engine, while a `CAST` or untyped SQL returns SQLite's stored hex.
|
|
181
|
+
Do not reformat uids in the application to paper over engine differences.
|
|
182
|
+
|
|
179
183
|
To find tables, use `MetaTable.search` as described in the
|
|
180
184
|
[table discovery skill](../metatables-table-discovery/SKILL.md). Legacy convenience
|
|
181
185
|
sharing/label actions are not supported API workflows.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# ADR 0027: Compiled SQL declares its Uuid result columns
|
|
2
|
+
|
|
3
|
+
Status: Accepted.
|
|
4
|
+
|
|
5
|
+
Implementation status: implemented on development for 0.1.62. SQLite is tested in
|
|
6
|
+
process and through the local API. PostgreSQL, MySQL and SQL Server have not been run.
|
|
7
|
+
|
|
8
|
+
Owner: MetaTables API, with the Python client.
|
|
9
|
+
|
|
10
|
+
Related decisions: [ADR 0007](0007-database-enforced-table-access.md) (the API runs
|
|
11
|
+
caller SQL as it is and does not parse it) and
|
|
12
|
+
[ADR 0026](0026-atomic-statement-lists.md) (statement lists).
|
|
13
|
+
Issue: [MetaTables#103](https://github.com/mainsequence-projects/MetaTables/issues/103).
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
|
|
17
|
+
SQLAlchemy stores a `Uuid` column as `uuid` on PostgreSQL and as 32 hex characters
|
|
18
|
+
(`CHAR(32)`) on SQLite and MySQL. PostgreSQL returns a uuid, which the API renders as
|
|
19
|
+
dashed text. SQLite returns the stored hex, and the API passed it on unchanged. The
|
|
20
|
+
same compiled statement therefore returned `95dcdfeb-f8c0-…` on a hosted runtime and
|
|
21
|
+
`95dcdfebf8c0…` on the local one. SQLAlchemy's own result processor would convert the
|
|
22
|
+
hex, but compiled SQL runs without it.
|
|
23
|
+
|
|
24
|
+
The API cannot tell a `Uuid` column from any other `CHAR(32)`, and an expression such
|
|
25
|
+
as a `CAST` has no declared type in the database. Converting every 32-character value,
|
|
26
|
+
or every value that looks like a UUID, would change text that is not one.
|
|
27
|
+
|
|
28
|
+
## Decision
|
|
29
|
+
|
|
30
|
+
The compiled statement names its `Uuid` result columns, and the API renders them.
|
|
31
|
+
|
|
32
|
+
- `compile_sqlalchemy_statement` and `compile_sqlalchemy_statements` record each
|
|
33
|
+
result column whose SQLAlchemy type is `Uuid` in the statement's `result_types`,
|
|
34
|
+
under the name the database returns it as: `{"uid": "uuid"}`. That covers
|
|
35
|
+
`SELECT`, `RETURNING` and `text(...).columns(...)`, and names such as `uid_1` for a
|
|
36
|
+
second `uid`.
|
|
37
|
+
- The API returns each `"uuid"` column as lowercase dashed text, `str(uuid.UUID(value))`,
|
|
38
|
+
on every engine. Text that is not a UUID and `NULL` return unchanged. In a statement
|
|
39
|
+
list, the last statement's `result_types` apply to the rows returned.
|
|
40
|
+
- `"uuid"` is the only result type. The API refuses others with 422, as it refuses
|
|
41
|
+
any unknown field.
|
|
42
|
+
- Only the compiler's types decide. A `CAST` to text, SQL sent to `run_query` and
|
|
43
|
+
other SQL without SQLAlchemy types return what the database returns.
|
|
44
|
+
|
|
45
|
+
A statement with no `Uuid` result columns sends no `result_types`, so its request body
|
|
46
|
+
is unchanged.
|
|
47
|
+
|
|
48
|
+
## Alternatives
|
|
49
|
+
|
|
50
|
+
- **A `CHAR(32)` converter in SQLite.** Converts every such column, `Uuid` or not.
|
|
51
|
+
- **Converting text that looks like a UUID.** Guesses from the data.
|
|
52
|
+
- **Converting in the client.** Raw HTTP callers and the API's own response would
|
|
53
|
+
still differ by engine.
|
|
54
|
+
|
|
55
|
+
## Consequences
|
|
56
|
+
|
|
57
|
+
- A `Uuid` column returns the same text from the local runtime as from a hosted
|
|
58
|
+
PostgreSQL runtime.
|
|
59
|
+
- An API before 0.1.62 refuses a request that carries `result_types` with 422. Deploy
|
|
60
|
+
the API before clients send `Uuid` result columns to it.
|
{mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/index.md
RENAMED
|
@@ -44,6 +44,7 @@ decisions belong in the SDK repository and are linked as dependencies.
|
|
|
44
44
|
| [0023: A daily security check instead of a sweep in every deployment](api/0023-daily-security-check.md) | Accepted; implemented on development; deployment and first scheduled run pending | A deployment sets up only what the new release needs; a daily Job, which administrators can also start, repairs whatever differs from the plan without pausing caller SQL and records its outcome. |
|
|
45
45
|
| [0024: Access roles for namespaces and tables](api/0024-namespace-and-table-access-roles.md) | Accepted; implemented on development (API and Admin); hosted deployment pending | Actions and roles (`metadata_viewer`, `data_viewer`, `data_writer`, `editor`, `owner`) replace Reader/Writer; `namespaces.create` and `tables.create` are checked on the parent, the creator of a namespace owns it, admins hold every action, workloads use access but never manage it, and an ordinary user deploys a new application without an admin. |
|
|
46
46
|
| [0026: Atomic statement lists](api/0026-atomic-statement-lists.md) | Accepted; implemented on development for 0.1.60; SQLite tested, PostgreSQL not yet run | A write may carry up to 32 compiled statements that the API runs in order in one transaction it owns, with optional row expectations; each statement is sent alone and the driver must report the transaction still open after it, so ADR 0007's boundary holds without parsing SQL. PostgreSQL and SQLite only. |
|
|
47
|
+
| [0027: Compiled SQL declares its Uuid result columns](api/0027-compiled-sql-result-types.md) | Accepted; implemented on development for 0.1.62; SQLite tested, other engines not yet run | The compiler names a statement's `Uuid` result columns in `result_types` and the API returns them as dashed text on every engine, as PostgreSQL does; only declared types decide, never the stored text. |
|
|
47
48
|
|
|
48
49
|
## Agents
|
|
49
50
|
|
{mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/openapi.json
RENAMED
|
@@ -3892,6 +3892,21 @@
|
|
|
3892
3892
|
"title": "Paramstyle",
|
|
3893
3893
|
"type": "string"
|
|
3894
3894
|
},
|
|
3895
|
+
"result_types": {
|
|
3896
|
+
"anyOf": [
|
|
3897
|
+
{
|
|
3898
|
+
"additionalProperties": {
|
|
3899
|
+
"const": "uuid",
|
|
3900
|
+
"type": "string"
|
|
3901
|
+
},
|
|
3902
|
+
"type": "object"
|
|
3903
|
+
},
|
|
3904
|
+
{
|
|
3905
|
+
"type": "null"
|
|
3906
|
+
}
|
|
3907
|
+
],
|
|
3908
|
+
"title": "Result Types"
|
|
3909
|
+
},
|
|
3895
3910
|
"sql": {
|
|
3896
3911
|
"maxLength": 1000000,
|
|
3897
3912
|
"minLength": 1,
|
|
@@ -4705,6 +4720,21 @@
|
|
|
4705
4720
|
"title": "Paramstyle",
|
|
4706
4721
|
"type": "string"
|
|
4707
4722
|
},
|
|
4723
|
+
"result_types": {
|
|
4724
|
+
"anyOf": [
|
|
4725
|
+
{
|
|
4726
|
+
"additionalProperties": {
|
|
4727
|
+
"const": "uuid",
|
|
4728
|
+
"type": "string"
|
|
4729
|
+
},
|
|
4730
|
+
"type": "object"
|
|
4731
|
+
},
|
|
4732
|
+
{
|
|
4733
|
+
"type": "null"
|
|
4734
|
+
}
|
|
4735
|
+
],
|
|
4736
|
+
"title": "Result Types"
|
|
4737
|
+
},
|
|
4708
4738
|
"sql": {
|
|
4709
4739
|
"maxLength": 1000000,
|
|
4710
4740
|
"minLength": 1,
|
|
@@ -54,6 +54,14 @@ constraints to identify the same row. Temporal parameters carry type information
|
|
|
54
54
|
For PostgreSQL inserts, the compiler replaces an explicit `None` UUID primary key
|
|
55
55
|
with `DEFAULT`; the database must define that default.
|
|
56
56
|
|
|
57
|
+
A `Uuid` value binds as a `uuid.UUID` or as text, dashed or not; on SQLite and MySQL,
|
|
58
|
+
text that is not a UUID raises `ValueError` naming the parameter. A `Uuid` result
|
|
59
|
+
column returns as lowercase dashed text on every engine, although SQLite and MySQL
|
|
60
|
+
store 32 hex characters: the compiler names those columns in the statement's
|
|
61
|
+
`result_types` and the API renders them ([ADR 0027](../adr/api/0027-compiled-sql-result-types.md)).
|
|
62
|
+
A `CAST` to text and SQL without SQLAlchemy types, such as `run_query`, return what
|
|
63
|
+
the database stores.
|
|
64
|
+
|
|
57
65
|
`table.run_query(sql)` submits a read-only request using that table's DataSource.
|
|
58
66
|
It can query any table you can read in the same runtime. Compiled operations with
|
|
59
67
|
`operation="select"` also use the read identity; insert/update/upsert/delete select
|
|
@@ -90,6 +90,7 @@ nav:
|
|
|
90
90
|
- "0023: Daily security check": adr/api/0023-daily-security-check.md
|
|
91
91
|
- "0024: Namespace and table access roles": adr/api/0024-namespace-and-table-access-roles.md
|
|
92
92
|
- "0026: Atomic statement lists": adr/api/0026-atomic-statement-lists.md
|
|
93
|
+
- "0027: Compiled SQL result types": adr/api/0027-compiled-sql-result-types.md
|
|
93
94
|
- Agents:
|
|
94
95
|
- "0019: MetaTables Analyst agent": adr/agent/0019-metatables-analyst-agent.md
|
|
95
96
|
- "0020: The Analyst reads as its requester": adr/agent/0020-analyst-reads-as-its-requester.md
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "mainsequence-metatable"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.62.dev93"
|
|
8
8
|
description = "Main Sequence MetaTables Python client and standalone API"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13"
|
|
@@ -50,6 +50,7 @@ docs/adr/api/0022-concurrent-requests-and-connection-reuse.md
|
|
|
50
50
|
docs/adr/api/0023-daily-security-check.md
|
|
51
51
|
docs/adr/api/0024-namespace-and-table-access-roles.md
|
|
52
52
|
docs/adr/api/0026-atomic-statement-lists.md
|
|
53
|
+
docs/adr/api/0027-compiled-sql-result-types.md
|
|
53
54
|
docs/adr/client/0003-api-endpoint-resolution.md
|
|
54
55
|
docs/adr/client/0011-cli-local-development-with-managed-admin.md
|
|
55
56
|
docs/adr/client/0025-application-encrypted-columns.md
|
|
@@ -490,6 +491,7 @@ tests/contracts/capabilities.json
|
|
|
490
491
|
tests/contracts/client_signatures.json
|
|
491
492
|
tests/contracts/database_operations.json
|
|
492
493
|
tests/contracts/test_bounded_transfer.py
|
|
494
|
+
tests/contracts/test_compiled_result_types.py
|
|
493
495
|
tests/contracts/test_compiled_statement_lists.py
|
|
494
496
|
tests/contracts/test_compiler_runtime_source.py
|
|
495
497
|
tests/contracts/test_encryption.py
|
|
@@ -566,6 +568,7 @@ tests/e2e/test_update_chunk_insert_client_api.py
|
|
|
566
568
|
tests/e2e/test_update_dependency_priority_client_api.py
|
|
567
569
|
tests/e2e/test_update_index_statistics_client_api.py
|
|
568
570
|
tests/e2e/test_update_registration_client_api.py
|
|
571
|
+
tests/e2e/test_uuid_results.py
|
|
569
572
|
tests/examples/test_documented_examples.py
|
|
570
573
|
tests/examples/test_postgresql_examples.py
|
|
571
574
|
tests/examples/test_setup_launch.py
|
|
@@ -586,6 +589,7 @@ tests/integrations/test_source_validation.py
|
|
|
586
589
|
tests/integrations/test_sqlite_expanded_in.py
|
|
587
590
|
tests/integrations/test_sqlite_operations.py
|
|
588
591
|
tests/integrations/test_sqlite_statement_lists.py
|
|
592
|
+
tests/integrations/test_sqlite_uuid_results.py
|
|
589
593
|
tests/labels/test_labels.py
|
|
590
594
|
tests/operations/test_bootstrap_lock.py
|
|
591
595
|
tests/operations/test_create_table_operation.py
|
|
@@ -63,6 +63,8 @@ class Statement(BaseModel):
|
|
|
63
63
|
sql: str = Field(min_length=1, max_length=1000000)
|
|
64
64
|
parameters: dict[str, Any] | list[Any] = Field(default_factory=dict)
|
|
65
65
|
parameter_types: dict[str, str] | None = None
|
|
66
|
+
# Result columns the API renders by type; "uuid" is dashed text on every engine (ADR 0027).
|
|
67
|
+
result_types: dict[str, Literal["uuid"]] | None = None
|
|
66
68
|
paramstyle: Literal["pyformat", "named", "qmark"] = "pyformat"
|
|
67
69
|
|
|
68
70
|
|
|
@@ -157,6 +159,7 @@ def execute_operation(
|
|
|
157
159
|
sql_text=payload.statement.sql,
|
|
158
160
|
parameters=payload.statement.parameters,
|
|
159
161
|
parameter_types=payload.statement.parameter_types,
|
|
162
|
+
result_types=payload.statement.result_types,
|
|
160
163
|
**payload.limits.model_dump(),
|
|
161
164
|
)
|
|
162
165
|
result["data_source_uid"] = str(payload.data_source_uid)
|
|
@@ -217,7 +220,7 @@ def execute_transaction(
|
|
|
217
220
|
operation=payload.operation,
|
|
218
221
|
statements=[
|
|
219
222
|
statement.model_dump(
|
|
220
|
-
include={"sql", "parameters", "parameter_types", "expect_rows", "label"}
|
|
223
|
+
include={"sql", "parameters", "parameter_types", "result_types", "expect_rows", "label"}
|
|
221
224
|
)
|
|
222
225
|
for statement in payload.statements
|
|
223
226
|
],
|
|
@@ -160,6 +160,7 @@ def execute_sql(
|
|
|
160
160
|
operation="select",
|
|
161
161
|
parameters=None,
|
|
162
162
|
parameter_types=None,
|
|
163
|
+
result_types=None,
|
|
163
164
|
max_rows=1000,
|
|
164
165
|
offset=0,
|
|
165
166
|
statement_timeout_ms=15000,
|
|
@@ -171,6 +172,7 @@ def execute_sql(
|
|
|
171
172
|
operation=operation,
|
|
172
173
|
parameters=parameters,
|
|
173
174
|
parameter_types=parameter_types,
|
|
175
|
+
result_types=result_types,
|
|
174
176
|
max_rows=max_rows,
|
|
175
177
|
offset=offset,
|
|
176
178
|
statement_timeout_ms=statement_timeout_ms,
|
|
@@ -38,6 +38,22 @@ def json_value(value):
|
|
|
38
38
|
return value
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
def typed_row(row, result_types):
|
|
42
|
+
"""Render the result columns the compiler typed, whatever the engine returns (ADR 0027).
|
|
43
|
+
|
|
44
|
+
SQLite and MySQL return a ``Uuid`` as the 32 hex characters they store; a "uuid"
|
|
45
|
+
column returns dashed, as PostgreSQL's does. Text that is not a UUID returns unchanged.
|
|
46
|
+
"""
|
|
47
|
+
for name, token in result_types.items():
|
|
48
|
+
value = row.get(name)
|
|
49
|
+
if token == "uuid" and isinstance(value, str):
|
|
50
|
+
try:
|
|
51
|
+
row[name] = str(UUID(value))
|
|
52
|
+
except ValueError:
|
|
53
|
+
pass
|
|
54
|
+
return row
|
|
55
|
+
|
|
56
|
+
|
|
41
57
|
def parameters_for(values, types, dialect):
|
|
42
58
|
values = dict(values or {}) if isinstance(values, dict) or values is None else list(values)
|
|
43
59
|
for key, token in (types or {}).items():
|
|
@@ -126,12 +142,14 @@ class RestrictedSQL:
|
|
|
126
142
|
operation="select",
|
|
127
143
|
parameters=None,
|
|
128
144
|
parameter_types=None,
|
|
145
|
+
result_types=None,
|
|
129
146
|
max_rows=1000,
|
|
130
147
|
offset=0,
|
|
131
148
|
statement_timeout_ms=15000,
|
|
132
149
|
raw_query=False,
|
|
133
150
|
):
|
|
134
|
-
statement = dict(sql=sql_text, parameters=parameters, parameter_types=parameter_types
|
|
151
|
+
statement = dict(sql=sql_text, parameters=parameters, parameter_types=parameter_types,
|
|
152
|
+
result_types=result_types)
|
|
135
153
|
return self._run(identity, [statement], operation=operation, max_rows=max_rows,
|
|
136
154
|
offset=offset, statement_timeout_ms=statement_timeout_ms, transaction=False)
|
|
137
155
|
|
|
@@ -237,6 +255,7 @@ class RestrictedSQL:
|
|
|
237
255
|
rows, full, budget = [], False, PageBudget()
|
|
238
256
|
if cursor.description:
|
|
239
257
|
names = [column[0] for column in cursor.description]
|
|
258
|
+
result_types = statement.get("result_types") or {}
|
|
240
259
|
remaining = offset
|
|
241
260
|
while remaining:
|
|
242
261
|
if fetchone() is None:
|
|
@@ -249,7 +268,7 @@ class RestrictedSQL:
|
|
|
249
268
|
incomplete = False
|
|
250
269
|
break
|
|
251
270
|
seen += 1
|
|
252
|
-
row = json_value(dict(zip(names, row)))
|
|
271
|
+
row = json_value(typed_row(dict(zip(names, row)), result_types))
|
|
253
272
|
try:
|
|
254
273
|
fits = budget.add(row)
|
|
255
274
|
except TransferError:
|
|
@@ -33,6 +33,7 @@ def build_operation(
|
|
|
33
33
|
sql: str,
|
|
34
34
|
parameters: Mapping[str, Any] | Sequence[Any] | None = None,
|
|
35
35
|
parameter_types: Mapping[str, str] | None = None,
|
|
36
|
+
result_types: Mapping[str, str] | None = None,
|
|
36
37
|
data_source_uid: str,
|
|
37
38
|
dialect: MetaTableCompiledSQLDialect = "postgresql",
|
|
38
39
|
paramstyle: MetaTableCompiledSQLParamstyle = "pyformat",
|
|
@@ -55,6 +56,7 @@ def build_operation(
|
|
|
55
56
|
sql=sql,
|
|
56
57
|
parameters=statement_parameters,
|
|
57
58
|
parameter_types=dict(parameter_types) if parameter_types is not None else None,
|
|
59
|
+
result_types=dict(result_types) if result_types else None,
|
|
58
60
|
paramstyle=paramstyle,
|
|
59
61
|
),
|
|
60
62
|
data_source_uid=data_source_uid,
|
|
@@ -146,7 +148,7 @@ def _compile(
|
|
|
146
148
|
dialect: str,
|
|
147
149
|
paramstyle: str,
|
|
148
150
|
compile_kwargs: Mapping[str, Any] | None,
|
|
149
|
-
) -> tuple[str, dict[str, Any] | list[Any], dict[str, str]]:
|
|
151
|
+
) -> tuple[str, dict[str, Any] | list[Any], dict[str, str], dict[str, str]]:
|
|
150
152
|
_refuse_data_modifying_ctes(statement, dialect)
|
|
151
153
|
module = _DIALECTS[dialect][0]
|
|
152
154
|
resolved_compile_kwargs = {"render_postcompile": True}
|
|
@@ -200,7 +202,7 @@ def _compile(
|
|
|
200
202
|
order = compiled.positiontup or []
|
|
201
203
|
parameters = [parameters[name] for name in order]
|
|
202
204
|
parameter_types = {str(i): parameter_types[name] for i, name in enumerate(order) if name in parameter_types}
|
|
203
|
-
return str(compiled), parameters, parameter_types
|
|
205
|
+
return str(compiled), parameters, parameter_types, _compiled_result_types(compiled)
|
|
204
206
|
|
|
205
207
|
|
|
206
208
|
@pin_api_endpoint
|
|
@@ -216,7 +218,7 @@ def compile_sqlalchemy_statement(
|
|
|
216
218
|
) -> MetaTableCompiledSQLOperation:
|
|
217
219
|
"""Compile SQLAlchemy SQL for the selected runtime DataSource."""
|
|
218
220
|
data_source_uid, dialect, paramstyle = _resolve_target(data_source_uid, dialect, paramstyle)
|
|
219
|
-
sql, parameters, parameter_types = _compile(
|
|
221
|
+
sql, parameters, parameter_types, result_types = _compile(
|
|
220
222
|
statement, dialect=dialect, paramstyle=paramstyle, compile_kwargs=compile_kwargs
|
|
221
223
|
)
|
|
222
224
|
return build_operation(
|
|
@@ -224,6 +226,7 @@ def compile_sqlalchemy_statement(
|
|
|
224
226
|
sql=sql,
|
|
225
227
|
parameters=parameters,
|
|
226
228
|
parameter_types=parameter_types,
|
|
229
|
+
result_types=result_types,
|
|
227
230
|
data_source_uid=data_source_uid,
|
|
228
231
|
dialect=dialect,
|
|
229
232
|
paramstyle=paramstyle,
|
|
@@ -268,13 +271,14 @@ def compile_sqlalchemy_statements(
|
|
|
268
271
|
)
|
|
269
272
|
compiled = []
|
|
270
273
|
for step in steps:
|
|
271
|
-
sql, parameters, parameter_types = _compile(
|
|
274
|
+
sql, parameters, parameter_types, result_types = _compile(
|
|
272
275
|
step.statement, dialect=dialect, paramstyle=paramstyle, compile_kwargs=compile_kwargs
|
|
273
276
|
)
|
|
274
277
|
compiled.append(MetaTableTransactionStatement(
|
|
275
278
|
sql=sql,
|
|
276
279
|
parameters=parameters,
|
|
277
280
|
parameter_types=parameter_types or None,
|
|
281
|
+
result_types=result_types or None,
|
|
278
282
|
paramstyle=paramstyle,
|
|
279
283
|
expect_rows=step.expect_rows,
|
|
280
284
|
label=step.label,
|
|
@@ -312,6 +316,24 @@ def _uuid_from_text(name: str, value: str):
|
|
|
312
316
|
) from None
|
|
313
317
|
|
|
314
318
|
|
|
319
|
+
def _compiled_result_types(compiled: Any) -> dict[str, str]:
|
|
320
|
+
"""The statement's ``Uuid`` result columns, by the name the database returns (ADR 0027).
|
|
321
|
+
|
|
322
|
+
SQLite and MySQL store a ``Uuid`` as 32 hex characters and return that text, while
|
|
323
|
+
PostgreSQL returns a uuid that the API renders dashed. The API renders the columns
|
|
324
|
+
named here dashed on every engine. Only declared types decide; the text never does.
|
|
325
|
+
"""
|
|
326
|
+
from sqlalchemy import Uuid
|
|
327
|
+
|
|
328
|
+
# The rendered result names (uid_1 for a second uid, max_1 for an unlabeled max()),
|
|
329
|
+
# in the order the database returns them. SQLAlchemy offers no public accessor.
|
|
330
|
+
return {
|
|
331
|
+
entry.keyname: "uuid"
|
|
332
|
+
for entry in compiled._result_columns or ()
|
|
333
|
+
if isinstance(entry.type, Uuid)
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
|
|
315
337
|
def _rendered_bind_types(compiled: Any, expansion: Mapping[str, Sequence[str]]):
|
|
316
338
|
"""Each rendered parameter's name with its bind's type, expanded IN values included.
|
|
317
339
|
|
{mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/models.py
RENAMED
|
@@ -538,6 +538,9 @@ class MetaTableStatementPayload(BasePydanticModel):
|
|
|
538
538
|
sql: str = Field(..., min_length=1)
|
|
539
539
|
parameters: dict[str, Any] | list[Any] = Field(default_factory=dict)
|
|
540
540
|
parameter_types: dict[str, str] | None = None
|
|
541
|
+
# Result columns, by the name the database returns them under, that the API renders
|
|
542
|
+
# by type: "uuid" returns dashed text on every engine, as PostgreSQL does (ADR 0027).
|
|
543
|
+
result_types: dict[str, Literal["uuid"]] | None = None
|
|
541
544
|
paramstyle: MetaTableCompiledSQLParamstyle = "pyformat"
|
|
542
545
|
|
|
543
546
|
@model_validator(mode="after")
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""The compiler names a statement's Uuid result columns for the API (ADR 0027, MetaTables #103)."""
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
from pydantic import ValidationError
|
|
5
|
+
from sqlalchemy import Column, MetaData, String, Table, Uuid, cast, insert, select, update
|
|
6
|
+
|
|
7
|
+
from metatables import MetaTableCompiledSQLOperation
|
|
8
|
+
from metatables.api.app.routes.table_sql import CompiledOperation, CompiledTransaction
|
|
9
|
+
from metatables.compiled_sql.v1 import compile_sqlalchemy_statement, compile_sqlalchemy_statements
|
|
10
|
+
from metatables.models import _payload_json
|
|
11
|
+
|
|
12
|
+
UID = "00000000-0000-0000-0000-000000000001"
|
|
13
|
+
item = Table(
|
|
14
|
+
"item", MetaData(),
|
|
15
|
+
Column("uid", Uuid(as_uuid=True), primary_key=True),
|
|
16
|
+
Column("parent_uid", Uuid(as_uuid=False)),
|
|
17
|
+
Column("name", String),
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def compile(statement, dialect="sqlite", operation="select"):
|
|
22
|
+
return compile_sqlalchemy_statement(statement, operation=operation, data_source_uid=UID, dialect=dialect)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@pytest.mark.parametrize("dialect", ["postgresql", "sqlite", "mysql", "mssql"])
|
|
26
|
+
def test_uuid_result_columns_are_named_on_every_dialect(dialect):
|
|
27
|
+
statement = compile(select(item.c.uid, item.c.parent_uid, item.c.name), dialect).statement
|
|
28
|
+
assert statement.result_types == {"uid": "uuid", "parent_uid": "uuid"}
|
|
29
|
+
returning = insert(item).values(uid=None, name="x").returning(item.c.uid.label("key"))
|
|
30
|
+
assert compile(returning, dialect, "insert").statement.result_types == {"key": "uuid"}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_only_uuid_typed_results_are_named():
|
|
34
|
+
assert compile(select(cast(item.c.uid, String).label("text"))).statement.result_types is None
|
|
35
|
+
assert compile(update(item).values(name="x"), operation="update").statement.result_types is None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_a_statement_without_uuid_results_keeps_its_wire_form():
|
|
39
|
+
"""APIs before 0.1.62 forbid unknown fields; only Uuid results add one."""
|
|
40
|
+
assert "result_types" not in _payload_json(compile(select(item.c.name)))["statement"]
|
|
41
|
+
assert _payload_json(compile(select(item.c.uid)))["statement"]["result_types"] == {"uid": "uuid"}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def test_each_statement_of_a_list_carries_its_own_result_types():
|
|
45
|
+
transaction = compile_sqlalchemy_statements(
|
|
46
|
+
[update(item).values(name="x"), insert(item).values(uid=None).returning(item.c.uid)],
|
|
47
|
+
operation="insert", data_source_uid=UID, dialect="sqlite",
|
|
48
|
+
)
|
|
49
|
+
assert [statement.result_types for statement in transaction.statements] == [None, {"uid": "uuid"}]
|
|
50
|
+
wire = CompiledTransaction.model_validate(_payload_json(transaction))
|
|
51
|
+
assert wire.statements[1].result_types == {"uid": "uuid"}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def test_client_and_api_accept_only_known_result_types():
|
|
55
|
+
payload = _payload_json(compile(select(item.c.uid)))
|
|
56
|
+
assert CompiledOperation.model_validate(payload).statement.result_types == {"uid": "uuid"}
|
|
57
|
+
payload["statement"]["result_types"] = {"uid": "uuid4"}
|
|
58
|
+
with pytest.raises(ValidationError):
|
|
59
|
+
CompiledOperation.model_validate(payload)
|
|
60
|
+
with pytest.raises(ValidationError):
|
|
61
|
+
MetaTableCompiledSQLOperation.model_validate(payload)
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"""Uuid result columns return dashed through the real client and API (ADR 0027, MetaTables #103).
|
|
2
|
+
|
|
3
|
+
An application migrates a table with ``Uuid`` columns. ``execute_operation`` and
|
|
4
|
+
``execute_transaction`` return them as dashed text, as PostgreSQL does, although SQLite
|
|
5
|
+
stores 32 hex characters. The PostgreSQL case runs only with the disposable cluster of
|
|
6
|
+
`scripts/test_postgresql.py`.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import importlib
|
|
12
|
+
import sys
|
|
13
|
+
import uuid
|
|
14
|
+
|
|
15
|
+
import pytest
|
|
16
|
+
from sqlalchemy import MetaData, insert, select, update
|
|
17
|
+
|
|
18
|
+
from metatables import MetaTable
|
|
19
|
+
from metatables.compiled_sql.v1 import compile_sqlalchemy_statement, compile_sqlalchemy_statements
|
|
20
|
+
from metatables.migrations.scaffold import scaffold_migration_package
|
|
21
|
+
from tests.e2e.test_application_owned_migrations import author, forget
|
|
22
|
+
from tests.e2e.test_sqlite_runtime import api_runtime as api_runtime
|
|
23
|
+
|
|
24
|
+
PACKAGE = "uid_app"
|
|
25
|
+
MODELS = '''
|
|
26
|
+
import uuid
|
|
27
|
+
|
|
28
|
+
from sqlalchemy import MetaData, String, Uuid
|
|
29
|
+
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
|
30
|
+
from metatables import PlatformManagedMetaTable
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Base(DeclarativeBase):
|
|
34
|
+
metadata = MetaData()
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class Position(PlatformManagedMetaTable, Base):
|
|
38
|
+
__tablename__ = "uid_app_position"
|
|
39
|
+
__metatable_identifier__ = "uid_app.position"
|
|
40
|
+
__metatable_namespace__ = "uid_app"
|
|
41
|
+
uid: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), primary_key=True)
|
|
42
|
+
account_uid: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), nullable=False)
|
|
43
|
+
symbol: Mapped[str] = mapped_column(String(12), nullable=False)
|
|
44
|
+
'''
|
|
45
|
+
POSITION = uuid.UUID("95dcdfeb-f8c0-4b33-b942-4ecc3fc73431")
|
|
46
|
+
ACCOUNT = uuid.UUID("0f3c2b7e-5d41-4c1a-9e57-3a1f0d6b8c22")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@pytest.fixture
|
|
50
|
+
def application(tmp_path, monkeypatch):
|
|
51
|
+
scaffold = scaffold_migration_package(
|
|
52
|
+
code_repository_root=tmp_path, package=PACKAGE, module=f"{PACKAGE}.migrations", namespace=PACKAGE,
|
|
53
|
+
metadata_ref=f"{PACKAGE}.models:Base.metadata", alembic_version_schema=None,
|
|
54
|
+
alembic_version_table_name=f"{PACKAGE}_version", alembic_version_identifier=f"{PACKAGE}.version",
|
|
55
|
+
)
|
|
56
|
+
(scaffold.root.parent / "__init__.py").touch()
|
|
57
|
+
(tmp_path / "src" / PACKAGE / "models.py").write_text(MODELS)
|
|
58
|
+
(scaffold.root / "registry.py").write_text(
|
|
59
|
+
f"from {PACKAGE}.models import Position\n"
|
|
60
|
+
"def metatable_provider_models():\n return [Position]\n"
|
|
61
|
+
)
|
|
62
|
+
monkeypatch.syspath_prepend(str(tmp_path / "src"))
|
|
63
|
+
yield importlib.import_module(f"{PACKAGE}.migrations").migration
|
|
64
|
+
forget([PACKAGE])
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@pytest.mark.parametrize("api_runtime", ["sqlite", "sqlite_override", "postgresql"], indirect=True)
|
|
68
|
+
def test_uuid_results_are_dashed_on_every_engine(api_runtime, application):
|
|
69
|
+
from metatables.migrations.runner import run_migration
|
|
70
|
+
|
|
71
|
+
author(application)
|
|
72
|
+
assert run_migration(f"{PACKAGE}.migrations:migration")["migrated"]
|
|
73
|
+
model = sys.modules[f"{PACKAGE}.models"].Position
|
|
74
|
+
position = model.__table__.to_metadata(MetaData(), schema=None)
|
|
75
|
+
dashed = {"uid": str(POSITION), "account_uid": str(ACCOUNT)}
|
|
76
|
+
|
|
77
|
+
inserted = MetaTable.execute_operation(compile_sqlalchemy_statement(
|
|
78
|
+
insert(position).values(uid=POSITION, account_uid=ACCOUNT, symbol="A")
|
|
79
|
+
.returning(position.c.uid, position.c.account_uid),
|
|
80
|
+
operation="insert",
|
|
81
|
+
))
|
|
82
|
+
assert inserted["rows"] == [dashed]
|
|
83
|
+
# A UUID sent as hex text finds the row and returns dashed (#101, #103).
|
|
84
|
+
selected = MetaTable.execute_operation(compile_sqlalchemy_statement(
|
|
85
|
+
select(position.c.uid, position.c.account_uid).where(position.c.account_uid == ACCOUNT.hex),
|
|
86
|
+
operation="select",
|
|
87
|
+
))
|
|
88
|
+
assert selected["rows"] == [dashed]
|
|
89
|
+
listed = MetaTable.execute_transaction(compile_sqlalchemy_statements(
|
|
90
|
+
[update(position).values(symbol="B").where(position.c.uid == POSITION).returning(position.c.uid,
|
|
91
|
+
position.c.account_uid)],
|
|
92
|
+
operation="update",
|
|
93
|
+
))
|
|
94
|
+
assert listed["rows"] == [dashed]
|