sqlalchemy-declarative-extensions 0.16.10__tar.gz → 0.17.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.
Files changed (607) hide show
  1. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/.readthedocs.yml +1 -1
  2. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/CHANGELOG.md +10 -0
  3. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/PKG-INFO +2 -2
  4. sqlalchemy_declarative_extensions-0.17.0/docs/source/triggers.md +97 -0
  5. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/pyproject.toml +1 -1
  6. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/trigger.py +4 -2
  7. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/__init__.py +2 -0
  8. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/function.py +30 -16
  9. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/query.py +31 -17
  10. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/schema.py +7 -1
  11. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/trigger.py +5 -3
  12. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/trigger/base.py +24 -3
  13. sqlalchemy_declarative_extensions-0.17.0/tests/dialect/postgresql/test_extension_owned_schema.py +47 -0
  14. sqlalchemy_declarative_extensions-0.17.0/tests/dialect/postgresql/test_function_attributes.py +50 -0
  15. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/dialect/postgresql/test_function_defaults.py +1 -1
  16. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/dialect/postgresql/test_postgres_14_sqlbody.py +1 -1
  17. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_sqlbody/models.py +2 -2
  18. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_postgresql/models.py +2 -2
  19. sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_trigger_table_args/models.py +24 -0
  20. sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_trigger_table_args/test_migrations.py +41 -0
  21. sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_update_pg/alembic.ini +36 -0
  22. sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_update_pg/migrations/env.py +26 -0
  23. sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_update_pg/migrations/script.py.mako +24 -0
  24. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_create_postgresql.py +17 -3
  25. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_alembic.py +5 -0
  26. sqlalchemy_declarative_extensions-0.17.0/tests/trigger/test_table_args.py +131 -0
  27. sqlalchemy_declarative_extensions-0.17.0/tests/trigger/test_table_args_mysql.py +50 -0
  28. sqlalchemy_declarative_extensions-0.17.0/tests/trigger/test_table_args_postgres.py +87 -0
  29. sqlalchemy_declarative_extensions-0.17.0/tests/view/__init__.py +0 -0
  30. sqlalchemy_declarative_extensions-0.16.10/docs/source/triggers.md +0 -52
  31. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/.github/FUNDING.yml +0 -0
  32. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/.github/workflows/release.yml +0 -0
  33. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/.github/workflows/test.yml +0 -0
  34. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/.gitignore +0 -0
  35. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/CONTRIBUTING.md +0 -0
  36. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/LICENSE +0 -0
  37. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/Makefile +0 -0
  38. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/README.md +0 -0
  39. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/Makefile +0 -0
  40. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/docs/__init__.py +0 -0
  41. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/make.bat +0 -0
  42. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/pyproject.toml +0 -0
  43. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/_static/.gitkeep +0 -0
  44. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/alembic.md +0 -0
  45. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/api.md +0 -0
  46. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/audit_tables.md +0 -0
  47. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/conf.py +0 -0
  48. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/contributing/dialect-support.md +0 -0
  49. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/contributing/index.md +0 -0
  50. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/contributing/testing.md +0 -0
  51. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/dialects/index.md +0 -0
  52. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/dialects/mysql.md +0 -0
  53. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/dialects/postgresql.md +0 -0
  54. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/dialects/snowflake.md +0 -0
  55. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/functions.md +0 -0
  56. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/grants.md +0 -0
  57. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/index.md +0 -0
  58. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/roles.md +0 -0
  59. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/rows.md +0 -0
  60. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/schemas.md +0 -0
  61. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/sqlalchemy.md +0 -0
  62. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/source/views.md +0 -0
  63. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/docs/uv.lock +0 -0
  64. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/setup.cfg +0 -0
  65. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/__init__.py +0 -0
  66. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/__init__.py +0 -0
  67. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/base.py +0 -0
  68. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/database.py +0 -0
  69. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/function.py +0 -0
  70. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/grant.py +0 -0
  71. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/procedure.py +0 -0
  72. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/role.py +0 -0
  73. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/row.py +0 -0
  74. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/schema.py +0 -0
  75. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/trigger.py +0 -0
  76. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/alembic/view.py +0 -0
  77. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/api.py +0 -0
  78. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/audit.py +0 -0
  79. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/context.py +0 -0
  80. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/database/__init__.py +0 -0
  81. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/database/base.py +0 -0
  82. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/database/compare.py +0 -0
  83. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/database/ddl.py +0 -0
  84. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/__init__.py +0 -0
  85. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/from_string.py +0 -0
  86. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/__init__.py +0 -0
  87. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/function.py +0 -0
  88. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/procedure.py +0 -0
  89. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/query.py +0 -0
  90. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/mysql/schema.py +0 -0
  91. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/acl.py +0 -0
  92. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/grant.py +0 -0
  93. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/grant_type.py +0 -0
  94. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/procedure.py +0 -0
  95. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/role.py +0 -0
  96. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/postgresql/view.py +0 -0
  97. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/query.py +0 -0
  98. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/__init__.py +0 -0
  99. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/information_schema.py +0 -0
  100. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/query.py +0 -0
  101. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/role.py +0 -0
  102. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/schema.py +0 -0
  103. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/snowflake/view.py +0 -0
  104. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/sqlite/__init__.py +0 -0
  105. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/sqlite/query.py +0 -0
  106. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/dialects/sqlite/schema.py +0 -0
  107. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/function/__init__.py +0 -0
  108. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/function/base.py +0 -0
  109. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/function/compare.py +0 -0
  110. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/function/ddl.py +0 -0
  111. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/grant/__init__.py +0 -0
  112. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/grant/base.py +0 -0
  113. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/grant/compare.py +0 -0
  114. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/grant/ddl.py +0 -0
  115. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/op.py +0 -0
  116. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/procedure/__init__.py +0 -0
  117. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/procedure/base.py +0 -0
  118. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/procedure/compare.py +0 -0
  119. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/procedure/ddl.py +0 -0
  120. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/py.typed +0 -0
  121. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/role/__init__.py +0 -0
  122. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/role/base.py +0 -0
  123. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/role/compare.py +0 -0
  124. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/role/ddl.py +0 -0
  125. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/role/generic.py +0 -0
  126. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/role/state.py +0 -0
  127. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/role/topological_sort.py +0 -0
  128. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/row/__init__.py +0 -0
  129. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/row/base.py +0 -0
  130. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/row/compare.py +0 -0
  131. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/row/query.py +0 -0
  132. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/schema/__init__.py +0 -0
  133. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/schema/base.py +0 -0
  134. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/schema/compare.py +0 -0
  135. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/schema/ddl.py +0 -0
  136. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/sql.py +0 -0
  137. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/sqlalchemy.py +0 -0
  138. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/trigger/__init__.py +0 -0
  139. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/trigger/compare.py +0 -0
  140. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/trigger/ddl.py +0 -0
  141. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/typing.py +0 -0
  142. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/view/__init__.py +0 -0
  143. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/view/base.py +0 -0
  144. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/view/compare.py +0 -0
  145. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/src/sqlalchemy_declarative_extensions/view/ddl.py +0 -0
  146. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/__init__.py +0 -0
  147. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/audit/__init__.py +0 -0
  148. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/audit/test_context_values.py +0 -0
  149. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/audit/test_create_all.py +0 -0
  150. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/audit/test_disabled_operation.py +0 -0
  151. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/audit/test_quoting.py +0 -0
  152. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/audit/test_schema_support.py +0 -0
  153. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/conftest.py +0 -0
  154. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/dialect/__init__.py +0 -0
  155. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/dialect/postgresql/__init__.py +0 -0
  156. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/dialect/postgresql/test_acl.py +0 -0
  157. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/dialect/postgresql/test_exclude_extension_objects.py +0 -0
  158. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/dialect/postgresql/test_postgres_11.py +0 -0
  159. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_role/alembic.ini +0 -0
  160. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_role/conftest.py +0 -0
  161. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_role/migrations/env.py +0 -0
  162. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_role/migrations/script.py.mako +0 -0
  163. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_role/migrations/versions/.gitkeep +0 -0
  164. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_role/models.py +0 -0
  165. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_role/test_migrations.py +0 -0
  166. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_rows/alembic.ini +0 -0
  167. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_rows/conftest.py +0 -0
  168. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_rows/migrations/env.py +0 -0
  169. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_rows/migrations/script.py.mako +0 -0
  170. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_rows/migrations/versions/.gitkeep +0 -0
  171. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_rows/migrations/versions/a63ad8efc2f4_.py +0 -0
  172. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_rows/models.py +0 -0
  173. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_create_rows/test_migrations.py +0 -0
  174. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows/alembic.ini +0 -0
  175. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows/conftest.py +0 -0
  176. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows/migrations/env.py +0 -0
  177. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows/migrations/script.py.mako +0 -0
  178. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows/migrations/versions/.gitkeep +0 -0
  179. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows/migrations/versions/a63ad8efc2f4_.py +0 -0
  180. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows/models.py +0 -0
  181. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows/test_migrations.py +0 -0
  182. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows_ignore_unspecified/alembic.ini +0 -0
  183. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows_ignore_unspecified/conftest.py +0 -0
  184. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows_ignore_unspecified/migrations/env.py +0 -0
  185. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows_ignore_unspecified/migrations/script.py.mako +0 -0
  186. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows_ignore_unspecified/migrations/versions/.gitkeep +0 -0
  187. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows_ignore_unspecified/migrations/versions/a63ad8efc2f4_.py +0 -0
  188. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows_ignore_unspecified/models.py +0 -0
  189. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_rows_ignore_unspecified/test_migrations.py +0 -0
  190. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_unspecified_grants/alembic.ini +0 -0
  191. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_unspecified_grants/conftest.py +0 -0
  192. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_unspecified_grants/migrations/env.py +0 -0
  193. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_unspecified_grants/migrations/script.py.mako +0 -0
  194. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_unspecified_grants/migrations/versions/.gitkeep +0 -0
  195. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_unspecified_grants/migrations/versions/0522a3309c12_.py +0 -0
  196. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_unspecified_grants/models.py +0 -0
  197. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_delete_unspecified_grants/test_migrations.py +0 -0
  198. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create/alembic.ini +0 -0
  199. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create/migrations/env.py +0 -0
  200. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create/migrations/script.py.mako +0 -0
  201. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create/migrations/versions/.gitkeep +0 -0
  202. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create/models.py +0 -0
  203. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create/test_migrations.py +0 -0
  204. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_postgis/alembic.ini +0 -0
  205. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_postgis/migrations/env.py +0 -0
  206. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_postgis/migrations/script.py.mako +0 -0
  207. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_postgis/migrations/versions/.gitkeep +0 -0
  208. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_postgis/models.py +0 -0
  209. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_postgis/test_migrations.py +0 -0
  210. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_sqlbody/alembic.ini +0 -0
  211. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_sqlbody/migrations/env.py +0 -0
  212. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_sqlbody/migrations/script.py.mako +0 -0
  213. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_sqlbody/migrations/versions/.gitkeep +0 -0
  214. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_pg_sqlbody/test_migrations.py +0 -0
  215. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_mysql/alembic.ini +0 -0
  216. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_mysql/migrations/env.py +0 -0
  217. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_mysql/migrations/script.py.mako +0 -0
  218. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_mysql/migrations/versions/.gitkeep +0 -0
  219. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_mysql/models.py +0 -0
  220. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_mysql/test_migrations.py +0 -0
  221. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_postgresql/alembic.ini +0 -0
  222. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_postgresql/migrations/env.py +0 -0
  223. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_postgresql/migrations/script.py.mako +0 -0
  224. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_postgresql/migrations/versions/.gitkeep +0 -0
  225. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_create_with_params_postgresql/test_migrations.py +0 -0
  226. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_drop/alembic.ini +0 -0
  227. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_drop/migrations/env.py +0 -0
  228. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_drop/migrations/script.py.mako +0 -0
  229. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_drop/migrations/versions/.gitkeep +0 -0
  230. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_drop/models.py +0 -0
  231. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_drop/test_migrations.py +0 -0
  232. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_leading_whitespace/alembic.ini +0 -0
  233. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_leading_whitespace/migrations/env.py +0 -0
  234. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_leading_whitespace/migrations/script.py.mako +0 -0
  235. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_leading_whitespace/migrations/versions/.gitkeep +0 -0
  236. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_leading_whitespace/models.py +0 -0
  237. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_leading_whitespace/test_migrations.py +0 -0
  238. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_rewriter/alembic.ini +0 -0
  239. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_rewriter/migrations/env.py +0 -0
  240. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_rewriter/migrations/script.py.mako +0 -0
  241. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_rewriter/migrations/versions/.gitkeep +0 -0
  242. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_rewriter/models.py +0 -0
  243. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_rewriter/test_migrations.py +0 -0
  244. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_update/alembic.ini +0 -0
  245. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_update/migrations/env.py +0 -0
  246. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_update/migrations/script.py.mako +0 -0
  247. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_update/migrations/versions/.gitkeep +0 -0
  248. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_update/models.py +0 -0
  249. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_function_update/test_migrations.py +0 -0
  250. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_after_schema/alembic.ini +0 -0
  251. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_after_schema/conftest.py +0 -0
  252. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_after_schema/migrations/env.py +0 -0
  253. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_after_schema/migrations/script.py.mako +0 -0
  254. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_after_schema/migrations/versions/.gitkeep +0 -0
  255. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_after_schema/models.py +0 -0
  256. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_after_schema/test_migrations.py +0 -0
  257. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_disabled/alembic.ini +0 -0
  258. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_disabled/conftest.py +0 -0
  259. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_disabled/migrations/env.py +0 -0
  260. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_disabled/migrations/script.py.mako +0 -0
  261. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_disabled/migrations/versions/.gitkeep +0 -0
  262. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_disabled/models.py +0 -0
  263. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_disabled/test_migrations.py +0 -0
  264. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_rewriter/alembic.ini +0 -0
  265. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_rewriter/conftest.py +0 -0
  266. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_rewriter/migrations/env.py +0 -0
  267. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_rewriter/migrations/script.py.mako +0 -0
  268. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_rewriter/migrations/versions/.gitkeep +0 -0
  269. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_rewriter/models.py +0 -0
  270. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_rewriter/test_migrations.py +0 -0
  271. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_update_existing/alembic.ini +0 -0
  272. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_update_existing/conftest.py +0 -0
  273. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_update_existing/migrations/env.py +0 -0
  274. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_update_existing/migrations/script.py.mako +0 -0
  275. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_update_existing/migrations/versions/.gitkeep +0 -0
  276. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_update_existing/migrations/versions/0522a3309c12_.py +0 -0
  277. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_update_existing/models.py +0 -0
  278. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_grant_update_existing/test_migrations.py +0 -0
  279. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_identify_grants/alembic.ini +0 -0
  280. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_identify_grants/conftest.py +0 -0
  281. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_identify_grants/migrations/env.py +0 -0
  282. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_identify_grants/migrations/script.py.mako +0 -0
  283. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_identify_grants/migrations/versions/.gitkeep +0 -0
  284. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_identify_grants/models.py +0 -0
  285. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_identify_grants/test_migrations.py +0 -0
  286. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_create/alembic.ini +0 -0
  287. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_create/migrations/env.py +0 -0
  288. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_create/migrations/script.py.mako +0 -0
  289. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_create/migrations/versions/.gitkeep +0 -0
  290. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_create/models.py +0 -0
  291. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_create/test_migrations.py +0 -0
  292. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_rewriter/alembic.ini +0 -0
  293. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_rewriter/migrations/env.py +0 -0
  294. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_rewriter/migrations/script.py.mako +0 -0
  295. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_rewriter/migrations/versions/.gitkeep +0 -0
  296. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_rewriter/models.py +0 -0
  297. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_procedure_rewriter/test_migrations.py +0 -0
  298. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_disabled/alembic.ini +0 -0
  299. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_disabled/conftest.py +0 -0
  300. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_disabled/migrations/env.py +0 -0
  301. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_disabled/migrations/script.py.mako +0 -0
  302. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_disabled/migrations/versions/.gitkeep +0 -0
  303. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_disabled/models.py +0 -0
  304. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_disabled/test_migrations.py +0 -0
  305. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_operations/alembic.ini +0 -0
  306. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_operations/conftest.py +0 -0
  307. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_operations/migrations/env.py +0 -0
  308. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_operations/migrations/script.py.mako +0 -0
  309. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_operations/migrations/versions/.gitkeep +0 -0
  310. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_operations/migrations/versions/a63ad8efc2f4_.py +0 -0
  311. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_operations/models.py +0 -0
  312. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_operations/test_migrations.py +0 -0
  313. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_rewriter/alembic.ini +0 -0
  314. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_rewriter/conftest.py +0 -0
  315. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_rewriter/migrations/env.py +0 -0
  316. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_rewriter/migrations/script.py.mako +0 -0
  317. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_rewriter/migrations/versions/.gitkeep +0 -0
  318. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_rewriter/models.py +0 -0
  319. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_role_rewriter/test_migrations.py +0 -0
  320. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_row_rewriter/alembic.ini +0 -0
  321. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_row_rewriter/conftest.py +0 -0
  322. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_row_rewriter/migrations/env.py +0 -0
  323. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_row_rewriter/migrations/script.py.mako +0 -0
  324. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_row_rewriter/migrations/versions/.gitkeep +0 -0
  325. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_row_rewriter/migrations/versions/a63ad8efc2f4_.py +0 -0
  326. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_row_rewriter/models.py +0 -0
  327. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_row_rewriter/test_migrations.py +0 -0
  328. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_disabled/alembic.ini +0 -0
  329. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_disabled/conftest.py +0 -0
  330. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_disabled/migrations/env.py +0 -0
  331. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_disabled/migrations/script.py.mako +0 -0
  332. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_disabled/migrations/versions/.gitkeep +0 -0
  333. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_disabled/migrations/versions/a63ad8efc2f4_.py +0 -0
  334. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_disabled/models.py +0 -0
  335. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_disabled/test_migrations.py +0 -0
  336. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_drop_table/alembic.ini +0 -0
  337. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_drop_table/conftest.py +0 -0
  338. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_drop_table/migrations/env.py +0 -0
  339. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_drop_table/migrations/script.py.mako +0 -0
  340. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_drop_table/migrations/versions/.gitkeep +0 -0
  341. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_drop_table/migrations/versions/34137c7892d1_.py +0 -0
  342. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_drop_table/migrations/versions/a63ad8efc2f4_.py +0 -0
  343. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_drop_table/models.py +0 -0
  344. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_rows_drop_table/test_migrations.py +0 -0
  345. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_create/alembic.ini +0 -0
  346. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_create/conftest.py +0 -0
  347. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_create/migrations/env.py +0 -0
  348. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_create/migrations/script.py.mako +0 -0
  349. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_create/migrations/versions/.gitkeep +0 -0
  350. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_create/models.py +0 -0
  351. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_create/test_migrations.py +0 -0
  352. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_disabled/alembic.ini +0 -0
  353. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_disabled/conftest.py +0 -0
  354. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_disabled/migrations/env.py +0 -0
  355. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_disabled/migrations/script.py.mako +0 -0
  356. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_disabled/migrations/versions/.gitkeep +0 -0
  357. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_disabled/models.py +0 -0
  358. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_disabled/test_migrations.py +0 -0
  359. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_drop/alembic.ini +0 -0
  360. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_drop/conftest.py +0 -0
  361. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_drop/migrations/env.py +0 -0
  362. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_drop/migrations/script.py.mako +0 -0
  363. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_drop/migrations/versions/.gitkeep +0 -0
  364. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_drop/models.py +0 -0
  365. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_drop/test_migrations.py +0 -0
  366. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_ignore_unspecified/alembic.ini +0 -0
  367. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_ignore_unspecified/conftest.py +0 -0
  368. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_ignore_unspecified/migrations/env.py +0 -0
  369. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_ignore_unspecified/migrations/script.py.mako +0 -0
  370. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_ignore_unspecified/migrations/versions/.gitkeep +0 -0
  371. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_ignore_unspecified/models.py +0 -0
  372. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_ignore_unspecified/test_migrations.py +0 -0
  373. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_rewriter/alembic.ini +0 -0
  374. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_rewriter/conftest.py +0 -0
  375. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_rewriter/migrations/env.py +0 -0
  376. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_rewriter/migrations/script.py.mako +0 -0
  377. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_rewriter/migrations/versions/.gitkeep +0 -0
  378. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_rewriter/models.py +0 -0
  379. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_schema_rewriter/test_migrations.py +0 -0
  380. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_single_row_ops/alembic.ini +0 -0
  381. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_single_row_ops/conftest.py +0 -0
  382. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_single_row_ops/migrations/env.py +0 -0
  383. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_single_row_ops/migrations/script.py.mako +0 -0
  384. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_single_row_ops/migrations/versions/.gitkeep +0 -0
  385. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_single_row_ops/migrations/versions/34137c7892d1_.py +0 -0
  386. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_single_row_ops/migrations/versions/a63ad8efc2f4_.py +0 -0
  387. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_single_row_ops/models.py +0 -0
  388. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_single_row_ops/test_migrations.py +0 -0
  389. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_create/alembic.ini +0 -0
  390. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_create/migrations/env.py +0 -0
  391. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_create/migrations/script.py.mako +0 -0
  392. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_create/migrations/versions/.gitkeep +0 -0
  393. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_create/models.py +0 -0
  394. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_create/test_migrations.py +0 -0
  395. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_drop/alembic.ini +0 -0
  396. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_drop/migrations/env.py +0 -0
  397. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_drop/migrations/script.py.mako +0 -0
  398. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_drop/migrations/versions/.gitkeep +0 -0
  399. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_drop/models.py +0 -0
  400. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_drop/test_migrations.py +0 -0
  401. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_rewriter/alembic.ini +0 -0
  402. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_rewriter/migrations/env.py +0 -0
  403. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_rewriter/migrations/script.py.mako +0 -0
  404. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_rewriter/migrations/versions/.gitkeep +0 -0
  405. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_rewriter/models.py +0 -0
  406. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_rewriter/test_migrations.py +0 -0
  407. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_trigger_update → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_trigger_table_args}/alembic.ini +0 -0
  408. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_trigger_update → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_trigger_table_args}/migrations/env.py +0 -0
  409. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_trigger_update → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_trigger_table_args}/migrations/script.py.mako +0 -0
  410. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_trigger_update → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_trigger_table_args}/migrations/versions/.gitkeep +0 -0
  411. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_update_role → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_trigger_update}/alembic.ini +0 -0
  412. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_create_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_trigger_update}/migrations/env.py +0 -0
  413. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_update_role → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_trigger_update}/migrations/script.py.mako +0 -0
  414. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_update_role → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_trigger_update}/migrations/versions/.gitkeep +0 -0
  415. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_update/models.py +0 -0
  416. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_trigger_update/test_migrations.py +0 -0
  417. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_update_rows → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_update_role}/alembic.ini +0 -0
  418. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_update_role/conftest.py +0 -0
  419. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_update_role/migrations/env.py +0 -0
  420. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_update_rows → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_update_role}/migrations/script.py.mako +0 -0
  421. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_update_rows → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_update_role}/migrations/versions/.gitkeep +0 -0
  422. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_update_role/models.py +0 -0
  423. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_update_role/test_migrations.py +0 -0
  424. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_complex_comparison_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_update_rows}/alembic.ini +0 -0
  425. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_update_rows/conftest.py +0 -0
  426. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_update_rows/migrations/env.py +0 -0
  427. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_complex_comparison_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_update_rows}/migrations/script.py.mako +0 -0
  428. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_complex_comparison_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_update_rows}/migrations/versions/.gitkeep +0 -0
  429. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_update_rows/migrations/versions/a63ad8efc2f4_.py +0 -0
  430. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_update_rows/models.py +0 -0
  431. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_update_rows/test_migrations.py +0 -0
  432. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_create_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_complex_comparison_pg}/alembic.ini +0 -0
  433. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_complex_comparison_pg/migrations/env.py +0 -0
  434. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_create_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_complex_comparison_pg}/migrations/script.py.mako +0 -0
  435. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_create_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_complex_comparison_pg}/migrations/versions/.gitkeep +0 -0
  436. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_complex_comparison_pg/migrations/versions/c90a0d80e7a4_.py +0 -0
  437. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_complex_comparison_pg/models.py +0 -0
  438. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_complex_comparison_pg/test_migrations.py +0 -0
  439. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_create_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_create_mysql}/alembic.ini +0 -0
  440. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_create_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_create_mysql}/migrations/env.py +0 -0
  441. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_create_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_create_mysql}/migrations/script.py.mako +0 -0
  442. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_create_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_create_mysql}/migrations/versions/.gitkeep +0 -0
  443. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_create_mysql/models.py +0 -0
  444. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_create_mysql/test_migrations.py +0 -0
  445. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_drop_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_create_pg}/alembic.ini +0 -0
  446. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_drop_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_create_pg}/migrations/env.py +0 -0
  447. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_drop_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_create_pg}/migrations/script.py.mako +0 -0
  448. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_drop_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_create_pg}/migrations/versions/.gitkeep +0 -0
  449. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_create_pg/migrations/versions/db72aad6c888_.py +0 -0
  450. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_create_pg/models.py +0 -0
  451. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_create_pg/test_migrations.py +0 -0
  452. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_drop_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_drop_mysql}/alembic.ini +0 -0
  453. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_drop_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_drop_mysql}/migrations/env.py +0 -0
  454. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_drop_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_drop_mysql}/migrations/script.py.mako +0 -0
  455. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_drop_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_drop_mysql}/migrations/versions/.gitkeep +0 -0
  456. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_drop_mysql/models.py +0 -0
  457. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_drop_mysql/test_migrations.py +0 -0
  458. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_materialized_constraint → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_drop_pg}/alembic.ini +0 -0
  459. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_materialized_constraint → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_drop_pg}/migrations/env.py +0 -0
  460. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_materialized_constraint → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_drop_pg}/migrations/script.py.mako +0 -0
  461. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_materialized_constraint → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_drop_pg}/migrations/versions/.gitkeep +0 -0
  462. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_drop_pg/models.py +0 -0
  463. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_drop_pg/test_migrations.py +0 -0
  464. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_rewriter → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_materialized_constraint}/alembic.ini +0 -0
  465. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_update_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_materialized_constraint}/migrations/env.py +0 -0
  466. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_rewriter → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_materialized_constraint}/migrations/script.py.mako +0 -0
  467. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_rewriter → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_materialized_constraint}/migrations/versions/.gitkeep +0 -0
  468. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_materialized_constraint/migrations/versions/cc63f503ef39_.py +0 -0
  469. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_materialized_constraint/models.py +0 -0
  470. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_materialized_constraint/test_migrations.py +0 -0
  471. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_update_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_rewriter}/alembic.ini +0 -0
  472. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_rewriter/migrations/env.py +0 -0
  473. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_update_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_rewriter}/migrations/script.py.mako +0 -0
  474. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_update_mysql → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_rewriter}/migrations/versions/.gitkeep +0 -0
  475. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_rewriter/migrations/versions/db72aad6c888_.py +0 -0
  476. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_rewriter/models.py +0 -0
  477. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_rewriter/test_migrations.py +0 -0
  478. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_update_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_update_mysql}/alembic.ini +0 -0
  479. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_update_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_update_mysql}/migrations/env.py +0 -0
  480. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_update_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_update_mysql}/migrations/script.py.mako +0 -0
  481. {sqlalchemy_declarative_extensions-0.16.10/tests/examples/test_view_update_pg → sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_update_mysql}/migrations/versions/.gitkeep +0 -0
  482. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_update_mysql/migrations/versions/2152079ac9a3_.py +0 -0
  483. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_update_mysql/models.py +0 -0
  484. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_update_mysql/test_migrations.py +0 -0
  485. /sqlalchemy_declarative_extensions-0.16.10/tests/function/__init__.py → /sqlalchemy_declarative_extensions-0.17.0/tests/examples/test_view_update_pg/migrations/versions/.gitkeep +0 -0
  486. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_update_pg/migrations/versions/2152079ac9a3_.py +0 -0
  487. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_update_pg/models.py +0 -0
  488. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/examples/test_view_update_pg/test_migrations.py +0 -0
  489. {sqlalchemy_declarative_extensions-0.16.10/tests/grant → sqlalchemy_declarative_extensions-0.17.0/tests/function}/__init__.py +0 -0
  490. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_alembic.py +0 -0
  491. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_create_mysql.py +0 -0
  492. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_create_requires_normalization.py +0 -0
  493. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_delete.py +0 -0
  494. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_delete_mysql.py +0 -0
  495. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_drop_all.py +0 -0
  496. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_exclude.py +0 -0
  497. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_filter.py +0 -0
  498. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_function_normalization.py +0 -0
  499. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_ignore_unspecified.py +0 -0
  500. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_include_exclude.py +0 -0
  501. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_metadata_sequence.py +0 -0
  502. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_pg_security_definer.py +0 -0
  503. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_quote.py +0 -0
  504. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_unnamed_param.py +0 -0
  505. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_update.py +0 -0
  506. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/function/test_update_mysql.py +0 -0
  507. {sqlalchemy_declarative_extensions-0.16.10/tests/procedure → sqlalchemy_declarative_extensions-0.17.0/tests/grant}/__init__.py +0 -0
  508. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_alembic.py +0 -0
  509. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_false_grants_imply_default_grants.py +0 -0
  510. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_grant_schema.py +0 -0
  511. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_ignore_unspecified.py +0 -0
  512. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_metadata_sequence.py +0 -0
  513. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_no_grants.py +0 -0
  514. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_only_defined_roles.py +0 -0
  515. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_postgresql.py +0 -0
  516. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_remove_unspecified.py +0 -0
  517. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_sqlalchemy.py +0 -0
  518. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_table_grants.py +0 -0
  519. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/grant/test_view.py +0 -0
  520. {sqlalchemy_declarative_extensions-0.16.10/tests/role → sqlalchemy_declarative_extensions-0.17.0/tests/procedure}/__init__.py +0 -0
  521. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_alembic.py +0 -0
  522. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_create.py +0 -0
  523. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_create_mysql.py +0 -0
  524. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_create_requires_normalization.py +0 -0
  525. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_delete.py +0 -0
  526. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_delete_mysql.py +0 -0
  527. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_drop_all.py +0 -0
  528. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_exclude.py +0 -0
  529. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_filter.py +0 -0
  530. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_ignore_unspecified.py +0 -0
  531. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_metadata_sequence.py +0 -0
  532. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_pg_security_definer.py +0 -0
  533. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_quote.py +0 -0
  534. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_update.py +0 -0
  535. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/procedure/test_update_mysql.py +0 -0
  536. {sqlalchemy_declarative_extensions-0.16.10/tests/row → sqlalchemy_declarative_extensions-0.17.0/tests/role}/__init__.py +0 -0
  537. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_alembic.py +0 -0
  538. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_drop_all.py +0 -0
  539. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_external.py +0 -0
  540. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_filter.py +0 -0
  541. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_iterable_roles.py +0 -0
  542. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_metadata_sequence.py +0 -0
  543. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_remove_valid_until.py +0 -0
  544. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_sqlalchemy.py +0 -0
  545. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_sqlalchemy_snowflake.py +0 -0
  546. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_topological_sort.py +0 -0
  547. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_update_parent_role.py +0 -0
  548. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/role/test_use_role.py +0 -0
  549. {sqlalchemy_declarative_extensions-0.16.10/tests/trigger → sqlalchemy_declarative_extensions-0.17.0/tests/row}/__init__.py +0 -0
  550. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/row/test_alembic.py +0 -0
  551. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/row/test_bind_syntax.py +0 -0
  552. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/row/test_column_added.py +0 -0
  553. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/row/test_invalid_table.py +0 -0
  554. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/row/test_metadata_sequence.py +0 -0
  555. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/row/test_missing_primary_key.py +0 -0
  556. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/row/test_schema_context.py +0 -0
  557. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/row/test_sqlalchemy.py +0 -0
  558. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/schema/test_alembic.py +0 -0
  559. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/schema/test_drop.py +0 -0
  560. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/schema/test_drop_all.py +0 -0
  561. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/schema/test_filter.py +0 -0
  562. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/schema/test_metadata_sequence.py +0 -0
  563. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/schema/test_snowflake.py +0 -0
  564. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/schema/test_sqlalchemy.py +0 -0
  565. {sqlalchemy_declarative_extensions-0.16.10/tests/view → sqlalchemy_declarative_extensions-0.17.0/tests/trigger}/__init__.py +0 -0
  566. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_arguments.py +0 -0
  567. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_create_mysql.py +0 -0
  568. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_create_postgres.py +0 -0
  569. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_drop_all.py +0 -0
  570. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_drop_mysql.py +0 -0
  571. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_drop_postgres.py +0 -0
  572. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_for_each_statement_postgres.py +0 -0
  573. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_ignore_unspecified_postgres.py +0 -0
  574. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_include_exclude.py +0 -0
  575. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_metadata_sequence.py +0 -0
  576. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_missing_when_postgres.py +0 -0
  577. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_same_name_postgres.py +0 -0
  578. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_schema_quoting.py +0 -0
  579. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_update_mysql.py +0 -0
  580. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_update_postgres.py +0 -0
  581. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_when_references_new_postgres.py +0 -0
  582. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/trigger/test_wrapped_parens_postgres.py +0 -0
  583. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/utilities.py +0 -0
  584. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_add_constraint_to_existing.py +0 -0
  585. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_alembic.py +0 -0
  586. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_alembic_utils.py +0 -0
  587. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_constraint_drops_first.py +0 -0
  588. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_convert_to_materialized.py +0 -0
  589. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_create_table_and_view_together.py +0 -0
  590. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_drop_all.py +0 -0
  591. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_escaped_bindparam.py +0 -0
  592. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_filter.py +0 -0
  593. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_ignore_glob.py +0 -0
  594. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_ignore_unspecified.py +0 -0
  595. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_ignore_views.py +0 -0
  596. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_materialized.py +0 -0
  597. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_metadata_sequence.py +0 -0
  598. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_only_constraint_changes.py +0 -0
  599. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_only_different_constraints_drop.py +0 -0
  600. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_pg_materialized_no_data.py +0 -0
  601. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_snowflake.py +0 -0
  602. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_sqlalchemy.py +0 -0
  603. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_update.py +0 -0
  604. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_view_function.py +0 -0
  605. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_view_in_schema.py +0 -0
  606. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/tests/view/test_view_index_bound_column.py +0 -0
  607. {sqlalchemy_declarative_extensions-0.16.10 → sqlalchemy_declarative_extensions-0.17.0}/uv.lock +0 -0
