args.append(c.copy(schema=schema))
for c in self.constraints:
args.append(c.copy(schema=schema))
- return Table(self.name, metadata, schema=schema, *args, **self.kwargs)
+ table = Table(
+ self.name, metadata, schema=schema,
+ *args, **self.kwargs
+ )
+ copied_already = set()
+ for i in table.indexes:
+ entry = [i.name,i.unique]
+ entry.extend(sorted(i.kwargs.items()))
+ entry.extend(i.columns.keys())
+ copied_already.add(tuple(entry))
+ for i in self.indexes:
+ cols = i.columns.keys()
+ entry = [i.name,i.unique]
+ entry.extend(sorted(i.kwargs.items()))
+ entry.extend(cols)
+ if tuple(entry) not in copied_already:
+ kwargs = dict(i.kwargs)
+ kwargs['unique']=i.unique
+ Index(i.name,
+ *[getattr(table.c,col) for col in cols],
+ **kwargs)
+ return table
class Column(SchemaItem, expression.ColumnClause):
"""Represents a column in a database table."""
import pickle
from sqlalchemy import Integer, String, UniqueConstraint, \
CheckConstraint, ForeignKey, MetaData, Sequence, \
- ForeignKeyConstraint, ColumnDefault
+ ForeignKeyConstraint, ColumnDefault, Index
from sqlalchemy.test.schema import Table, Column
from sqlalchemy import schema, exc
import sqlalchemy as tsa
eq_(table.kwargs,table_c.kwargs)
+ def test_tometadata_indexes(self):
+ meta = MetaData()
+
+ table = Table('mytable', meta,
+ Column('id', Integer, primary_key=True),
+ Column('data1', Integer, index=True),
+ Column('data2', Integer),
+ )
+ Index('multi',table.c.data1,table.c.data2),
+
+ meta2 = MetaData()
+ table_c = table.tometadata(meta2)
+
+ def _get_key(i):
+ entry = [i.name,i.unique]
+ entry.extend(sorted(i.kwargs.items()))
+ entry.extend(i.columns.keys())
+
+ table_indexes = [_get_key(i) for i in table.indexes]
+ table_indexes.sort()
+ table_c_indexes = [_get_key(i) for i in table_c.indexes]
+ table_c_indexes.sort()
+
+ eq_(table_indexes,table_c_indexes)
+
def test_tometadata_default_schema(self):
meta = MetaData()