matrx-orm 3.1.201__tar.gz → 3.1.202__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.
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/PKG-INFO +1 -1
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/diff_preview.py +7 -0
- matrx_orm-3.1.202/matrx_orm/schema_builder/excluded_targets.py +93 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/runner.py +7 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/schema_manager.py +26 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/pyproject.toml +1 -1
- matrx_orm-3.1.202/tests/schema/test_excluded_fk_targets.py +128 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/.gitignore +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/AGENTS.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/BASE_CLASS_METHODS.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/CHANGELOG.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/CLAUDE.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/MODEL_API.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/database/orm/extended/managers/ai_model_base.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/docs/migrations.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/FEATURE.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/adapters/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/adapters/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/adapters/async_postgresql.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/adapters/base_adapter.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/adapters/postgrest_client_adapter.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/adapters/supabase_adapter.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/admin/FEATURE.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/admin/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/admin/router.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/api/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/api/auth.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/api/config.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/api/handlers.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/api/protocol.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/api/server.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/associations.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/cache_debug.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/catalog.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/catalog_sql.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/client/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/client/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/client/postgres_connection.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/client/postgrest.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/client/supabase_auth.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/client/supabase_config.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/client/supabase_manager.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/EXTENDED-TASK.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/FEATURE.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/RELATIONS-TASKS.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/TASKS.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/admin_lane.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/async_db_manager.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/base.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/config.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/connections.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/db_function.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/diagnostics.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/expressions.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/extended.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/fields.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/introspection.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/listen.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/loop_filters.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/model_dto.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/model_view.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/one_database.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/paginator.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/pool_maintenance.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/pool_watch.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/pooler_role.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/pydantic_bridge.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/read_write.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/registry.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/relations.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/resilience.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/rls_session.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/session_context.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/signals.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/statement_ceiling.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/tls.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/transaction.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/types.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/write_queue.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/core/write_retry.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/entity.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/error_handling.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/exceptions.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/extended/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/extended/app_error_handler.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/identity_rule.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/local_sqlite.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/middleware/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/middleware/base.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/cli.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/ddl.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/diff.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/executor.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/integration.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/loader.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/operations.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/state.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/migrations/table_filter.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/no_org_assignment.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/FEATURE.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/bulk_update_values.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/catalog_select.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/conflict.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/conflict_writes.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/create.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/db_functions.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/delete.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/dynamic_admin.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/dynamic_crud.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/graph_walk.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/latest_rows.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/queue_claim.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/read.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/relational_backfill.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/staging_load.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/operations/update.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/platform_access.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/platform_db.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/py.typed +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/pytest_live_db_guard.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/pytest_lock_guard.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/pytest_plugin.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/python_sql/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/python_sql/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/python_sql/db_objects.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/query/FEATURE.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/query/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/query/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/query/builder.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/query/executor.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/resources/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/resources/additional-assigners-2026-09-12.json +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/resources/org_assignment_trigger_baseline.json +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/FEATURE.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/code_handler.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/codegen_writer.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/columns.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/common.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/entity_capabilities.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/generator.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/helpers/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/package_wiring.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/relationships.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/schema.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/tables.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/schema_builder/views.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/FEATURE.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/attachments.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/backup_restore.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/crypto.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/host_authorization.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/items.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/model.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/mutation_receipts.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/native_enable.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/native_lifecycle.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/native_passkeys.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/native_source.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/org_service.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/org_vault_gate.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/service.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/secrets_battery/vault_history.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/coalesce.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/dag.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/errors.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/fallback.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/flush.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/lifecycle.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/managed.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/op.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/reads.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/session.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/session/telemetry.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/sql_executor/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/sql_executor/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/sql_executor/executor.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/sql_executor/queries.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/sql_executor/registry.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/sql_executor/types.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/sql_executor/utils.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/state.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/utils/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/utils/sql_utils.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/utils/type_converters.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/matrx_orm/write_actor.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/scripts/git-branches.sh +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/scripts/publish.sh +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/scripts/release.sh +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/conftest.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_adapter_registry.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_admin_db_columns.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_admin_response_rendering.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_admin_search_negation.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_admin_search_sentinels.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_advisory_lock.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_agent_message.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_api_auth.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_api_config.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_api_handlers.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_api_protocol.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_array_agg_order_by.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_association_trigger_actor_naming.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_associations.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_associations_wiring.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_bulk_hydration_offload.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_bulk_update_by_pk.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_bulk_upsert_increment_set_fields.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_cache_debug.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_call_function.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_case_when.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_catalog.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_column_scoped_writes.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_committed_row_guard.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_composite_pk_filter.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_composite_pk_write_paths.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_config.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_conflict_target.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_conflict_writes.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_connection_codecs.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_connection_poison_guard.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_connection_primitives.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_count_composite_distinct.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_count_limit_param_leak.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_db_function_field.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_ddl_generator.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_deadlock_retry.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_derived_table.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_dirty_tracking.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_dynamic_crud.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_exceptions.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_execute_query_integrity_mapping.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_expression_primitives.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_fields.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_filter_jsonb_agg_array_index.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_fk_cycle_resolution.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_from_alias.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_fts.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_func_expression_args.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_graph_walk.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_having_annotate_alias.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_insert_ignore_and_admin_primitives.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_introspect_rls_policies.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_join_and_aggregate.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_latest_rows.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_listen_notify.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_local_sqlite.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_lock_contention_retry.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_managed_write_guard.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_matrx_entity.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_migration_diff_types.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_migration_loader.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_model_instance.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_model_meta.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_optimistic_concurrency.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_order_by_expression.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_org_assignment_inventory.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_orm_banners_are_client_safe.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_parameter_name_hydration.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_patch_jsonb_path.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_percentile_cont.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_persisted_count.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_person_scoped_session_bypasses_shared_cache.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_pool_create_never_wedges.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_pool_holder_census.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_pool_loop_recreation.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_pool_maintenance.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_postgrest_filters.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_pydantic_bridge.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_query_builder.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_query_error_detail.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_query_executor_sql.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_query_timeout.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_querybuilder_clone_semantics.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_queue_claim.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_read_connection_retry.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_read_write_declared.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_registry.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_registry_multi_database.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_registry_multi_schema.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_relational_backfill.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_relations.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_resilience.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_rls_session_scope.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_schema_exists.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_session_advisory_lock.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_standalone_write_session_context.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_state_cache.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_subquery_filter_raw.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_subquery_in_filter.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_subquery_nested_expressions.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_supabase_auth.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_supabase_config.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_tls.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_transaction_database_identity.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_transaction_gucs_one_round_trip.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_transaction_pool_release_sends_nothing.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_typed_join_projection.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_typed_predicates.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_update_case_expression.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_update_subquery.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_update_with_rebase.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_upsert_default_leak.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_upsert_with_conflict.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_values_jsonb_decode.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_watched_lifecycle.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_write_queue_deadline.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level1/test_write_retry_semantics.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/MODULE_README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/conftest.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/test_bulk_ops.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/test_cache_integration.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/test_crud.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/test_foreign_keys.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/test_m2m.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/test_manager.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/test_migrations_live.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/test_query_execution.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/test_schema_diff.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/level2/verify_committed_row_guard_pg17.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/live_pooler_role.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/native_source_cases.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/native_source_oracle.rs +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project/.env.example +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project/README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project/generate.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project/generated/.gitkeep +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project/matrx_orm.yaml +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project/test_schema_generation.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project_desktop/.env.example +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project_desktop/README.md +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project_desktop/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project_desktop/client_example.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project_desktop/client_example.ts +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project_desktop/client_supabase_example.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/sample_project_desktop/server.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/entity_tests.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_base_generation.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_composite_pk_fk_generation.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_composite_unique_generation.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_dto_identity_generation.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_entity_capability_generation.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_enum_ordering.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_generate_schema.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_junction_analysis.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_multi_schema_output.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_schema_analysis.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_sql_expression_defaults.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_table_relationships_query.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema/test_view_generation.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema_builder/test_array_default_parsing.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema_builder/test_focused_generation_plan.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema_builder/test_host_models_aggregator.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/schema_builder/test_never_filter_columns.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/__init__.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/conftest.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_a_failed_capture_still_names_the_failure.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_cache_no_downgrade.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_capture_poison_proof.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_coalesce.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_dag.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_disk_spill_fallback.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_flush_individual_fallback.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_governed_write.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_live_db_guard_plugin.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_managed.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_op_enqueue_site.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_reads.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_record_error_bounded_insert.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_record_error_storm.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_session.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/session/test_spill_guard_plugin.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_a_backend_handed_over_mid_transaction_never_takes_our_writes.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_a_read_only_backend_never_refuses_our_writes.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_array_arg_element_type.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_attachment_mutation_serialization.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_backup_alias_conflict.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_backup_history_restore.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_backup_restore_live.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_call_function_as.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_call_function_none_mode.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_composite_fk_is_not_a_column_fk.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_database_name_alias.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_db_functions.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_dsn_password_masking.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_dynamic_select_unregistered.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_immutable_insert_or_exact_verify.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_keyed_digest.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_model_cls_refactor.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_native_enable.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_native_lifecycle.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_native_lifecycle_fences.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_native_passkey_receipts.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_native_source.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_no_blocking_asyncpg_tls.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_one_database.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_order_by_desc_nulls_last.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_org_vault_gate.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_pooler_role_guard.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_secret_audit_names_its_organization.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_secrets_battery.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_secrets_minting_keys.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_shared_lock_guard.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_sql_param_casts.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_statement_ceiling_warning.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_sync_twins_guard.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_update_result_truthiness.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_user_visible_lookup.py +0 -0
- {matrx_orm-3.1.201 → matrx_orm-3.1.202}/tests/test_vault_aggregate_recovery_stateful.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: matrx-orm
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.202
|
|
4
4
|
Summary: Async-first PostgreSQL ORM with bidirectional migrations, schema introspection, many-to-many relationships, and built-in state caching
|
|
5
5
|
Project-URL: Homepage, https://github.com/AI-Matrix-Engine/aidream-current
|
|
6
6
|
Project-URL: Repository, https://github.com/AI-Matrix-Engine/aidream-current
|
|
@@ -725,6 +725,7 @@ def preview_schema_changes(
|
|
|
725
725
|
from matrx_orm.core.config import register_database_from_env
|
|
726
726
|
from matrx_orm.schema_builder.common import DEBUG_CONFIG, OutputConfig
|
|
727
727
|
from matrx_orm.schema_builder.schema import entry_manager_flags
|
|
728
|
+
from matrx_orm.schema_builder.excluded_targets import excluded_targets, modeled_schemas
|
|
728
729
|
from matrx_orm.schema_builder.schema_manager import SchemaManager
|
|
729
730
|
|
|
730
731
|
caller_dir = Path(sys.argv[0]).parent.resolve()
|
|
@@ -804,6 +805,12 @@ def preview_schema_changes(
|
|
|
804
805
|
include_tables=include_tables,
|
|
805
806
|
exclude_tables=exclude_tables,
|
|
806
807
|
manager_flags=manager_flags,
|
|
808
|
+
excluded_fk_targets=excluded_targets(cfg.get("generate", []), db_name),
|
|
809
|
+
modeled_schemas=modeled_schemas(
|
|
810
|
+
cfg.get("generate", []),
|
|
811
|
+
db_name,
|
|
812
|
+
next((d.get("additional_schemas") or [] for d in cfg.get("databases", []) if d.get("name") == db_name), []),
|
|
813
|
+
),
|
|
807
814
|
)
|
|
808
815
|
manager.initialize()
|
|
809
816
|
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""A table excluded from generation is excluded as a REFERENCE target too.
|
|
2
|
+
|
|
3
|
+
``exclude_tables`` under a schema's ``generate[]`` entry keeps that table's model out of the
|
|
4
|
+
schema's file. A table in ANOTHER schema (or the same one) whose foreign key points at it would
|
|
5
|
+
still emit ``ForeignKey(to_model='<Excluded>')`` and a ``get_*_with_related('<schema>.<table>')``
|
|
6
|
+
manager method — a lazy reference that resolves to nothing at runtime and a relation that reads a
|
|
7
|
+
table the host chose not to model. So every reference to an excluded table is dropped at load:
|
|
8
|
+
the column generates as its plain type, and the relation (both directions) is not emitted.
|
|
9
|
+
|
|
10
|
+
The excluded set is qualified (``schema.table``) and spans every ``generate[]`` entry of the same
|
|
11
|
+
database, because the referencing table usually lives in another schema's run.
|
|
12
|
+
|
|
13
|
+
The same holds for a table in a schema the host never models: a foreign key follows its table's
|
|
14
|
+
oid, so once a retired table moves to ``graveyard`` every reference to it reads
|
|
15
|
+
``to_schema='graveyard'`` — a class the registry can never hold. A reference whose target schema
|
|
16
|
+
is neither generated nor one of the database's ``additional_schemas`` is dropped the same way.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from collections.abc import Iterable
|
|
22
|
+
from typing import Any
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def excluded_targets(generate_list: Iterable[dict[str, Any]], database: str) -> frozenset[str]:
|
|
26
|
+
"""Every ``schema.table`` an ``exclude_tables`` list names for ``database``."""
|
|
27
|
+
out: set[str] = set()
|
|
28
|
+
for entry in generate_list:
|
|
29
|
+
if entry.get("database") != database:
|
|
30
|
+
continue
|
|
31
|
+
schema = entry.get("schema") or "public"
|
|
32
|
+
for table in entry.get("exclude_tables") or ():
|
|
33
|
+
out.add(f"{schema}.{table}")
|
|
34
|
+
return frozenset(out)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def modeled_schemas(
|
|
38
|
+
generate_list: Iterable[dict[str, Any]], database: str, additional_schemas: Iterable[str] = ()
|
|
39
|
+
) -> frozenset[str]:
|
|
40
|
+
"""Every schema the host models for ``database``: the generated ones and its additional schemas."""
|
|
41
|
+
out = {"public", *additional_schemas}
|
|
42
|
+
out.update(e.get("schema") or "public" for e in generate_list if e.get("database") == database)
|
|
43
|
+
return frozenset(out)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def drop_references_to(
|
|
47
|
+
excluded: frozenset[str] | set[str],
|
|
48
|
+
*,
|
|
49
|
+
schema: str,
|
|
50
|
+
processed_objects: list[dict[str, Any]],
|
|
51
|
+
full_relationships: list[dict[str, Any]],
|
|
52
|
+
modeled: frozenset[str] | set[str] | None = None,
|
|
53
|
+
) -> list[str]:
|
|
54
|
+
"""Remove every reference to an excluded table, or into a schema outside ``modeled``, in place.
|
|
55
|
+
|
|
56
|
+
Returns what was dropped, for the log. ``modeled=None`` keeps every schema.
|
|
57
|
+
"""
|
|
58
|
+
if not excluded and modeled is None:
|
|
59
|
+
return []
|
|
60
|
+
|
|
61
|
+
def gone(target_schema: str, table: str) -> bool:
|
|
62
|
+
return f"{target_schema}.{table}" in excluded or (modeled is not None and target_schema not in modeled)
|
|
63
|
+
|
|
64
|
+
dropped: list[str] = []
|
|
65
|
+
for obj in processed_objects:
|
|
66
|
+
for column in obj.get("table_columns") or ():
|
|
67
|
+
fk = column.get("foreign_key_reference")
|
|
68
|
+
if not isinstance(fk, dict) or not fk.get("table"):
|
|
69
|
+
continue
|
|
70
|
+
target_schema = fk.get("schema") or "public"
|
|
71
|
+
if gone(target_schema, fk["table"]):
|
|
72
|
+
column["foreign_key_reference"] = None
|
|
73
|
+
dropped.append(
|
|
74
|
+
f"{obj.get('schema')}.{obj.get('name')}.{column.get('name')} -> {target_schema}.{fk['table']}"
|
|
75
|
+
)
|
|
76
|
+
for rel in full_relationships:
|
|
77
|
+
fks = rel.get("foreign_keys")
|
|
78
|
+
if isinstance(fks, dict):
|
|
79
|
+
for key in [
|
|
80
|
+
k
|
|
81
|
+
for k, v in fks.items()
|
|
82
|
+
if isinstance(v, dict) and gone(v.get("foreign_schema") or schema, v.get("foreign_table") or k)
|
|
83
|
+
]:
|
|
84
|
+
fks.pop(key)
|
|
85
|
+
refs = rel.get("referenced_by")
|
|
86
|
+
if isinstance(refs, dict):
|
|
87
|
+
# Keys of referenced_by are always tables of THIS schema (bare names).
|
|
88
|
+
for key in [k for k in refs if f"{schema}.{k}" in excluded]:
|
|
89
|
+
refs.pop(key)
|
|
90
|
+
return dropped
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
__all__ = ["drop_references_to", "excluded_targets", "modeled_schemas"]
|
|
@@ -19,6 +19,7 @@ from dotenv import load_dotenv
|
|
|
19
19
|
from matrx_utils import vcprint
|
|
20
20
|
|
|
21
21
|
from matrx_orm.core.config import DatabaseConfigError, register_database_from_env
|
|
22
|
+
from matrx_orm.schema_builder.excluded_targets import excluded_targets, modeled_schemas
|
|
22
23
|
from matrx_orm.schema_builder.common import (
|
|
23
24
|
DEBUG_CONFIG,
|
|
24
25
|
GenerationOutputOverrides,
|
|
@@ -386,6 +387,12 @@ def run_schema_generation(
|
|
|
386
387
|
output_config=output_config,
|
|
387
388
|
include_tables=include_tables,
|
|
388
389
|
exclude_tables=exclude_tables,
|
|
390
|
+
excluded_fk_targets=excluded_targets(cfg.get("generate", []), db_name),
|
|
391
|
+
modeled_schemas=modeled_schemas(
|
|
392
|
+
cfg.get("generate", []),
|
|
393
|
+
db_name,
|
|
394
|
+
next((d.get("additional_schemas") or [] for d in cfg.get("databases", []) if d.get("name") == db_name), []),
|
|
395
|
+
),
|
|
389
396
|
manager_flags=manager_flags,
|
|
390
397
|
skip_unchanged_managers=skip_unchanged_managers,
|
|
391
398
|
output_overrides=output_overrides,
|
|
@@ -39,6 +39,8 @@ class SchemaManager:
|
|
|
39
39
|
manager_flags: dict | None = None,
|
|
40
40
|
skip_unchanged_managers: bool = False,
|
|
41
41
|
output_overrides: GenerationOutputOverrides | None = None,
|
|
42
|
+
excluded_fk_targets: frozenset[str] | set[str] | None = None,
|
|
43
|
+
modeled_schemas: frozenset[str] | set[str] | None = None,
|
|
42
44
|
):
|
|
43
45
|
if additional_schemas is None:
|
|
44
46
|
# Read from the registered database config if a project name is provided;
|
|
@@ -93,6 +95,13 @@ class SchemaManager:
|
|
|
93
95
|
self._exclude_tables: set[str] | None = (
|
|
94
96
|
set(exclude_tables) if exclude_tables is not None else None
|
|
95
97
|
)
|
|
98
|
+
#: ``schema.table`` names excluded from generation in ANY generate[] entry of this database:
|
|
99
|
+
#: a reference to one is dropped at load (``excluded_targets.drop_references_to``).
|
|
100
|
+
self._excluded_fk_targets: frozenset[str] = frozenset(excluded_fk_targets or ())
|
|
101
|
+
#: Schemas the host models; a reference into any other (``graveyard``) is dropped the same way.
|
|
102
|
+
self._modeled_schemas: frozenset[str] | None = (
|
|
103
|
+
frozenset(modeled_schemas) if modeled_schemas is not None else None
|
|
104
|
+
)
|
|
96
105
|
|
|
97
106
|
vcprint(
|
|
98
107
|
self.schema, title="SCHEMA MANAGER] with schema", verbose=self.verbose, color="blue"
|
|
@@ -160,6 +169,23 @@ class SchemaManager:
|
|
|
160
169
|
self.overview_analysis,
|
|
161
170
|
) = get_db_objects(self.schema.name, self.database_project)
|
|
162
171
|
|
|
172
|
+
if self._excluded_fk_targets or self._modeled_schemas is not None:
|
|
173
|
+
from matrx_orm.schema_builder.excluded_targets import drop_references_to
|
|
174
|
+
|
|
175
|
+
dropped = drop_references_to(
|
|
176
|
+
self._excluded_fk_targets,
|
|
177
|
+
schema=self.schema.name or "public",
|
|
178
|
+
processed_objects=self.processed_objects,
|
|
179
|
+
full_relationships=self.full_relationships,
|
|
180
|
+
modeled=self._modeled_schemas,
|
|
181
|
+
)
|
|
182
|
+
if dropped:
|
|
183
|
+
vcprint(
|
|
184
|
+
f"[MATRX ORM] {len(dropped)} reference(s) to an excluded or unmodeled table generate as plain "
|
|
185
|
+
f"columns: {', '.join(dropped)}",
|
|
186
|
+
color="yellow",
|
|
187
|
+
)
|
|
188
|
+
|
|
163
189
|
# NOTE: no filtering here — all relationship/overview data loads in full so
|
|
164
190
|
# that topological sort, FK resolution, and relationship analysis are always
|
|
165
191
|
# correct. The filter is applied in Schema.generate_models() just before
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "matrx-orm"
|
|
3
|
-
version = "3.1.
|
|
3
|
+
version = "3.1.202"
|
|
4
4
|
description = "Async-first PostgreSQL ORM with bidirectional migrations, schema introspection, many-to-many relationships, and built-in state caching"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "MIT" }
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""A table excluded from generation is excluded as a reference target too (excluded_targets).
|
|
2
|
+
|
|
3
|
+
The host excludes workbench.udt_datasets; extend.wbx_pattern.target_user_table_id and
|
|
4
|
+
workbench.udt_workbooks' inverse relation point at it. Without the rule the generated extend file
|
|
5
|
+
says ``ForeignKey(to_model='UdtDatasets')`` (a lazy reference that resolves to nothing) and the
|
|
6
|
+
managers grow ``get_*_with_related('workbench.udt_datasets')``.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from matrx_orm.schema_builder.excluded_targets import drop_references_to, excluded_targets
|
|
12
|
+
|
|
13
|
+
GENERATE = [
|
|
14
|
+
{"database": "main", "schema": "workbench", "exclude_tables": ["udt_datasets"]},
|
|
15
|
+
{"database": "main", "schema": "extend"},
|
|
16
|
+
{"database": "cms", "schema": "public", "exclude_tables": ["udt_datasets"]},
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _extend_objects() -> list[dict]:
|
|
21
|
+
return [
|
|
22
|
+
{
|
|
23
|
+
"schema": "extend",
|
|
24
|
+
"name": "wbx_pattern",
|
|
25
|
+
"table_columns": [
|
|
26
|
+
{"name": "id", "foreign_key_reference": None},
|
|
27
|
+
{
|
|
28
|
+
"name": "target_user_table_id",
|
|
29
|
+
"foreign_key_reference": {"table": "udt_datasets", "schema": "workbench", "column": "id"},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "organization_id",
|
|
33
|
+
"foreign_key_reference": {"table": "organizations", "schema": "iam", "column": "id"},
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _extend_relationships() -> list[dict]:
|
|
41
|
+
return [
|
|
42
|
+
{
|
|
43
|
+
"table_name": "wbx_pattern",
|
|
44
|
+
"foreign_keys": {
|
|
45
|
+
"workbench.udt_datasets": {"foreign_schema": "workbench", "foreign_table": "udt_datasets"},
|
|
46
|
+
"iam.organizations": {"foreign_schema": "iam", "foreign_table": "organizations"},
|
|
47
|
+
},
|
|
48
|
+
"referenced_by": {},
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def test_the_excluded_set_is_qualified_and_per_database() -> None:
|
|
54
|
+
assert excluded_targets(GENERATE, "main") == frozenset({"workbench.udt_datasets"})
|
|
55
|
+
assert excluded_targets(GENERATE, "cms") == frozenset({"public.udt_datasets"})
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def test_a_reference_to_an_excluded_table_becomes_a_plain_column() -> None:
|
|
59
|
+
objects, rels = _extend_objects(), _extend_relationships()
|
|
60
|
+
dropped = drop_references_to(
|
|
61
|
+
excluded_targets(GENERATE, "main"), schema="extend", processed_objects=objects, full_relationships=rels
|
|
62
|
+
)
|
|
63
|
+
columns = {c["name"]: c["foreign_key_reference"] for c in objects[0]["table_columns"]}
|
|
64
|
+
assert columns["target_user_table_id"] is None
|
|
65
|
+
assert columns["organization_id"] == {"table": "organizations", "schema": "iam", "column": "id"}
|
|
66
|
+
assert list(rels[0]["foreign_keys"]) == ["iam.organizations"]
|
|
67
|
+
assert dropped == ["extend.wbx_pattern.target_user_table_id -> workbench.udt_datasets"]
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_an_inverse_relation_from_an_excluded_table_is_dropped_in_its_own_schema() -> None:
|
|
71
|
+
rels = [
|
|
72
|
+
{
|
|
73
|
+
"table_name": "udt_workbooks",
|
|
74
|
+
"foreign_keys": {},
|
|
75
|
+
"referenced_by": {"udt_datasets": {"column": "workbook_id"}, "udt_workbook_snapshots": {"column": "workbook_id"}},
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"table_name": "udt_dataset_templates",
|
|
79
|
+
"foreign_keys": {"udt_workbooks": {"foreign_schema": "workbench", "foreign_table": "udt_workbooks"}},
|
|
80
|
+
"referenced_by": {},
|
|
81
|
+
},
|
|
82
|
+
]
|
|
83
|
+
drop_references_to(excluded_targets(GENERATE, "main"), schema="workbench", processed_objects=[], full_relationships=rels)
|
|
84
|
+
assert list(rels[0]["referenced_by"]) == ["udt_workbook_snapshots"]
|
|
85
|
+
assert list(rels[1]["foreign_keys"]) == ["udt_workbooks"]
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def test_without_an_exclusion_nothing_changes() -> None:
|
|
89
|
+
objects, rels = _extend_objects(), _extend_relationships()
|
|
90
|
+
assert drop_references_to(frozenset(), schema="extend", processed_objects=objects, full_relationships=rels) == []
|
|
91
|
+
assert objects == _extend_objects() and rels == _extend_relationships()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def test_the_schema_manager_applies_the_rule_at_load(monkeypatch) -> None:
|
|
95
|
+
"""The generator's own load path drops the reference (red when SchemaManager ignores the set)."""
|
|
96
|
+
from matrx_orm.schema_builder import schema_manager as sm
|
|
97
|
+
|
|
98
|
+
monkeypatch.setattr(
|
|
99
|
+
sm, "get_db_objects", lambda schema, project: (_extend_objects(), _extend_relationships(), {}, set(), {})
|
|
100
|
+
)
|
|
101
|
+
manager = sm.SchemaManager(
|
|
102
|
+
schema="extend", database_project=None, additional_schemas=[],
|
|
103
|
+
excluded_fk_targets=excluded_targets(GENERATE, "main"),
|
|
104
|
+
)
|
|
105
|
+
manager.set_all_schema_data()
|
|
106
|
+
column = next(c for c in manager.processed_objects[0]["table_columns"] if c["name"] == "target_user_table_id")
|
|
107
|
+
assert column["foreign_key_reference"] is None
|
|
108
|
+
assert list(manager.full_relationships[0]["foreign_keys"]) == ["iam.organizations"]
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def test_a_reference_into_an_unmodeled_schema_becomes_a_plain_column() -> None:
|
|
112
|
+
"""After step two the FK follows the table into graveyard: to_schema='graveyard' is never a model."""
|
|
113
|
+
from matrx_orm.schema_builder.excluded_targets import modeled_schemas
|
|
114
|
+
|
|
115
|
+
objects = _extend_objects()
|
|
116
|
+
objects[0]["table_columns"][1]["foreign_key_reference"]["schema"] = "graveyard"
|
|
117
|
+
rels = _extend_relationships()
|
|
118
|
+
rels[0]["foreign_keys"] = {
|
|
119
|
+
"graveyard.udt_datasets": {"foreign_schema": "graveyard", "foreign_table": "udt_datasets"},
|
|
120
|
+
"iam.organizations": {"foreign_schema": "iam", "foreign_table": "organizations"},
|
|
121
|
+
}
|
|
122
|
+
modeled = modeled_schemas(GENERATE, "main", ["iam", "auth"])
|
|
123
|
+
assert "graveyard" not in modeled and {"workbench", "extend", "iam", "auth", "public"} <= modeled
|
|
124
|
+
drop_references_to(frozenset(), schema="extend", processed_objects=objects, full_relationships=rels, modeled=modeled)
|
|
125
|
+
columns = {c["name"]: c["foreign_key_reference"] for c in objects[0]["table_columns"]}
|
|
126
|
+
assert columns["target_user_table_id"] is None
|
|
127
|
+
assert columns["organization_id"] is not None
|
|
128
|
+
assert list(rels[0]["foreign_keys"]) == ["iam.organizations"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|