@@ -4,7 +4,7 @@ sphinx:
4
4
  configuration: docs/source/conf.py
5
5
 
6
6
  build:
7
- os: ubuntu-20.04
7
+ os: ubuntu-24.04
8
8
  tools:
9
9
  python: "3.10"
10
10
 
@@ -1,9 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.17
4
+
3
5
  ### 0.17.0
4
6
 
7
+ - feat: Add support for declaring triggers in __table_args__.
8
+ - feat: Add PARALLEL, STRICT and LEAKPROOF support to pg functions.
9
+ - fix: Rename FunctionVolatility and FunctionParallel members to lowercase.
10
+
5
11
  ## 0.16
6
12
 
13
+ ### 0.16.11
14
+
15
+ - fix: Correlate the extension-schema check in pg triggers_query.
16
+
7
17
  ### 0.16.10
8
18
 
9
19
  - fix: TypeError breaking constraints on declared views.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: sqlalchemy-declarative-extensions
3
- Version: 0.16.10
3
+ Version: 0.17.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/
@@ -0,0 +1,97 @@
1
+ # Triggers
2
+
3
+ ```python
4
+ from sqlalchemy.orm import declarative_base
5
+ from sqlalchemy_declarative_extensions import declarative_database, Function, Functions, Triggers
6
+ from sqlalchemy_declarative_extensions.dialects.postgresql import Trigger
7
+
8
+ _Base = declarative_base()
9
+
10
+
11
+ @declarative_database
12
+ class Base(_Base):
13
+ __abstract__ = True
14
+
15
+ functions = Functions().are(
16
+ Function(
17
+ "fancy_trigger",
18
+ """
19
+ BEGIN
20
+ INSERT INTO foo (id) select NEW.id + 1;
21
+ RETURN NULL;
22
+ END
23
+ """,
24
+ language="plpgsql",
25
+ returns="trigger",
26
+ )
27
+ )
28
+
29
+ triggers = Triggers().are(
30
+ Trigger.after("insert", on="foo", execute="fancy_trigger")
31
+ .named("on_insert_foo")
32
+ .when("pg_trigger_depth() < 1")
33
+ .for_each_row(),
34
+ )
35
+ ```
36
+
37
+ ```{note}
38
+ Triggers options are wildly different across dialects. As such, you should always use
39
+ the dialect-specific `sqlalchemy_declarative_extensions.trigger.base.Trigger` subclasses.
40
+ ```
41
+
42
+ ```{note}
43
+ Trigger behavior not fully implemented at current time, although it **should** be functional for
44
+ the options it does support. Any ability to instantiate an object which produces a syntax error
45
+ should be considered a bug. Additionally, feature requests for supporting more trigger options
46
+ are welcome!
47
+ ```
48
+
49
+ ## Table-level triggers
50
+
51
+ Unlike most other object types, a trigger always targets exactly one table. It can
52
+ therefore be declared inline on that table instead, through `__table_args__` (or the
53
+ positional arguments of a [Table](sqlalchemy.schema.Table)), in the same way you would
54
+ declare an `Index` or `UniqueConstraint`.
55
+
56
+ ```python
57
+ from sqlalchemy import Column, types
58
+ from sqlalchemy_declarative_extensions.dialects.postgresql import Trigger
59
+
60
+
61
+ class Foo(Base):
62
+ __tablename__ = "foo"
63
+ __table_args__ = (
64
+ Trigger.after("insert", execute="fancy_trigger")
65
+ .named("on_insert_foo")
66
+ .when("pg_trigger_depth() < 1")
67
+ .for_each_row(),
68
+ )
69
+
70
+ id = Column(types.Integer(), primary_key=True)
71
+ ```
72
+
73
+ Declared this way, `on` is inferred from the table being attached to (schema-qualified,
74
+ where that table declares a non-default schema), and need not be supplied. Supplying an
75
+ `on` which disagrees with that table is an error.
76
+
77
+ The resulting trigger is registered against the same `MetaData` as one declared through
78
+ `Triggers`, so the two styles can be freely mixed, and both are picked up by alembic
79
+ autogeneration. The trigger object itself is not mutated by being attached, so a single
80
+ definition can be shared among multiple tables.
81
+
82
+ ```{note}
83
+ `name`, unlike `on`, is **not** inferred. A trigger attached to a table must be given one,
84
+ either through `name=` or `.named(...)`, else a `ValueError` is raised at declaration time.
85
+ ```
86
+
87
+ ```{note}
88
+ The `MetaData` must have been set up (i.e. `declarative_database` applied, or
89
+ `declare_database` called) **before** the models which attach triggers are defined. This is
90
+ the natural ordering, but it does mean that doing so afterwards will discard any
91
+ already-attached table-level triggers.
92
+ ```
93
+
94
+ ```{eval-rst}
95
+ .. autoapimodule:: sqlalchemy_declarative_extensions.trigger.base
96
+ :members: Trigger, Triggers, register_trigger
97
+ ```
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sqlalchemy-declarative-extensions"
3
- version = "0.16.10"
3
+ version = "0.17.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" }
@@ -48,8 +48,9 @@ class Trigger(base.Trigger):
48
48
  def before(
49
49
  cls,
50
50
  event: TriggerEvents | str,
51
- on: str,
51
+ *,
52
52
  execute: str,
53
+ on: str = "",
53
54
  name: str = "",
54
55
  ):
