Esempio n. 1
0
    def test_add_fk_after_add_column(self):
        exist_meta = sqlalchemy.MetaData()
        sqlalchemy.Table('a', exist_meta,
                         sqlalchemy.Column('id', sqlalchemy.Integer))
        sqlalchemy.Table('b', exist_meta,
                         sqlalchemy.Column('id', sqlalchemy.Integer))

        model_meta = sqlalchemy.MetaData()
        sqlalchemy.Table('a', model_meta,
                         sqlalchemy.Column('id', sqlalchemy.Integer))
        column = sqlalchemy.Column('a_id', sqlalchemy.Integer,
                                   sqlalchemy.ForeignKey('a.id'))
        table = sqlalchemy.Table('b', model_meta,
                                 sqlalchemy.Column('id', sqlalchemy.Integer),
                                 column)
        fkc = sqlalchemy.ForeignKeyConstraint(['a_id'], ['a.id'], table=table)

        addcolumn = sa_migration.AddColumn('b',
                                           column,
                                           desired_phase='migrate')
        addfk = sa_migration.AddForeignKey(fkc)

        scheduler = sa_migration.Scheduler()
        scheduler.add(addfk)
        scheduler.add(addcolumn)

        expand, migrate, contract = scheduler.schedule()
        self.assertEqual([], expand)
        self.assertEqual([addcolumn, addfk], migrate)
        self.assertEqual([], contract)
Esempio n. 2
0
    def test_add_foreign_key(self):
        meta = sqlalchemy.MetaData()
        a = _table('a', meta,
                   sqlalchemy.Column('id', sqlalchemy.Integer),
                   sqlalchemy.UniqueConstraint('id'))
        b = _table('b', meta,
                   sqlalchemy.Column('a_id', sqlalchemy.Integer))
        meta.create_all(self.engine)

        fkc = sqlalchemy.ForeignKeyConstraint([b.c.a_id], [a.c.id],
                                              name='b_a_id_fk')

        op = sa_migration.AddForeignKey(fkc)
        op.execute(self.ddlop)

        table = oslodbutils.get_table(self.engine, 'b')
        fkcs = {c.name: c for c in table.constraints
                          if isinstance(c, sqlalchemy.ForeignKeyConstraint)}
        self.assertIn('b_a_id_fk', fkcs)

        columns = [(fk.parent.name, fk.column.name)
                   for fk in fkcs['b_a_id_fk'].elements]
        self.assertEqual([('a_id', 'id')], columns)