matrx-orm 3.1.40__tar.gz → 3.1.41__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.40 → matrx_orm-3.1.41}/CLAUDE.md +3 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/PKG-INFO +1 -1
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/base.py +6 -6
- matrx_orm-3.1.41/matrx_orm/query/FEATURE.md +17 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/query/builder.py +9 -4
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/pyproject.toml +1 -1
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_query_builder.py +18 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/.gitignore +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/AGENTS.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/BASE_CLASS_METHODS.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/MODEL_API.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/database/orm/extended/managers/ai_model_base.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/docs/migrations.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/adapters/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/adapters/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/adapters/async_postgresql.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/adapters/base_adapter.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/adapters/postgresql.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/adapters/postgrest_client_adapter.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/adapters/supabase_adapter.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/admin/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/admin/router.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/api/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/api/auth.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/api/config.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/api/handlers.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/api/protocol.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/api/server.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/associations.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/cache_debug.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/catalog.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/client/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/client/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/client/postgres_connection.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/client/postgrest.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/client/supabase_auth.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/client/supabase_config.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/client/supabase_manager.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/EXTENDED-TASK.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/RELATIONS-TASKS.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/TASKS.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/async_db_manager.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/config.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/connections.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/db_function.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/diagnostics.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/expressions.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/extended.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/fields.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/introspection.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/listen.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/loop_filters.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/model_dto.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/model_view.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/paginator.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/pool_maintenance.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/pydantic_bridge.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/registry.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/relations.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/resilience.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/rls_session.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/signals.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/tls.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/transaction.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/types.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/core/write_queue.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/entity.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/error_handling.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/exceptions.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/extended/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/extended/app_error_handler.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/identity_rule.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/middleware/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/middleware/base.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/cli.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/ddl.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/diff.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/executor.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/integration.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/loader.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/operations.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/state.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/migrations/table_filter.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/bulk_update_values.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/conflict.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/conflict_writes.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/create.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/db_functions.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/delete.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/dynamic_admin.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/dynamic_crud.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/graph_walk.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/latest_rows.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/queue_claim.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/read.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/relational_backfill.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/staging_load.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/operations/update.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/py.typed +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/python_sql/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/python_sql/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/python_sql/db_objects.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/query/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/query/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/query/executor.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/code_handler.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/codegen_writer.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/columns.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/common.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/diff_preview.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/entity_capabilities.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/generator.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/helpers/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/package_wiring.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/relationships.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/runner.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/schema.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/schema_manager.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/tables.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/schema_builder/views.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/secrets_battery/FEATURE.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/secrets_battery/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/secrets_battery/crypto.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/secrets_battery/items.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/secrets_battery/model.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/secrets_battery/org_service.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/secrets_battery/service.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/coalesce.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/dag.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/errors.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/fallback.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/flush.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/lifecycle.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/managed.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/op.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/reads.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/session.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/session/telemetry.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/sql_executor/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/sql_executor/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/sql_executor/executor.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/sql_executor/queries.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/sql_executor/registry.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/sql_executor/types.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/sql_executor/utils.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/state.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/utils/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/utils/sql_utils.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/matrx_orm/utils/type_converters.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/scripts/git-branches.sh +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/scripts/publish.sh +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/scripts/release.sh +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/conftest.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_admin_db_columns.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_admin_search_negation.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_admin_search_sentinels.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_advisory_lock.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_agent_message.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_api_auth.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_api_config.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_api_handlers.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_api_protocol.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_array_agg_order_by.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_associations.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_bulk_update_by_pk.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_bulk_upsert_increment_set_fields.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_cache_debug.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_call_function.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_case_when.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_catalog.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_composite_pk_filter.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_composite_pk_write_paths.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_config.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_conflict_target.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_conflict_writes.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_connection_codecs.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_connection_poison_guard.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_connection_primitives.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_count_composite_distinct.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_db_function_field.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_ddl_generator.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_derived_table.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_dirty_tracking.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_dynamic_crud.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_exceptions.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_expression_primitives.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_fields.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_filter_jsonb_agg_array_index.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_from_alias.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_fts.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_func_expression_args.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_graph_walk.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_having_annotate_alias.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_insert_ignore_and_admin_primitives.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_introspect_rls_policies.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_join_and_aggregate.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_latest_rows.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_listen_notify.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_managed_write_guard.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_matrx_entity.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_migration_diff_types.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_migration_loader.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_model_instance.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_model_meta.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_order_by_expression.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_patch_jsonb_path.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_pool_loop_recreation.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_pool_maintenance.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_postgrest_filters.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_pydantic_bridge.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_query_error_detail.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_query_executor_sql.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_query_timeout.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_querybuilder_clone_semantics.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_queue_claim.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_registry.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_registry_multi_database.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_registry_multi_schema.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_relational_backfill.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_relations.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_resilience.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_schema_exists.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_session_advisory_lock.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_state_cache.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_subquery_filter_raw.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_subquery_in_filter.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_supabase_auth.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_supabase_config.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_tls.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_typed_join_projection.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_typed_predicates.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_update_case_expression.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_update_subquery.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_upsert_default_leak.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_upsert_with_conflict.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_values_jsonb_decode.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_watched_lifecycle.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level1/test_write_retry_semantics.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/MODULE_README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/conftest.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/test_bulk_ops.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/test_cache_integration.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/test_crud.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/test_foreign_keys.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/test_m2m.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/test_manager.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/test_migrations_live.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/test_query_execution.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/level2/test_schema_diff.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project/.env.example +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project/README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project/generate.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project/generated/.gitkeep +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project/matrx_orm.yaml +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project/test_schema_generation.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project_desktop/.env.example +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project_desktop/README.md +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project_desktop/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project_desktop/client_example.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project_desktop/client_example.ts +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project_desktop/client_supabase_example.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/sample_project_desktop/server.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/entity_tests.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/test_base_generation.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/test_composite_pk_fk_generation.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/test_composite_unique_generation.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/test_dto_identity_generation.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/test_entity_capability_generation.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/test_generate_schema.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/test_junction_analysis.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/test_multi_schema_output.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/test_sql_expression_defaults.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema/test_view_generation.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/schema_builder/test_focused_generation_plan.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/__init__.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/conftest.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_cache_no_downgrade.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_capture_poison_proof.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_coalesce.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_dag.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_disk_spill_fallback.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_flush_individual_fallback.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_governed_write.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_managed.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_op_enqueue_site.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_reads.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/session/test_session.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/test_database_name_alias.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/test_db_functions.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/test_model_cls_refactor.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/test_no_blocking_asyncpg_tls.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/test_secrets_battery.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/test_sql_param_casts.py +0 -0
- {matrx_orm-3.1.40 → matrx_orm-3.1.41}/tests/test_sync_twins_guard.py +0 -0
|
@@ -32,6 +32,9 @@ Every table that becomes a Model needs row identity: a single-column primary key
|
|
|
32
32
|
subqueries. SQL-shaped strings fail closed: plain strings name validated
|
|
33
33
|
columns only; compose casts, JSON paths, functions, ordering, joins, partial
|
|
34
34
|
conflict targets, and filtered aggregates with the exported typed objects.
|
|
35
|
+
Large reconciliation/export scans call `.all(use_cache=False)` so returned
|
|
36
|
+
models do not quadratically populate the process identity cache. Contract:
|
|
37
|
+
[`matrx_orm/query/FEATURE.md`](matrx_orm/query/FEATURE.md).
|
|
35
38
|
- **Migrations**: `MigrationDB`, `MigrationLoader`, `MigrationExecutor`, `makemigrations`, `migrate` — migrations declare explicit `dependencies` and apply in topological order (no multi-head/merge support yet).
|
|
36
39
|
- **Admin router** (FastAPI): `admin_router` exposes read/write endpoints for any registered model.
|
|
37
40
|
- **API layer** (optional `[api]` extra): `APIServer`, `APIConfig`, `TokenAuth`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: matrx-orm
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.41
|
|
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
|
|
@@ -1292,17 +1292,17 @@ class Model(RuntimeMixin, metaclass=ModelMeta):
|
|
|
1292
1292
|
return run_sync(cls.delete_where(**filters))
|
|
1293
1293
|
|
|
1294
1294
|
@classmethod
|
|
1295
|
-
async def all(cls) -> list[Self]:
|
|
1295
|
+
async def all(cls, *, use_cache: bool = True) -> list[Self]:
|
|
1296
|
+
"""Fetch every row, optionally bypassing identity-cache population."""
|
|
1297
|
+
|
|
1296
1298
|
try:
|
|
1297
|
-
|
|
1298
|
-
await StateManager.cache_bulk(model_class=cls, records=results)
|
|
1299
|
-
return results
|
|
1299
|
+
return await QueryBuilder(model_cls=cls).all(use_cache=use_cache)
|
|
1300
1300
|
except ORMException as e:
|
|
1301
1301
|
e.enrich(model=cls, operation="all")
|
|
1302
1302
|
raise
|
|
1303
1303
|
|
|
1304
1304
|
@classmethod
|
|
1305
|
-
def all_sync(cls) -> list[Self]:
|
|
1305
|
+
def all_sync(cls, *, use_cache: bool = True) -> list[Self]:
|
|
1306
1306
|
"""
|
|
1307
1307
|
Synchronous wrapper for all().
|
|
1308
1308
|
Use this in synchronous contexts to fetch all results without async/await.
|
|
@@ -1316,7 +1316,7 @@ class Model(RuntimeMixin, metaclass=ModelMeta):
|
|
|
1316
1316
|
if "no running event loop" not in str(e):
|
|
1317
1317
|
raise
|
|
1318
1318
|
|
|
1319
|
-
return run_sync(cls.all())
|
|
1319
|
+
return run_sync(cls.all(use_cache=use_cache))
|
|
1320
1320
|
|
|
1321
1321
|
async def save(self, **kwargs: Any) -> Self:
|
|
1322
1322
|
"""Save the current state of the model instance."""
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Query execution
|
|
2
|
+
|
|
3
|
+
`QueryBuilder` is the typed terminal-read and write layer behind every model.
|
|
4
|
+
Application packages compose queries here; they never bypass it with SQL.
|
|
5
|
+
|
|
6
|
+
## Large scans and the identity cache
|
|
7
|
+
|
|
8
|
+
`.all()` populates `StateManager` by default so ordinary repeated identity reads
|
|
9
|
+
remain fast. A large reconciliation, export, or historical scan must call
|
|
10
|
+
`.all(use_cache=False)`. This still returns fully hydrated models and still
|
|
11
|
+
merges pending session state, but it does not insert every result into the
|
|
12
|
+
process identity cache.
|
|
13
|
+
|
|
14
|
+
`Model.all(use_cache=False)` exposes the same behavior. The default remains
|
|
15
|
+
`True` for compatibility. The cache bypass controls only cache population; it
|
|
16
|
+
does not weaken database authorization, filters, hydration, or transaction
|
|
17
|
+
semantics.
|
|
@@ -778,7 +778,7 @@ class QueryBuilder(Generic[ModelT]):
|
|
|
778
778
|
if len(pks) == 1 and not self.excludes and set(combined) <= {pks[0], f"{pks[0]}__in"}:
|
|
779
779
|
values = combined.get(pks[0])
|
|
780
780
|
in_values = combined.get(f"{pks[0]}__in")
|
|
781
|
-
targets = list(in_values) if isinstance(in_values,
|
|
781
|
+
targets = list(in_values) if isinstance(in_values, list | tuple | set) else []
|
|
782
782
|
if values is not None:
|
|
783
783
|
targets.append(values)
|
|
784
784
|
if targets and StateManager.is_registered(self.model):
|
|
@@ -802,9 +802,12 @@ class QueryBuilder(Generic[ModelT]):
|
|
|
802
802
|
# Terminal async methods
|
|
803
803
|
# ------------------------------------------------------------------
|
|
804
804
|
|
|
805
|
-
async def all(self) -> list[ModelT]:
|
|
805
|
+
async def all(self, *, use_cache: bool = True) -> list[ModelT]:
|
|
806
806
|
"""Fetch all matching records.
|
|
807
807
|
|
|
808
|
+
Pass ``use_cache=False`` for large scans that must not populate the
|
|
809
|
+
process identity cache.
|
|
810
|
+
|
|
808
811
|
Session-aware: if an active Session has pending writes for this
|
|
809
812
|
Model, the result merges pending state with DB rows. Pending
|
|
810
813
|
INSERTs matching the filter appear in the result; pending UPDATEs
|
|
@@ -814,10 +817,12 @@ class QueryBuilder(Generic[ModelT]):
|
|
|
814
817
|
try:
|
|
815
818
|
executor = self._get_executor()
|
|
816
819
|
results = await executor.all()
|
|
817
|
-
|
|
820
|
+
if use_cache:
|
|
821
|
+
await StateManager.cache_bulk(self.model, results)
|
|
818
822
|
if debug:
|
|
819
823
|
vcprint(
|
|
820
|
-
f"[BUILDER] all()
|
|
824
|
+
f"[BUILDER] all() fetched {len(results)} records for "
|
|
825
|
+
f"{self.model.__name__} (cache={use_cache})",
|
|
821
826
|
color="bright_gold",
|
|
822
827
|
)
|
|
823
828
|
return _merge_pending_into_models(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "matrx-orm"
|
|
3
|
-
version = "3.1.
|
|
3
|
+
version = "3.1.41"
|
|
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" }
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"""Level 1: QueryBuilder — filter, exclude, order_by, limit, offset, select, _build_query."""
|
|
2
2
|
|
|
3
|
+
from types import SimpleNamespace
|
|
4
|
+
from unittest.mock import AsyncMock
|
|
5
|
+
|
|
3
6
|
import pytest
|
|
4
7
|
from matrx_orm.core.base import Model, ModelMeta
|
|
5
8
|
from matrx_orm.core.fields import CharField, IntegerField, UUIDField
|
|
6
9
|
from matrx_orm.core.registry import ModelRegistry
|
|
7
10
|
from matrx_orm.exceptions import DoesNotExist, PermissionDeniedError
|
|
8
11
|
from matrx_orm.query.builder import QueryBuilder
|
|
12
|
+
from matrx_orm.state import StateManager
|
|
9
13
|
|
|
10
14
|
|
|
11
15
|
@pytest.fixture(autouse=True)
|
|
@@ -85,6 +89,20 @@ class TestQueryBuilderChaining:
|
|
|
85
89
|
qb = QueryBuilder(M).filter()
|
|
86
90
|
assert qb.filters == []
|
|
87
91
|
|
|
92
|
+
@pytest.mark.asyncio
|
|
93
|
+
async def test_all_can_skip_identity_cache_for_large_scans(self, monkeypatch):
|
|
94
|
+
M = _make_model()
|
|
95
|
+
rows = [M(id="00000000-0000-0000-0000-000000000001", name="Alice")]
|
|
96
|
+
executor = SimpleNamespace(all=AsyncMock(return_value=rows))
|
|
97
|
+
cache_bulk = AsyncMock()
|
|
98
|
+
monkeypatch.setattr(QueryBuilder, "_get_executor", lambda _self: executor)
|
|
99
|
+
monkeypatch.setattr(StateManager, "cache_bulk", cache_bulk)
|
|
100
|
+
|
|
101
|
+
result = await QueryBuilder(M).all(use_cache=False)
|
|
102
|
+
|
|
103
|
+
assert result == rows
|
|
104
|
+
cache_bulk.assert_not_awaited()
|
|
105
|
+
|
|
88
106
|
|
|
89
107
|
class TestBuildQuery:
|
|
90
108
|
def test_build_query_basic(self):
|
|
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
|
|
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
|