55
56
  return cls(
@@ -64,8 +65,9 @@ class Trigger(base.Trigger):
64
65
  def after(
65
66
  cls,
66
67
  event: TriggerEvents | str,
67
- on: str,
68
+ *,
68
69
  execute: str,
70
+ on: str = "",
69
71
  name: str = "",
70
72
  ):
71
73
  return cls(
@@ -1,5 +1,6 @@
1
1
  from sqlalchemy_declarative_extensions.dialects.postgresql.function import (
2
2
  Function,
3
+ FunctionParallel,
3
4
  FunctionParam,
4
5
  FunctionReturn,
5
6
  FunctionSecurity,
@@ -45,6 +46,7 @@ __all__ = [
45
46
  "DefaultGrantTypes",
46
47
  "Function",
47
48
  "FunctionGrants",
49
+ "FunctionParallel",
48
50
  "FunctionParam",
49
51
  "FunctionReturn",
50
52
  "FunctionSecurity",
@@ -34,22 +34,24 @@ class FunctionSecurity(enum.Enum):
34
34
  definer = "DEFINER"
35
35
 
36
36
 
37
- @enum.unique
38
37
  class FunctionVolatility(enum.Enum):
39
- VOLATILE = "VOLATILE"
40
- STABLE = "STABLE"
41
- IMMUTABLE = "IMMUTABLE"
38
+ volatile = "VOLATILE"
39
+ stable = "STABLE"
40
+ immutable = "IMMUTABLE"
42
41
 
43
- @classmethod
44
- def from_provolatile(cls, provolatile: str) -> FunctionVolatility:
45
- """Convert a `pg_proc.provolatile` value to a `FunctionVolatility` enum."""
46
- if provolatile == "v":
47
- return cls.VOLATILE
48
- if provolatile == "s":
49
- return cls.STABLE
50
- if provolatile == "i":
51
- return cls.IMMUTABLE
52
- raise ValueError(f"Invalid volatility: {provolatile}")
42
+ VOLATILE = volatile
43
+ STABLE = stable
44
+ IMMUTABLE = immutable
45
+
46
+
47
+ class FunctionParallel(enum.Enum):
48
+ unsafe = "UNSAFE"
49
+ restricted = "RESTRICTED"
50
+ safe = "SAFE"
51
+
52
+ UNSAFE = unsafe
53
+ RESTRICTED = restricted
54
+ SAFE = safe
53
55
 
54
56
 
55
57
  @dataclass
@@ -62,7 +64,10 @@ class Function(base.Function):
62
64
  security: FunctionSecurity = FunctionSecurity.invoker
63
65
  returns: FunctionReturn | str | None = None # type: ignore
64
66
  parameters: Sequence[FunctionParam | str] | None = None # type: ignore
65
- volatility: FunctionVolatility = FunctionVolatility.VOLATILE
67
+ volatility: FunctionVolatility = FunctionVolatility.volatile
68
+ parallel: FunctionParallel = FunctionParallel.unsafe
69
+ strict: bool = False
70
+ leakproof: bool = False
66
71
 
67
72
  @property
68
73
  def _has_sqlbody(self) -> bool:
@@ -91,9 +96,18 @@ class Function(base.Function):
91
96
  if self.security == FunctionSecurity.definer:
92
97
  components.append("SECURITY DEFINER")
93
98
 
94
- if self.volatility != FunctionVolatility.VOLATILE:
99
+ if self.volatility != FunctionVolatility.volatile:
95
100
  components.append(self.volatility.value)
96
101
 
102
+ if self.strict:
103
+ components.append("STRICT")
104
+
105
+ if self.leakproof:
106
+ components.append("LEAKPROOF")
107
+
108
+ if self.parallel != FunctionParallel.unsafe:
109
+ components.append(f"PARALLEL {self.parallel.value}")
110
+
97
111
  components.append(f"LANGUAGE {self.language}")
98
112
  if self._has_sqlbody:
99
113
  components.append(self.definition)
@@ -14,6 +14,7 @@ from sqlalchemy_declarative_extensions.dialects.postgresql.acl import (
14
14
  )
15
15
  from sqlalchemy_declarative_extensions.dialects.postgresql.function import (
16
16
  Function,
17
+ FunctionParallel,
17
18
  FunctionParam,
18
19
  FunctionSecurity,
19
20
  FunctionVolatility,
@@ -65,6 +66,21 @@ EXTENSION_TRIGGERS = {
65
66
  "postgis_topology": {"layer_integrity_checks": "topology.layer"},
66
67
  }
67
68
 
69
+ FUNCTION_SECURITY = {
70
+ True: FunctionSecurity.definer,
71
+ False: FunctionSecurity.invoker,
72
+ }
73
+ FUNCTION_VOLATILITY = {
74
+ "v": FunctionVolatility.volatile,
75
+ "s": FunctionVolatility.stable,
76
+ "i": FunctionVolatility.immutable,
77
+ }
78
+ FUNCTION_PARALLEL = {
79
+ "u": FunctionParallel.unsafe,
80
+ "r": FunctionParallel.restricted,
81
+ "s": FunctionParallel.safe,
82
+ }
83
+
68
84
 
69
85
  def get_schemas_postgresql(connection: Connection):
70
86
  from sqlalchemy_declarative_extensions.schema.base import Schema
@@ -227,33 +243,31 @@ def get_functions_postgresql(connection: Connection) -> Sequence[BaseFunction]:
227
243
 
228
244
  functions = []
229
245
  functions_query = get_functions_query(connection.dialect.server_version_info)
230
-
231
246
  for f in connection.execute(functions_query).fetchall():
232
247
  name = f.name
233
248
  definition = f.source
234
249
  language = f.language
235
250
  schema = f.schema if f.schema != "public" else None
236
-
251
+ parameters = [
252
+ FunctionParam(name, type, default, mode)
253
+ for name, type, default, mode in zip_longest(
254
+ f.arg_names or [],
255
+ f.arg_types or [],
256
+ f.arg_defaults or [],
257
+ f.arg_modes or [],
258
+ )
259
+ ]
237
260
  function = Function(
238
- parameters=[
239
- FunctionParam(name, type, default, mode)
240
- for name, type, default, mode in zip_longest(
241
- f.arg_names or [],
242
- f.arg_types or [],
243
- f.arg_defaults or [],
244
- f.arg_modes or [],
245
- )
246
- ],
247
- volatility=FunctionVolatility.from_provolatile(f.volatility),
261
+ parameters=parameters,
248
262
  name=name,
249
263
  definition=definition,
250
264
  language=language,
251
265
  schema=schema,
252
- security=(
253
- FunctionSecurity.definer
254
- if f.security_definer
255
- else FunctionSecurity.invoker
256
- ),
266
+ volatility=FUNCTION_VOLATILITY[f.volatility],
267
+ security=FUNCTION_SECURITY[f.security_definer],
268
+ parallel=FUNCTION_PARALLEL[f.parallel],
269
+ strict=f.strict,
270
+ leakproof=f.leakproof,
257
271
  returns=f.return_type_string or f.base_return_type,
258
272
  )
259
273
  functions.append(function)
@@ -115,6 +115,9 @@ pg_proc = table(
115
115
  column("prolang"),
116
116
  column("prorettype"),
117
117
  column("prosecdef"),
118
+ column("proparallel"),
119
+ column("proisstrict"),
120
+ column("proleakproof"),
118
121
  column("prokind"),
119
122
  column("provolatile"),
120
123
  column("pronargs"),
@@ -376,6 +379,9 @@ def get_functions_query(version_info):
376
379
  pg_type.c.typname.label("base_return_type"),
377
380
  source.label("source"),
378
381
  pg_proc.c.prosecdef.label("security_definer"),
382
+ cast(pg_proc.c.proparallel, Text).label("parallel"),
383
+ pg_proc.c.proisstrict.label("strict"),
384
+ pg_proc.c.proleakproof.label("leakproof"),
379
385
  cast(pg_proc.c.prokind, Text).label("kind"),
380
386
  func.pg_get_function_arguments(pg_proc.c.oid).label("parameters"),
381
387
  cast(pg_proc.c.provolatile, Text).label("volatility"),
@@ -450,6 +456,6 @@ triggers_query = (
450
456
  .join(proc_nsp, pg_proc.c.pronamespace == proc_nsp.c.oid)
451
457
  )
452
458
  .where(pg_trigger.c.tgisinternal.is_(False))
453
- .where(_schema_not_from_extension())
459
+ .where(_schema_not_from_extension(rel_nsp.c.oid))
454
460
  .where(_not_from_extension(pg_trigger.c.oid, "pg_trigger"))
455
461
  )
@@ -100,7 +100,7 @@ class Trigger(base.Trigger):
100
100
 
101
101
  @classmethod
102
102
  def before(
103
- cls, *events: TriggerEvents | str, on: str, execute: str, name: str = ""
103
+ cls, *events: TriggerEvents | str, execute: str, on: str = "", name: str = ""
104
104
  ):
105
105
  return cls(
106
106
  time=TriggerTimes.before,
@@ -111,7 +111,9 @@ class Trigger(base.Trigger):
111
111
  )
112
112
 
113
113
  @classmethod
114
- def after(cls, *events: TriggerEvents | str, on: str, execute: str, name: str = ""):
114
+ def after(
115
+ cls, *events: TriggerEvents | str, execute: str, on: str = "", name: str = ""
116
+ ):
115
117
  return cls(
116
118
  time=TriggerTimes.after,
117
119
  events=TriggerEvents.from_strings(events),
@@ -122,7 +124,7 @@ class Trigger(base.Trigger):
122
124
 
123
125
  @classmethod
124
126
  def instead_of(
125
- cls, *events: TriggerEvents | str, on: str, execute: str, name: str = ""
127
+ cls, *events: TriggerEvents | str, execute: str, on: str = "", name: str = ""
126
128
  ):
127
129
  return cls(
128
130
  time=TriggerTimes.instead_of,
@@ -1,17 +1,19 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass, field, replace
4
- from typing import Hashable, Iterable, Sequence
4
+ from typing import Any, Hashable, Iterable, Sequence
5
5
 
6
- from sqlalchemy import MetaData
6
+ from sqlalchemy import MetaData, Table
7
7
  from sqlalchemy.engine import Connection
8
+ from sqlalchemy.sql.schema import SchemaItem
8
9
  from typing_extensions import Self
9
10
 
11
+ from sqlalchemy_declarative_extensions.sql import qualify_name
10
12
  from sqlalchemy_declarative_extensions.sqlalchemy import HasMetaData
11
13
 
12
14
 
13
15
  @dataclass
14
- class Trigger:
16
+ class Trigger(SchemaItem):
15
17
  """Describes a generic trigger."""
16
18
 
17
19
  name: str
@@ -26,6 +28,25 @@ class Trigger:
26
28
  def named(self, name: str):
27
29
  return replace(self, name=name)
28
30
 
31
+ def _set_parent(self, parent: Any, **kw: Any) -> None:
32
+ """Attach to the `Table` __table_args__ it was declared in."""
33
+ if not isinstance(parent, Table):
34
+ raise ValueError(
35
+ f"Trigger can only be attached to a `Table`, got: {parent}."
36
+ )
37
+
38
+ on = qualify_name(parent.schema, parent.name)
39
+ if not self.name:
40
+ raise ValueError(f"Trigger attached to table '{on}' must have a name.")
41
+
42
+ if self.on and self.on != on:
43
+ raise ValueError(
44
+ f"Trigger '{self.name}' declares `on='{self.on}'`,"
45
+ f" which conflicts with the table it is attached to: '{on}'."
46
+ )
47
+
48
+ register_trigger(parent.metadata, replace(self, on=on))
49
+
29
50
  def to_sql_create(self):
30
51
  raise NotImplementedError()
31
52
 
@@ -0,0 +1,47 @@
1
+ from pytest_mock_resources import create_postgres_fixture
2
+ from sqlalchemy import text
3
+
4
+ from sqlalchemy_declarative_extensions import Triggers
5
+ from sqlalchemy_declarative_extensions.dialects import get_triggers
6
+ from sqlalchemy_declarative_extensions.trigger.compare import compare_triggers
7
+
8
+ pg = create_postgres_fixture(scope="function", engine_kwargs={"echo": True})
9
+
10
+ setup = """
11
+ CREATE EXTENSION hstore;
12
+ CREATE SCHEMA ext_owned;
13
+
14
+ INSERT INTO pg_depend
15
+ (classid, objid, objsubid, refclassid, refobjid, refobjsubid, deptype)
16
+ SELECT 'pg_namespace'::regclass, n.oid, 0, 'pg_extension'::regclass, e.oid, 0, 'e'
17
+ FROM pg_namespace n, pg_extension e
18
+ WHERE n.nspname = 'ext_owned' AND e.extname = 'hstore';
19
+
20
+ CREATE FUNCTION gimme() RETURNS trigger LANGUAGE plpgsql AS $$
21
+ BEGIN
22
+ RETURN NULL;
23
+ END
24
+ $$;
25
+
26
+ CREATE TABLE foo (id integer primary key);
27
+ CREATE TRIGGER on_insert_foo AFTER INSERT ON foo
28
+ FOR EACH ROW EXECUTE PROCEDURE gimme();
29
+
30
+ CREATE TABLE ext_owned.bar (id integer primary key);
31
+ CREATE TRIGGER on_insert_bar AFTER INSERT ON ext_owned.bar
32
+ FOR EACH ROW EXECUTE PROCEDURE gimme();
33
+ """
34
+
35
+
36
+ def test_extension_owned_schema_only_excludes_triggers_on_own_tables(pg):
37
+ with pg.connect() as connection:
38
+ connection.execute(text(setup))
39
+ connection.commit()
40
+
41
+ trigger_names = [trigger.name for trigger in get_triggers(connection)]
42
+ assert trigger_names == ["on_insert_foo"]
43
+
44
+ diff = compare_triggers(connection, Triggers())
45
+
46
+ diff_trigger_names = [op.trigger.name for op in diff]
47
+ assert diff_trigger_names == ["on_insert_foo"]
@@ -0,0 +1,50 @@
1
+ import pytest
2
+ from pytest_mock_resources import create_postgres_fixture
3
+ from sqlalchemy import text
4
+
5
+ from sqlalchemy_declarative_extensions import Functions
6
+ from sqlalchemy_declarative_extensions.dialects.postgresql import (
7
+ Function,
8
+ FunctionParallel,
9
+ FunctionVolatility,
10
+ )
11
+ from sqlalchemy_declarative_extensions.function.compare import compare_functions
12
+
13
+ pg = create_postgres_fixture(scope="function", engine_kwargs={"echo": True})
14
+
15
+
16
+ @pytest.mark.parametrize(
17
+ "attributes",
18
+ [
19
+ {},
20
+ {"parallel": FunctionParallel.restricted},
21
+ {"parallel": FunctionParallel.safe},
22
+ {"strict": True},
23
+ {"leakproof": True},
24
+ {"parallel": FunctionParallel.safe, "strict": True, "leakproof": True},
25
+ ],
26
+ )
27
+ def test_function_attributes(pg, attributes):
28
+ add_function = Function(
29
+ name="add",
30
+ definition="SELECT a + b;",
31
+ parameters=["a integer", "b integer"],
32
+ returns="INTEGER",
33
+ **attributes,
34
+ ).normalize()
35
+ functions = Functions([add_function])
36
+ with pg.connect() as connection:
37
+ connection.execute(text("\n".join(add_function.to_sql_create())))
38
+ diff = compare_functions(connection, functions)
39
+ assert diff == []
40
+
41
+
42
+ @pytest.mark.parametrize(
43
+ "alias, member",
44
+ [
45
+ (FunctionVolatility.STABLE, FunctionVolatility.stable),
46
+ (FunctionParallel.SAFE, FunctionParallel.safe),
47
+ ],
48
+ )
49
+ def test_uppercase_alias_is_lowercase_member(alias, member):
50
+ assert alias is member
@@ -31,7 +31,7 @@ def test_function_argument_defaults(pg, default_a, default_b, default_c):
31
31
  FunctionParam("c", "text", default=default_c),
32
32
  ],
33
33
  returns="TEXT",
34
- volatility=FunctionVolatility.STABLE,
34
+ volatility=FunctionVolatility.stable,
35
35
  language="plpgsql",
36
36
  ).normalize()
37
37
  create_function = add_label_function.to_sql_create()
@@ -23,7 +23,7 @@ def test_functions(pg):
23
23
  definition="RETURN (i + 1)",
24
24
  parameters=["i integer"],
25
25
  returns="INTEGER",
26
- volatility=FunctionVolatility.STABLE,
26
+ volatility=FunctionVolatility.stable,
27
27
  ).normalize()
28
28
  create_function = add_stable_function.to_sql_create()
29
29
  functions = Functions([add_stable_function])
@@ -23,7 +23,7 @@ class Base(_Base): # type: ignore
23
23
  "RETURN (i + 1)",
24
24
  parameters=["i integer"],
25
25
  returns="INTEGER",
26
- volatility=FunctionVolatility.STABLE,
26
+ volatility=FunctionVolatility.stable,
27
27
  ),
28
28
  # NEW FUNCTION: Multiple params, RETURNS TABLE
29
29
  Function(
@@ -39,7 +39,7 @@ class Base(_Base): # type: ignore
39
39
  parameters=["group_ids integer[]"],
40
40
  returns=FunctionReturn(table=["id integer", "name text"]),
41
41
  language="sql",
42
- volatility=FunctionVolatility.STABLE,
42
+ volatility=FunctionVolatility.stable,
43
43
  ),
44
44
  )
45
45
 
@@ -23,7 +23,7 @@ class Base(_Base): # type: ignore
23
23
  "SELECT i + 1;",
24
24
  parameters=["i integer"],
25
25
  returns="INTEGER",
26
- volatility=FunctionVolatility.STABLE,
26
+ volatility=FunctionVolatility.stable,
27
27
  ),
28
28
  # NEW FUNCTION: Multiple params, RETURNS TABLE, plpgsql
29
29
  Function(
@@ -37,7 +37,7 @@ class Base(_Base): # type: ignore
37
37
  parameters=["group_ids integer[]"],
38
38
  returns=FunctionReturn(table=["id integer", "name text"]),
39
39
  language="plpgsql", # Requires plpgsql
40
- volatility=FunctionVolatility.STABLE,
40
+ volatility=FunctionVolatility.stable,
41
41
  ),
42
42
  )
