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], 'add_fk')
- eq_(diffs[5][1].column.name, 'id')
- eq_(diffs[5][1].parent.table.name, 'order')
- eq_(diffs[5][2].referred_table, 'user')
- eq_(diffs[5][2].constrained_columns, ('user_id',))
+ 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[6][0][2], "user")
- eq_(diffs[6][0][3], "a1")
- eq_(diffs[6][0][6].arg, "x")
- eq_(diffs[6][0], 'remove_column')
- eq_(diffs[6][3].name, 'pw')
++ eq_(diffs[6][0], 'add_fk')
++ eq_(diffs[6][1].column.name, 'id')
++ eq_(diffs[6][1].parent.table.name, 'order')
++ eq_(diffs[6][2].referred_table, 'user')
++ eq_(diffs[6][2].constrained_columns, ('user_id',))
- eq_(diffs[7][0][0], 'modify_nullable')
- eq_(diffs[7][0][5], True)
- eq_(diffs[7][0][6], False)
+ eq_(diffs[7][0][0], "modify_default")
+ eq_(diffs[7][0][1], None)
+ eq_(diffs[7][0][2], "user")
+ eq_(diffs[7][0][3], "a1")
+ eq_(diffs[7][0][6].arg, "x")
- eq_(diffs[8][0], 'remove_index')
- eq_(diffs[8][1].name, 'pw_idx')
+ eq_(diffs[8][0][0], 'modify_nullable')
+ eq_(diffs[8][0][5], True)
+ eq_(diffs[8][0][6], False)
- eq_(diffs[9][0], 'remove_column')
- eq_(diffs[9][3].name, 'pw')
++ eq_(diffs[9][0], 'remove_index')
++ eq_(diffs[9][1].name, 'pw_idx')
++
++ eq_(diffs[10][0], 'remove_column')
++ eq_(diffs[10][3].name, 'pw')
+
def test_render_nothing(self):
context = MigrationContext.configure(
connection=self.bind.connect(),
type_=sa.Numeric(precision=10, scale=2),
nullable=True,
existing_server_default=sa.text('0'))
- op.drop_column('user', 'pw')
+ op.create_foreign_key(None, order, user, ['user_id'], ['id'], schema=None)
op.alter_column('user', 'a1',
existing_type=sa.TEXT(),
server_default='x',
existing_type=sa.TEXT(),
server_default=None,
existing_nullable=True)
- op.add_column('user', sa.Column('pw', sa.VARCHAR(length=50), \
-nullable=True))
- op.drop_constraint(None, order, type_=foreignkey)
++ op.drop_constraint(None, order, type_='foreignkey')
op.alter_column('order', 'amount',
existing_type=sa.Numeric(precision=10, scale=2),
type_=sa.NUMERIC(precision=8, scale=2),
op.drop_table('item')
### end Alembic commands ###""")
+ def test_render_diffs_batch(self):
+ """test a full render in batch mode including indentation"""
+
+ template_args = {}
+ self.context.opts['render_as_batch'] = True
+ autogenerate._produce_migration_diffs(
+ self.context, template_args, set())
+
+ eq_(re.sub(r"u'", "'", template_args['upgrades']),
+ """### commands auto generated by Alembic - please adjust! ###
+ op.create_table('item',
+ sa.Column('id', sa.Integer(), nullable=False),
+ sa.Column('description', sa.String(length=100), nullable=True),
+ sa.Column('order_id', sa.Integer(), nullable=True),
+ sa.CheckConstraint('len(description) > 5'),
+ sa.ForeignKeyConstraint(['order_id'], ['order.order_id'], ),
+ sa.PrimaryKeyConstraint('id')
+ )
+ 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))
+ batch_op.alter_column('amount',
+ existing_type=sa.NUMERIC(precision=8, scale=2),
+ type_=sa.Numeric(precision=10, scale=2),
+ nullable=True,
+ existing_server_default=sa.text('0'))
++ batch_op.create_foreign_key(None, order, user, ['user_id'], ['id'], schema=None)
+
+ with op.batch_alter_table('user', schema=None) as batch_op:
+ batch_op.alter_column('a1',
+ existing_type=sa.TEXT(),
+ server_default='x',
+ existing_nullable=True)
+ batch_op.alter_column('name',
+ existing_type=sa.VARCHAR(length=50),
+ nullable=False)
+ batch_op.drop_index('pw_idx')
+ 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', ['pw'], unique=False)
+ batch_op.alter_column('name',
+ existing_type=sa.VARCHAR(length=50),
+ nullable=True)
+ batch_op.alter_column('a1',
+ existing_type=sa.TEXT(),
+ server_default=None,
+ existing_nullable=True)
+
+ with op.batch_alter_table('order', schema=None) as batch_op:
++ batch_op.drop_constraint(None, order, type_='foreignkey')
+ batch_op.alter_column('amount',
+ existing_type=sa.Numeric(precision=10, scale=2),
+ type_=sa.NUMERIC(precision=8, scale=2),
+ nullable=False,
+ existing_server_default=sa.text('0'))
+ 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',
+ sa.Column('x', sa.CHAR(), nullable=True),
+ sa.Column('uid', sa.INTEGER(), nullable=True),
+ sa.ForeignKeyConstraint(['uid'], ['user.id'], )
+ )
+ op.drop_table('item')
+ ### end Alembic commands ###""")
+
def test_include_symbol(self):
context = MigrationContext.configure(
connection=self.bind.connect(),
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[6][0][2], "user")
-- eq_(diffs[6][0][3], "a1")
-- eq_(diffs[6][0][6].arg, "x")
++ eq_(diffs[6][0], 'add_fk')
++ eq_(diffs[6][1].column.name, 'id')
++ eq_(diffs[6][1].parent.table.name, 'order')
++ eq_(diffs[6][1].parent.table.schema, config.test_schema)
++ eq_(diffs[6][2].referred_table, 'user')
++ eq_(diffs[6][2].constrained_columns, ('user_id',))
+
- eq_(diffs[7][0][0], 'modify_nullable')
- eq_(diffs[7][0][5], True)
- eq_(diffs[7][0][6], False)
++ eq_(diffs[7][0][0], "modify_default")
++ eq_(diffs[7][0][1], self.schema)
++ eq_(diffs[7][0][2], "user")
++ eq_(diffs[7][0][3], "a1")
++ eq_(diffs[7][0][6].arg, "x")
+
- eq_(diffs[7][0][0], 'modify_nullable')
- eq_(diffs[7][0][5], True)
- eq_(diffs[7][0][6], False)
++ eq_(diffs[8][0][0], 'modify_nullable')
++ eq_(diffs[8][0][5], True)
++ eq_(diffs[8][0][6], False)
+
- eq_(diffs[8][0], 'remove_index')
- eq_(diffs[8][1].name, 'pw_idx')
++ eq_(diffs[9][0], 'remove_index')
++ eq_(diffs[9][1].name, 'pw_idx')
+
- eq_(diffs[9][0], 'remove_column')
- eq_(diffs[9][3].name, 'pw')
++ eq_(diffs[10][0], 'remove_column')
++ eq_(diffs[10][3].name, 'pw')
def test_render_nothing(self):
context = MigrationContext.configure(
nullable=True,
existing_server_default=sa.text('0'),
schema='%(schema)s')
- op.drop_column('user', 'pw', schema='%(schema)s')
++ op.create_foreign_key(None, order, user, ['user_id'], ['id'], \
++schema='%(schema)s')
op.alter_column('user', 'a1',
existing_type=sa.TEXT(),
server_default='x',
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.drop_constraint(None, order, type_='foreignkey')
op.alter_column('order', 'amount',
existing_type=sa.Numeric(precision=10, scale=2),
type_=sa.NUMERIC(precision=8, scale=2),
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], 'add_fk')
- eq_(diffs[5][1].column.name, 'id')
- eq_(diffs[5][1].parent.table.name, 'order')
- eq_(diffs[5][2].referred_table, 'user')
- eq_(diffs[5][2].constrained_columns, ('user_id',))
+ 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[6][0][2], "user")
- eq_(diffs[6][0][3], "a1")
- eq_(diffs[6][0][6].arg, "x")
- eq_(diffs[6][0], 'remove_column')
- eq_(diffs[6][3].name, 'pw')
++ eq_(diffs[6][0], 'add_fk')
++ eq_(diffs[6][1].column.name, 'id')
++ eq_(diffs[6][1].parent.table.name, 'order')
++ eq_(diffs[6][2].referred_table, 'user')
++ eq_(diffs[6][2].constrained_columns, ('user_id',))
+
+ eq_(diffs[7][0][0], "modify_default")
+ eq_(diffs[7][0][1], None)
+ eq_(diffs[7][0][2], "user")
+ eq_(diffs[7][0][3], "a1")
+ eq_(diffs[7][0][6].arg, "x")
- eq_(diffs[7][0][0], 'modify_nullable')
- eq_(diffs[7][0][5], True)
- eq_(diffs[7][0][6], False)
+ eq_(diffs[8][0][0], 'modify_nullable')
+ eq_(diffs[8][0][5], True)
+ eq_(diffs[8][0][6], False)
- eq_(diffs[8][0], 'remove_index')
- eq_(diffs[8][1].name, 'pw_idx')
++ eq_(diffs[9][0], 'remove_index')
++ eq_(diffs[9][1].name, 'pw_idx')
+
- eq_(diffs[9][0], 'remove_column')
- eq_(diffs[9][3].name, 'pw')
++ eq_(diffs[10][0], 'remove_column')
++ eq_(diffs[10][3].name, 'pw')
+
def test_compare_metadata_include_object(self):
metadata = self.m2