From: Mike Bayer Date: Fri, 11 Jan 2013 05:52:18 +0000 (-0500) Subject: Fixed bug where autogenerate would fail if a Column X-Git-Tag: rel_0_4_2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a41b0900ccdb1b541aa1ab79e5f98f30178c3ad4;p=thirdparty%2Fsqlalchemy%2Falembic.git Fixed bug where autogenerate would fail if a Column to be added to a table made use of the ".key" paramter. #99 --- diff --git a/alembic/autogenerate.py b/alembic/autogenerate.py index 11c8789e..b50e16cb 100644 --- a/alembic/autogenerate.py +++ b/alembic/autogenerate.py @@ -189,6 +189,7 @@ def _produce_net_changes(connection, metadata, diffs, autogen_context, def _compare_tables(conn_table_names, metadata_table_names, inspector, metadata, diffs, autogen_context): + for s, tname in metadata_table_names.difference(conn_table_names): name = '%s.%s' % (s, tname) if s else tname diffs.append(("add_table", metadata.tables[name])) @@ -256,7 +257,7 @@ def _compare_columns(schema, tname, conn_table, metadata_table, log.info("Detected removed column '%s.%s'", name, cname) for colname in metadata_col_names.intersection(conn_col_names): - metadata_col = metadata_table.c[colname] + metadata_col = metadata_cols_by_name[colname] conn_col = conn_table[colname] col_diff = [] _compare_type(schema, tname, colname, diff --git a/docs/build/changelog.rst b/docs/build/changelog.rst index 52087d71..fba75ffa 100644 --- a/docs/build/changelog.rst +++ b/docs/build/changelog.rst @@ -8,6 +8,13 @@ Changelog .. changelog:: :version: 0.4.2 + .. change:: + :tags: bug, autogenerate + :tickets: 99 + + Fixed bug where autogenerate would fail if a Column + to be added to a table made use of the ".key" paramter. + .. change:: :tags: bug, sqlite :tickets: 98 diff --git a/tests/test_autogenerate.py b/tests/test_autogenerate.py index 6675aa53..699d037a 100644 --- a/tests/test_autogenerate.py +++ b/tests/test_autogenerate.py @@ -661,6 +661,48 @@ class AutogenerateDiffTest(AutogenTest, TestCase): [('remove_table', 'extra'), ('remove_table', u'user')] ) +class AutogenKeyTest(AutogenTest, TestCase): + @classmethod + def _get_db_schema(cls): + m = MetaData() + + Table('someothertable', m, + Column('id', Integer, primary_key=True), + Column('value', Integer, key="somekey"), + ) + return m + + @classmethod + def _get_model_schema(cls): + m = MetaData() + + Table('sometable', m, + Column('id', Integer, primary_key=True), + Column('value', Integer, key="someotherkey"), + ) + Table('someothertable', m, + Column('id', Integer, primary_key=True), + Column('value', Integer, key="somekey"), + Column("othervalue", Integer, key="otherkey") + ) + return m + + symbols = ['someothertable', 'sometable'] + def test_autogen(self): + metadata = self.m2 + connection = self.context.bind + + diffs = [] + + autogenerate._produce_net_changes(connection, metadata, diffs, + self.autogen_context, + include_schemas=False + ) + eq_(diffs[0][0], "add_table") + eq_(diffs[0][1].name, "sometable") + eq_(diffs[1][0], "add_column") + eq_(diffs[1][3].key, "otherkey") + class AutogenerateDiffOrderTest(TestCase): @classmethod @requires_07