43
43
 
@@ -0,0 +1,24 @@
1
+ from sqlalchemy import Column, types
2
+
3
+ from sqlalchemy_declarative_extensions import declarative_database
4
+ from sqlalchemy_declarative_extensions.dialects.postgresql import Trigger
5
+ from sqlalchemy_declarative_extensions.sqlalchemy import declarative_base
6
+
7
+ _Base = declarative_base()
8
+
9
+
10
+ @declarative_database
11
+ class Base(_Base): # type: ignore
12
+ __abstract__ = True
13
+
14
+
15
+ class Foo(Base):
16
+ __tablename__ = "foo"
17
+ __table_args__ = (
18
+ Trigger.after("insert", execute="gimme")
19
+ .named("on_insert_foo")
20
+ .when("pg_trigger_depth() < 1")
21
+ .for_each_row(),
22
+ )
23
+
24
+ id = Column(types.Integer(), primary_key=True)
@@ -0,0 +1,41 @@
1
+ import pytest
2
+ from pytest_alembic import MigrationContext
3
+ from pytest_mock_resources import PostgresConfig, create_postgres_fixture
4
+ from sqlalchemy import text
5
+
6
+ alembic_engine = create_postgres_fixture(scope="function", engine_kwargs={"echo": True})
7
+
8
+
9
+ @pytest.fixture(scope="session")
10
+ def pmr_postgres_config():
11
+ return PostgresConfig(image="postgres:13", port=None, ci_port=None)
12
+
13
+
14
+ def test_apply_autogenerated_revision(alembic_runner: MigrationContext, alembic_engine):
15
+ with alembic_engine.connect() as conn:
16
+ with conn.begin() as trans:
17
+ conn.execute(
18
+ text(
19
+ """
20
+ CREATE FUNCTION gimme() RETURNS trigger LANGUAGE plpgsql AS $$
21
+ BEGIN
22
+ INSERT INTO foo (id) select NEW.id + 1;
23
+ RETURN NULL;
24
+ END
25
+ $$;
26
+ """
27
+ )
28
+ )
29
+ trans.commit()
30
+
31
+ alembic_runner.migrate_up_one()
32
+ result = alembic_runner.generate_revision(
33
+ autogenerate=True, prevent_file_generation=False
34
+ )
35
+ alembic_runner.migrate_up_one()
36
+
37
+ with alembic_engine.connect() as conn:
38
+ conn.execute(text("insert into foo (id) values (1)"))
39
+ result = [r for r, *_ in conn.execute(text("select id from foo")).fetchall()]
40
+
41
+ assert result == [1, 2]