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.
Files changed (621) hide show
  1. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/client/metatables-meta-tables/SKILL.md +4 -0
  2. {mainsequence_metatable-0.1.61.dev92/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.62.dev93}/PKG-INFO +1 -1
  3. mainsequence_metatable-0.1.62.dev93/docs/adr/api/0027-compiled-sql-result-types.md +60 -0
  4. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/index.md +1 -0
  5. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/openapi.json +30 -0
  6. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/query-and-mutate.md +8 -0
  7. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/mkdocs.yml +1 -0
  8. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/pyproject.toml +1 -1
  9. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
  10. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/mainsequence_metatable.egg-info/SOURCES.txt +4 -0
  11. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_sql.py +4 -1
  12. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/operations.py +2 -0
  13. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/restricted_sql.py +21 -2
  14. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/compiled_sql/v1.py +26 -4
  15. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/models.py +3 -0
  16. mainsequence_metatable-0.1.62.dev93/tests/contracts/test_compiled_result_types.py +61 -0
  17. mainsequence_metatable-0.1.62.dev93/tests/e2e/test_uuid_results.py +94 -0
  18. mainsequence_metatable-0.1.62.dev93/tests/integrations/test_sqlite_uuid_results.py +138 -0
  19. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/uv.lock +1 -1
  20. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  21. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
  22. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
  23. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  24. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +0 -0
  25. {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
  26. {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
  27. {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
  28. {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
  29. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
  30. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
  31. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
  32. {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
  33. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/.mainsequence/workflows/metatables-api.yaml +0 -0
  34. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/LICENSE +0 -0
  35. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/MANIFEST.in +0 -0
  36. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/README.md +0 -0
  37. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/alembic.ini +0 -0
  38. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/api/metatables/main.py +0 -0
  39. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/compose.database-tests.yml +0 -0
  40. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
  41. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
  42. {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
  43. {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
  44. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  45. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  46. {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
  47. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  48. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
  49. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  50. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  51. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  52. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0009-shared-credential-store.md +0 -0
  53. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  54. {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
  55. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  56. {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
  57. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  58. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0016-impact-preflight.md +0 -0
  59. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0017-hosted-request-identity.md +0 -0
  60. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
  61. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0018-table-search.md +0 -0
  62. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
  63. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0023-daily-security-check.md +0 -0
  64. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0024-namespace-and-table-access-roles.md +0 -0
  65. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/api/0026-atomic-statement-lists.md +0 -0
  66. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  67. {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
  68. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/adr/client/0025-application-encrypted-columns.md +0 -0
  69. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/authentication-and-errors.md +0 -0
  70. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/data-sources.md +0 -0
  71. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/overview.md +0 -0
  72. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/reference.md +0 -0
  73. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/tables-and-migrations.md +0 -0
  74. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/api/time-index-and-updates.md +0 -0
  75. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/assets/branding/metatables.svg +0 -0
  76. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/assets/diagrams/local-client-experience.svg +0 -0
  77. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/assets/diagrams/namespace-access.svg +0 -0
  78. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/bounded-transfers.md +0 -0
  79. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/build-an-updater.md +0 -0
  80. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/define-and-migrate-tables.md +0 -0
  81. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/deploy-application-migrations.md +0 -0
  82. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/installation-and-connection.md +0 -0
  83. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/local-storage.md +0 -0
  84. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/quickstart.md +0 -0
  85. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/read-existing-time-index-tables.md +0 -0
  86. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/register-existing-tables.md +0 -0
  87. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/tutorial.md +0 -0
  88. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/client/upgrade-legacy-app.md +0 -0
  89. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/architecture.md +0 -0
  90. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/data-sources.md +0 -0
  91. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/identity-and-scope.md +0 -0
  92. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/permissions-namespaces-labels.md +0 -0
  93. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/runs-and-execution-graphs.md +0 -0
  94. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  95. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/concepts/time-index-tables-and-updates.md +0 -0
  96. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/contributing/architecture-and-boundaries.md +0 -0
  97. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/contributing/database-backends.md +0 -0
  98. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/contributing/documentation.md +0 -0
  99. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/contributing/releasing.md +0 -0
  100. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/contributing/testing.md +0 -0
  101. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/README.md +0 -0
  102. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/__init__.py +0 -0
  103. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/bounded_reader.py +0 -0
  104. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/data_sources/README.md +0 -0
  105. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/data_sources/mssql.json +0 -0
  106. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/data_sources/mysql.json +0 -0
  107. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/data_sources/postgresql.json +0 -0
  108. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/data_sources/register.py +0 -0
  109. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/external_table.py +0 -0
  110. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/README.md +0 -0
  111. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/__init__.py +0 -0
  112. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/__main__.py +0 -0
  113. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/migrations/__init__.py +0 -0
  114. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/migrations/env.py +0 -0
  115. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/migrations/script.py.mako +0 -0
  116. {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
  117. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/local_app/tables.py +0 -0
  118. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/query.py +0 -0
  119. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/quickstart.py +0 -0
  120. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/reader.py +0 -0
  121. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/scripts/__init__.py +0 -0
  122. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/scripts/setup_metatables.py +0 -0
  123. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tables.py +0 -0
  124. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/README.md +0 -0
  125. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/__init__.py +0 -0
  126. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/__main__.py +0 -0
  127. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/data/README.md +0 -0
  128. {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
  129. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/frames.py +0 -0
  130. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/__init__.py +0 -0
  131. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/env.py +0 -0
  132. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/registry.py +0 -0
  133. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  134. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  135. {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
  136. {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
  137. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  138. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/operations.py +0 -0
  139. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/tables.py +0 -0
  140. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/tutorial/updaters.py +0 -0
  141. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/examples/updater.py +0 -0
  142. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/index.md +0 -0
  143. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/catalog-migrations.md +0 -0
  144. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/configuration.md +0 -0
  145. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/hosted-runtime.md +0 -0
  146. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/local-runtime.md +0 -0
  147. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/recovery-and-observability.md +0 -0
  148. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/run-history.md +0 -0
  149. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/operations/run-logs.md +0 -0
  150. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/reference/capabilities.md +0 -0
  151. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/reference/cli.md +0 -0
  152. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/reference/python.md +0 -0
  153. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/security/index.md +0 -0
  154. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/security/ownership-and-sharing.md +0 -0
  155. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/docs/security/permissions.md +0 -0
  156. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/__init__.py +0 -0
  157. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/build_reference.py +0 -0
  158. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_boundaries.py +0 -0
  159. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_client_api_coverage.py +0 -0
  160. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_distribution_sources.py +0 -0
  161. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_docs.py +0 -0
  162. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_examples_debug.py +0 -0
  163. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/check_project.py +0 -0
  164. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/dev_release_version.py +0 -0
  165. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/test_databases.py +0 -0
  166. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/scripts/test_postgresql.py +0 -0
  167. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/setup.cfg +0 -0
  168. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  169. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  170. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  171. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  172. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/__init__.py +0 -0
  173. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/_admin_source.json +0 -0
  174. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/_build.py +0 -0
  175. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/_skill_bundle.py +0 -0
  176. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/analysis.py +0 -0
  177. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/analyst/__init__.py +0 -0
  178. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/__init__.py +0 -0
  179. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/__init__.py +0 -0
  180. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/auth/__init__.py +0 -0
  181. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/auth/boundary.py +0 -0
  182. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/auth/local_actor.py +0 -0
  183. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/auth/team_membership.py +0 -0
  184. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/bootstrap.py +0 -0
  185. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/configuration.py +0 -0
  186. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/connection_count.py +0 -0
  187. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/credential_admin.py +0 -0
  188. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/development.py +0 -0
  189. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/development_client.py +0 -0
  190. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/error_logging.py +0 -0
  191. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/main.py +0 -0
  192. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/mcp.py +0 -0
  193. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/platform_cache.py +0 -0
  194. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/__init__.py +0 -0
  195. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/access_map.py +0 -0
  196. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/caller.py +0 -0
  197. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/column_search.py +0 -0
  198. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/contract_validation.py +0 -0
  199. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/data_sources.py +0 -0
  200. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  201. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/migration_connection.py +0 -0
  202. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/namespaces.py +0 -0
  203. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/run_logs.py +0 -0
  204. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/runtime_context.py +0 -0
  205. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/schema_graph.py +0 -0
  206. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/security.py +0 -0
  207. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_cascade.py +0 -0
  208. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_crud.py +0 -0
  209. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_delete.py +0 -0
  210. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_filter.py +0 -0
  211. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_import.py +0 -0
  212. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_introspection.py +0 -0
  213. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_patch.py +0 -0
  214. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_registration.py +0 -0
  215. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_response.py +0 -0
  216. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_search.py +0 -0
  217. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_search_document.py +0 -0
  218. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  219. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  220. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  221. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  222. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  223. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_batch.py +0 -0
  224. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  225. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_constants.py +0 -0
  226. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_crud.py +0 -0
  227. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_details.py +0 -0
  228. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_graph.py +0 -0
  229. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  230. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_registration.py +0 -0
  231. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_runs.py +0 -0
  232. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/routes/update_statistics.py +0 -0
  233. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/runtime.py +0 -0
  234. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/runtime_control.py +0 -0
  235. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/runtime_database.py +0 -0
  236. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/source_passwords.py +0 -0
  237. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/app/transfer.py +0 -0
  238. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/__init__.py +0 -0
  239. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/__init__.py +0 -0
  240. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/access.py +0 -0
  241. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  242. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  243. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  244. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  245. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  246. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  247. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  248. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  249. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  250. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  251. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  252. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  253. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  254. {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
  255. {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
  256. {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
  257. {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
  258. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  259. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  260. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  261. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  262. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/batch_inspection.py +0 -0
  263. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/catalog.py +0 -0
  264. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  265. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  266. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/connection_pool.py +0 -0
  267. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/contracts.py +0 -0
  268. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/hosted.py +0 -0
  269. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  270. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  271. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/native.py +0 -0
  272. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/pages.py +0 -0
  273. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
  274. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/registry.py +0 -0
  275. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  276. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/relational.py +0 -0
  277. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  278. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/streaming.py +0 -0
  279. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/backends/timescale.py +0 -0
  280. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/contracts/__init__.py +0 -0
  281. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  282. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  283. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  284. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/contracts/values.py +0 -0
  285. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/__init__.py +0 -0
  286. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/access_roles.py +0 -0
  287. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  288. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  289. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  290. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/label_rules.py +0 -0
  291. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  292. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/domain/update_constants.py +0 -0
  293. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/__init__.py +0 -0
  294. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  295. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  296. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  297. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  298. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  299. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  300. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  301. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  302. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  303. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  304. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/security_check_job.py +0 -0
  305. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  306. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/__init__.py +0 -0
  307. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/env.py +0 -0
  308. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  309. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  310. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  311. {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
  312. {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
  313. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  314. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  315. {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
  316. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  317. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  318. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
  319. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
  320. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
  321. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0013_security_check.py +0 -0
  322. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0014_access_roles.py +0 -0
  323. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/0015_namespace_creator.py +0 -0
  324. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  325. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/__init__.py +0 -0
  326. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  327. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/bootstrap_timing.py +0 -0
  328. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  329. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/create_table.py +0 -0
  330. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  331. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/import_relations.py +0 -0
  332. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  333. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  334. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  335. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/operations/security_check.py +0 -0
  336. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/__init__.py +0 -0
  337. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/cascade.py +0 -0
  338. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/catalog.py +0 -0
  339. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/database.py +0 -0
  340. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/grants.py +0 -0
  341. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/impact.py +0 -0
  342. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/labels.py +0 -0
  343. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/locking.py +0 -0
  344. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/models.py +0 -0
  345. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  346. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/projections.py +0 -0
  347. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  348. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  349. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  350. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  351. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  352. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/table_response.py +0 -0
  353. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  354. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  355. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/updates.py +0 -0
  356. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  357. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  358. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/__init__.py +0 -0
  359. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/documents.py +0 -0
  360. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/embeddings.py +0 -0
  361. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/index.py +0 -0
  362. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/ranking.py +0 -0
  363. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/text.py +0 -0
  364. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/backend/search/worker.py +0 -0
  365. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/metatables/__init__.py +0 -0
  366. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/metatables/configuration.yaml +0 -0
  367. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/metatables/main.py +0 -0
  368. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/api/request_timing.py +0 -0
  369. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/__init__.py +0 -0
  370. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/admin_install.py +0 -0
  371. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/app.py +0 -0
  372. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/encryption.py +0 -0
  373. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/filters.py +0 -0
  374. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/local.py +0 -0
  375. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/migrations.py +0 -0
  376. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/project.py +0 -0
  377. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/cli/skills.py +0 -0
  378. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/compiled_sql/__init__.py +0 -0
  379. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/compiled_sql/mssql.py +0 -0
  380. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/dtype_codec.py +0 -0
  381. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/encryption.py +0 -0
  382. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/endpoint.py +0 -0
  383. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/envelope_contract.py +0 -0
  384. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/README.md +0 -0
  385. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/__init__.py +0 -0
  386. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/bounded_reader.py +0 -0
  387. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/data_sources/README.md +0 -0
  388. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/data_sources/mssql.json +0 -0
  389. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/data_sources/mysql.json +0 -0
  390. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/data_sources/postgresql.json +0 -0
  391. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/data_sources/register.py +0 -0
  392. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/external_table.py +0 -0
  393. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/README.md +0 -0
  394. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/__init__.py +0 -0
  395. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/__main__.py +0 -0
  396. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  397. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/migrations/env.py +0 -0
  398. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  399. {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
  400. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/local_app/tables.py +0 -0
  401. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/query.py +0 -0
  402. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/quickstart.py +0 -0
  403. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/reader.py +0 -0
  404. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/scripts/__init__.py +0 -0
  405. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  406. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tables.py +0 -0
  407. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/README.md +0 -0
  408. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/__init__.py +0 -0
  409. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/__main__.py +0 -0
  410. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/data/README.md +0 -0
  411. {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
  412. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/frames.py +0 -0
  413. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  414. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  415. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  416. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  417. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  418. {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
  419. {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
  420. {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
  421. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/operations.py +0 -0
  422. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/tables.py +0 -0
  423. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/tutorial/updaters.py +0 -0
  424. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/examples/updater.py +0 -0
  425. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/future_registry.py +0 -0
  426. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/hashing.py +0 -0
  427. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/instrumentation.py +0 -0
  428. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/local_connection.py +0 -0
  429. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/local_files.py +0 -0
  430. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/local_run_logs.py +0 -0
  431. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/log_contract.py +0 -0
  432. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/__init__.py +0 -0
  433. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/alembic.py +0 -0
  434. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/connection.py +0 -0
  435. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/env.py +0 -0
  436. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/provider.py +0 -0
  437. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/registry.py +0 -0
  438. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/runner.py +0 -0
  439. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/scaffold.py +0 -0
  440. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/sqlite.py +0 -0
  441. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/templates/__init__.py +0 -0
  442. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/templates/env.py.mako +0 -0
  443. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/templates/script.py.mako +0 -0
  444. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/migrations/tls.py +0 -0
  445. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/pydantic_metadata.py +0 -0
  446. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/run_logging.py +0 -0
  447. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/runtime.py +0 -0
  448. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/runtime_context.py +0 -0
  449. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/runtime_contract.py +0 -0
  450. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/schema_names.py +0 -0
  451. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/sdk_compat.py +0 -0
  452. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/sqlalchemy_contracts.py +0 -0
  453. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/storage_layout_contract.py +0 -0
  454. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/time_index_table_refs.py +0 -0
  455. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/transfer.py +0 -0
  456. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/transfer_contract.py +0 -0
  457. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/transport.py +0 -0
  458. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/update_configuration_contract.py +0 -0
  459. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/__init__.py +0 -0
  460. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/configuration.py +0 -0
  461. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/dependencies.py +0 -0
  462. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/managers.py +0 -0
  463. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/namespacing.py +0 -0
  464. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/runner.py +0 -0
  465. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/updaters.py +0 -0
  466. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/updaters/utils.py +0 -0
  467. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/src/metatables/upload.py +0 -0
  468. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/analyst/test_agent_surface.py +0 -0
  469. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/analyst/test_api_search.py +0 -0
  470. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/analyst/test_mcp.py +0 -0
  471. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/analyst/test_tools.py +0 -0
  472. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  473. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_caller_endpoint.py +0 -0
  474. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_data_source_identity.py +0 -0
  475. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_development_client.py +0 -0
  476. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_hosted_agent.py +0 -0
  477. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_hosted_environment_target.py +0 -0
  478. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_local_mode.py +0 -0
  479. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_platform_fact_cache.py +0 -0
  480. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_request_identity.py +0 -0
  481. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_runtime_bootstrap.py +0 -0
  482. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_runtime_database.py +0 -0
  483. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_runtime_scaffold.py +0 -0
  484. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_runtime_selection.py +0 -0
  485. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_runtime_storage_binding.py +0 -0
  486. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_source_passwords.py +0 -0
  487. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/auth/test_team_membership.py +0 -0
  488. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_catalog_foundation.py +0 -0
  489. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_contract_projection.py +0 -0
  490. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_database_config.py +0 -0
  491. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_index_statistics.py +0 -0
  492. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_migration.py +0 -0
  493. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/catalog/test_schema_validation.py +0 -0
  494. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/conftest.py +0 -0
  495. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/capabilities.json +0 -0
  496. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/client_signatures.json +0 -0
  497. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/database_operations.json +0 -0
  498. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_bounded_transfer.py +0 -0
  499. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_compiled_statement_lists.py +0 -0
  500. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_compiler_runtime_source.py +0 -0
  501. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_encryption.py +0 -0
  502. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_relation_batching.py +0 -0
  503. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_relation_import.py +0 -0
  504. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_runtime_contract_compat.py +0 -0
  505. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_storage_layouts.py +0 -0
  506. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_table_contracts.py +0 -0
  507. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/contracts/test_update_configuration_hash.py +0 -0
  508. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/Dockerfile +0 -0
  509. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/Dockerfile.dockerignore +0 -0
  510. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/__init__.py +0 -0
  511. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/conftest.py +0 -0
  512. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/provider/__init__.py +0 -0
  513. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/provider/env.py +0 -0
  514. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  515. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_api_contract.py +0 -0
  516. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_application_migration.py +0 -0
  517. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  518. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_catalog_contract.py +0 -0
  519. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_credential_catalog.py +0 -0
  520. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_physical_contract.py +0 -0
  521. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_relation_import.py +0 -0
  522. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  523. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_sql_security.py +0 -0
  524. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_backend/test_update_client.py +0 -0
  525. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_operations/test_physical_operations.py +0 -0
  526. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_operations/test_postgresql_operations.py +0 -0
  527. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  528. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/documentation/test_project_checks.py +0 -0
  529. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_admin_installation.py +0 -0
  530. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_api_endpoint.py +0 -0
  531. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_application_owned_migrations.py +0 -0
  532. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_catalog_outage.py +0 -0
  533. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_api_contract.py +0 -0
  534. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_api_coverage.py +0 -0
  535. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_migration_scaffold.py +0 -0
  536. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_migration_tls.py +0 -0
  537. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_package.py +0 -0
  538. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_signatures.py +0 -0
  539. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_client_value_behaviors.py +0 -0
  540. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_data_source_registry.py +0 -0
  541. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_encrypted_columns.py +0 -0
  542. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_local_actor_client_api.py +0 -0
  543. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_local_cli_workflow.py +0 -0
  544. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_local_client_selection.py +0 -0
  545. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  546. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_managed_finalize_unchanged.py +0 -0
  547. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_migration_metadata_and_downgrade.py +0 -0
  548. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_namespaces_admin_http.py +0 -0
  549. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_public_imports.py +0 -0
  550. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_remaining_client_routes.py +0 -0
  551. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_run_graphs.py +0 -0
  552. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_run_logs.py +0 -0
  553. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_runtime_upgrade.py +0 -0
  554. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_sdk_local_startup.py +0 -0
  555. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_sqlite_runtime.py +0 -0
  556. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_statement_lists.py +0 -0
  557. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_delete_client_api.py +0 -0
  558. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_filter_client_api.py +0 -0
  559. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_introspection_client_api.py +0 -0
  560. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_patch_client_api.py +0 -0
  561. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_search_api.py +0 -0
  562. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_search_document_api.py +0 -0
  563. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_search_scale.py +0 -0
  564. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_stats_api.py +0 -0
  565. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_update_pipeline.py +0 -0
  566. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_table_updates_http.py +0 -0
  567. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  568. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  569. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  570. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_update_batch_client_api.py +0 -0
  571. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  572. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  573. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  574. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/e2e/test_update_registration_client_api.py +0 -0
  575. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/examples/test_documented_examples.py +0 -0
  576. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/examples/test_postgresql_examples.py +0 -0
  577. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/examples/test_setup_launch.py +0 -0
  578. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/examples/test_tutorial.py +0 -0
  579. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_batch_introspection.py +0 -0
  580. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_connection_reuse.py +0 -0
  581. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_credential_store.py +0 -0
  582. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_data_source_rules.py +0 -0
  583. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_local_data_sources.py +0 -0
  584. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_local_run_logs.py +0 -0
  585. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_postgresql_connection.py +0 -0
  586. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_postgresql_sql.py +0 -0
  587. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_postgresql_tables.py +0 -0
  588. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  589. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_request_timing.py +0 -0
  590. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_serving_policy.py +0 -0
  591. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_source_validation.py +0 -0
  592. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_sqlite_expanded_in.py +0 -0
  593. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_sqlite_operations.py +0 -0
  594. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/integrations/test_sqlite_statement_lists.py +0 -0
  595. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/labels/test_labels.py +0 -0
  596. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_bootstrap_lock.py +0 -0
  597. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_create_table_operation.py +0 -0
  598. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_create_table_postgres.py +0 -0
  599. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_physical_operation_journal.py +0 -0
  600. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_register_catalog.py +0 -0
  601. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_search_documents.py +0 -0
  602. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/operations/test_timescale_policies.py +0 -0
  603. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_client_skills.py +0 -0
  604. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_dev_release_version.py +0 -0
  605. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_distribution_sources.py +0 -0
  606. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_editable_build.py +0 -0
  607. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_installed_distribution.py +0 -0
  608. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/packaging/test_requirements_export.py +0 -0
  609. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_access_map.py +0 -0
  610. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_deployment_security.py +0 -0
  611. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_governed_sql_scope.py +0 -0
  612. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_incremental_security.py +0 -0
  613. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_local_actor_membership.py +0 -0
  614. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_migration_boundary.py +0 -0
  615. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_namespace_grants.py +0 -0
  616. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_security_api.py +0 -0
  617. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_security_check.py +0 -0
  618. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_table_body_filter.py +0 -0
  619. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_table_grants.py +0 -0
  620. {mainsequence_metatable-0.1.61.dev92 → mainsequence_metatable-0.1.62.dev93}/tests/permissions/test_table_queries.py +0 -0
  621. {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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.61.dev92
3
+ Version: 0.1.62.dev93
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -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.
@@ -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
 
@@ -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.61.dev92"
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"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.61.dev92
3
+ Version: 0.1.62.dev93
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -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
 
@@ -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]