plain.postgres 0.107.0__tar.gz → 0.107.1__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.
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/PKG-INFO +1 -1
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/CHANGELOG.md +10 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/constraints.py +1 -1
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/meta.py +3 -2
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/executor.py +1 -1
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/state.py +3 -1
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/query.py +1 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/sql/compiler.py +2 -2
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/sql/query.py +3 -1
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/pyproject.toml +1 -1
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/.gitignore +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/CLAUDE.md +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/LICENSE +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/README.md +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/README.md +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/adapters.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/agents/.claude/rules/plain-postgres.md +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/agents/.claude/skills/plain-postgres-doctor/SKILL.md +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/aggregates.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/base.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/cli/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/cli/converge.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/cli/core.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/cli/decorators.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/cli/diagnose.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/cli/migrations.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/cli/schema.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/cli/sync.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/config.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/connection.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/constants.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/convergence/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/convergence/analysis.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/convergence/fixes.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/convergence/planning.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/database_url.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/db.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/ddl.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/default_settings.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/deletion.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/dialect.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/entrypoints.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/enums.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/exceptions.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/expressions.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/base.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/binary.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/boolean.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/duration.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/encrypted.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/json.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/mixins.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/network.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/numeric.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/primary_key.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/related.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/related_descriptors.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/related_lookups.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/related_managers.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/reverse_descriptors.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/reverse_related.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/temporal.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/text.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/timezones.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/uuid.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/forms.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/functions/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/functions/comparison.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/functions/datetime.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/functions/math.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/functions/mixins.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/functions/random.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/functions/text.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/functions/uuid.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/functions/window.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/indexes.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/checks_cumulative.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/checks_snapshot.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/checks_structural.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/context.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/helpers.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/ownership.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/runner.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/types.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/schema.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/lookups.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/middleware.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/autodetector.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/exceptions.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/graph.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/loader.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/migration.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/operations/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/operations/base.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/operations/fields.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/operations/models.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/operations/special.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/optimizer.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/questioner.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/recorder.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/serializer.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/utils.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/writer.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/options.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/otel.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/preflight.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/query_utils.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/registry.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/schema.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/sources.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/sql/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/sql/constants.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/sql/datastructures.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/sql/where.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/test/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/test/database.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/test/pytest.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/transaction.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/types.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/types.pyi +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/utils.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/forms.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0001_initial.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0002_test_field_removed.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0003_deleteparent_childsetnull_childsetdefault_and_more.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0004_defaultquerysetmodel_mixintestmodel_and_more.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0005_feature_carfeature_car_features.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0006_secretstore.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0007_treenode_unconstrainedchild.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0008_setsentinelparent_diamondparenta_midparent_and_more.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0009_circb_circa_circb_partner.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0010_hideableitem.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0011_defaultsexample.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0012_iterationexample.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0013_indexexample_constraintexample_nullabilityexample.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0014_widget_rename_feature_tag_remove_carfeature_car_and_more.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0015_dbdefaultsexample.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0016_formsexample.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0017_random_string_token.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0018_storageparametersexample.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/__init__.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/constraints.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/defaults.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/delete.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/encrypted.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/forms.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/indexes.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/iteration.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/mixins.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/nullability.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/querysets.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/relationships.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/storage_parameters.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/trees.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/unregistered.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/urls.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/views.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/settings.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/urls.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/conftest.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/conftest_convergence.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_autodetector_not_null_errors.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_autodetector_type_change.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_connection_isolation.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_connection_lifecycle.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_connection_pool.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_constraint_violation_error.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_constraints.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_defaults.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_fk.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_indexes.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_nullability.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_storage_parameters.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_timeouts.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_db_expression_defaults.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_diagnose.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_executor_connection_hook.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_fk_characterization.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_health.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_introspection.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_literal_default_persistence.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_management_connection.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_migration_executor.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_no_callable_defaults.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_otel_metrics.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_preflight_duplicate_indexes.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_preflight_fk_coverage.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_schema_normalize_type.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_schema_timeouts.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_create_update.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_database_url.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_deferred_loading.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_delete_behaviors.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_encrypted_fields.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_exceptions.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_field_defaults.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_functions_uuid.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_integrity_error_mapping.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_iterator.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_m2m.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_manager_assignment.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_manual_pk.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_mixins.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_modelform_roundtrip.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_queryset_repr.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_random_string_field.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_raw_query.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_read_only_transactions.py +0 -0
- {plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_related.py +0 -0
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# plain-postgres changelog
|
|
2
2
|
|
|
3
|
+
## [0.107.1](https://github.com/dropseed/plain/releases/plain-postgres@0.107.1) (2026-06-08)
|
|
4
|
+
|
|
5
|
+
### What's changed
|
|
6
|
+
|
|
7
|
+
- Internal: typing-only cleanup for the `ty` 0.0.45 upgrade. `Query.order_by` is now annotated `tuple[Any, ...]` instead of relying on empty-tuple inference, a few field-name dict keys are narrowed via `assert` or the known-`str` loop variable, and `ty: ignore` comments on the intentionally heterogeneous `get_fields()` / `klass_info` structures were adjusted (net removal of several ignores). No runtime behavior changes. ([5c8015795d](https://github.com/dropseed/plain/commit/5c8015795d), [95f54e880d](https://github.com/dropseed/plain/commit/95f54e880d))
|
|
8
|
+
|
|
9
|
+
### Upgrade instructions
|
|
10
|
+
|
|
11
|
+
- No changes required.
|
|
12
|
+
|
|
3
13
|
## [0.107.0](https://github.com/dropseed/plain/releases/plain-postgres@0.107.0) (2026-06-07)
|
|
4
14
|
|
|
5
15
|
### What's changed
|
|
@@ -385,7 +385,7 @@ class UniqueConstraint(BaseConstraint):
|
|
|
385
385
|
# A composite constraint containing NULL value cannot cause
|
|
386
386
|
# a violation since NULL != NULL in SQL.
|
|
387
387
|
return
|
|
388
|
-
lookup_kwargs[
|
|
388
|
+
lookup_kwargs[field_name] = lookup_value
|
|
389
389
|
queryset = queryset.filter(**lookup_kwargs)
|
|
390
390
|
else:
|
|
391
391
|
# Ignore constraints with excluded fields.
|
|
@@ -511,8 +511,9 @@ class Meta:
|
|
|
511
511
|
fields.append(field.remote_field)
|
|
512
512
|
|
|
513
513
|
if forward:
|
|
514
|
-
|
|
515
|
-
fields += self.
|
|
514
|
+
# get_fields() intentionally returns a heterogeneous list of field types.
|
|
515
|
+
fields += self.local_fields # ty: ignore[unsupported-operator]
|
|
516
|
+
fields += self.local_many_to_many # ty: ignore[unsupported-operator]
|
|
516
517
|
|
|
517
518
|
# In order to avoid list manipulation. Always
|
|
518
519
|
# return a shallow copy of the results
|
|
@@ -47,7 +47,7 @@ class MigrationExecutor:
|
|
|
47
47
|
if migration not in applied:
|
|
48
48
|
plan.append(self.loader.graph.nodes[migration])
|
|
49
49
|
applied[migration] = self.loader.graph.nodes[migration]
|
|
50
|
-
return plan
|
|
50
|
+
return plan # ty: ignore[invalid-return-type] (graph.nodes may hold dummy None, never reached here)
|
|
51
51
|
|
|
52
52
|
def _create_project_state(
|
|
53
53
|
self, with_applied_migrations: bool = False
|
|
@@ -679,6 +679,7 @@ class ModelState:
|
|
|
679
679
|
if getattr(field, "remote_field", None) and exclude_rels:
|
|
680
680
|
continue
|
|
681
681
|
name = field.name
|
|
682
|
+
assert name is not None
|
|
682
683
|
try:
|
|
683
684
|
fields.append((name, field.clone()))
|
|
684
685
|
except TypeError as e:
|
|
@@ -688,6 +689,7 @@ class ModelState:
|
|
|
688
689
|
if not exclude_rels:
|
|
689
690
|
for field in model._model_meta.local_many_to_many:
|
|
690
691
|
name = field.name
|
|
692
|
+
assert name is not None
|
|
691
693
|
try:
|
|
692
694
|
fields.append((name, field.clone()))
|
|
693
695
|
except TypeError as e:
|
|
@@ -699,7 +701,7 @@ class ModelState:
|
|
|
699
701
|
bases = []
|
|
700
702
|
for base in model.__bases__:
|
|
701
703
|
bases.append(base)
|
|
702
|
-
return bases
|
|
704
|
+
return bases # ty: ignore[invalid-return-type] (__bases__ widens to list[type])
|
|
703
705
|
|
|
704
706
|
# We can't rely on __mro__ directly because we only want to flatten
|
|
705
707
|
# abstract models and not the whole tree. However by recursing on
|
|
@@ -809,6 +809,7 @@ class QuerySet[T: "Model"]:
|
|
|
809
809
|
case_statement = Case(*when_statements, output_field=field)
|
|
810
810
|
# PostgreSQL requires casted CASE in updates
|
|
811
811
|
case_statement = Cast(case_statement, output_field=field)
|
|
812
|
+
assert field.name is not None
|
|
812
813
|
update_kwargs[field.name] = case_statement
|
|
813
814
|
updates.append(([obj.id for obj in batch_objs], update_kwargs))
|
|
814
815
|
rows_updated = 0
|
|
@@ -343,7 +343,7 @@ class SQLCompiler:
|
|
|
343
343
|
if self.query.select_related:
|
|
344
344
|
related_klass_infos = self.get_related_selections(select, select_mask)
|
|
345
345
|
if klass_info is not None:
|
|
346
|
-
klass_info["related_klass_infos"] = related_klass_infos
|
|
346
|
+
klass_info["related_klass_infos"] = related_klass_infos # ty: ignore[invalid-assignment] (heterogeneous klass_info dict)
|
|
347
347
|
|
|
348
348
|
ret = []
|
|
349
349
|
col_idx = 1
|
|
@@ -367,7 +367,7 @@ class SQLCompiler:
|
|
|
367
367
|
alias = f"col{col_idx}"
|
|
368
368
|
col_idx += 1
|
|
369
369
|
ret.append((col, (sql, params), alias))
|
|
370
|
-
return ret, klass_info, annotations
|
|
370
|
+
return ret, klass_info, annotations # ty: ignore[invalid-return-type] (heterogeneous klass_info dict)
|
|
371
371
|
|
|
372
372
|
def _order_by_pairs(self) -> Generator[tuple[OrderBy, bool]]:
|
|
373
373
|
if self.query.extra_order_by:
|
|
@@ -229,7 +229,9 @@ class Query(BaseExpression):
|
|
|
229
229
|
# - True: group by all select fields of the model
|
|
230
230
|
# See compiler.get_group_by() for details.
|
|
231
231
|
group_by = None
|
|
232
|
-
|
|
232
|
+
# Holds field-name strings and order expressions; the compiler duck-types
|
|
233
|
+
# each entry, so the element type is intentionally loose.
|
|
234
|
+
order_by: tuple[Any, ...] = ()
|
|
233
235
|
low_mark = 0 # Used for offset/limit.
|
|
234
236
|
high_mark = None # Used for offset/limit.
|
|
235
237
|
distinct = False
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/related_descriptors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/fields/reverse_descriptors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/context.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/helpers.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/ownership.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/runner.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/introspection/health/types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/operations/base.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/operations/fields.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/operations/models.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/plain/postgres/migrations/operations/special.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0001_initial.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0006_secretstore.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0010_hideableitem.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/migrations/0016_formsexample.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/relationships.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/app/examples/models/storage_parameters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_autodetector_type_change.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_connection_isolation.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_connection_lifecycle.py
RENAMED
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_constraint_violation_error.py
RENAMED
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_constraints.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_defaults.py
RENAMED
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_indexes.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_nullability.py
RENAMED
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_convergence_timeouts.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_db_expression_defaults.py
RENAMED
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_executor_connection_hook.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_fk_characterization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_literal_default_persistence.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_management_connection.py
RENAMED
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_no_callable_defaults.py
RENAMED
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_preflight_duplicate_indexes.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_preflight_fk_coverage.py
RENAMED
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/internal/test_schema_normalize_type.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_integrity_error_mapping.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_postgres-0.107.0 → plain_postgres-0.107.1}/tests/public/test_read_only_transactions.py
RENAMED
|
File without changes
|
|
File without changes
|