sqlalchemy-declarative-extensions 0.18.0__tar.gz → 0.19.0__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.
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/CHANGELOG.md +6 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/PKG-INFO +1 -1
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/triggers.md +55 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/pyproject.toml +1 -1
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/api.py +2 -2
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/trigger.py +6 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/__init__.py +2 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/function.py +18 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/trigger.py +17 -4
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/function/base.py +54 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/trigger/base.py +32 -2
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/trigger/compare.py +2 -1
- sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_function_execute/models.py +49 -0
- sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_function_execute/test_migrations.py +38 -0
- sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_update_pg/alembic.ini +36 -0
- sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_update_pg/migrations/env.py +26 -0
- sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_update_pg/migrations/script.py.mako +24 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_alembic.py +5 -0
- sqlalchemy_declarative_extensions-0.19.0/tests/trigger/test_function_execute_conflict.py +34 -0
- sqlalchemy_declarative_extensions-0.19.0/tests/trigger/test_function_execute_mysql.py +11 -0
- sqlalchemy_declarative_extensions-0.19.0/tests/trigger/test_function_execute_postgres.py +103 -0
- sqlalchemy_declarative_extensions-0.19.0/tests/view/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/.github/FUNDING.yml +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/.github/workflows/release.yml +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/.github/workflows/test.yml +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/.gitignore +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/.readthedocs.yml +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/CONTRIBUTING.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/LICENSE +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/Makefile +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/README.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/Makefile +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/docs/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/make.bat +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/pyproject.toml +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/_static/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/alembic.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/api.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/audit_tables.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/conf.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/contributing/dialect-support.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/contributing/index.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/contributing/testing.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/dialects/index.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/dialects/mysql.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/dialects/postgresql.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/dialects/snowflake.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/functions.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/grants.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/index.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/roles.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/rows.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/schemas.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/sqlalchemy.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/source/views.md +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/docs/uv.lock +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/setup.cfg +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/base.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/database.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/function.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/grant.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/procedure.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/role.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/row.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/schema.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/trigger.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/alembic/view.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/audit.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/context.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/database/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/database/base.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/database/compare.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/database/ddl.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/from_string.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/function.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/procedure.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/query.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/schema.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/acl.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/grant.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/grant_type.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/procedure.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/query.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/role.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/schema.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/view.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/query.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/information_schema.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/query.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/role.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/schema.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/view.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/sqlite/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/sqlite/query.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/dialects/sqlite/schema.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/function/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/function/compare.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/function/ddl.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/grant/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/grant/base.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/grant/compare.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/grant/ddl.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/op.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/procedure/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/procedure/base.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/procedure/compare.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/procedure/ddl.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/py.typed +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/role/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/role/base.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/role/compare.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/role/ddl.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/role/generic.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/role/state.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/role/topological_sort.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/row/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/row/base.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/row/compare.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/row/query.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/schema/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/schema/base.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/schema/compare.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/schema/ddl.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/sql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/sqlalchemy.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/trigger/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/trigger/ddl.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/typing.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/view/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/view/base.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/view/compare.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/src/sqlalchemy_declarative_extensions/view/ddl.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/audit/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/audit/test_context_values.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/audit/test_create_all.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/audit/test_disabled_operation.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/audit/test_quoting.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/audit/test_schema_support.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/dialect/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/dialect/postgresql/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/dialect/postgresql/test_acl.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/dialect/postgresql/test_exclude_extension_objects.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/dialect/postgresql/test_extension_owned_schema.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/dialect/postgresql/test_function_attributes.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/dialect/postgresql/test_function_defaults.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/dialect/postgresql/test_postgres_11.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/dialect/postgresql/test_postgres_14_sqlbody.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/dialect/test_from_string.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_role/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_role/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_role/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_role/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_role/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_role/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_role/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_rows/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_rows/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_rows/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_rows/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_rows/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_rows/migrations/versions/a63ad8efc2f4_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_rows/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_create_rows/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows/migrations/versions/a63ad8efc2f4_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows_ignore_unspecified/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows_ignore_unspecified/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows_ignore_unspecified/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows_ignore_unspecified/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows_ignore_unspecified/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows_ignore_unspecified/migrations/versions/a63ad8efc2f4_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows_ignore_unspecified/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_rows_ignore_unspecified/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_unspecified_grants/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_unspecified_grants/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_unspecified_grants/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_unspecified_grants/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_unspecified_grants/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_unspecified_grants/migrations/versions/0522a3309c12_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_unspecified_grants/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_delete_unspecified_grants/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_postgis/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_postgis/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_postgis/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_postgis/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_postgis/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_postgis/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_sqlbody/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_sqlbody/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_sqlbody/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_sqlbody/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_sqlbody/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_pg_sqlbody/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_mysql/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_mysql/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_mysql/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_mysql/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_mysql/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_mysql/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_postgresql/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_postgresql/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_postgresql/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_postgresql/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_postgresql/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_create_with_params_postgresql/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_drop/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_drop/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_drop/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_drop/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_drop/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_drop/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_leading_whitespace/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_leading_whitespace/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_leading_whitespace/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_leading_whitespace/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_leading_whitespace/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_leading_whitespace/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_rewriter/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_rewriter/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_rewriter/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_rewriter/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_rewriter/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_rewriter/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_update/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_update/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_update/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_update/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_update/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_function_update/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_after_schema/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_after_schema/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_after_schema/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_after_schema/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_after_schema/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_after_schema/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_after_schema/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_disabled/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_disabled/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_disabled/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_disabled/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_disabled/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_disabled/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_disabled/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_rewriter/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_rewriter/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_rewriter/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_rewriter/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_rewriter/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_rewriter/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_rewriter/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_update_existing/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_update_existing/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_update_existing/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_update_existing/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_update_existing/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_update_existing/migrations/versions/0522a3309c12_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_update_existing/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_grant_update_existing/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_identify_grants/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_identify_grants/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_identify_grants/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_identify_grants/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_identify_grants/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_identify_grants/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_identify_grants/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_create/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_create/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_create/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_create/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_create/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_create/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_rewriter/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_rewriter/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_rewriter/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_rewriter/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_rewriter/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_procedure_rewriter/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_disabled/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_disabled/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_disabled/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_disabled/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_disabled/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_disabled/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_disabled/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_operations/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_operations/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_operations/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_operations/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_operations/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_operations/migrations/versions/a63ad8efc2f4_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_operations/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_operations/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_rewriter/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_rewriter/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_rewriter/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_rewriter/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_rewriter/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_rewriter/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_role_rewriter/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_row_rewriter/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_row_rewriter/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_row_rewriter/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_row_rewriter/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_row_rewriter/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_row_rewriter/migrations/versions/a63ad8efc2f4_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_row_rewriter/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_row_rewriter/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_disabled/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_disabled/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_disabled/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_disabled/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_disabled/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_disabled/migrations/versions/a63ad8efc2f4_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_disabled/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_disabled/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_drop_table/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_drop_table/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_drop_table/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_drop_table/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_drop_table/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_drop_table/migrations/versions/34137c7892d1_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_drop_table/migrations/versions/a63ad8efc2f4_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_drop_table/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_rows_drop_table/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_create/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_create/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_create/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_create/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_create/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_create/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_create/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_disabled/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_disabled/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_disabled/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_disabled/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_disabled/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_disabled/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_disabled/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_drop/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_drop/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_drop/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_drop/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_drop/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_drop/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_drop/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_ignore_unspecified/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_ignore_unspecified/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_ignore_unspecified/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_ignore_unspecified/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_ignore_unspecified/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_ignore_unspecified/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_ignore_unspecified/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_rewriter/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_rewriter/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_rewriter/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_rewriter/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_rewriter/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_rewriter/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_schema_rewriter/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_single_row_ops/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_single_row_ops/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_single_row_ops/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_single_row_ops/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_single_row_ops/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_single_row_ops/migrations/versions/34137c7892d1_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_single_row_ops/migrations/versions/a63ad8efc2f4_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_single_row_ops/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_single_row_ops/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_create/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_create/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_create/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_create/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_create/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_create/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_drop/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_drop/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_drop/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_drop/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_drop/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_drop/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_rewriter → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_function_execute}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_table_args → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_function_execute}/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_rewriter → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_function_execute}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_rewriter → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_function_execute}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_table_args → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_rewriter}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_rewriter/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_table_args → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_rewriter}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_table_args → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_rewriter}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_rewriter/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_rewriter/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_update → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_table_args}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_update → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_table_args}/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_update → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_table_args}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_trigger_update → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_table_args}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_table_args/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_table_args/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_update_role → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_update}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_create_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_update}/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_update_role → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_update}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_update_role → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_update}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_update/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_trigger_update/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_update_rows → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_update_role}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_update_role/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_update_role/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_update_rows → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_update_role}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_update_rows → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_update_role}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_update_role/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_update_role/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_complex_comparison_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_update_rows}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_update_rows/conftest.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_update_rows/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_complex_comparison_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_update_rows}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_complex_comparison_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_update_rows}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_update_rows/migrations/versions/a63ad8efc2f4_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_update_rows/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_update_rows/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_create_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_complex_comparison_pg}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_complex_comparison_pg/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_create_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_complex_comparison_pg}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_create_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_complex_comparison_pg}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_complex_comparison_pg/migrations/versions/c90a0d80e7a4_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_complex_comparison_pg/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_complex_comparison_pg/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_create_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_create_mysql}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_create_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_create_mysql}/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_create_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_create_mysql}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_create_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_create_mysql}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_create_mysql/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_create_mysql/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_drop_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_create_pg}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_drop_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_create_pg}/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_drop_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_create_pg}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_drop_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_create_pg}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_create_pg/migrations/versions/db72aad6c888_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_create_pg/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_create_pg/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_drop_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_drop_mysql}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_drop_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_drop_mysql}/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_drop_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_drop_mysql}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_drop_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_drop_mysql}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_drop_mysql/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_drop_mysql/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_materialized_constraint → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_drop_pg}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_materialized_constraint → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_drop_pg}/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_materialized_constraint → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_drop_pg}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_materialized_constraint → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_drop_pg}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_drop_pg/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_drop_pg/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_rewriter → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_materialized_constraint}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_update_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_materialized_constraint}/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_rewriter → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_materialized_constraint}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_rewriter → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_materialized_constraint}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_materialized_constraint/migrations/versions/cc63f503ef39_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_materialized_constraint/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_materialized_constraint/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_update_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_rewriter}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_rewriter/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_update_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_rewriter}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_update_mysql → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_rewriter}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_rewriter/migrations/versions/db72aad6c888_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_rewriter/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_rewriter/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_update_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_update_mysql}/alembic.ini +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_update_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_update_mysql}/migrations/env.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_update_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_update_mysql}/migrations/script.py.mako +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/examples/test_view_update_pg → sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_update_mysql}/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_update_mysql/migrations/versions/2152079ac9a3_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_update_mysql/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_update_mysql/test_migrations.py +0 -0
- /sqlalchemy_declarative_extensions-0.18.0/tests/function/__init__.py → /sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_view_update_pg/migrations/versions/.gitkeep +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_update_pg/migrations/versions/2152079ac9a3_.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_update_pg/models.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/examples/test_view_update_pg/test_migrations.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/grant → sqlalchemy_declarative_extensions-0.19.0/tests/function}/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_alembic.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_create_mysql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_create_postgresql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_create_requires_normalization.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_delete.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_delete_mysql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_drop_all.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_exclude.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_filter.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_function_normalization.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_ignore_unspecified.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_include_exclude.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_metadata_sequence.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_pg_security_definer.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_quote.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_unnamed_param.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_update.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/function/test_update_mysql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/procedure → sqlalchemy_declarative_extensions-0.19.0/tests/grant}/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_alembic.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_false_grants_imply_default_grants.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_grant_schema.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_ignore_unspecified.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_metadata_sequence.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_no_grants.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_only_defined_roles.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_postgresql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_remove_unspecified.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_sqlalchemy.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_table_grants.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/grant/test_view.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/role → sqlalchemy_declarative_extensions-0.19.0/tests/procedure}/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_alembic.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_create.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_create_mysql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_create_requires_normalization.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_delete.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_delete_mysql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_drop_all.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_exclude.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_filter.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_ignore_unspecified.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_metadata_sequence.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_pg_security_definer.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_quote.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_update.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/procedure/test_update_mysql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/row → sqlalchemy_declarative_extensions-0.19.0/tests/role}/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_alembic.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_drop_all.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_external.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_filter.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_iterable_roles.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_metadata_sequence.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_remove_valid_until.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_sqlalchemy.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_sqlalchemy_snowflake.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_topological_sort.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_update_parent_role.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/role/test_use_role.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/trigger → sqlalchemy_declarative_extensions-0.19.0/tests/row}/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/row/test_alembic.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/row/test_bind_syntax.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/row/test_column_added.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/row/test_invalid_table.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/row/test_metadata_sequence.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/row/test_missing_primary_key.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/row/test_schema_context.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/row/test_sqlalchemy.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/schema/test_alembic.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/schema/test_drop.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/schema/test_drop_all.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/schema/test_filter.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/schema/test_metadata_sequence.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/schema/test_snowflake.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/schema/test_sqlalchemy.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/test_ignore_include.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0/tests/view → sqlalchemy_declarative_extensions-0.19.0/tests/trigger}/__init__.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_arguments.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_create_mysql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_create_postgres.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_drop_all.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_drop_mysql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_drop_postgres.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_for_each_statement_postgres.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_ignore_unspecified_postgres.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_include_exclude.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_metadata_sequence.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_missing_when_postgres.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_same_name_postgres.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_schema_quoting.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_table_args.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_table_args_mysql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_table_args_postgres.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_update_mysql.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_update_postgres.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_when_references_new_postgres.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/trigger/test_wrapped_parens_postgres.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/utilities.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_add_constraint_to_existing.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_alembic.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_alembic_utils.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_constraint_drops_first.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_convert_to_materialized.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_create_table_and_view_together.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_drop_all.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_escaped_bindparam.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_filter.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_get_views_ignore.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_ignore_glob.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_ignore_unspecified.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_ignore_views.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_materialized.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_metadata_sequence.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_only_constraint_changes.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_only_different_constraints_drop.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_pg_materialized_no_data.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_snowflake.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_sqlalchemy.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_update.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_view_function.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_view_in_schema.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/tests/view/test_view_index_bound_column.py +0 -0
- {sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/uv.lock +0 -0
{sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sqlalchemy-declarative-extensions
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.19.0
|
|
4
4
|
Summary: Library to declare additional kinds of objects not natively supported by SQLAlchemy/Alembic.
|
|
5
5
|
Project-URL: documentation, https://sqlalchemy-declarative-extensions.readthedocs.io/en/latest/
|
|
6
6
|
Project-URL: homepage, https://sqlalchemy-declarative-extensions.readthedocs.io/en/latest/
|
|
@@ -91,6 +91,61 @@ the natural ordering, but it does mean that doing so afterwards will discard any
|
|
|
91
91
|
already-attached table-level triggers.
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
+
## Executing a function
|
|
95
|
+
|
|
96
|
+
For dialects whose triggers execute a function (PostgreSQL), `execute` may be a
|
|
97
|
+
`Function` rather than the name of one. The function is then created automatically
|
|
98
|
+
alongside the trigger, so it need not be separately registered through `Functions`.
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
from sqlalchemy_declarative_extensions.dialects.postgresql import Trigger, trigger_function
|
|
102
|
+
|
|
103
|
+
audit = trigger_function(
|
|
104
|
+
"audit",
|
|
105
|
+
"""
|
|
106
|
+
BEGIN
|
|
107
|
+
INSERT INTO log (message) VALUES (TG_TABLE_NAME);
|
|
108
|
+
RETURN NULL;
|
|
109
|
+
END
|
|
110
|
+
""",
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class Foo(Base):
|
|
115
|
+
__tablename__ = "foo"
|
|
116
|
+
__table_args__ = (
|
|
117
|
+
Trigger.after("insert", execute=audit).named("on_insert_foo").for_each_row(),
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
id = Column(types.Integer(), primary_key=True)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
This works however the trigger is declared (`Triggers`, `register_trigger` or
|
|
124
|
+
`__table_args__`). Any number of triggers may share the same function, as with the generic
|
|
125
|
+
audit function above, and it is created once. Declaring two *different* functions with the
|
|
126
|
+
same qualified name is an error.
|
|
127
|
+
|
|
128
|
+
`trigger_function` returns a PostgreSQL `Function` fixed to `RETURNS trigger LANGUAGE plpgsql`,
|
|
129
|
+
and accepts neither `parameters` nor `returns`. A plain `Function` may be used in the
|
|
130
|
+
same way when more control is needed.
|
|
131
|
+
|
|
132
|
+
```{note}
|
|
133
|
+
Trigger functions are collected when `register_sqlalchemy_events` is called, so call it
|
|
134
|
+
after the models which declare triggers.
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```{note}
|
|
138
|
+
When a function is only declared through a trigger, only that function is managed:
|
|
139
|
+
other functions in the database are left alone. If you also declare `Functions`, its
|
|
140
|
+
`ignore_unspecified` and `include`/`ignore` settings apply to the combined set (with
|
|
141
|
+
trigger functions added to `include`, if set).
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
```{note}
|
|
145
|
+
MySQL triggers execute a raw statement, so passing a `Function` to a MySQL `Trigger`
|
|
146
|
+
raises a `TypeError`.
|
|
147
|
+
```
|
|
148
|
+
|
|
94
149
|
```{eval-rst}
|
|
95
150
|
.. autoapimodule:: sqlalchemy_declarative_extensions.trigger.base
|
|
96
151
|
:members: Trigger, Triggers, register_trigger
|
{sqlalchemy_declarative_extensions-0.18.0 → sqlalchemy_declarative_extensions-0.19.0}/pyproject.toml
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sqlalchemy-declarative-extensions"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.19.0"
|
|
4
4
|
authors = [{ name = "Dan Cardin", email = "ddcardin@gmail.com" }]
|
|
5
5
|
description = "Library to declare additional kinds of objects not natively supported by SQLAlchemy/Alembic."
|
|
6
6
|
license = { file = "LICENSE" }
|
|
@@ -229,7 +229,7 @@ def register_create_events(
|
|
|
229
229
|
concrete_grants = metadata.info.get("grants") or Grants()
|
|
230
230
|
concrete_views = Views.extract(metadata) or Views()
|
|
231
231
|
concrete_procedures = metadata.info.get("procedures") or Procedures()
|
|
232
|
-
concrete_functions =
|
|
232
|
+
concrete_functions = Functions.extract(metadata) or Functions()
|
|
233
233
|
concrete_triggers = metadata.info.get("triggers") or Triggers()
|
|
234
234
|
concrete_databases = metadata.info.get("databases") or Databases()
|
|
235
235
|
concrete_rows = metadata.info.get("rows") or Rows()
|
|
@@ -333,7 +333,7 @@ def register_drop_events(
|
|
|
333
333
|
concrete_roles = metadata.info.get("roles")
|
|
334
334
|
concrete_views = metadata.info.get("views")
|
|
335
335
|
concrete_procedures = metadata.info.get("procedures")
|
|
336
|
-
concrete_functions =
|
|
336
|
+
concrete_functions = Functions.extract(metadata)
|
|
337
337
|
concrete_triggers = metadata.info.get("triggers")
|
|
338
338
|
concrete_databases = metadata.info.get("databases")
|
|
339
339
|
|
|
@@ -48,6 +48,11 @@ class Trigger(base.Trigger):
|
|
|
48
48
|
order: TriggerOrder | None = None
|
|
49
49
|
|
|
50
50
|
def __post_init__(self):
|
|
51
|
+
if not isinstance(self.execute, str):
|
|
52
|
+
raise TypeError(
|
|
53
|
+
f"MySQL trigger '{self.name}' must execute a statement string,"
|
|
54
|
+
" not a `Function`."
|
|
55
|
+
)
|
|
51
56
|
self.time = TriggerTimes.from_string(self.time)
|
|
52
57
|
self.event = TriggerEvents.from_string(self.event)
|
|
53
58
|
|
|
@@ -118,6 +123,7 @@ class Trigger(base.Trigger):
|
|
|
118
123
|
if self.order:
|
|
119
124
|
components.append(self.order.order.value)
|
|
120
125
|
components.append(self.order.other_trigger_name)
|
|
126
|
+
assert isinstance(self.execute, str)
|
|
121
127
|
components.append(self.execute)
|
|
122
128
|
|
|
123
129
|
return " ".join(components) + ";"
|
|
@@ -5,6 +5,7 @@ from sqlalchemy_declarative_extensions.dialects.postgresql.function import (
|
|
|
5
5
|
FunctionReturn,
|
|
6
6
|
FunctionSecurity,
|
|
7
7
|
FunctionVolatility,
|
|
8
|
+
trigger_function,
|
|
8
9
|
)
|
|
9
10
|
from sqlalchemy_declarative_extensions.dialects.postgresql.grant import (
|
|
10
11
|
DefaultGrant,
|
|
@@ -70,4 +71,5 @@ __all__ = [
|
|
|
70
71
|
"TypeGrants",
|
|
71
72
|
"View",
|
|
72
73
|
"ViewIndex",
|
|
74
|
+
"trigger_function",
|
|
73
75
|
]
|
|
@@ -363,3 +363,21 @@ type_map = {
|
|
|
363
363
|
"bool[]": "_bool",
|
|
364
364
|
"boolean[]": "_bool",
|
|
365
365
|
}
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
def trigger_function(
|
|
369
|
+
name: str,
|
|
370
|
+
definition: str,
|
|
371
|
+
*,
|
|
372
|
+
schema: str | None = None,
|
|
373
|
+
security: FunctionSecurity = FunctionSecurity.invoker,
|
|
374
|
+
) -> Function:
|
|
375
|
+
"""Create a plpgsql `Function` returning `trigger`, suitable for `Trigger(execute=...)`."""
|
|
376
|
+
return Function(
|
|
377
|
+
name=name,
|
|
378
|
+
definition=definition,
|
|
379
|
+
schema=schema,
|
|
380
|
+
security=security,
|
|
381
|
+
returns="trigger",
|
|
382
|
+
language="plpgsql",
|
|
383
|
+
)
|
|
@@ -5,6 +5,7 @@ from dataclasses import dataclass, replace
|
|
|
5
5
|
from sqlalchemy.engine import Connection
|
|
6
6
|
|
|
7
7
|
from sqlalchemy_declarative_extensions.dialects.from_string import FromStrings
|
|
8
|
+
from sqlalchemy_declarative_extensions.function.base import Function
|
|
8
9
|
from sqlalchemy_declarative_extensions.sql import quote_name
|
|
9
10
|
from sqlalchemy_declarative_extensions.trigger import base
|
|
10
11
|
|
|
@@ -105,7 +106,11 @@ class Trigger(base.Trigger):
|
|
|
105
106
|
|
|
106
107
|
@classmethod
|
|
107
108
|
def before(
|
|
108
|
-
cls,
|
|
109
|
+
cls,
|
|
110
|
+
*events: TriggerEvents | str,
|
|
111
|
+
execute: str | Function,
|
|
112
|
+
on: str = "",
|
|
113
|
+
name: str = "",
|
|
109
114
|
):
|
|
110
115
|
return cls(
|
|
111
116
|
time=TriggerTimes.before,
|
|
@@ -117,7 +122,11 @@ class Trigger(base.Trigger):
|
|
|
117
122
|
|
|
118
123
|
@classmethod
|
|
119
124
|
def after(
|
|
120
|
-
cls,
|
|
125
|
+
cls,
|
|
126
|
+
*events: TriggerEvents | str,
|
|
127
|
+
execute: str | Function,
|
|
128
|
+
on: str = "",
|
|
129
|
+
name: str = "",
|
|
121
130
|
):
|
|
122
131
|
return cls(
|
|
123
132
|
time=TriggerTimes.after,
|
|
@@ -129,7 +138,11 @@ class Trigger(base.Trigger):
|
|
|
129
138
|
|
|
130
139
|
@classmethod
|
|
131
140
|
def instead_of(
|
|
132
|
-
cls,
|
|
141
|
+
cls,
|
|
142
|
+
*events: TriggerEvents | str,
|
|
143
|
+
execute: str | Function,
|
|
144
|
+
on: str = "",
|
|
145
|
+
name: str = "",
|
|
133
146
|
):
|
|
134
147
|
return cls(
|
|
135
148
|
time=TriggerTimes.instead_of,
|
|
@@ -203,7 +216,7 @@ class Trigger(base.Trigger):
|
|
|
203
216
|
args_quoted = (
|
|
204
217
|
tuple(f"'{arg}'" for arg in self.arguments) if self.arguments else ()
|
|
205
218
|
)
|
|
206
|
-
components.append(quote_name(self.
|
|
219
|
+
components.append(quote_name(self.execute_name) + f"({','.join(args_quoted)})")
|
|
207
220
|
return " ".join(components) + ";"
|
|
208
221
|
|
|
209
222
|
def to_sql_drop(self):
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import glob
|
|
3
4
|
from dataclasses import dataclass, field, replace
|
|
4
5
|
from typing import Iterable, Sequence
|
|
5
6
|
|
|
@@ -109,9 +110,35 @@ class Functions:
|
|
|
109
110
|
|
|
110
111
|
@classmethod
|
|
111
112
|
def extract(cls, metadata: MetaData | list[MetaData | None] | None) -> Self | None:
|
|
113
|
+
"""Extract the declared functions, including those executed by declared triggers.
|
|
114
|
+
|
|
115
|
+
When a trigger function is not otherwise declared, only that function is managed
|
|
116
|
+
(through `include`), so unrelated functions in the database are left alone.
|
|
117
|
+
"""
|
|
112
118
|
if not isinstance(metadata, Sequence):
|
|
113
119
|
metadata = [metadata]
|
|
114
120
|
|
|
121
|
+
declared = cls._extract_declared(metadata)
|
|
122
|
+
trigger_functions = [
|
|
123
|
+
function
|
|
124
|
+
for m in metadata
|
|
125
|
+
if m and m.info.get("triggers")
|
|
126
|
+
for function in m.info["triggers"].functions
|
|
127
|
+
]
|
|
128
|
+
if not trigger_functions:
|
|
129
|
+
return declared
|
|
130
|
+
|
|
131
|
+
if declared is None:
|
|
132
|
+
result = cls(include=[])
|
|
133
|
+
else:
|
|
134
|
+
result = replace(declared, functions=list(declared.functions))
|
|
135
|
+
|
|
136
|
+
for function in trigger_functions:
|
|
137
|
+
result.append_managed(function)
|
|
138
|
+
return result
|
|
139
|
+
|
|
140
|
+
@classmethod
|
|
141
|
+
def _extract_declared(cls, metadata: Sequence[MetaData | None]) -> Self | None:
|
|
115
142
|
instances: list[Self] = [
|
|
116
143
|
m.info["functions"] for m in metadata if m and m.info.get("functions")
|
|
117
144
|
]
|
|
@@ -146,8 +173,35 @@ class Functions:
|
|
|
146
173
|
)
|
|
147
174
|
|
|
148
175
|
def append(self, function: Function):
|
|
176
|
+
"""Add the function, unless an identical one is already present.
|
|
177
|
+
|
|
178
|
+
Raises a `ValueError` if a different function has the same qualified name.
|
|
179
|
+
"""
|
|
180
|
+
qualified_name = function.qualified_name
|
|
181
|
+
existing = next(
|
|
182
|
+
(f for f in self.functions if f.qualified_name == qualified_name), None
|
|
183
|
+
)
|
|
184
|
+
if existing is not None:
|
|
185
|
+
if existing != function:
|
|
186
|
+
raise ValueError(
|
|
187
|
+
f"Function '{qualified_name}' is declared more than once"
|
|
188
|
+
" with differing definitions."
|
|
189
|
+
)
|
|
190
|
+
return
|
|
191
|
+
|
|
149
192
|
self.functions.append(function)
|
|
150
193
|
|
|
194
|
+
def append_managed(self, function: Function):
|
|
195
|
+
"""Append the function, and add it to `include` if this collection is restricted by it."""
|
|
196
|
+
self.append(function)
|
|
197
|
+
|
|
198
|
+
if self.include is None:
|
|
199
|
+
return
|
|
200
|
+
|
|
201
|
+
pattern = glob.escape(function.qualified_name)
|
|
202
|
+
if pattern not in self.include:
|
|
203
|
+
self.include = [*self.include, pattern]
|
|
204
|
+
|
|
151
205
|
def __iter__(self):
|
|
152
206
|
yield from self.functions
|
|
153
207
|
|
|
@@ -8,23 +8,40 @@ from sqlalchemy.engine import Connection
|
|
|
8
8
|
from sqlalchemy.sql.schema import SchemaItem
|
|
9
9
|
from typing_extensions import Self
|
|
10
10
|
|
|
11
|
+
from sqlalchemy_declarative_extensions.function.base import Function, Functions
|
|
11
12
|
from sqlalchemy_declarative_extensions.sql import qualify_name
|
|
12
13
|
from sqlalchemy_declarative_extensions.sqlalchemy import HasMetaData
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
@dataclass
|
|
16
17
|
class Trigger(SchemaItem):
|
|
17
|
-
"""Describes a generic trigger.
|
|
18
|
+
"""Describes a generic trigger.
|
|
19
|
+
|
|
20
|
+
`execute` is either the statement/name to execute, or (for dialects whose triggers
|
|
21
|
+
execute a function) a `Function`, which is then created alongside the trigger.
|
|
22
|
+
"""
|
|
18
23
|
|
|
19
24
|
name: str
|
|
20
25
|
on: str
|
|
21
|
-
execute: str
|
|
26
|
+
execute: str | Function
|
|
22
27
|
|
|
23
28
|
@property
|
|
24
29
|
def identity(self) -> Hashable:
|
|
25
30
|
"""Return the dialect-specific identity used to compare triggers."""
|
|
26
31
|
return self.name
|
|
27
32
|
|
|
33
|
+
@property
|
|
34
|
+
def execute_name(self) -> str:
|
|
35
|
+
if isinstance(self.execute, Function):
|
|
36
|
+
return self.execute.qualified_name
|
|
37
|
+
return self.execute
|
|
38
|
+
|
|
39
|
+
def normalize(self) -> Self:
|
|
40
|
+
"""Return the trigger with any `Function` replaced by its qualified name."""
|
|
41
|
+
if isinstance(self.execute, Function):
|
|
42
|
+
return replace(self, execute=self.execute_name)
|
|
43
|
+
return self
|
|
44
|
+
|
|
28
45
|
def named(self, name: str):
|
|
29
46
|
return replace(self, name=name)
|
|
30
47
|
|
|
@@ -118,6 +135,11 @@ class Triggers:
|
|
|
118
135
|
include=include,
|
|
119
136
|
)
|
|
120
137
|
|
|
138
|
+
@property
|
|
139
|
+
def functions(self) -> list[Function]:
|
|
140
|
+
"""The functions referenced as `execute` by the triggers."""
|
|
141
|
+
return [t.execute for t in self.triggers if isinstance(t.execute, Function)]
|
|
142
|
+
|
|
121
143
|
def append(self, trigger: Trigger):
|
|
122
144
|
self.triggers.append(trigger)
|
|
123
145
|
|
|
@@ -133,12 +155,20 @@ def register_trigger(base_or_metadata: HasMetaData | MetaData, trigger: Trigger)
|
|
|
133
155
|
|
|
134
156
|
This can be used instead of the static registration through `Triggers` on a declarative base or
|
|
135
157
|
`MetaData`, to imperitively register triggers.
|
|
158
|
+
|
|
159
|
+
If the trigger executes a `Function`, that function is registered as well.
|
|
136
160
|
"""
|
|
137
161
|
if isinstance(base_or_metadata, MetaData):
|
|
138
162
|
metadata = base_or_metadata
|
|
139
163
|
else:
|
|
140
164
|
metadata = base_or_metadata.metadata
|
|
141
165
|
|
|
166
|
+
if isinstance(trigger.execute, Function):
|
|
167
|
+
functions = metadata.info.get("functions")
|
|
168
|
+
if not functions:
|
|
169
|
+
functions = metadata.info["functions"] = Functions(include=[])
|
|
170
|
+
functions.append_managed(trigger.execute)
|
|
171
|
+
|
|
142
172
|
if not metadata.info.get("triggers"):
|
|
143
173
|
metadata.info["triggers"] = Triggers()
|
|
144
174
|
metadata.info["triggers"].append(trigger)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dataclasses import dataclass
|
|
3
|
+
from dataclasses import dataclass, replace
|
|
4
4
|
from typing import Union
|
|
5
5
|
|
|
6
6
|
from sqlalchemy.engine import Connection
|
|
@@ -51,6 +51,7 @@ Operation = Union[CreateTriggerOp, UpdateTriggerOp, DropTriggerOp]
|
|
|
51
51
|
def compare_triggers(connection: Connection, triggers: Triggers) -> list[Operation]:
|
|
52
52
|
result: list[Operation] = []
|
|
53
53
|
|
|
54
|
+
triggers = replace(triggers, triggers=[t.normalize() for t in triggers])
|
|
54
55
|
triggers_by_identity = {r.identity: r for r in triggers.triggers}
|
|
55
56
|
expected_trigger_identities = set(triggers_by_identity)
|
|
56
57
|
|
sqlalchemy_declarative_extensions-0.19.0/tests/examples/test_trigger_function_execute/models.py
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from sqlalchemy import Column, types
|
|
2
|
+
|
|
3
|
+
from sqlalchemy_declarative_extensions import declarative_database
|
|
4
|
+
from sqlalchemy_declarative_extensions.dialects.postgresql import (
|
|
5
|
+
Trigger,
|
|
6
|
+
trigger_function,
|
|
7
|
+
)
|
|
8
|
+
from sqlalchemy_declarative_extensions.sqlalchemy import declarative_base
|
|
9
|
+
|
|
10
|
+
_Base = declarative_base()
|
|
11
|
+
|
|
12
|
+
gimme = trigger_function(
|
|
13
|
+
"gimme",
|
|
14
|
+
"""
|
|
15
|
+
BEGIN
|
|
16
|
+
INSERT INTO log (id) select NEW.id + 1;
|
|
17
|
+
RETURN NULL;
|
|
18
|
+
END
|
|
19
|
+
""",
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@declarative_database
|
|
24
|
+
class Base(_Base): # type: ignore
|
|
25
|
+
__abstract__ = True
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Log(Base):
|
|
29
|
+
__tablename__ = "log"
|
|
30
|
+
|
|
31
|
+
id = Column(types.Integer(), primary_key=True)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class Foo(Base):
|
|
35
|
+
__tablename__ = "foo"
|
|
36
|
+
__table_args__ = (
|
|
37
|
+
Trigger.after("insert", execute=gimme).named("on_insert_foo").for_each_row(),
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
id = Column(types.Integer(), primary_key=True)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class Bar(Base):
|
|
44
|
+
__tablename__ = "bar"
|
|
45
|
+
__table_args__ = (
|
|
46
|
+
Trigger.after("insert", execute=gimme).named("on_insert_bar").for_each_row(),
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
id = Column(types.Integer(), primary_key=True)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
from pytest_alembic import MigrationContext
|
|
5
|
+
from pytest_mock_resources import PostgresConfig, create_postgres_fixture
|
|
6
|
+
from sqlalchemy import text
|
|
7
|
+
|
|
8
|
+
alembic_engine = create_postgres_fixture(scope="function", engine_kwargs={"echo": True})
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@pytest.fixture(scope="session")
|
|
12
|
+
def pmr_postgres_config():
|
|
13
|
+
return PostgresConfig(image="postgres:13", port=None, ci_port=None)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_function_is_created_before_triggers_and_dropped_after(
|
|
17
|
+
alembic_runner: MigrationContext, alembic_engine
|
|
18
|
+
):
|
|
19
|
+
alembic_runner.generate_revision(autogenerate=True, prevent_file_generation=False)
|
|
20
|
+
|
|
21
|
+
(revision,) = Path("migrations/versions").glob("*.py")
|
|
22
|
+
source = revision.read_text()
|
|
23
|
+
upgrade, downgrade = source.split("def downgrade")
|
|
24
|
+
assert upgrade.count("CREATE FUNCTION") == 1
|
|
25
|
+
assert upgrade.index("CREATE FUNCTION") < upgrade.index("CREATE TRIGGER")
|
|
26
|
+
assert downgrade.index("DROP TRIGGER") < downgrade.index("DROP FUNCTION")
|
|
27
|
+
|
|
28
|
+
alembic_runner.migrate_up_one()
|
|
29
|
+
|
|
30
|
+
with alembic_engine.connect() as conn:
|
|
31
|
+
conn.execute(text("insert into foo (id) values (1)"))
|
|
32
|
+
conn.execute(text("insert into bar (id) values (10)"))
|
|
33
|
+
conn.commit()
|
|
34
|
+
result = [r for r, *_ in conn.execute(text("select id from log")).fetchall()]
|
|
35
|
+
|
|
36
|
+
assert sorted(result) == [2, 11]
|
|
37
|
+
|
|
38
|
+
alembic_runner.migrate_down_one()
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
[alembic]
|
|
2
|
+
script_location = migrations
|
|
3
|
+
|
|
4
|
+
[loggers]
|
|
5
|
+
keys = root,sqlalchemy,alembic
|
|
6
|
+
|
|
7
|
+
[handlers]
|
|
8
|
+
keys = console
|
|
9
|
+
|
|
10
|
+
[formatters]
|
|
11
|
+
keys = generic
|
|
12
|
+
|
|
13
|
+
[logger_root]
|
|
14
|
+
level = WARN
|
|
15
|
+
handlers = console
|
|
16
|
+
qualname =
|
|
17
|
+
|
|
18
|
+
[logger_sqlalchemy]
|
|
19
|
+
level = WARN
|
|
20
|
+
handlers =
|
|
21
|
+
qualname = sqlalchemy.engine
|
|
22
|
+
|
|
23
|
+
[logger_alembic]
|
|
24
|
+
level = INFO
|
|
25
|
+
handlers =
|
|
26
|
+
qualname = alembic
|
|
27
|
+
|
|
28
|
+
[handler_console]
|
|
29
|
+
class = StreamHandler
|
|
30
|
+
args = (sys.stderr,)
|
|
31
|
+
level = NOTSET
|
|
32
|
+
formatter = generic
|
|
33
|
+
|
|
34
|
+
[formatter_generic]
|
|
35
|
+
format = %(levelname)-5.5s [%(name)s] %(message)s
|
|
36
|
+
datefmt = %H:%M:%S
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from alembic import context
|
|
2
|
+
|
|
3
|
+
# isort: split
|
|
4
|
+
from models import Base
|
|
5
|
+
from sqlalchemy import engine_from_config, pool
|
|
6
|
+
|
|
7
|
+
from sqlalchemy_declarative_extensions import register_alembic_events
|
|
8
|
+
|
|
9
|
+
target_metadata = Base.metadata
|
|
10
|
+
|
|
11
|
+
register_alembic_events(views=True, rows=True)
|
|
12
|
+
|
|
13
|
+
connectable = context.config.attributes.get("connection", None)
|
|
14
|
+
|
|
15
|
+
if connectable is None:
|
|
16
|
+
connectable = engine_from_config(
|
|
17
|
+
context.config.get_section(context.config.config_ini_section),
|
|
18
|
+
prefix="sqlalchemy.",
|
|
19
|
+
poolclass=pool.NullPool,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
with connectable.connect() as connection:
|
|
23
|
+
context.configure(connection=connection, target_metadata=target_metadata)
|
|
24
|
+
|
|
25
|
+
with context.begin_transaction():
|
|
26
|
+
context.run_migrations()
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""${message}
|
|
2
|
+
|
|
3
|
+
Revision ID: ${up_revision}
|
|
4
|
+
Revises: ${down_revision | comma,n}
|
|
5
|
+
Create Date: ${create_date}
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from alembic import op
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
${imports if imports else ""}
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = ${repr(up_revision)}
|
|
14
|
+
down_revision = ${repr(down_revision)}
|
|
15
|
+
branch_labels = ${repr(branch_labels)}
|
|
16
|
+
depends_on = ${repr(depends_on)}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade():
|
|
20
|
+
${upgrades if upgrades else "pass"}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def downgrade():
|
|
24
|
+
${downgrades if downgrades else "pass"}
|
|
@@ -26,3 +26,8 @@ def test_trigger_rewriter(pytester):
|
|
|
26
26
|
@pytest.mark.alembic
|
|
27
27
|
def test_trigger_table_args(pytester):
|
|
28
28
|
successful_test_run(pytester, count=1)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@pytest.mark.alembic
|
|
32
|
+
def test_trigger_function_execute(pytester):
|
|
33
|
+
successful_test_run(pytester, count=1)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
from sqlalchemy import MetaData
|
|
3
|
+
|
|
4
|
+
from sqlalchemy_declarative_extensions.dialects.postgresql import (
|
|
5
|
+
Trigger,
|
|
6
|
+
trigger_function,
|
|
7
|
+
)
|
|
8
|
+
from sqlalchemy_declarative_extensions.trigger.base import register_trigger
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def test_different_functions_with_the_same_name_raise():
|
|
12
|
+
metadata = MetaData()
|
|
13
|
+
register_trigger(
|
|
14
|
+
metadata,
|
|
15
|
+
Trigger.after(
|
|
16
|
+
"insert",
|
|
17
|
+
on="a",
|
|
18
|
+
name="a",
|
|
19
|
+
execute=trigger_function("audit", "BEGIN RETURN NULL; END"),
|
|
20
|
+
),
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
with pytest.raises(ValueError, match="'audit'"):
|
|
24
|
+
register_trigger(
|
|
25
|
+
metadata,
|
|
26
|
+
Trigger.after(
|
|
27
|
+
"insert",
|
|
28
|
+
on="b",
|
|
29
|
+
name="b",
|
|
30
|
+
execute=trigger_function("audit", "BEGIN RETURN NEW; END"),
|
|
31
|
+
),
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
assert [t.name for t in metadata.info["triggers"]] == ["a"]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from sqlalchemy_declarative_extensions.dialects import mysql
|
|
4
|
+
from sqlalchemy_declarative_extensions.dialects.postgresql import trigger_function
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def test_function_is_rejected():
|
|
8
|
+
audit = trigger_function("audit", "BEGIN RETURN NULL; END")
|
|
9
|
+
|
|
10
|
+
with pytest.raises(TypeError, match="Function"):
|
|
11
|
+
mysql.Trigger.after("insert", execute=audit, on="a", name="a") # type: ignore
|