mainsequence-metatable 0.1.11.dev23__tar.gz → 0.1.12__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 (532) hide show
  1. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/.agents/skills/client/metatables-local-development/SKILL.md +6 -1
  2. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/.agents/skills/client/metatables-migrations/SKILL.md +6 -0
  3. {mainsequence_metatable-0.1.11.dev23/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.12}/PKG-INFO +1 -1
  4. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +6 -2
  5. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/operations/local-runtime.md +17 -0
  6. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/pyproject.toml +1 -1
  7. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
  8. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/mainsequence_metatable.egg-info/SOURCES.txt +1 -0
  9. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_registration.py +3 -1
  10. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +8 -0
  11. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +16 -7
  12. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/connection.py +4 -1
  13. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/env.py +13 -4
  14. mainsequence_metatable-0.1.12/src/metatables/migrations/sqlite.py +82 -0
  15. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/contracts/capabilities.json +1 -1
  16. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/integrations/test_sqlite_operations.py +96 -1
  17. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/uv.lock +1 -1
  18. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  19. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  20. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
  21. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/.mainsequence/workflows/metatables-api.yaml +0 -0
  22. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/LICENSE +0 -0
  23. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/MANIFEST.in +0 -0
  24. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/README.md +0 -0
  25. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/alembic.ini +0 -0
  26. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/api/metatables/main.py +0 -0
  27. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/compose.database-tests.yml +0 -0
  28. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  29. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  30. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  31. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  32. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
  33. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  34. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  35. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  36. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0009-shared-credential-store.md +0 -0
  37. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  38. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  39. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  40. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  41. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  42. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  43. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  44. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/adr/index.md +0 -0
  45. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/api/authentication-and-errors.md +0 -0
  46. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/api/data-sources.md +0 -0
  47. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/api/openapi.json +0 -0
  48. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/api/overview.md +0 -0
  49. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/api/reference.md +0 -0
  50. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/api/tables-and-migrations.md +0 -0
  51. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/api/time-index-and-updates.md +0 -0
  52. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/assets/branding/metatables.svg +0 -0
  53. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/assets/diagrams/local-client-experience.svg +0 -0
  54. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/bounded-transfers.md +0 -0
  55. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/build-an-updater.md +0 -0
  56. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/define-and-migrate-tables.md +0 -0
  57. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/deploy-application-migrations.md +0 -0
  58. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/installation-and-connection.md +0 -0
  59. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/local-storage.md +0 -0
  60. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/query-and-mutate.md +0 -0
  61. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/quickstart.md +0 -0
  62. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/read-existing-time-index-tables.md +0 -0
  63. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/register-existing-tables.md +0 -0
  64. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/tutorial.md +0 -0
  65. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/client/upgrade-legacy-app.md +0 -0
  66. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/concepts/architecture.md +0 -0
  67. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/concepts/data-sources.md +0 -0
  68. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/concepts/identity-and-scope.md +0 -0
  69. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/concepts/permissions-namespaces-labels.md +0 -0
  70. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/concepts/runs-and-execution-graphs.md +0 -0
  71. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  72. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/concepts/time-index-tables-and-updates.md +0 -0
  73. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/contributing/architecture-and-boundaries.md +0 -0
  74. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/contributing/database-backends.md +0 -0
  75. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/contributing/documentation.md +0 -0
  76. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/contributing/releasing.md +0 -0
  77. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/contributing/testing.md +0 -0
  78. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/README.md +0 -0
  79. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/__init__.py +0 -0
  80. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/bounded_reader.py +0 -0
  81. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/data_sources/README.md +0 -0
  82. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/data_sources/mssql.json +0 -0
  83. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/data_sources/mysql.json +0 -0
  84. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/data_sources/postgresql.json +0 -0
  85. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/data_sources/register.py +0 -0
  86. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/external_table.py +0 -0
  87. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/local_app/README.md +0 -0
  88. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/local_app/__init__.py +0 -0
  89. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/local_app/__main__.py +0 -0
  90. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/local_app/migrations/__init__.py +0 -0
  91. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/local_app/migrations/env.py +0 -0
  92. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/local_app/migrations/script.py.mako +0 -0
  93. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  94. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/local_app/tables.py +0 -0
  95. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/query.py +0 -0
  96. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/quickstart.py +0 -0
  97. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/reader.py +0 -0
  98. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/scripts/__init__.py +0 -0
  99. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/scripts/setup_metatables.py +0 -0
  100. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tables.py +0 -0
  101. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/README.md +0 -0
  102. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/__init__.py +0 -0
  103. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/__main__.py +0 -0
  104. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/data/README.md +0 -0
  105. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  106. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/frames.py +0 -0
  107. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/__init__.py +0 -0
  108. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/env.py +0 -0
  109. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/registry.py +0 -0
  110. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  111. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  112. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  113. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  114. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  115. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/operations.py +0 -0
  116. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/tables.py +0 -0
  117. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/updaters.py +0 -0
  118. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/examples/updater.py +0 -0
  119. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/index.md +0 -0
  120. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/operations/catalog-migrations.md +0 -0
  121. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/operations/configuration.md +0 -0
  122. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/operations/hosted-runtime.md +0 -0
  123. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/operations/recovery-and-observability.md +0 -0
  124. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/operations/run-history.md +0 -0
  125. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/operations/run-logs.md +0 -0
  126. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/reference/capabilities.md +0 -0
  127. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/reference/cli.md +0 -0
  128. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/reference/python.md +0 -0
  129. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/security/index.md +0 -0
  130. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/security/ownership-and-sharing.md +0 -0
  131. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/docs/security/permissions.md +0 -0
  132. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/mkdocs.yml +0 -0
  133. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/__init__.py +0 -0
  134. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/build_reference.py +0 -0
  135. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/check_boundaries.py +0 -0
  136. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/check_client_api_coverage.py +0 -0
  137. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/check_distribution_sources.py +0 -0
  138. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/check_docs.py +0 -0
  139. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/check_examples_debug.py +0 -0
  140. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/check_project.py +0 -0
  141. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/dev_release_version.py +0 -0
  142. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/test_databases.py +0 -0
  143. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/scripts/test_postgresql.py +0 -0
  144. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/setup.cfg +0 -0
  145. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  146. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  147. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  148. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  149. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/__init__.py +0 -0
  150. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/_admin_source.json +0 -0
  151. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/_build.py +0 -0
  152. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/_skill_bundle.py +0 -0
  153. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/__init__.py +0 -0
  154. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/__init__.py +0 -0
  155. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/auth/__init__.py +0 -0
  156. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/auth/boundary.py +0 -0
  157. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/auth/caller_assertions.py +0 -0
  158. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/auth/local_actor.py +0 -0
  159. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/bootstrap.py +0 -0
  160. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/configuration.py +0 -0
  161. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/credential_admin.py +0 -0
  162. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/development.py +0 -0
  163. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/development_client.py +0 -0
  164. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/main.py +0 -0
  165. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/platform_cache.py +0 -0
  166. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/__init__.py +0 -0
  167. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/column_search.py +0 -0
  168. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/contract_validation.py +0 -0
  169. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/data_sources.py +0 -0
  170. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  171. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/migration_connection.py +0 -0
  172. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/namespaces.py +0 -0
  173. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/run_logs.py +0 -0
  174. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/runtime_context.py +0 -0
  175. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/schema_graph.py +0 -0
  176. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/security.py +0 -0
  177. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_cascade.py +0 -0
  178. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_crud.py +0 -0
  179. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_delete.py +0 -0
  180. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_filter.py +0 -0
  181. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_import.py +0 -0
  182. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_introspection.py +0 -0
  183. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_patch.py +0 -0
  184. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_response.py +0 -0
  185. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_search_document.py +0 -0
  186. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_sql.py +0 -0
  187. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  188. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  189. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  190. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  191. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  192. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_batch.py +0 -0
  193. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  194. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_constants.py +0 -0
  195. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_crud.py +0 -0
  196. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_details.py +0 -0
  197. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_graph.py +0 -0
  198. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  199. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_registration.py +0 -0
  200. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_runs.py +0 -0
  201. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_statistics.py +0 -0
  202. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/runtime.py +0 -0
  203. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/runtime_control.py +0 -0
  204. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/runtime_database.py +0 -0
  205. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/source_passwords.py +0 -0
  206. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/app/transfer.py +0 -0
  207. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/__init__.py +0 -0
  208. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/__init__.py +0 -0
  209. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/access.py +0 -0
  210. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  211. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  212. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  213. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  214. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  215. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  216. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  217. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  218. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  219. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  220. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  221. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  222. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  223. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  224. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  225. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  226. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  227. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  228. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  229. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/catalog.py +0 -0
  230. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  231. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  232. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/contracts.py +0 -0
  233. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/hosted.py +0 -0
  234. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  235. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  236. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/native.py +0 -0
  237. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/operations.py +0 -0
  238. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/pages.py +0 -0
  239. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
  240. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/registry.py +0 -0
  241. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  242. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/relational.py +0 -0
  243. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  244. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  245. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/streaming.py +0 -0
  246. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/timescale.py +0 -0
  247. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/contracts/__init__.py +0 -0
  248. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  249. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  250. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  251. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/contracts/values.py +0 -0
  252. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/__init__.py +0 -0
  253. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  254. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  255. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  256. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/label_rules.py +0 -0
  257. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  258. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/update_constants.py +0 -0
  259. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/__init__.py +0 -0
  260. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  261. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  262. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  263. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  264. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  265. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  266. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  267. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  268. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  269. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  270. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  271. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/__init__.py +0 -0
  272. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/env.py +0 -0
  273. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  274. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  275. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  276. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  277. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  278. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  279. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  280. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  281. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  282. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  283. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  284. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/__init__.py +0 -0
  285. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  286. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  287. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/create_table.py +0 -0
  288. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  289. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/import_relations.py +0 -0
  290. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  291. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  292. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  293. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/search_documents.py +0 -0
  294. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/__init__.py +0 -0
  295. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/cascade.py +0 -0
  296. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/catalog.py +0 -0
  297. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/database.py +0 -0
  298. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/grants.py +0 -0
  299. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/labels.py +0 -0
  300. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/locking.py +0 -0
  301. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/models.py +0 -0
  302. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  303. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/projections.py +0 -0
  304. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  305. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  306. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  307. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  308. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  309. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/table_response.py +0 -0
  310. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  311. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  312. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/updates.py +0 -0
  313. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  314. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  315. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/metatables/__init__.py +0 -0
  316. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/metatables/configuration.yaml +0 -0
  317. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/api/metatables/main.py +0 -0
  318. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/cli/__init__.py +0 -0
  319. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/cli/admin_install.py +0 -0
  320. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/cli/app.py +0 -0
  321. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/cli/filters.py +0 -0
  322. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/cli/local.py +0 -0
  323. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/cli/migrations.py +0 -0
  324. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/cli/project.py +0 -0
  325. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/cli/skills.py +0 -0
  326. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/compiled_sql/__init__.py +0 -0
  327. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/compiled_sql/mssql.py +0 -0
  328. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/compiled_sql/v1.py +0 -0
  329. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/dtype_codec.py +0 -0
  330. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/endpoint.py +0 -0
  331. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/README.md +0 -0
  332. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/__init__.py +0 -0
  333. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/bounded_reader.py +0 -0
  334. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/data_sources/README.md +0 -0
  335. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/data_sources/mssql.json +0 -0
  336. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/data_sources/mysql.json +0 -0
  337. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/data_sources/postgresql.json +0 -0
  338. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/data_sources/register.py +0 -0
  339. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/external_table.py +0 -0
  340. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/README.md +0 -0
  341. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/__init__.py +0 -0
  342. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/__main__.py +0 -0
  343. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  344. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/migrations/env.py +0 -0
  345. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  346. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  347. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/tables.py +0 -0
  348. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/query.py +0 -0
  349. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/quickstart.py +0 -0
  350. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/reader.py +0 -0
  351. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/scripts/__init__.py +0 -0
  352. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  353. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tables.py +0 -0
  354. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/README.md +0 -0
  355. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/__init__.py +0 -0
  356. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/__main__.py +0 -0
  357. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/data/README.md +0 -0
  358. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  359. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/frames.py +0 -0
  360. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  361. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  362. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  363. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  364. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  365. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  366. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  367. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  368. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/operations.py +0 -0
  369. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/tables.py +0 -0
  370. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/updaters.py +0 -0
  371. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/examples/updater.py +0 -0
  372. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/future_registry.py +0 -0
  373. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/hashing.py +0 -0
  374. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/instrumentation.py +0 -0
  375. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/local_connection.py +0 -0
  376. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/local_files.py +0 -0
  377. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/local_run_logs.py +0 -0
  378. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/log_contract.py +0 -0
  379. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/__init__.py +0 -0
  380. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/alembic.py +0 -0
  381. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/provider.py +0 -0
  382. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/registry.py +0 -0
  383. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/runner.py +0 -0
  384. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/scaffold.py +0 -0
  385. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/templates/__init__.py +0 -0
  386. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/templates/env.py.mako +0 -0
  387. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/templates/script.py.mako +0 -0
  388. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/migrations/tls.py +0 -0
  389. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/models.py +0 -0
  390. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/pydantic_metadata.py +0 -0
  391. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/run_logging.py +0 -0
  392. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/runtime.py +0 -0
  393. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/runtime_context.py +0 -0
  394. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/runtime_contract.py +0 -0
  395. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/schema_names.py +0 -0
  396. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/sdk_compat.py +0 -0
  397. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/sqlalchemy_contracts.py +0 -0
  398. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/time_index_table_refs.py +0 -0
  399. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/transfer.py +0 -0
  400. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/transfer_contract.py +0 -0
  401. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/transport.py +0 -0
  402. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/update_configuration_contract.py +0 -0
  403. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/updaters/__init__.py +0 -0
  404. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/updaters/configuration.py +0 -0
  405. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/updaters/dependencies.py +0 -0
  406. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/updaters/managers.py +0 -0
  407. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/updaters/namespacing.py +0 -0
  408. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/updaters/runner.py +0 -0
  409. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/updaters/updaters.py +0 -0
  410. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/updaters/utils.py +0 -0
  411. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/src/metatables/upload.py +0 -0
  412. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_caller_assertions.py +0 -0
  413. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_data_source_identity.py +0 -0
  414. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_development_client.py +0 -0
  415. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_hosted_environment_target.py +0 -0
  416. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_local_mode.py +0 -0
  417. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_platform_fact_cache.py +0 -0
  418. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_runtime_bootstrap.py +0 -0
  419. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_runtime_database.py +0 -0
  420. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_runtime_scaffold.py +0 -0
  421. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_runtime_selection.py +0 -0
  422. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_runtime_storage_binding.py +0 -0
  423. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/auth/test_source_passwords.py +0 -0
  424. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/catalog/test_catalog_foundation.py +0 -0
  425. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/catalog/test_contract_projection.py +0 -0
  426. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/catalog/test_database_config.py +0 -0
  427. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/catalog/test_index_statistics.py +0 -0
  428. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/catalog/test_migration.py +0 -0
  429. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/conftest.py +0 -0
  430. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/contracts/client_signatures.json +0 -0
  431. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/contracts/database_operations.json +0 -0
  432. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/contracts/test_bounded_transfer.py +0 -0
  433. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/contracts/test_compiler_runtime_source.py +0 -0
  434. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/contracts/test_relation_batching.py +0 -0
  435. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/contracts/test_relation_import.py +0 -0
  436. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/contracts/test_storage_layouts.py +0 -0
  437. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/contracts/test_table_contracts.py +0 -0
  438. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/Dockerfile +0 -0
  439. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/Dockerfile.dockerignore +0 -0
  440. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/__init__.py +0 -0
  441. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/conftest.py +0 -0
  442. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/provider/__init__.py +0 -0
  443. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/provider/env.py +0 -0
  444. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  445. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/test_api_contract.py +0 -0
  446. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/test_application_migration.py +0 -0
  447. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  448. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/test_catalog_contract.py +0 -0
  449. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/test_credential_catalog.py +0 -0
  450. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/test_physical_contract.py +0 -0
  451. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/test_relation_import.py +0 -0
  452. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  453. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/test_sql_security.py +0 -0
  454. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_backend/test_update_client.py +0 -0
  455. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_operations/test_physical_operations.py +0 -0
  456. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_operations/test_postgresql_operations.py +0 -0
  457. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  458. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/documentation/test_project_checks.py +0 -0
  459. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_admin_installation.py +0 -0
  460. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_api_endpoint.py +0 -0
  461. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_application_owned_migrations.py +0 -0
  462. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_catalog_outage.py +0 -0
  463. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_api_contract.py +0 -0
  464. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_api_coverage.py +0 -0
  465. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_migration_scaffold.py +0 -0
  466. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_migration_tls.py +0 -0
  467. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_package.py +0 -0
  468. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_signatures.py +0 -0
  469. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_value_behaviors.py +0 -0
  470. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_data_source_registry.py +0 -0
  471. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_local_actor_client_api.py +0 -0
  472. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_local_cli_workflow.py +0 -0
  473. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_local_client_selection.py +0 -0
  474. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  475. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_namespaces_admin_http.py +0 -0
  476. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_public_imports.py +0 -0
  477. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_remaining_client_routes.py +0 -0
  478. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_run_graphs.py +0 -0
  479. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_run_logs.py +0 -0
  480. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_runtime_transition.py +0 -0
  481. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_runtime_upgrade.py +0 -0
  482. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_sdk_local_startup.py +0 -0
  483. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_sqlite_runtime.py +0 -0
  484. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_delete_client_api.py +0 -0
  485. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_filter_client_api.py +0 -0
  486. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_introspection_client_api.py +0 -0
  487. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_patch_client_api.py +0 -0
  488. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_search_document_api.py +0 -0
  489. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_stats_api.py +0 -0
  490. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_update_pipeline.py +0 -0
  491. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_updates_http.py +0 -0
  492. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  493. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  494. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  495. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_update_batch_client_api.py +0 -0
  496. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  497. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  498. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  499. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/e2e/test_update_registration_client_api.py +0 -0
  500. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/examples/test_documented_examples.py +0 -0
  501. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/examples/test_postgresql_examples.py +0 -0
  502. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/examples/test_setup_launch.py +0 -0
  503. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/examples/test_tutorial.py +0 -0
  504. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/integrations/test_credential_store.py +0 -0
  505. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/integrations/test_data_source_rules.py +0 -0
  506. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/integrations/test_local_data_sources.py +0 -0
  507. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/integrations/test_local_run_logs.py +0 -0
  508. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/integrations/test_postgresql_connection.py +0 -0
  509. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/integrations/test_postgresql_sql.py +0 -0
  510. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/integrations/test_postgresql_tables.py +0 -0
  511. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  512. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/integrations/test_source_validation.py +0 -0
  513. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/labels/test_labels.py +0 -0
  514. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/operations/test_create_table_operation.py +0 -0
  515. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/operations/test_create_table_postgres.py +0 -0
  516. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/operations/test_physical_operation_journal.py +0 -0
  517. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/operations/test_register_catalog.py +0 -0
  518. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/operations/test_search_documents.py +0 -0
  519. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/operations/test_timescale_policies.py +0 -0
  520. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/packaging/test_client_skills.py +0 -0
  521. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/packaging/test_dev_release_version.py +0 -0
  522. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/packaging/test_distribution_sources.py +0 -0
  523. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/packaging/test_editable_build.py +0 -0
  524. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/packaging/test_installed_distribution.py +0 -0
  525. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/permissions/test_governed_sql_scope.py +0 -0
  526. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/permissions/test_local_actor_membership.py +0 -0
  527. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/permissions/test_migration_boundary.py +0 -0
  528. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/permissions/test_namespace_grants.py +0 -0
  529. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/permissions/test_security_api.py +0 -0
  530. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/permissions/test_table_body_filter.py +0 -0
  531. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/permissions/test_table_grants.py +0 -0
  532. {mainsequence_metatable-0.1.11.dev23 → mainsequence_metatable-0.1.12}/tests/permissions/test_table_queries.py +0 -0
