summaryrefslogtreecommitdiff
path: root/alembic
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2023-05-12 12:40:01 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2023-05-12 13:06:05 -0400
commit8ba4a4435871fe948f8292e7bb5bbc452e7d51ca (patch)
tree4a6cabcfe4728b9964034fb4085ad425a0b7bde0 /alembic
parent497c6c86b9547eed2ac297b1618300430578b86f (diff)
downloadalembic-8ba4a4435871fe948f8292e7bb5bbc452e7d51ca.tar.gz
dont compare unique constraint and index sigs to each other
Fixed regression caused by :ticket:`1166` released in version 1.10.0 which caused MySQL unique constraints with multiple columns to not compare correctly within autogenerate, due to different sorting rules on unique constraints vs. indexes, which in MySQL are shared constructs. Change-Id: I5687dde95281f237fd73367d145b9c62e2576a3a Fixes: #1240
Diffstat (limited to 'alembic')
-rw-r--r--alembic/autogenerate/compare.py12
1 files changed, 7 insertions, 5 deletions
diff --git a/alembic/autogenerate/compare.py b/alembic/autogenerate/compare.py
index b489328..5727891 100644
--- a/alembic/autogenerate/compare.py
+++ b/alembic/autogenerate/compare.py
@@ -452,7 +452,9 @@ class _uq_constraint_sig(_constraint_sig):
def __init__(self, const: UniqueConstraint) -> None:
self.const = const
self.name = const.name
- self.sig = tuple(sorted([col.name for col in const.columns]))
+ self.sig = ("UNIQUE_CONSTRAINT",) + tuple(
+ sorted([col.name for col in const.columns])
+ )
@property
def column_names(self) -> List[str]:
@@ -465,7 +467,7 @@ class _ix_constraint_sig(_constraint_sig):
def __init__(self, const: Index, impl: DefaultImpl) -> None:
self.const = const
self.name = const.name
- self.sig = impl.create_index_sig(const)
+ self.sig = ("INDEX",) + impl.create_index_sig(const)
self.is_unique = bool(const.unique)
def md_name_to_sql_name(self, context: AutogenContext) -> Optional[str]:
@@ -807,11 +809,11 @@ def _compare_indexes_and_uniques(
if not conn_obj.is_index and conn_obj.sig in unnamed_metadata_uniques:
continue
elif removed_name in doubled_constraints:
+ conn_uq, conn_idx = doubled_constraints[removed_name]
if (
- conn_obj.sig not in metadata_indexes_by_sig
- and conn_obj.sig not in metadata_uniques_by_sig
+ conn_idx.sig not in metadata_indexes_by_sig
+ and conn_uq.sig not in metadata_uniques_by_sig
):
- conn_uq, conn_idx = doubled_constraints[removed_name]
obj_removed(conn_uq)
obj_removed(conn_idx)
else: