summaryrefslogtreecommitdiff
path: root/alembic/autogenerate
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2021-01-27 14:01:40 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2021-01-28 13:46:37 -0500
commit407316635cdb8edf95f8ee7bd06a5f2dd01eda26 (patch)
treea91ba3d82c1482ea440150d6868d79acaae0b82f /alembic/autogenerate
parent3d0ab3ddda45564a7f3bbd65c810242b9e673845 (diff)
downloadalembic-407316635cdb8edf95f8ee7bd06a5f2dd01eda26.tar.gz
Enable SQL Server testing and fix autogen issues
Fixed assorted autogenerate issues with SQL Server: * ignore default reflected identity on primary_key columns * improve server default comparison Updated test_autogen_fks for modern levels of FK capabilities Change-Id: I94b815cedf90422ccd5ceceb765b07d772b505b7 Fixes: #787
Diffstat (limited to 'alembic/autogenerate')
-rw-r--r--alembic/autogenerate/compare.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/alembic/autogenerate/compare.py b/alembic/autogenerate/compare.py
index e1d8c80..e34114b 100644
--- a/alembic/autogenerate/compare.py
+++ b/alembic/autogenerate/compare.py
@@ -847,8 +847,16 @@ def _compare_nullable(
alter_column_op.existing_nullable = conn_col_nullable
if conn_col_nullable is not metadata_col_nullable:
- if sqla_compat._server_default_is_identity(
- metadata_col.server_default, conn_col.server_default
+ if (
+ sqla_compat._server_default_is_computed(
+ metadata_col.server_default, conn_col.server_default
+ )
+ and sqla_compat._nullability_might_be_unset(metadata_col)
+ or (
+ sqla_compat._server_default_is_identity(
+ metadata_col.server_default, conn_col.server_default
+ )
+ )
):
log.info(
"Ignoring nullable change on identity column '%s.%s'",
@@ -1025,11 +1033,11 @@ def _compare_identity_default(
metadata_col,
):
impl = autogen_context.migration_context.impl
- diff, ignored_attr = impl._compare_identity_default(
+ diff, ignored_attr, is_alter = impl._compare_identity_default(
metadata_col.server_default, conn_col.server_default
)
- return diff
+ return diff, is_alter
@comparators.dispatch_for("column")
@@ -1076,7 +1084,7 @@ def _compare_server_default(
metadata_default, conn_col_default
):
alter_column_op.existing_server_default = conn_col_default
- is_diff = _compare_identity_default(
+ diff, is_alter = _compare_identity_default(
autogen_context,
alter_column_op,
schema,
@@ -1085,15 +1093,15 @@ def _compare_server_default(
conn_col,
metadata_col,
)
- if is_diff or (bool(conn_col_default) != bool(metadata_default)):
+ if is_alter:
alter_column_op.modify_server_default = metadata_default
- if is_diff:
+ if diff:
log.info(
"Detected server default on column '%s.%s': "
"identity options attributes %s",
tname,
cname,
- sorted(is_diff),
+ sorted(diff),
)
else:
rendered_metadata_default = _render_server_default_for_compare(