@@ -145,7 +145,12 @@ existing database just to obtain a clean test run.
145
145
  SQLite verifies portable application behavior, not PostgreSQL/MySQL/MSSQL-specific
146
146
  SQL, Timescale features, database roles or every concurrency behavior. Report that
147
147
  limit and use the intended engine in an isolated test database when the task
148
- requires those checks. Do not use the shared environment database as the default
148
+ requires those checks. Application models keep their hosted column types: a
149
+ PostgreSQL `JSONB` column runs as JSON, and `Numeric` runs as a SQLite number exact
150
+ to about 15 significant digits, the precision the client's float64 frames carry on
151
+ every engine. Unsigned 64-bit integers and arrays are rejected, naming the column.
152
+ Revisions need no SQLite variants: column and constraint changes run through Alembic
153
+ batch mode. Only raw PostgreSQL SQL must check `op.get_bind().dialect.name`. Do not use the shared environment database as the default
149
154
  integration-test fixture.
150
155
 
151
156
  ## Finish verification and switch back
@@ -154,6 +154,12 @@ The global `--local` selects the running project's API connection; inspect runti
154
154
  status because Admin can switch that API to Hosted. Upgrade/downgrade accept
155
155
  Alembic targets. Use `--no-autogenerate` for offline revision authoring.
