summaryrefslogtreecommitdiff
path: root/test/sql
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2018-06-14 22:56:21 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2018-06-14 22:56:21 -0400
commit8f7766cc61479f3c9220c640230eeecd3d49ccc8 (patch)
tree93476645904fd6ae7328b90c727ad2321030db88 /test/sql
parentb1fcd837974a052e46455af99e0a1f18f7074bd8 (diff)
downloadsqlalchemy-8f7766cc61479f3c9220c640230eeecd3d49ccc8.tar.gz
Lookup index columns in parent table by key for copy
Fixed regression in 1.2 due to :ticket:`4147` where a :class:`.Table` that has had some of its indexed columns redefined with new ones, as would occur when overriding columns during reflection or when using :paramref:`.Table.extend_existing`, such that the :meth:`.Table.tometadata` method would fail when attempting to copy those indexes as they still referred to the replaced column. The copy logic now accommodates for this condition. Change-Id: I521aa2c9f3baa0e84598bbdd6ffe4bf07b6e3ba8 Fixes: #4279
Diffstat (limited to 'test/sql')
-rw-r--r--test/sql/test_metadata.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py
index 7d17e25f3..da133b21a 100644
--- a/test/sql/test_metadata.py
+++ b/test/sql/test_metadata.py
@@ -1066,6 +1066,38 @@ class ToMetaDataTest(fixtures.TestBase, ComparesTables):
sorted([_get_key(i) for i in table_c.indexes])
)
+ def test_indexes_with_col_redefine(self):
+ meta = MetaData()
+
+ table = Table('mytable', meta,
+ Column('id', Integer, primary_key=True),
+ Column('data1', Integer),
+ Column('data2', Integer),
+ Index('text', text('data1 + 1')),
+ )
+ Index('multi', table.c.data1, table.c.data2)
+ Index('func', func.abs(table.c.data1))
+ Index('multi-func', table.c.data1, func.abs(table.c.data2))
+
+ table = Table('mytable', meta,
+ Column('data1', Integer),
+ Column('data2', Integer),
+ extend_existing=True
+ )
+
+ meta2 = MetaData()
+ table_c = table.tometadata(meta2)
+
+ def _get_key(i):
+ return [i.name, i.unique] + \
+ sorted(i.kwargs.items()) + \
+ [str(col) for col in i.expressions]
+
+ eq_(
+ sorted([_get_key(i) for i in table.indexes]),
+ sorted([_get_key(i) for i in table_c.indexes])
+ )
+
@emits_warning("Table '.+' already exists within the given MetaData")
def test_already_exists(self):