import sys
from sqlalchemy import MetaData, Column, Table, Integer, String, Text, \
- Numeric, CHAR, ForeignKey, INTEGER, \
+ Numeric, CHAR, ForeignKey, INTEGER, Index, UniqueConstraint, \
TypeDecorator, CheckConstraint, text, PrimaryKeyConstraint
from sqlalchemy.types import NULLTYPE
from sqlalchemy.engine.reflection import Inspector
Column('id', Integer, primary_key=True),
Column('name', String(50)),
Column('a1', Text),
- Column("pw", String(50))
+ Column("pw", String(50)),
+ Index('pw_idx', 'pw')
)
Table('address', m,
Column('id', Integer, primary_key=True),
Column('email_address', String(100), nullable=False),
Column('street', String(50)),
+ UniqueConstraint('email_address', name="uq_email")
)
Table('order', m,
eq_(diffs[2][2], "address")
eq_(diffs[2][3], metadata.tables['address'].c.street)
- eq_(diffs[3][0], "add_column")
- eq_(diffs[3][1], None)
- eq_(diffs[3][2], "order")
- eq_(diffs[3][3], metadata.tables['order'].c.user_id)
+ eq_(diffs[3][0], "add_constraint")
+ eq_(diffs[3][1].name, "uq_email")
- eq_(diffs[4][0][0], "modify_type")
- eq_(diffs[4][0][1], None)
- eq_(diffs[4][0][2], "order")
- eq_(diffs[4][0][3], "amount")
- eq_(repr(diffs[4][0][5]), "NUMERIC(precision=8, scale=2)")
- eq_(repr(diffs[4][0][6]), "Numeric(precision=10, scale=2)")
+ eq_(diffs[4][0], "add_column")
+ eq_(diffs[4][1], None)
+ eq_(diffs[4][2], "order")
+ eq_(diffs[4][3], metadata.tables['order'].c.user_id)
- eq_(diffs[5][0], 'remove_column')
- eq_(diffs[5][3].name, 'pw')
+ eq_(diffs[5][0][0], "modify_type")
+ eq_(diffs[5][0][1], None)
+ eq_(diffs[5][0][2], "order")
+ eq_(diffs[5][0][3], "amount")
+ eq_(repr(diffs[5][0][5]), "NUMERIC(precision=8, scale=2)")
+ eq_(repr(diffs[5][0][6]), "Numeric(precision=10, scale=2)")
eq_(diffs[6][0][0], "modify_default")
eq_(diffs[6][0][1], None)
eq_(diffs[7][0][5], True)
eq_(diffs[7][0][6], False)
+ eq_(diffs[8][0], 'remove_index')
+ eq_(diffs[8][1].name, 'pw_idx')
+
+ eq_(diffs[9][0], 'remove_column')
+ eq_(diffs[9][3].name, 'pw')
+
def test_render_nothing(self):
context = MigrationContext.configure(
connection=self.bind.connect(),
op.drop_table('extra')
op.add_column('address', sa.Column('street', sa.String(length=50), \
nullable=True))
+ op.create_unique_constraint('uq_email', 'address', ['email_address'])
op.add_column('order', sa.Column('user_id', sa.Integer(), nullable=True))
op.alter_column('order', 'amount',
existing_type=sa.NUMERIC(precision=8, scale=2),
type_=sa.Numeric(precision=10, scale=2),
nullable=True,
existing_server_default=sa.text('0'))
- op.drop_column('user', 'pw')
op.alter_column('user', 'a1',
existing_type=sa.TEXT(),
server_default='x',
op.alter_column('user', 'name',
existing_type=sa.VARCHAR(length=50),
nullable=False)
+ op.drop_index('pw_idx', table_name='user')
+ op.drop_column('user', 'pw')
### end Alembic commands ###""")
eq_(re.sub(r"u'", "'", template_args['downgrades']),
"""### commands auto generated by Alembic - please adjust! ###
+ op.add_column('user', sa.Column('pw', sa.VARCHAR(length=50), \
+nullable=True))
+ op.create_index('pw_idx', 'user', ['pw'], unique=False)
op.alter_column('user', 'name',
existing_type=sa.VARCHAR(length=50),
nullable=True)
existing_type=sa.TEXT(),
server_default=None,
existing_nullable=True)
- op.add_column('user', sa.Column('pw', sa.VARCHAR(length=50), \
-nullable=True))
op.alter_column('order', 'amount',
existing_type=sa.Numeric(precision=10, scale=2),
type_=sa.NUMERIC(precision=8, scale=2),
nullable=False,
existing_server_default=sa.text('0'))
op.drop_column('order', 'user_id')
+ op.drop_constraint('uq_email', 'address')
op.drop_column('address', 'street')
op.create_table('extra',
sa.Column('x', sa.CHAR(), nullable=True),
op.drop_table('extra')
with op.batch_alter_table('address', schema=None) as batch_op:
batch_op.add_column(sa.Column('street', sa.String(length=50), nullable=True))
+ batch_op.create_unique_constraint('uq_email', ['email_address'])
with op.batch_alter_table('order', schema=None) as batch_op:
batch_op.add_column(sa.Column('user_id', sa.Integer(), nullable=True))
existing_server_default=sa.text('0'))
with op.batch_alter_table('user', schema=None) as batch_op:
- batch_op.drop_column('pw')
batch_op.alter_column('a1',
existing_type=sa.TEXT(),
server_default='x',
batch_op.alter_column('name',
existing_type=sa.VARCHAR(length=50),
nullable=False)
+ batch_op.drop_index('pw_idx', table_name='user')
+ batch_op.drop_column('pw')
### end Alembic commands ###""")
eq_(re.sub(r"u'", "'", template_args['downgrades']),
"""### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('user', schema=None) as batch_op:
+ batch_op.add_column(sa.Column('pw', sa.VARCHAR(length=50), nullable=True))
+ batch_op.create_index('pw_idx', 'user', ['pw'], unique=False)
batch_op.alter_column('name',
existing_type=sa.VARCHAR(length=50),
nullable=True)
existing_type=sa.TEXT(),
server_default=None,
existing_nullable=True)
- batch_op.add_column(sa.Column('pw', sa.VARCHAR(length=50), nullable=True))
with op.batch_alter_table('order', schema=None) as batch_op:
batch_op.alter_column('amount',
batch_op.drop_column('user_id')
with op.batch_alter_table('address', schema=None) as batch_op:
+ batch_op.drop_constraint('uq_email')
batch_op.drop_column('street')
op.create_table('extra',
eq_(diffs[2][2], "address")
eq_(diffs[2][3], metadata.tables['%s.address' % self.schema].c.street)
- eq_(diffs[3][0], "add_column")
- eq_(diffs[3][1], self.schema)
- eq_(diffs[3][2], "order")
- eq_(diffs[3][3], metadata.tables['%s.order' % self.schema].c.user_id)
+ eq_(diffs[3][0], "add_constraint")
+ eq_(diffs[3][1].name, "uq_email")
- eq_(diffs[4][0][0], "modify_type")
- eq_(diffs[4][0][1], self.schema)
- eq_(diffs[4][0][2], "order")
- eq_(diffs[4][0][3], "amount")
- eq_(repr(diffs[4][0][5]), "NUMERIC(precision=8, scale=2)")
- eq_(repr(diffs[4][0][6]), "Numeric(precision=10, scale=2)")
+ eq_(diffs[4][0], "add_column")
+ eq_(diffs[4][1], self.schema)
+ eq_(diffs[4][2], "order")
+ eq_(diffs[4][3], metadata.tables['%s.order' % self.schema].c.user_id)
- eq_(diffs[5][0], 'remove_column')
- eq_(diffs[5][3].name, 'pw')
+ eq_(diffs[5][0][0], "modify_type")
+ eq_(diffs[5][0][1], self.schema)
+ eq_(diffs[5][0][2], "order")
+ eq_(diffs[5][0][3], "amount")
+ eq_(repr(diffs[5][0][5]), "NUMERIC(precision=8, scale=2)")
+ eq_(repr(diffs[5][0][6]), "Numeric(precision=10, scale=2)")
eq_(diffs[6][0][0], "modify_default")
eq_(diffs[6][0][1], self.schema)
eq_(diffs[7][0][5], True)
eq_(diffs[7][0][6], False)
+ eq_(diffs[8][0], 'remove_index')
+ eq_(diffs[8][1].name, 'pw_idx')
+
+ eq_(diffs[9][0], 'remove_column')
+ eq_(diffs[9][3].name, 'pw')
+
def test_render_nothing(self):
context = MigrationContext.configure(
connection=self.bind.connect(),
op.drop_table('extra', schema='%(schema)s')
op.add_column('address', sa.Column('street', sa.String(length=50), \
nullable=True), schema='%(schema)s')
+ op.create_unique_constraint('uq_email', 'address', ['email_address'], \
+schema='test_schema')
op.add_column('order', sa.Column('user_id', sa.Integer(), nullable=True), \
schema='%(schema)s')
op.alter_column('order', 'amount',
nullable=True,
existing_server_default=sa.text('0'),
schema='%(schema)s')
- op.drop_column('user', 'pw', schema='%(schema)s')
op.alter_column('user', 'a1',
existing_type=sa.TEXT(),
server_default='x',
existing_type=sa.VARCHAR(length=50),
nullable=False,
schema='%(schema)s')
+ op.drop_index('pw_idx', table_name='user', schema='test_schema')
+ op.drop_column('user', 'pw', schema='%(schema)s')
### end Alembic commands ###""" % {"schema": self.schema})
eq_(re.sub(r"u'", "'", template_args['downgrades']),
"""### commands auto generated by Alembic - please adjust! ###
+ op.add_column('user', sa.Column('pw', sa.VARCHAR(length=50), \
+autoincrement=False, nullable=True), schema='%(schema)s')
+ op.create_index('pw_idx', 'user', ['pw'], unique=False, schema='%(schema)s')
op.alter_column('user', 'name',
existing_type=sa.VARCHAR(length=50),
nullable=True,
server_default=None,
existing_nullable=True,
schema='%(schema)s')
- op.add_column('user', sa.Column('pw', sa.VARCHAR(length=50), \
-autoincrement=False, nullable=True), schema='%(schema)s')
op.alter_column('order', 'amount',
existing_type=sa.Numeric(precision=10, scale=2),
type_=sa.NUMERIC(precision=8, scale=2),
existing_server_default=sa.text('0'),
schema='%(schema)s')
op.drop_column('order', 'user_id', schema='%(schema)s')
+ op.drop_constraint('uq_email', 'address', schema='test_schema')
op.drop_column('address', 'street', schema='%(schema)s')
op.create_table('extra',
sa.Column('x', sa.CHAR(length=1), autoincrement=False, nullable=True),
eq_(diffs[2][2], "address")
eq_(diffs[2][3], metadata.tables['address'].c.street)
- eq_(diffs[3][0], "add_column")
- eq_(diffs[3][1], None)
- eq_(diffs[3][2], "order")
- eq_(diffs[3][3], metadata.tables['order'].c.user_id)
+ eq_(diffs[3][0], "add_constraint")
+ eq_(diffs[3][1].name, "uq_email")
- eq_(diffs[4][0][0], "modify_type")
- eq_(diffs[4][0][1], None)
- eq_(diffs[4][0][2], "order")
- eq_(diffs[4][0][3], "amount")
- eq_(repr(diffs[4][0][5]), "NUMERIC(precision=8, scale=2)")
- eq_(repr(diffs[4][0][6]), "Numeric(precision=10, scale=2)")
+ eq_(diffs[4][0], "add_column")
+ eq_(diffs[4][1], None)
+ eq_(diffs[4][2], "order")
+ eq_(diffs[4][3], metadata.tables['order'].c.user_id)
- eq_(diffs[5][0], 'remove_column')
- eq_(diffs[5][3].name, 'pw')
+ eq_(diffs[5][0][0], "modify_type")
+ eq_(diffs[5][0][1], None)
+ eq_(diffs[5][0][2], "order")
+ eq_(diffs[5][0][3], "amount")
+ eq_(repr(diffs[5][0][5]), "NUMERIC(precision=8, scale=2)")
+ eq_(repr(diffs[5][0][6]), "Numeric(precision=10, scale=2)")
eq_(diffs[6][0][0], "modify_default")
eq_(diffs[6][0][1], None)
eq_(diffs[7][0][5], True)
eq_(diffs[7][0][6], False)
+ eq_(diffs[8][0], 'remove_index')
+ eq_(diffs[8][1].name, 'pw_idx')
+
+ eq_(diffs[9][0], 'remove_column')
+ eq_(diffs[9][3].name, 'pw')
+
def test_compare_metadata_include_object(self):
metadata = self.m2
eq_(diffs[2][2], "address")
eq_(diffs[2][3], metadata.tables['test_schema.address'].c.street)
- eq_(diffs[3][0], "add_column")
- eq_(diffs[3][1], "test_schema")
- eq_(diffs[3][2], "order")
- eq_(diffs[3][3], metadata.tables['test_schema.order'].c.user_id)
+ eq_(diffs[3][0], "add_constraint")
+ eq_(diffs[3][1].name, "uq_email")
+
+ eq_(diffs[4][0], "add_column")
+ eq_(diffs[4][1], "test_schema")
+ eq_(diffs[4][2], "order")
+ eq_(diffs[4][3], metadata.tables['test_schema.order'].c.user_id)
- eq_(diffs[4][0][0], 'modify_nullable')
- eq_(diffs[4][0][5], False)
- eq_(diffs[4][0][6], True)
+ eq_(diffs[5][0][0], 'modify_nullable')
+ eq_(diffs[5][0][5], False)
+ eq_(diffs[5][0][6], True)