156
156
 
157
+ Write each revision once, for the hosted engine. On local SQLite, MetaTables runs
158
+ column and constraint changes through Alembic batch mode, generated revisions use
159
+ batch blocks, `JSONB` runs as JSON, and `postgresql_where` predicates also apply to
160
+ SQLite. Raw PostgreSQL SQL, such as `ctid`, `::` casts or `jsonb_*` functions, must
161
+ branch on `op.get_bind().dialect.name`.
162
+
157
163
  The client imports and executes application revisions, using the connection
158
164
  resolved for the selected environment. Environment operators supply the database
159
165
  login's DDL privileges. MetaTables does not mint migration roles or sandbox DDL.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.11.dev23
3
+ Version: 0.1.12
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
@@ -732,8 +732,12 @@ Both SQLite catalog mutations and table writes use explicit `BEGIN IMMEDIATE`
732
732
  transactions with foreign-key enforcement and a 30-second connection busy timeout.
733
733
  Bounded physical operations select a 5-second lock timeout. The
734
734
  catalog uses WAL. Application DDL uses the same Alembic reservation/finalization
735
- workflow as PostgreSQL. SQLite rejects named schemas, exact decimal, unsigned
736
- 64-bit integer, array, PostgreSQL JSONB, and specialized index contracts.
735
+ workflow as PostgreSQL. SQLite rejects named schemas, unsigned 64-bit integer,
736
+ array, and specialized index contracts, naming the column or index. PostgreSQL
737
+ JSONB is stored as JSON, and NUMERIC as SQLite numbers exact to about 15
738
+ significant digits, the precision the client's float64 frames already carry.
739
+ Revisions written for PostgreSQL run unchanged: column and constraint changes use
740
+ Alembic batch mode, with foreign keys checked before commit.
737
741
  Timestamps require UTC offsets and preserve microseconds; finer precision is
