-from sqlalchemy import Table, MetaData, Index, select, Column, \
- ForeignKeyConstraint, cast
+ffrom sqlalchemy import Table, MetaData, Index, select, Column, \
+ ForeignKeyConstraint, cast, CheckConstraint
from sqlalchemy import types as sqltypes
from sqlalchemy import schema as sql_schema
from sqlalchemy.util import OrderedDict
if self.copy_from is not None:
existing_table = self.copy_from
+ reflected = False
else:
existing_table = Table(
self.table_name, m1,
autoload=True,
autoload_with=self.operations.get_bind(),
*self.reflect_args, **self.reflect_kwargs)
+ reflected = True
batch_impl = ApplyBatchImpl(
- existing_table, self.table_args, self.table_kwargs)
+ existing_table, self.table_args, self.table_kwargs, reflected)
for opname, arg, kw in self.batch:
fn = getattr(batch_impl, opname)
fn(*arg, **kw)
class ApplyBatchImpl(object):
- def __init__(self, table, table_args, table_kwargs):
+ def __init__(self, table, table_args, table_kwargs, reflected):
self.table = table # this is a Table object
self.table_args = table_args
self.table_kwargs = table_kwargs
self.column_transfers = OrderedDict(
(c.name, {'expr': c}) for c in self.table.c
)
+ self.reflected = reflected
self._grab_table_elements()
def _grab_table_elements(self):
for const in self.table.constraints:
if _is_type_bound(const):
continue
+ elif self.reflected and isinstance(const, CheckConstraint):
+ # TODO: we are skipping reflected CheckConstraint because
+ # we have no way to determine _is_type_bound() for these.
+ pass
elif const.name:
self.named_constraints[const.name] = const
else:
Column('x', String(10)),
Column('y', Integer)
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _uq_fixture(self, table_args=(), table_kwargs={}):
m = MetaData()
Column('y', Integer),
UniqueConstraint('y', name='uq1')
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _ix_fixture(self, table_args=(), table_kwargs={}):
m = MetaData()
Column('y', Integer),
Index('ix1', 'y')
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _literal_ck_fixture(
self, copy_from=None, table_args=(), table_kwargs={}):
Column('email', String()),
CheckConstraint("email LIKE '%@%'")
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _sql_ck_fixture(self, table_args=(), table_kwargs={}):
m = MetaData()
Column('email', String())
)
t.append_constraint(CheckConstraint(t.c.email.like('%@%')))
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _fk_fixture(self, table_args=(), table_kwargs={}):
m = MetaData()
Column('email', String()),
Column('user_id', Integer, ForeignKey('user.id'))
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _multi_fk_fixture(self, table_args=(), table_kwargs={}, schema=None):
m = MetaData()
['%suser.id' % schemaarg, '%suser.id_version' % schemaarg]),
schema=schema
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _named_fk_fixture(self, table_args=(), table_kwargs={}):
m = MetaData()
Column('email', String()),
Column('user_id', Integer, ForeignKey('user.id', name='ufk'))
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _selfref_fk_fixture(self, table_args=(), table_kwargs={}):
m = MetaData()
Column('parent_id', Integer, ForeignKey('tname.id')),
Column('data', String)
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _boolean_fixture(self, table_args=(), table_kwargs={}):
m = MetaData()
Column('id', Integer, primary_key=True),
Column('flag', Boolean)
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _boolean_no_ck_fixture(self, table_args=(), table_kwargs={}):
m = MetaData()
Column('id', Integer, primary_key=True),
Column('flag', Boolean(create_constraint=False))
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _enum_fixture(self, table_args=(), table_kwargs={}):
m = MetaData()
Column('id', Integer, primary_key=True),
Column('thing', Enum('a', 'b', 'c'))
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _server_default_fixture(self, table_args=(), table_kwargs={}):
m = MetaData()
Column('id', Integer, primary_key=True),
Column('thing', String(), server_default='')
)
- return ApplyBatchImpl(t, table_args, table_kwargs)
+ return ApplyBatchImpl(t, table_args, table_kwargs, False)
def _assert_impl(self, impl, colnames=None,
ddl_contains=None, ddl_not_contains=None,