ferro-orm 0.21.0__tar.gz → 0.21.2__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.
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/workflows/ci.yml +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/AGENTS.md +64 -4
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/CHANGELOG.md +42 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/CONTEXT.md +13 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/Cargo.lock +31 -31
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/Cargo.toml +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/PKG-INFO +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/crates/ferro-ddl-lowering/src/lib.rs +635 -6
- ferro_orm-0.21.2/docs/adr/0015-table-check-body-drift.md +14 -0
- ferro_orm-0.21.2/docs/adr/0020-enum-type-drop-on-downgrade.md +117 -0
- ferro_orm-0.21.2/docs/adr/0021-enum-type-reuse-on-upgrade.md +133 -0
- ferro_orm-0.21.2/docs/adr/0022-enum-type-creation-for-add-column.md +134 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/row_level_security.py +9 -9
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/row_level_security_annotated.py +9 -9
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/traversal.py +2 -2
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/api/connection.md +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/concepts/architecture.md +5 -5
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/concepts/performance.md +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/concepts/type-safety.md +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/faq.md +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/getting-started/next-steps.md +2 -2
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/getting-started/quickstart.md +2 -2
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/guide/aggregations.md +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/guide/migrations.md +20 -3
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/guide/models-and-fields.md +2 -2
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/guide/queries.md +13 -5
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/guide/relationships.md +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/guide/row-level-security.md +114 -67
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/guide/transactions.md +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/howto/migrate-from-sqlalchemy.md +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/howto/pagination.md +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/howto/testing.md +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/index.md +2 -2
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/why-ferro.md +4 -12
- ferro_orm-0.21.2/docs/solutions/issues/alembic-add-column-enum-type-undefined.md +90 -0
- ferro_orm-0.21.2/docs/solutions/issues/alembic-create-table-reissues-enum-type.md +87 -0
- ferro_orm-0.21.2/docs/solutions/issues/n-ary-check-chain-reads-as-drift.md +64 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/alembic-comparator-slot.md +19 -2
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/justfile +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/pyproject.toml +2 -2
- ferro_orm-0.21.2/src/ferro/migrations/__init__.py +3 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/migrations/alembic.py +433 -26
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/models.py +1 -1
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/rowsecurity.py +22 -22
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/lib.rs +1 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/naming_ffi.rs +84 -0
- ferro_orm-0.21.2/tests/_alembic_harness.py +135 -0
- ferro_orm-0.21.2/tests/test_alembic_enum_type_drop.py +906 -0
- ferro_orm-0.21.2/tests/test_alembic_render_execute.py +216 -0
- ferro_orm-0.21.2/tests/test_alembic_typing.py +81 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_cross_emitter_parity.py +102 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_label_addition.py +52 -29
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_row_security_alembic.py +7 -90
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_table_check_orphans.py +1 -27
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_table_check_rebuild.py +124 -27
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_table_check_reconcile.py +1 -29
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/uv.lock +1 -1
- ferro_orm-0.21.0/docs/adr/0015-table-check-body-drift.md +0 -11
- ferro_orm-0.21.0/src/ferro/migrations/__init__.py +0 -3
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/PERMISSIONS.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/PYPI_CHECKLIST.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/PYPI_SETUP.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/generated/wheels.generated.yml +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/pull_request_template.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/workflows/packaging-smoke.yml +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/workflows/publish-docs.yml +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/workflows/publish.yml +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.github/workflows/release.yml +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.gitignore +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.pre-commit-config.yaml +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/.python-version +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/CONTRIBUTING.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/LICENSE +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/README.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/benchmarks/README.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/benchmarks/__init__.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/benchmarks/__main__.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/benchmarks/backends.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/benchmarks/baselines/postgres.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/benchmarks/baselines/sqlite.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/benchmarks/compare.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/benchmarks/harness.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/benchmarks/model.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/benchmarks/run.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/context7.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/crates/ferro-ddl-lowering/Cargo.toml +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/crates/ferro-ddl-lowering/src/policy_expr.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/crates/ferro-migrate/Cargo.toml +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/crates/ferro-migrate/src/emit.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/crates/ferro-migrate/src/lib.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/crates/ferro-migrate/src/order.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/crates/ferro-migrate/src/tests.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/crates/ferro-schema-ir/Cargo.toml +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/crates/ferro-schema-ir/src/lib.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0001-resolved-epoch-registration.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0002-unified-column-fact-derivation.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0003-path-blind-db-type-validation.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0004-jsonb-postgres-only-canonical.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0005-jsonb-default-on-postgres.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0006-relation-traversal-inner-joins.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0007-materialization-plan-complete-instances.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0007-reverse-relations-tested-not-traversed.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0008-populated-relations-include.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0008-predicate-negation-uniform-not.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0009-aggregate-projections-derived-grouping.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0010-create-pass-owns-only-missing-tables.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0011-label-addition-update-gated-append-only.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0012-table-checks-are-lambdas.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0013-table-check-reconciliation.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0014-table-checks-sqlite-create-only.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0016-check-predicates-literals-only.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0017-omitted-nulls-means-last.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0018-position-paging.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/adr/0019-row-policy-drift-and-the-one-way-flags.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/agents/domain.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/agents/issue-tracker.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/agents/triage-labels.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/architecture-review-2026-07-08.html +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-04-29-named-connections-role-routing-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-05-08-typed-query-predicates-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-05-13-configurable-column-storage-types-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-05-14-autogenerate-support-for-db-type-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-05-25-annotated-strenum-cold-hydration-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-06-24-ir-p8-119-wire-automigrate-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-06-25-ir-p8-120-parity-gate-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-06-26-ir-p8.5-140-shared-lowering-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-06-26-ir-p8.5-143-db-type-drop-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-06-26-ir-p8.5-144-reconcile-indexes-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-06-28-ir-p8.5-141-single-schema-ir-producer-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-06-29-ir-p8.6-146-dialect-enum-unification-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-06-29-ir-p8.6-153-create-path-ir-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-06-30-ir-p8.6-155-deferred-annotations-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-06-30-ir-p8.6-158-check-renderer-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-07-01-ir-p8.6-154-datetime-tz-coarseness-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-07-01-ir-p8.6-162-typed-save-bind-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-07-01-ir-p8.6-165-blob-introspection-false-positive-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-07-02-ff-c1-codec-plan-design.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/brainstorms/2026-07-06-upgrade-guide-consolidation-requirements.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/aggregations.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/aggregations_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/existence_tests.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/existence_tests_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/multiple_databases.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/mutations.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/pagination.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/partial_selects.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/partial_selects_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/populated_relations.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/populated_relations_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/predicates.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/predicates_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/quickstart.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/quickstart_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/raw_sql.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/relationships.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/relationships_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/soft_deletes.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/soft_deletes_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/table_checks.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/table_checks_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/testing_conftest.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/timestamps.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/timestamps_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/transactions.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/examples/traversal_annotated.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/api/exceptions.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/api/fields.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/api/migrations.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/api/model.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/api/queries.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/api/raw-sql.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/api/relationships.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/api/transactions.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/changelog.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/concepts/backends.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/concepts/identity-map.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/concepts/query-typing.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/contributing.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/getting-started/installation.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/guide/connections.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/guide/mutations.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/guide/raw-sql.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/howto/multiple-databases.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/howto/soft-deletes.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/howto/timestamps.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/howto/upgrade-guide.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/roadmap.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/pages/stylesheets/extra.css +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-04-24-001-refactor-multi-db-backend-architecture-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-04-29-001-typed-null-binds-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-04-29-002-feat-named-connections-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-05-07-001-refactor-generic-model-connection-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-05-08-001-feat-typed-query-predicates-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-05-13-001-feat-configurable-column-storage-types-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-05-25-001-fix-annotated-strenum-cold-hydration-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-19-001-ir-first-roadmap.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-24-001-feat-ir-p8-119-wire-automigrate-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-25-001-feat-ir-p8-120-parity-gate-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-26-001-feat-ir-p8.5-140-shared-lowering-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-26-002-feat-ir-p8.5-143-db-type-drop-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-26-003-feat-ir-p8.5-144-reconcile-indexes-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-28-001-feat-ir-p8.5-141-single-schema-ir-producer-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-29-001-refactor-ir-p8.6-153-create-path-unification-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-29-002-refactor-ir-p8.6-146-dialect-enum-unification-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-30-001-refactor-ir-p8.6-158-check-renderer-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-06-30-002-fix-ir-p8.6-155-deferred-annotations-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-01-001-feat-ir-p8.6-162-typed-save-bind-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-01-002-fix-ir-p8.6-154-datetime-tz-coarseness-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-01-003-fix-ir-p8.6-165-blob-introspection-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-02-001-fable-fixes-roadmap.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-02-002-feat-ff-a-172-typed-exceptions-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-02-003-ff-c-native-decode-design.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-02-004-ff-c-c2-catalog-cache-design.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-02-005-ff-d-identity-routing-design.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-02-006-ff-d-identity-routing-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-03-007-ff-e-registry-identity-design.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-03-008-ff-e-registry-identity-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-06-009-ff-f-query-builder-1.0-design.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-06-010-ff-f-query-builder-1.0-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-06-011-ff-g-hardening-design.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-06-012-ff-g-hardening-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-06-013-ff-g2-operations-dedup-design.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-06-014-ff-g2-operations-dedup-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-06-015-docs-upgrade-guide-consolidation-plan.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/2026-07-18-016-existence-tests-design.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/ir-first-migration-guide.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/plans/ir-first-release-checklist.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/rfc/ir-contracts-v1.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/README.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/architecture-patterns/ir-first-lowering-consolidation-audit.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/architecture-patterns/ir-first-merge-readiness-review.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/issues/pg18-restrict-sqlstate-23001.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/issues/pydantic-slots-missing-after-ferro-hydration.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/issues/python-3.14-deferred-annotation-typeerror-swallow.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/issues/query-ir-version-pin-sweep.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/issues/sa-pk-column-nullable-divergence.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/issues/sa-vs-rust-unique-constraint-shape.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/issues/self-fk-evicts-component-from-create-order.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/issues/sqlite-integer-decimal-hydrates-as-none.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/issues/sqlite-null-hydrates-as-int-zero.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/issues/typed-where-null-panics-is-null.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/configurable-column-storage-types.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/cross-emitter-ddl-parity.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/ddl-on-live-engine.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/derived-type-and-naming-decision-table.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/foreign-key-index.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/index-unique-redundancy.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/ir-invariants.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/json-family-factory-migrate-backfill.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/persistence-state.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/position-paging-after.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/shadow-fk-columns.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/sqlite-alembic-reconnect-hydration-tests.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/typed-null-binds.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/docs/solutions/patterns/wire-scalar-canonicalization.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/scripts/demo_queries.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/scripts/demo_queries_pre_v012.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/backend.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/codec.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/codec_plan.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/connection.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/errors.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/__init__.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/_annotation_utils.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/_bind_payload.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/_core.pyi +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/_deprecations.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/_shadow_fk_types.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/base.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/checks.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/columns.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/composite_indexes.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/composite_uniques.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/exceptions.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/fields.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/ir/__init__.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/ir/compiler.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/metaclass.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/py.typed +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/query/__init__.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/query/builder.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/query/nodes.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/query/rows.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/query/wire.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/raw.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/registry.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/relations/__init__.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/relations/descriptors.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/session.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/ferro/state.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/hydration.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/introspect.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/migrate.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/operations.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/query.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/schema.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/schema_bind.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/session_settings.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/src/state.rs +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/__init__.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/conftest.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/db_backends.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/README.md +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/codec_registry_core_v1.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_account_exists_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_account_scoped_exists_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_card_after_null_slot_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_card_nulls_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_owner_nested_exists_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_owner_not_exists_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_transaction_aggregate_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_transaction_global_aggregate_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_transaction_include_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_transaction_left_join_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_transaction_record_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_transaction_traversal_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_transaction_traversed_record_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_add_columns_set_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_add_literal_set_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_after_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_before_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_compound_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_literal_set_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_m2m_exists_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_merge_set_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_mixed_set_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_not_compound_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_not_leaf_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/query_user_now_set_v14.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/schema_invoice_baseline_v1.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/schema_phase1_fixture_models_v1.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/fixtures/ir_vectors/schema_raw_str_pk_autoincrement_v1.json +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/static_fixtures/bad_includes.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/static_fixtures/bad_predicates.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/static_fixtures/bad_projections.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/static_fixtures/good_includes.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/static_fixtures/good_predicates.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/static_fixtures/good_projections.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_after_position.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_aggregation.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_alembic_autogenerate.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_alembic_bridge.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_alembic_db_type.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_alembic_nullability.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_alembic_type_mapping.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_annotation_utils.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_auto_migrate.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_before_position.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_bulk_create_chunking.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_bulk_install.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_bulk_update.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_catalog_cache.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_check_predicate_dialect.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_codec_plan.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_column_specs.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_compiled_query.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_composite_index.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_composite_unique.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_connection.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_connection_redaction.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_constraints.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_crud.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_db_backends.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_db_type_cross_emitter_parity.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_db_type_integration.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_db_type_typing.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_db_type_validation.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_deletion.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_deprecations.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_docs_examples.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_documentation_features.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_enum_cold_hydration.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_exception_mapping.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_exceptions.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_field_wrapper.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_fk_target_pk.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_generation_counter_dirty_tracking.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_global_aggregates.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_grouped_aggregates.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_helpers.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_hydration.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_hydration_equivalence.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_identity_memory.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_identity_refresh.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_identity_scoped_invalidation.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_identity_weakref.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_import_budget.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_include.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_ir_vectors_contract.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_live_table_checks.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_metaclass_internals.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_metadata.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_migrate_plan.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_model_identity.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_models.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_mutation_pagination_guard.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_named_connections_integration.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_naming_single_source.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_negation.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_one_to_one.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_operation_seam_sync.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_order_by_nulls.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_order_by_nulls_wire.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_partial_selects.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_position_paging_traversal.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_primary_key_facts.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_provisional_import.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_query_builder.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_query_column_validation.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_query_exists.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_query_immutability.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_query_joins.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_query_typing.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_query_wire_vectors.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_raw_sql.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_refresh.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_registry_entrypoints.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_registry_owner.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_relation_specs.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_relationship_engine.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_relationship_resolution_errors.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_rls_end_to_end.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_route_single_site.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_routing_errors.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_row_security_create_pass.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_row_security_orphans.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_row_security_rebuild.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_row_security_reconcile.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_save_pk_edges.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_save_semantics.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_schema.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_schema_constraints.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_schema_db_type_metadata.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_schema_enum_annotations.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_session.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_session_set_config.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_session_settings.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_session_settings_connection_delivery.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_session_settings_operations.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_shadow_fk_types.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_sqlite_alembic_reconnect_hydration.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_static_contracts.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_string_search.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_structural_types.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_table_checks.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_temporal_types.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_transactions.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_traversed_projection.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_typed_null_binds.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_typed_save_bind.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/tests/test_update_recipe.py +0 -0
- {ferro_orm-0.21.0 → ferro_orm-0.21.2}/zensical.toml +0 -0
|
@@ -127,7 +127,7 @@ jobs:
|
|
|
127
127
|
|
|
128
128
|
- name: Static type gate (ty, scoped)
|
|
129
129
|
run: |
|
|
130
|
-
uv run ty check src/ferro/query tests/test_query_typing.py tests/test_static_contracts.py
|
|
130
|
+
uv run ty check src/ferro/query tests/test_query_typing.py tests/test_static_contracts.py tests/test_alembic_typing.py
|
|
131
131
|
|
|
132
132
|
- name: Run IR vector contract harness
|
|
133
133
|
run: |
|
|
@@ -181,6 +181,51 @@ For a single model, every emitter must agree on:
|
|
|
181
181
|
connect-time warnings remain the only word on them. See ADR-0019
|
|
182
182
|
(rebuild the bodies ferro writes, report the bodies you write; flags are
|
|
183
183
|
one-way) and PRD #406.
|
|
184
|
+
17. **Enum type provenance** — the decision of which declared native enum
|
|
185
|
+
types a generated revision *introduces* (every column declaring the
|
|
186
|
+
type is one the revision adds: a created table's column or an
|
|
187
|
+
`add_column`), how an introduced type comes into being (`Inline`: a
|
|
188
|
+
`create_table` of the revision carries it and SQLAlchemy creates it
|
|
189
|
+
with the table; `Statement`: every column of it is an `add_column`, so
|
|
190
|
+
the revision must execute the `CREATE TYPE` itself, #439), and which
|
|
191
|
+
types it merely *reuses* (an added column declares it, but so does a
|
|
192
|
+
column the downgrade leaves standing or puts back), together with the
|
|
193
|
+
rendered `CREATE TYPE` and `DROP TYPE`, are decided by ONE trio of
|
|
194
|
+
functions: `ferro_ddl_lowering::enum_type_provenance` (one
|
|
195
|
+
`Introduced { creation } | Reused` verdict per touched type) /
|
|
196
|
+
`render_pg_enum_create_type` (the runtime create pass's guarded
|
|
197
|
+
statement; never a second renderer) / `render_pg_enum_drop_type`.
|
|
198
|
+
SQLAlchemy creates the type inline with `create_table`, unconditionally,
|
|
199
|
+
and nowhere else, and Alembic has no op for it, so the rendered
|
|
200
|
+
`downgrade()` never dropped it (#438), a `create_table` reusing a live
|
|
201
|
+
type re-issued `CREATE TYPE` and failed with `DuplicateObject` (#443),
|
|
202
|
+
and an `add_column` of a new type failed with `UndefinedObject` (#439).
|
|
203
|
+
The Alembic autogenerate comparator (`FerroEnumTypeIntroducedOp` /
|
|
204
|
+
`FerroEnumTypeDropOp` in `src/ferro/migrations/alembic.py`) consumes
|
|
205
|
+
the verdicts over FFI (`_core._plan_enum_type_provenance`, which carries
|
|
206
|
+
`create_statement` and `drop_statement`): an introduced type keeps its
|
|
207
|
+
inline creation, or gets the byte-identical guarded `CREATE TYPE`
|
|
208
|
+
ahead of every table op when only `add_column`s carry it, and gets the
|
|
209
|
+
byte-identical `DROP TYPE` on downgrade, after the last `drop_table` /
|
|
210
|
+
`drop_column`; a reused type gets neither and every `create_table`
|
|
211
|
+
column of it rewritten to
|
|
212
|
+
`postgresql.ENUM(..., create_type=False)` (`add_column` never creates a
|
|
213
|
+
type, so it is left alone). SQLAlchemy's `repr` omits that flag, so it
|
|
214
|
+
is rendered by the bridge's `render_item` hook
|
|
215
|
+
(`ferro.migrations.render_item`, wired in `env.py`); a revision that
|
|
216
|
+
needs it in a context that lacks it is refused at autogenerate with the
|
|
217
|
+
line to add, never written with an upgrade that fails later. The
|
|
218
|
+
decision is made from the revision alone, never from the live catalog,
|
|
219
|
+
so the file means the same thing on every database it runs against.
|
|
220
|
+
Pinned by `tests/test_alembic_enum_type_drop.py`,
|
|
221
|
+
`test_enum_type_provenance_parity_pin` and the ferro-ddl-lowering unit
|
|
222
|
+
pins. Postgres-only (SQLite enums store as text); Alembic-only by
|
|
223
|
+
construction (auto-migrate has no downgrade door, and its create pass
|
|
224
|
+
executes the same guarded `CREATE TYPE` itself), so the single-source
|
|
225
|
+
rule applies and the create statement is the one artifact with a
|
|
226
|
+
runtime twin to pin against. Ownership is by provenance (ADR-0020);
|
|
227
|
+
the upgrade side mirrors it (ADR-0021) and completes it for the
|
|
228
|
+
`add_column`-only shape (ADR-0022).
|
|
184
229
|
|
|
185
230
|
### Why this invariant exists
|
|
186
231
|
|
|
@@ -477,14 +522,29 @@ ops `extend` the list while it still has no table ops (#423).
|
|
|
477
522
|
After-tables families (`ADD CONSTRAINT` over a new column, `CREATE POLICY`
|
|
478
523
|
on a new table) register at `priority=LAST`. Before-tables families (enum
|
|
479
524
|
label addition) register at `priority=FIRST` and insert at the front of the
|
|
480
|
-
ops list.
|
|
481
|
-
|
|
482
|
-
|
|
525
|
+
ops list. The enum type provenance family (#438, #439) is before-tables on
|
|
526
|
+
upgrade (the `CREATE TYPE` for a type only `add_column`s carry must precede
|
|
527
|
+
those `add_column`s) and after-tables on downgrade (`DROP TYPE` is only
|
|
528
|
+
legal after every `drop_table` / `drop_column`); it reads the revision's
|
|
529
|
+
`create_table` and `add_column` ops to decide, so it registers at
|
|
530
|
+
`priority=LAST`, but inserts at the front of the ops list, and the one
|
|
531
|
+
placement serves both sides: `UpgradeOps.reverse()` reverses order, so an
|
|
532
|
+
op ahead of every `create_table` lands behind every `drop_table` in the
|
|
533
|
+
downgrade. The priority says when a comparator runs; the insertion point
|
|
534
|
+
says where its op renders. Default `MEDIUM` is an I-12 violation for
|
|
535
|
+
ferro schema comparators. Alembic's own table comparator may remain
|
|
536
|
+
`MEDIUM`. A same-revision pin is required for every after-tables family
|
|
537
|
+
and for the before-tables upgrade statement.
|
|
483
538
|
|
|
484
539
|
Pinned by the row-security comparator's LAST registration and
|
|
485
540
|
`test_new_declaration_on_a_brand_new_table_lands_after_create_table`, and
|
|
486
541
|
by `test_autogenerate_adds_a_column_before_the_check_that_references_it`
|
|
487
|
-
(#423)
|
|
542
|
+
(#423), for the downgrade-after-tables slot by
|
|
543
|
+
`test_a_type_shared_by_two_new_tables_drops_once_after_both_tables`
|
|
544
|
+
(#438), and for the before-tables type creation by
|
|
545
|
+
`test_a_type_introduced_by_add_column_alone_is_created_and_dropped` and
|
|
546
|
+
`test_a_type_created_by_statement_lands_before_tables_beside_label_additions`
|
|
547
|
+
(#439). Architecture review: I-19 in #427. See PRD #429 and
|
|
488
548
|
`docs/solutions/patterns/alembic-comparator-slot.md`.
|
|
489
549
|
|
|
490
550
|
---
|
|
@@ -1,6 +1,48 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## v0.21.2 (2026-09-29)
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
- **alembic**: Create add_column-only enum types, type render_item, close the label-addition block
|
|
9
|
+
([#448](https://github.com/syn54x/ferro-orm/pull/448),
|
|
10
|
+
[`dc49156`](https://github.com/syn54x/ferro-orm/commit/dc49156be6b8c998fd726230bc5a1ffb5fce15c4))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## v0.21.1 (2026-09-28)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- **alembic**: Drop enum types in the downgrade of the create_table that made them
|
|
18
|
+
([#441](https://github.com/syn54x/ferro-orm/pull/441),
|
|
19
|
+
[`5c86b7f`](https://github.com/syn54x/ferro-orm/commit/5c86b7fef03828443fd61852caa3705849e3150f))
|
|
20
|
+
|
|
21
|
+
- **alembic**: Render create_type=False for enum types a revision reuses
|
|
22
|
+
([#445](https://github.com/syn54x/ferro-orm/pull/445),
|
|
23
|
+
[`6776d0b`](https://github.com/syn54x/ferro-orm/commit/6776d0b7b13499d85666280a623f91fbf2df6387))
|
|
24
|
+
|
|
25
|
+
- **checks**: Compare associative OR/AND chains flat in the drift normalizer
|
|
26
|
+
([#442](https://github.com/syn54x/ferro-orm/pull/442),
|
|
27
|
+
[`4df72a2`](https://github.com/syn54x/ferro-orm/commit/4df72a2d37b456d79ba1fc9cfa6b5ba2a0c6f194))
|
|
28
|
+
|
|
29
|
+
### Documentation
|
|
30
|
+
|
|
31
|
+
- Replace Pinch RLS examples and humanize guide prose
|
|
32
|
+
([#433](https://github.com/syn54x/ferro-orm/pull/433),
|
|
33
|
+
[`4471d75`](https://github.com/syn54x/ferro-orm/commit/4471d7510f7bf6b642f13e5f768ac723bbdb2288))
|
|
34
|
+
|
|
35
|
+
- Unpack dense Why Ferro, query, and RLS prose
|
|
36
|
+
([#434](https://github.com/syn54x/ferro-orm/pull/434),
|
|
37
|
+
[`1af08af`](https://github.com/syn54x/ferro-orm/commit/1af08af1288d670139fa5f0beab19bf7b19d8c8c))
|
|
38
|
+
|
|
39
|
+
### Refactoring
|
|
40
|
+
|
|
41
|
+
- **alembic**: Enum type drop cleanups from the #441 review panel
|
|
42
|
+
([#444](https://github.com/syn54x/ferro-orm/pull/444),
|
|
43
|
+
[`ae6b6d3`](https://github.com/syn54x/ferro-orm/commit/ae6b6d387d40727a79cb0f8a96c5151daffa1dbb))
|
|
44
|
+
|
|
45
|
+
|
|
4
46
|
## v0.21.0 (2026-09-17)
|
|
5
47
|
|
|
6
48
|
### Bug Fixes
|
|
@@ -149,7 +149,7 @@ The `migrate_updates` step that alters existing schema objects — tables and fe
|
|
|
149
149
|
_Avoid_: Update pass, schema sync, drift repair
|
|
150
150
|
|
|
151
151
|
**Ferro-owned artifact**:
|
|
152
|
-
A schema object ferro may reconcile to match the declared model. Indexes and constraints are ferro-owned by naming (`idx_`, `uq_`, `fk_`, `ck_`); native enum types are ferro-owned by derivation — the type's name matches the name ferro derives from the model. Artifacts owned
|
|
152
|
+
A schema object ferro may reconcile to match the declared model. Indexes and constraints are ferro-owned by naming (`idx_`, `uq_`, `fk_`, `ck_`); native enum types are ferro-owned by derivation — the type's name matches the name ferro derives from the model. A generated revision owns an enum type a third way, by provenance: it introduces every column of the type, so its downgrade drops the type (see *Type drop*); a type it adds a column of but does not introduce is one it reuses, never creates (see *Type reuse*). Artifacts owned none of these ways belong to the user and are never altered or dropped.
|
|
153
153
|
_Avoid_: Managed index, system constraint, internal index
|
|
154
154
|
|
|
155
155
|
**Enum label**:
|
|
@@ -160,6 +160,18 @@ _Avoid_: Enum value, variant, choice
|
|
|
160
160
|
The reconciliation-pass operation appending model-declared labels missing from a live ferro-owned enum type. Append-only and metadata-only: rows are never touched, and labels the database has but the model lacks are warned about loudly and never removed — removal and rename are reviewed-migration territory.
|
|
161
161
|
_Avoid_: Enum sync, label reconciliation, enum evolution
|
|
162
162
|
|
|
163
|
+
**Type drop**:
|
|
164
|
+
The reverse of a generated revision's creation of a native enum type — inline with `create_table`, or by *Type creation* when only `add_column`s carry it: the `DROP TYPE` the revision's `downgrade()` emits, after its last `drop_table` and `drop_column`, for each native enum type the revision introduces — every column declaring it is one the revision adds, and none is one the downgrade puts back. Decided from the revision alone, never from the live catalog; the type is the revision's by provenance, not derivation (ADR-0020). Alembic core has no operation for either direction; ferro's bridge supplies the drop, and the creation for the `add_column`-only shape, so a downgrade leaves no type behind and an upgrade finds every type it needs.
|
|
165
|
+
_Avoid_: Enum cleanup, type teardown, cascade drop
|
|
166
|
+
|
|
167
|
+
**Type creation**:
|
|
168
|
+
The `CREATE TYPE` a generated revision's `upgrade()` executes, ahead of its table operations, for a native enum type it introduces (see *Type drop*) that no `create_table` of the revision carries — every column of it is an `add_column`, and SQLAlchemy creates a named enum type inline with `create_table` only. It is the runtime create pass's guarded statement, rendered by the same function, so both migration doors run the same SQL for the same model; a type a `create_table` carries is created inline by SQLAlchemy and gets no statement. The second axis of the one type-provenance decision (ADR-0022).
|
|
169
|
+
_Avoid_: Explicit enum create, add_column type fix, pre-create
|
|
170
|
+
|
|
171
|
+
**Type reuse**:
|
|
172
|
+
A generated revision's use of a native enum type it does not introduce — a column the revision adds declares it, but so does a column the downgrade leaves standing or puts back — so the type already lives on every database the revision can run against. The revision's `create_table` columns of that type render as `postgresql.ENUM(..., create_type=False)` (through the bridge's `render_item` hook, since SQLAlchemy's `repr` omits the flag) and no `DROP TYPE` is emitted. The other verdict of the one type-provenance decision that also decides the type drop, made from the revision alone (ADR-0021).
|
|
173
|
+
_Avoid_: Shared type, existing type, live-type exclusion
|
|
174
|
+
|
|
163
175
|
**Constraint rebuild**:
|
|
164
176
|
Drop-and-recreate of a ferro-owned constraint whose live definition no longer matches the declared model — a foreign key's `on_delete`, its target, its columns, or a table check's predicate. Metadata-only: rows are never touched. On a backend that cannot alter constraints, ferro warns loudly and skips; it never diverges silently.
|
|
165
177
|
_Avoid_: Constraint alter, FK patch, in-place constraint update
|
|
@@ -46,9 +46,9 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
|
|
|
46
46
|
|
|
47
47
|
[[package]]
|
|
48
48
|
name = "bigdecimal"
|
|
49
|
-
version = "0.4.
|
|
49
|
+
version = "0.4.11"
|
|
50
50
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
51
|
-
checksum = "
|
|
51
|
+
checksum = "8fa3f3d8cbf4dffcfe4991de61d012bef509a409ecbe9dd41049bfe32b4d4653"
|
|
52
52
|
dependencies = [
|
|
53
53
|
"autocfg",
|
|
54
54
|
"libm",
|
|
@@ -95,9 +95,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
|
|
|
95
95
|
|
|
96
96
|
[[package]]
|
|
97
97
|
name = "cc"
|
|
98
|
-
version = "1.
|
|
98
|
+
version = "1.5.1"
|
|
99
99
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
100
|
-
checksum = "
|
|
100
|
+
checksum = "f360145194ee8e21db5ee7f3fcd4fe52210864c75c985dae33218202c8bbe040"
|
|
101
101
|
dependencies = [
|
|
102
102
|
"find-msvc-tools",
|
|
103
103
|
"shlex",
|
|
@@ -317,7 +317,7 @@ dependencies = [
|
|
|
317
317
|
|
|
318
318
|
[[package]]
|
|
319
319
|
name = "ferro"
|
|
320
|
-
version = "0.21.
|
|
320
|
+
version = "0.21.2"
|
|
321
321
|
dependencies = [
|
|
322
322
|
"chrono",
|
|
323
323
|
"dashmap",
|
|
@@ -365,9 +365,9 @@ dependencies = [
|
|
|
365
365
|
|
|
366
366
|
[[package]]
|
|
367
367
|
name = "find-msvc-tools"
|
|
368
|
-
version = "0.1.
|
|
368
|
+
version = "0.1.14"
|
|
369
369
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
370
|
-
checksum = "
|
|
370
|
+
checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484"
|
|
371
371
|
|
|
372
372
|
[[package]]
|
|
373
373
|
name = "flume"
|
|
@@ -781,9 +781,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
|
|
781
781
|
|
|
782
782
|
[[package]]
|
|
783
783
|
name = "js-sys"
|
|
784
|
-
version = "0.3.
|
|
784
|
+
version = "0.3.106"
|
|
785
785
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
786
|
-
checksum = "
|
|
786
|
+
checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5"
|
|
787
787
|
dependencies = [
|
|
788
788
|
"cfg-if",
|
|
789
789
|
"futures-util",
|
|
@@ -813,9 +813,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
|
|
|
813
813
|
|
|
814
814
|
[[package]]
|
|
815
815
|
name = "libredox"
|
|
816
|
-
version = "0.1.
|
|
816
|
+
version = "0.1.25"
|
|
817
817
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
818
|
-
checksum = "
|
|
818
|
+
checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d"
|
|
819
819
|
dependencies = [
|
|
820
820
|
"bitflags",
|
|
821
821
|
"libc",
|
|
@@ -1427,9 +1427,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
|
|
|
1427
1427
|
|
|
1428
1428
|
[[package]]
|
|
1429
1429
|
name = "smallvec"
|
|
1430
|
-
version = "1.16.
|
|
1430
|
+
version = "1.16.2"
|
|
1431
1431
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1432
|
-
checksum = "
|
|
1432
|
+
checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e"
|
|
1433
1433
|
dependencies = [
|
|
1434
1434
|
"serde",
|
|
1435
1435
|
]
|
|
@@ -1729,18 +1729,18 @@ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
|
|
|
1729
1729
|
|
|
1730
1730
|
[[package]]
|
|
1731
1731
|
name = "thiserror"
|
|
1732
|
-
version = "2.0.
|
|
1732
|
+
version = "2.0.21"
|
|
1733
1733
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1734
|
-
checksum = "
|
|
1734
|
+
checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e"
|
|
1735
1735
|
dependencies = [
|
|
1736
1736
|
"thiserror-impl",
|
|
1737
1737
|
]
|
|
1738
1738
|
|
|
1739
1739
|
[[package]]
|
|
1740
1740
|
name = "thiserror-impl"
|
|
1741
|
-
version = "2.0.
|
|
1741
|
+
version = "2.0.21"
|
|
1742
1742
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1743
|
-
checksum = "
|
|
1743
|
+
checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524"
|
|
1744
1744
|
dependencies = [
|
|
1745
1745
|
"proc-macro2",
|
|
1746
1746
|
"quote",
|
|
@@ -1848,9 +1848,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
|
|
|
1848
1848
|
|
|
1849
1849
|
[[package]]
|
|
1850
1850
|
name = "unicode-ident"
|
|
1851
|
-
version = "1.0.
|
|
1851
|
+
version = "1.0.26"
|
|
1852
1852
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1853
|
-
checksum = "
|
|
1853
|
+
checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
|
|
1854
1854
|
|
|
1855
1855
|
[[package]]
|
|
1856
1856
|
name = "unicode-normalization"
|
|
@@ -1934,9 +1934,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
|
|
|
1934
1934
|
|
|
1935
1935
|
[[package]]
|
|
1936
1936
|
name = "wasm-bindgen"
|
|
1937
|
-
version = "0.2.
|
|
1937
|
+
version = "0.2.129"
|
|
1938
1938
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1939
|
-
checksum = "
|
|
1939
|
+
checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409"
|
|
1940
1940
|
dependencies = [
|
|
1941
1941
|
"cfg-if",
|
|
1942
1942
|
"once_cell",
|
|
@@ -1947,9 +1947,9 @@ dependencies = [
|
|
|
1947
1947
|
|
|
1948
1948
|
[[package]]
|
|
1949
1949
|
name = "wasm-bindgen-macro"
|
|
1950
|
-
version = "0.2.
|
|
1950
|
+
version = "0.2.129"
|
|
1951
1951
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1952
|
-
checksum = "
|
|
1952
|
+
checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535"
|
|
1953
1953
|
dependencies = [
|
|
1954
1954
|
"quote",
|
|
1955
1955
|
"wasm-bindgen-macro-support",
|
|
@@ -1957,9 +1957,9 @@ dependencies = [
|
|
|
1957
1957
|
|
|
1958
1958
|
[[package]]
|
|
1959
1959
|
name = "wasm-bindgen-macro-support"
|
|
1960
|
-
version = "0.2.
|
|
1960
|
+
version = "0.2.129"
|
|
1961
1961
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1962
|
-
checksum = "
|
|
1962
|
+
checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7"
|
|
1963
1963
|
dependencies = [
|
|
1964
1964
|
"bumpalo",
|
|
1965
1965
|
"proc-macro2",
|
|
@@ -1970,9 +1970,9 @@ dependencies = [
|
|
|
1970
1970
|
|
|
1971
1971
|
[[package]]
|
|
1972
1972
|
name = "wasm-bindgen-shared"
|
|
1973
|
-
version = "0.2.
|
|
1973
|
+
version = "0.2.129"
|
|
1974
1974
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1975
|
-
checksum = "
|
|
1975
|
+
checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6"
|
|
1976
1976
|
dependencies = [
|
|
1977
1977
|
"unicode-ident",
|
|
1978
1978
|
]
|
|
@@ -2243,18 +2243,18 @@ dependencies = [
|
|
|
2243
2243
|
|
|
2244
2244
|
[[package]]
|
|
2245
2245
|
name = "zerocopy"
|
|
2246
|
-
version = "0.8.
|
|
2246
|
+
version = "0.8.59"
|
|
2247
2247
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2248
|
-
checksum = "
|
|
2248
|
+
checksum = "6df92bf3d9227be3d53173901ddbffac2babc27ae50f397776ffd6dc33f800cb"
|
|
2249
2249
|
dependencies = [
|
|
2250
2250
|
"zerocopy-derive",
|
|
2251
2251
|
]
|
|
2252
2252
|
|
|
2253
2253
|
[[package]]
|
|
2254
2254
|
name = "zerocopy-derive"
|
|
2255
|
-
version = "0.8.
|
|
2255
|
+
version = "0.8.59"
|
|
2256
2256
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2257
|
-
checksum = "
|
|
2257
|
+
checksum = "ac4f328cf2f05d084e496c3e9c3f33ed0a183656a16e1fcec4d464d8373aec82"
|
|
2258
2258
|
dependencies = [
|
|
2259
2259
|
"proc-macro2",
|
|
2260
2260
|
"quote",
|