738
742
  rejected rather than truncated. UUID coordinate filters use the same contract
739
743
  conversion for reads and deletes.
@@ -144,6 +144,23 @@ updates and governed SQL within its dialect. PostgreSQL-specific SQL, database r
144
144
  Timescale hypertables and policies are unavailable. Select expressions and writes must
145
145
  use the API-advertised dialect; SQL is not translated between engines.
146
146
 
147
+ Application models keep their hosted column types. A PostgreSQL `JSONB` column is
148
+ created and decoded as JSON. `Numeric` columns are SQLite numbers, exact to about 15
149
+ significant digits; reads return `Decimal`, and the client's frames carry them as
150
+ float64 on every engine. Unsigned 64-bit integers and arrays have no SQLite type:
151
+ registration rejects them with `unsupported_sqlite_type`, naming the table and
152
+ column.
153
+
154
+ Application revisions written for PostgreSQL run unchanged. SQLite cannot alter
155
+ columns or constraints in place, so the migration environment runs `alter_column`,
156
+ `add_column`, `drop_column` and constraint operations through Alembic batch mode,
157
+ which copies the table and swaps it in. Foreign keys are not enforced while the
158
+ revisions run; `PRAGMA foreign_key_check` runs before commit and rolls back every
159
+ revision if a key dangles. A `postgresql_where` predicate also becomes the SQLite
160
+ partial-index predicate. Generated revisions use batch blocks, which PostgreSQL
161
+ applies as plain `ALTER` statements. Raw PostgreSQL SQL, such as `ctid`, `::` casts
162
+ or `jsonb_*` functions, must branch on `op.get_bind().dialect.name`.
163
+
147
164
  The SQLite adapter shares the request's transaction for catalog and physical work.
