diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-01-27 14:01:40 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-01-28 13:46:37 -0500 |
commit | 407316635cdb8edf95f8ee7bd06a5f2dd01eda26 (patch) | |
tree | a91ba3d82c1482ea440150d6868d79acaae0b82f /alembic/autogenerate | |
parent | 3d0ab3ddda45564a7f3bbd65c810242b9e673845 (diff) | |
download | alembic-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.py | 24 |
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( |