148
165
  Physical savepoints preserve rollback semantics and avoid two writers competing for
149
166
  the same file. Application migration connections are blocked; see the
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.11.dev23"
7
+ version = "0.1.12"
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.11.dev23
3
+ Version: 0.1.12
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
@@ -392,6 +392,7 @@ src/metatables/migrations/provider.py
392
392
  src/metatables/migrations/registry.py
393
393
  src/metatables/migrations/runner.py
394
394
  src/metatables/migrations/scaffold.py
395
+ src/metatables/migrations/sqlite.py
395
396
  src/metatables/migrations/tls.py
396
397
  src/metatables/migrations/templates/__init__.py
397
398
  src/metatables/migrations/templates/env.py.mako
@@ -161,7 +161,9 @@ def _registration(payload, *, indexed, actor, session, sources, creator, introsp
161
161
  def _failure(session, exc):
162
162
  session.rollback()
163
163
  if isinstance(exc, DataSourceAdmissionError):
164
- raise HTTPException(exc.status_code, exc.code) from exc
164
+ # Contract rejections name the offending column or index, as contract validation does.
165
+ detail = exc.code if exc.field == "data_source" else {"code": exc.code, "field": exc.field, "message": str(exc)}
166
+ raise HTTPException(exc.status_code, detail) from exc
165
167
  if isinstance(exc, (DataSourceIntegrationError, PhysicalConnectionUnavailable, PhysicalTableOutcomeUnknown, SQLAlchemyError)):
166
168
  raise HTTPException(503, 'Catalog or DataSource is unavailable.') from exc
167
169
  raise HTTPException(409 if isinstance(exc, (PhysicalTableError, PhysicalIntrospectionError, TimescaleError)) else 422,
@@ -12,6 +12,7 @@ import time
12
12
  from collections import namedtuple
13
13
  from contextlib import contextmanager
14
14
  from datetime import date, datetime, timezone
15
+ from decimal import Decimal
15
16
  from uuid import UUID
16
17
 
17
18
  from psycopg2 import sql
@@ -63,6 +64,11 @@ def bind_value(value):
63
64
  return json.dumps(value.adapted, separators=(",", ":"), allow_nan=False)
64
65
  if isinstance(value, (dict, list)):
65
66
  return json.dumps(value, separators=(",", ":"), allow_nan=False)
67
+ if isinstance(value, Decimal):
68
+ # SQLite stores NUMERIC as INTEGER or REAL; keep integral values exact.
69
+ if value == value.to_integral_value() and -(2**63) <= value < 2**63:
70
+ return int(value)
71
+ return float(value)
66
72
  return value
67
73
 
68
74
 
@@ -178,6 +184,8 @@ def register_converters():
178
184
  sqlite3.register_converter("BOOLEAN", lambda v: v == b"1")
179
185
  sqlite3.register_converter("JSON", lambda v: json.loads(v.decode()))
180
186
  sqlite3.register_converter("DATE", lambda v: date.fromisoformat(v.decode()))
187
+ sqlite3.register_converter("NUMERIC", lambda v: Decimal(v.decode()))
188
+ sqlite3.register_converter("DECIMAL", lambda v: Decimal(v.decode()))
181
189
 
182
190
 
183
191
  @contextmanager
@@ -41,7 +41,9 @@ def introspect_sqlite_table(*, source, physical_schema, physical_table_name):
41
41
  "INTEGER": "int64",
42
42
  "JSON": "json",
43
43
  "DATE": "date",
44
- }.get(backend, "string")
44
+ "NUMERIC": "numeric",
45
+ "DECIMAL": "numeric",
46
+ }.get(backend.split("(", 1)[0].strip(), "string")
45
47
  columns.append(
46
48
  {
47
49
  "name": item["name"],
@@ -118,20 +120,27 @@ def validate_sqlite_contract(contract):
118
120
  """Reject unsupported DDL before reserving catalog state or opening a store."""
119
121
  from metatables.api.backend.domain.data_source_rules import DataSourceAdmissionError
120
122
 
121
- normalize_schema((contract.get("physical") or {}).get("schema"))
123
+ physical = contract.get("physical") or {}
124
+ normalize_schema(physical.get("schema"))
125
+ table = physical.get("table_name") or "the table"
126
+ # JSONB is stored as JSON and NUMERIC as SQLite numbers (about 15 significant
127
+ # digits, the precision the client's float64 frames already carry).
122
128
  for column in contract.get("columns", []):
123
129
  kind = str(column.get("data_type", "")).lower()
124
130
  backend = str(column.get("backend_type") or "").lower()
125
- if kind in {"numeric", "decimal", "uint64"} or any(
126
- t in backend for t in ("numeric", "decimal", "[]", "jsonb")
127
- ):
131
+ if kind == "uint64" or "[]" in backend:
128
132
  raise DataSourceAdmissionError(
129
133
  "unsupported_sqlite_type",
130
- "SQLite does not support exact decimal, unsigned 64-bit integers, arrays, or PostgreSQL JSONB contracts.",
134
+ f"Column {column.get('name')!r} of {table} is {column.get('backend_type') or kind}; "
135
+ "SQLite has no unsigned 64-bit integer or array type.",
131
136
  status_code=409,
137
+ field=f"table_contract.columns.{column.get('name')}",
132
138
  )
133
139
  for index in contract.get("indexes", []):
134
140
  if index.get("method") not in (None, "", "btree") or index.get("expression"):
135
141
  raise DataSourceAdmissionError(
136
- "unsupported_sqlite_index", "SQLite supports column indexes only.", status_code=409
142
+ "unsupported_sqlite_index",
143
+ f"Index {index.get('name')!r} of {table} is not a column index; SQLite supports column indexes only.",
144
+ status_code=409,
145
+ field=f"table_contract.indexes.{index.get('name')}",
137
146
  )
@@ -6,6 +6,7 @@ from sqlalchemy import create_engine, event
6
6
  from sqlalchemy.engine import make_url
7
7
  from sqlalchemy.pool import NullPool
8
8
 
9
+ from . import sqlite as _sqlite # noqa: F401 Registers SQLite DDL and batch rules.
9
10
  from .tls import migration_tls_arguments
10
11
 
11
12
 
@@ -42,7 +43,9 @@ def migration_engine(config):
42
43
  @event.listens_for(engine, "connect")
43
44
  def sqlite_connect(connection, _record):
44
45
  connection.isolation_level = None
45
- connection.execute("PRAGMA foreign_keys = ON")
46
+ # Batch rebuilds drop and recreate referenced tables; the
47
+ # environment runs PRAGMA foreign_key_check before commit.
48
+ connection.execute("PRAGMA foreign_keys = OFF")
46
49
  connection.execute("PRAGMA busy_timeout = 30000")
47
50
 
48
51
  @event.listens_for(engine, "begin")
@@ -15,6 +15,7 @@ def run_mainsequence_alembic_env(
15
15
 
16
16
  from metatables.migrations import apply_mainsequence_migration_role
17
17
  from metatables.migrations.connection import migration_engine
18
+ from metatables.migrations.sqlite import AUTO_BATCH_OPTION, check_foreign_keys
18
19
 
19
20
  def migration_provider() -> Any:
20
21
  provider = context.config.attributes.get("mainsequence_migration_provider")
@@ -78,8 +79,18 @@ def run_mainsequence_alembic_env(
78
79
  "include_object": include_object,
79
80
  "compare_type": True,
80
81
  "compare_server_default": True,
82
+ # Generated revisions alter tables in batch blocks: plain ALTERs on
83
+ # PostgreSQL, copy-and-swap on the local SQLite runtime.
84
+ "render_as_batch": True,
85
+ AUTO_BATCH_OPTION: connection is not None and connection.dialect.name == "sqlite",
81
86
  }
82
87
 
88
+ def run(connection) -> None:
89
+ with context.begin_transaction():
90
+ context.run_migrations()
91
+ if connection.dialect.name == "sqlite":
92
+ check_foreign_keys(connection)
93
+
83
94
  def run_migrations_offline() -> None:
84
95
  context.configure(
85
96
  url=context.config.get_main_option("sqlalchemy.url"),
@@ -95,16 +106,14 @@ def run_mainsequence_alembic_env(
95
106
  if connection is not None:
96
107
  apply_mainsequence_migration_role(connection, config)
97
108
  context.configure(connection=connection, **configure_kwargs(connection))
98
- with context.begin_transaction():
99
- context.run_migrations()
109
+ run(connection)
100
110
  return
101
111
 
102
112
  config.attributes.setdefault("mainsequence_migration_provider", migration_provider())
103
113
  with migration_engine(config) as engine, engine.connect() as connection:
104
114
  apply_mainsequence_migration_role(connection, config)
105
115
  context.configure(connection=connection, **configure_kwargs(connection))
106
- with context.begin_transaction():
107
- context.run_migrations()
116
+ run(connection)
108
117
 
109
118
  if context.is_offline_mode():
110
119
  run_migrations_offline()
@@ -0,0 +1,82 @@
1
+ """Run application revisions written for PostgreSQL on the local SQLite runtime.
2
+
3
+ SQLite cannot alter columns or constraints in place. Inside the MetaTables
4
+ Alembic environment, those operations run through Alembic batch mode (copy the
5
+ table, then swap it in), so revisions need no SQLite-specific code. PostgreSQL
6
+ and other dialects keep Alembic's own implementations.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from alembic.operations import BatchOperations, Operations, ops
12
+ from sqlalchemy.dialects.postgresql import JSONB
13
+ from sqlalchemy.ext.compiler import compiles
14
+
15
+ AUTO_BATCH_OPTION = "metatables_sqlite_auto_batch"
16
+
17
+
18
+ @compiles(JSONB, "sqlite")
19
+ def _sqlite_jsonb(_type, _compiler, **_kw):
20
+ # Applications declare PostgreSQL JSONB; the local runtime stores and
21
+ # decodes it as JSON, so models and reflected columns compare equal.
22
+ return "JSON"
23
+
24
+
25
+ def _table(operation):
26
+ if isinstance(operation, ops.CreateForeignKeyOp):
27
+ return operation.source_table, operation.kw.get("source_schema")
28
+ return operation.table_name, operation.schema
29
+
30
+
31
+ def _batched(default):
32
+ def run(operations, operation):
33
+ if (
34
+ isinstance(operations, BatchOperations)
35
+ or not operations.migration_context.opts.get(AUTO_BATCH_OPTION)
36
+ ):
37
+ return default(operations, operation)
38
+ connection = operations.migration_context.connection
39
+ if connection.exec_driver_sql("PRAGMA foreign_keys").scalar():
40
+ # Rebuilding a parent table with enforcement on deletes or rejects
41
+ # its children; the environment checks every key after migrating.
42
+ raise RuntimeError("SQLite batch migrations require foreign_keys=OFF.")
43
+ name, schema = _table(operation)
44
+ with operations.batch_alter_table(name, schema=None if schema == "public" else schema) as batch:
45
+ batch.invoke(operation)
46
+
47
+ return run
48
+
49
+
50
+ def _partial_index(default):
51
+ def run(operations, operation):
52
+ # Portable predicates such as "status = 'active'" keep the index partial.
53
+ if operations.migration_context.opts.get(AUTO_BATCH_OPTION):
54
+ kw = operation.kw
55
+ if "postgresql_where" in kw and "sqlite_where" not in kw:
56
+ kw["sqlite_where"] = kw["postgresql_where"]
57
+ return default(operations, operation)
58
+
59
+ return run
60
+
61
+
62
+ for _operation in (
63
+ ops.AlterColumnOp,
64
+ ops.AddColumnOp,
65
+ ops.DropColumnOp,
66
+ ops.AddConstraintOp,
67
+ ops.DropConstraintOp,
68
+ ):
69
+ Operations._to_impl.dispatch_for(_operation, qualifier="sqlite")(
70
+ _batched(Operations._to_impl.dispatch(_operation))
71
+ )
72
+ Operations._to_impl.dispatch_for(ops.CreateIndexOp, qualifier="sqlite")(
73
+ _partial_index(Operations._to_impl.dispatch(ops.CreateIndexOp))
74
+ )
75
+
76
+
77
+ def check_foreign_keys(connection) -> None:
78
+ """Fail the migration transaction when a revision left a dangling key."""
79
+ violations = connection.exec_driver_sql("PRAGMA foreign_key_check").fetchall()
80
+ if violations:
81
+ tables = sorted({str(row[0]) for row in violations})
82
+ raise RuntimeError(f"Migration left foreign-key violations in: {', '.join(tables)}.")
@@ -2854,7 +2854,7 @@
2854
2854
  "hidden": false,
2855
2855
  "note": "Offline client skill copying delegated to the SDK scaffold helper; bundles matching guide/example resources, supports dry-run and global JSON output, and records the installed version.",
2856
2856
  "tests": [
2857
- "tests/packaging/test_client_skills.py::test_copy_and_refresh_preserve_other_namespaces_and_deliver_portable_references",
2857
+ "tests/packaging/test_client_skills.py::test_copy_and_refresh_replace_only_the_metatables_namespace_with_portable_references",
2858
2858
  "tests/packaging/test_client_skills.py::test_dry_run_reports_version_and_destinations_without_creating_project",
2859
2859
  "tests/packaging/test_installed_distribution.py::test_client_skills_copy_from_installed_bundle_outside_checkout"
2860
2860
  ]
@@ -103,12 +103,107 @@ def test_serialized_writers_and_failed_replacement_preserve_existing_rows(sqlite
103
103
  def test_sqlite_rejects_unrepresentable_contracts_before_effects():
104
104
  for contract in (
105
105
  {"physical": {"schema": "analytics"}},
106
- {"columns": [{"name": "exact", "data_type": "numeric"}]},
106
+ {"columns": [{"name": "unsigned", "data_type": "uint64"}]},
107
107
  {"columns": [{"name": "array", "backend_type": "INTEGER[]"}]},
108
108
  {"indexes": [{"name": "special", "method": "gin"}]},
109
109
  ):
110
110
  with pytest.raises(DataSourceAdmissionError):
111
111
  validate_sqlite_contract(contract)
112
+ with pytest.raises(DataSourceAdmissionError) as rejected:
113
+ validate_sqlite_contract({"physical": {"table_name": "positions"},
114
+ "columns": [{"name": "lots", "backend_type": "INTEGER[]"}]})
115
+ assert rejected.value.field == "table_contract.columns.lots"
116
+ assert "'lots'" in str(rejected.value) and "positions" in str(rejected.value)
117
+
118
+
119
+ def test_sqlite_runs_postgresql_jsonb_as_json_and_numeric_as_numbers(sqlite_source):
120
+ source, engine = sqlite_source
121
+ from decimal import Decimal
122
+
123
+ from alembic.autogenerate import compare_metadata
124
+ from alembic.migration import MigrationContext
125
+ from sqlalchemy import Column, Integer, MetaData, Numeric, Table
126
+ from sqlalchemy.dialects.postgresql import JSONB
127
+
128
+ import metatables.migrations.sqlite # noqa: F401 Registers the SQLite JSONB rule.
129
+ from metatables.api.backend.backends.adapters.sqlite_introspection import (
130
+ introspect_sqlite_table,
131
+ )
132
+
133
+ columns = [{"name": "payload", "data_type": "jsonb", "backend_type": "JSONB"},
134
+ {"name": "amount", "data_type": "numeric", "backend_type": "NUMERIC(38, 18)"}]
135
+ validate_sqlite_contract({"columns": columns})
136
+ metadata = MetaData()
137
+ Table("typed_numbers", metadata, Column("id", Integer, primary_key=True),
138
+ Column("payload", JSONB()), Column("amount", Numeric(38, 18)))
139
+ with engine.begin() as connection:
140
+ metadata.create_all(connection)
141
+ context = MigrationContext.configure(connection, opts={
142
+ "compare_type": True,
143
+ "include_name": lambda name, kind, _parents: kind != "table" or name == "typed_numbers",
144
+ })
145
+ assert compare_metadata(context, metadata) == []
146
+ snapshot = introspect_sqlite_table(source=source, physical_schema="public",
147
+ physical_table_name="typed_numbers")
148
+ assert {c["name"]: (c["data_type"], c["backend_type"]) for c in snapshot["columns"]} == {
149
+ "id": ("int64", "INTEGER"), "payload": ("json", "JSON"), "amount": ("numeric", "NUMERIC(38, 18)")}
150
+ inserted = execute_fixture_sql(
151
+ source=source,
152
+ operation="insert",
153
+ sql_text="INSERT INTO typed_numbers (id, payload, amount) VALUES (1, :payload, :amount), (2, NULL, :whole) RETURNING *",
154
+ parameters={"payload": {"nodes": [0.5, 1]}, "amount": Decimal("1234.000125"), "whole": Decimal("100")},
155
+ )["rows"]
156
+ assert inserted[0]["payload"] == {"nodes": [0.5, 1]}
157
+ assert Decimal(str(inserted[0]["amount"])) == Decimal("1234.000125")
158
+ selected = execute_fixture_sql(source=source, sql_text="SELECT id FROM typed_numbers WHERE amount > :limit ORDER BY amount",
159
+ parameters={"limit": Decimal("99.5")})["rows"]
160
+ assert [row["id"] for row in selected] == [2, 1]
161
+
162
+
163
+ def test_postgresql_style_alter_revisions_run_through_sqlite_batch_mode(tmp_path):
164
+ from alembic.migration import MigrationContext
165
+ from alembic.operations import Operations
166
+ from sqlalchemy import Column, Integer, String, event, text
167
+
168
+ from metatables.migrations.sqlite import AUTO_BATCH_OPTION, check_foreign_keys
169
+
170
+ engine = create_engine(f"sqlite:///{tmp_path / 'batch.sqlite'}")
171
+ event.listen(engine, "connect", lambda raw, _record: raw.execute("PRAGMA foreign_keys = OFF"))
172
+ with engine.begin() as connection:
173
+ connection.exec_driver_sql("CREATE TABLE parent (id INTEGER PRIMARY KEY, code TEXT)")
174
+ connection.exec_driver_sql("CREATE TABLE child (id INTEGER PRIMARY KEY, parent_id INTEGER, "
175
+ "CONSTRAINT fk_child_parent FOREIGN KEY (parent_id) REFERENCES parent (id) ON DELETE CASCADE)")
176
+ connection.exec_driver_sql("INSERT INTO parent VALUES (1, 'a'), (2, 'b')")
177
+ connection.exec_driver_sql("INSERT INTO child VALUES (10, 1), (11, 2)")
178
+ op = Operations(MigrationContext.configure(connection, opts={AUTO_BATCH_OPTION: True}))
179
+ # The same calls a PostgreSQL revision makes; none of them is native SQLite DDL.
180
+ op.add_column("parent", Column("status", String(), nullable=True))
181
+ op.alter_column("parent", "code", existing_type=String(), nullable=False)
182
+ op.create_unique_constraint("uq_parent_code", "parent", ["code"])
183
+ op.drop_constraint("fk_child_parent", "child", type_="foreignkey")
184
+ op.create_foreign_key("fk_child_parent_restrict", "child", "parent", ["parent_id"], ["id"])
185
+ op.alter_column("child", "parent_id", existing_type=Integer(), nullable=False)
186
+ op.create_index("ix_parent_active", "parent", ["status"], unique=True,
187
+ postgresql_where=text("status = 'active'"))
188
+ check_foreign_keys(connection)
189
+ inspector = inspect(connection)
190
+ assert [fk["name"] for fk in inspector.get_foreign_keys("child")] == ["fk_child_parent_restrict"]
191
+ assert [c["nullable"] for c in inspector.get_columns("child") if c["name"] == "parent_id"] == [False]
192
+ assert [u["name"] for u in inspector.get_unique_constraints("parent")] == ["uq_parent_code"]
193
+ index = next(i for i in inspector.get_indexes("parent") if i["name"] == "ix_parent_active")
194
+ assert str(index["dialect_options"]["sqlite_where"]) == "status = 'active'"
195
+ # Rebuilding the parent kept every child row instead of cascading.
196
+ assert connection.exec_driver_sql("SELECT id, parent_id FROM child ORDER BY id").all() == [(10, 1), (11, 2)]
197
+ connection.exec_driver_sql("INSERT INTO child VALUES (12, 99)")
198
+ with pytest.raises(RuntimeError, match="child"):
199
+ check_foreign_keys(connection)
200
+ connection.exec_driver_sql("DELETE FROM child WHERE id = 12")
201
+ with engine.connect() as connection:
202
+ connection.exec_driver_sql("PRAGMA foreign_keys = ON")
203
+ with pytest.raises(RuntimeError, match="foreign_keys=OFF"):
204
+ Operations(MigrationContext.configure(connection, opts={AUTO_BATCH_OPTION: True})).add_column(
205
+ "parent", Column("note", String()))
206
+ engine.dispose()
112
207
 
113
208
 
114
209
  def test_sub_microsecond_timestamps_fail_before_serialization():
@@ -632,7 +632,7 @@ server = [
632
632
 
633
633
  [[package]]
634
634
  name = "mainsequence-metatable"
635
- version = "0.1.11"
635
+ version = "0.1.12"
636
636
  source = { editable = "." }
637
637
  dependencies = [
638
638
  { name = "alembic" },