def ensure_indexed(migrate_engine, table_name, index_name, columns): if utils.index_exists_on_columns(migrate_engine, table_name, columns): LOG.info( _LI('Skipped adding %s because an equivalent index' ' already exists.'), index_name) else: utils.add_index(migrate_engine, table_name, index_name, columns)
def upgrade(migrate_engine): """Add backup_metadata table.""" meta = MetaData() meta.bind = migrate_engine Table('backups', meta, autoload=True) backup_metadata = Table( 'backup_metadata', meta, Column('created_at', DateTime(timezone=False)), Column('updated_at', DateTime(timezone=False)), Column('deleted_at', DateTime(timezone=False)), Column('deleted', Boolean(), default=False), Column('id', Integer, primary_key=True, nullable=False), Column('backup_id', String(36), ForeignKey('backups.id'), nullable=False), Column('key', String(255)), Column('value', String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) backup_metadata.create() if not utils.index_exists_on_columns(migrate_engine, 'backup_metadata', ['backup_id']): utils.add_index(migrate_engine, 'backup_metadata', 'backup_metadata_backup_id_idx', ['backup_id'])
def upgrade(migrate_engine): meta = MetaData() meta.bind = migrate_engine index_name = 'reservations_deleted_uuid_idx' columns = ['deleted', 'uuid'] if utils.index_exists_on_columns(migrate_engine, 'reservations', columns): return utils.add_index(migrate_engine, 'reservations', index_name, columns)
def upgrade(migrate_engine): meta = MetaData() meta.bind = migrate_engine index_name = 'quota_usage_project_resource_idx' columns = ['project_id', 'resource'] if utils.index_exists_on_columns(migrate_engine, 'quota_usages', columns): LOG.info( 'Skipped adding %s because an equivalent index already exists.', index_name) else: utils.add_index(migrate_engine, 'quota_usages', index_name, columns)
def ensure_index_exists(migrate_engine, table_name, column): index_name = table_name + '_' + column + '_idx' columns = [column] if utils.index_exists_on_columns(migrate_engine, table_name, columns): LOG.info( 'Skipped adding %s because an equivalent index already exists.', index_name ) else: utils.add_index(migrate_engine, table_name, index_name, columns)
def upgrade(migrate_engine): """Add instance_system_metadata indexes missing on PostgreSQL and other DB. """ # This index was already added by migration 216 for MySQL if migrate_engine.name != 'mysql': # Adds index for PostgreSQL and other DB if not utils.index_exists(migrate_engine, SYS_META_TABLE_NAME, INDEX_NAME): utils.add_index(migrate_engine, SYS_META_TABLE_NAME, INDEX_NAME, INDEX_COLUMNS)
def upgrade(migrate_engine): meta = MetaData() meta.bind = migrate_engine index_name = 'quota_usage_project_resource_idx' columns = ['project_id', 'resource'] if utils.index_exists_on_columns(migrate_engine, 'quota_usages', columns): LOG.info( 'Skipped adding %s because an equivalent index already exists.', index_name ) else: utils.add_index(migrate_engine, 'quota_usages', index_name, columns)
def upgrade(migrate_engine): meta = MetaData() meta.bind = migrate_engine if migrate_engine.name == 'sqlite': # SQLite is also missing this one index if not utils.index_exists(migrate_engine, 'fixed_ips', 'address'): utils.add_index(migrate_engine, 'fixed_ips', 'address', ['address']) for src_table, src_column, dst_table, dst_column, name in FKEYS: src_table = Table(src_table, meta, autoload=True) if name in set(fk.name for fk in src_table.foreign_keys): continue src_column = src_table.c[src_column] dst_table = Table(dst_table, meta, autoload=True) dst_column = dst_table.c[dst_column] fkey = ForeignKeyConstraint(columns=[src_column], refcolumns=[dst_column], name=name) fkey.create() # SQLAlchemy versions < 1.0.0 don't reflect unique constraints # for SQLite correctly causing sqlalchemy-migrate to recreate # some tables with missing unique constraints. Re-add some # potentially missing unique constraints as a workaround. for table_name, name, column_names in UNIQUES: table = Table(table_name, meta, autoload=True) if name in set(c.name for c in table.constraints if isinstance(table, schema.UniqueConstraint)): continue uc = UniqueConstraint(*column_names, table=table, name=name) uc.create()
def ensure_index_exists(migrate_engine, table_name, index_name, column_names): if not utils.index_exists(migrate_engine, table_name, index_name): utils.add_index(migrate_engine, table_name, index_name, column_names)
def upgrade(migrate_engine): if not utils.index_exists_on_columns( migrate_engine, 'messages', ['expires_at']): utils.add_index(migrate_engine, 'messages', 'messages_expire_at_idx', ['expires_at'])
def test_add_index(self): self.assertFalse(utils.index_exists(self.engine, 'test_table', 'new_index')) utils.add_index(self.engine, 'test_table', 'new_index', ('a',)) self.assertTrue(utils.index_exists(self.engine, 'test_table', 'new_index'))
def upgrade(migrate_engine): if not utils.index_exists_on_columns(migrate_engine, 'messages', ['expires_at']): utils.add_index(migrate_engine, 'messages', 'messages_expire_at_idx', ['expires_at'])
def upgrade(migrate_engine): meta = MetaData(bind=migrate_engine) resource_providers = Table('resource_providers', meta, autoload=True) name = Column('name', Unicode(200), nullable=True) generation = Column('generation', Integer, default=0) can_host = Column('can_host', Integer, default=0) if not hasattr(resource_providers.c, 'name'): # NOTE(cdent): The resource_providers table is defined as # latin1 to be more efficient. Now we need the name column # to be UTF8. First create the column, then modify it, # otherwise the declarative handling in sqlalchemy gets # confused. resource_providers.create_column(name) if migrate_engine.name == 'mysql': name_col_ddl = DDL("ALTER TABLE resource_providers MODIFY name " "VARCHAR(200) CHARACTER SET utf8") conn = migrate_engine.connect() conn.execute(name_col_ddl) uc = UniqueConstraint('name', table=resource_providers, name='uniq_resource_providers0name') uc.create() # DB2 automatically creates an index for the unique # constraint above, so skip adding the index on DB2. if migrate_engine.name != 'ibm_db_sa': utils.add_index(migrate_engine, 'resource_providers', 'resource_providers_name_idx', ['name']) if not hasattr(resource_providers.c, 'generation'): resource_providers.create_column(generation) if not hasattr(resource_providers.c, 'can_host'): resource_providers.create_column(can_host) resource_provider_aggregates = Table('resource_provider_aggregates', meta, Column('resource_provider_id', Integer, primary_key=True, nullable=False), Column('aggregate_id', Integer, primary_key=True, nullable=False), mysql_engine='InnoDB', mysql_charset='latin1') Index('resource_provider_aggregates_aggregate_id_idx', resource_provider_aggregates.c.aggregate_id) resource_provider_aggregates.create(checkfirst=True) utils.add_index(migrate_engine, 'allocations', 'allocations_resource_provider_class_used_idx', ['resource_provider_id', 'resource_class_id', 'used']) utils.drop_index(migrate_engine, 'allocations', 'allocations_resource_provider_class_id_idx') # Add a unique constraint so that any resource provider can have # only one inventory for any given resource class. inventories = Table('inventories', meta, autoload=True) inventories_uc = UniqueConstraint( 'resource_provider_id', 'resource_class_id', table=inventories, name='uniq_inventories0resource_provider_resource_class') inventories_uc.create() if migrate_engine.name != 'ibm_db_sa': utils.add_index(migrate_engine, 'inventories', 'inventories_resource_provider_resource_class_idx', ['resource_provider_id', 'resource_class_id'])
def upgrade(migrate_engine): meta = MetaData(bind=migrate_engine) resource_providers = Table('resource_providers', meta, autoload=True) name = Column('name', Unicode(200), nullable=True) generation = Column('generation', Integer, default=0) can_host = Column('can_host', Integer, default=0) if not hasattr(resource_providers.c, 'name'): # NOTE(cdent): The resource_providers table is defined as # latin1 to be more efficient. Now we need the name column # to be UTF8. First create the column, then modify it, # otherwise the declarative handling in sqlalchemy gets # confused. resource_providers.create_column(name) if migrate_engine.name == 'mysql': name_col_ddl = DDL( "ALTER TABLE resource_providers MODIFY name " "VARCHAR(200) CHARACTER SET utf8") conn = migrate_engine.connect() conn.execute(name_col_ddl) uc = UniqueConstraint('name', table=resource_providers, name='uniq_resource_providers0name') uc.create() utils.add_index(migrate_engine, 'resource_providers', 'resource_providers_name_idx', ['name']) if not hasattr(resource_providers.c, 'generation'): resource_providers.create_column(generation) if not hasattr(resource_providers.c, 'can_host'): resource_providers.create_column(can_host) resource_provider_aggregates = Table( 'resource_provider_aggregates', meta, Column('resource_provider_id', Integer, primary_key=True, nullable=False), Column('aggregate_id', Integer, primary_key=True, nullable=False), mysql_engine='InnoDB', mysql_charset='latin1' ) Index('resource_provider_aggregates_aggregate_id_idx', resource_provider_aggregates.c.aggregate_id) resource_provider_aggregates.create(checkfirst=True) utils.add_index(migrate_engine, 'allocations', 'allocations_resource_provider_class_used_idx', ['resource_provider_id', 'resource_class_id', 'used']) utils.drop_index(migrate_engine, 'allocations', 'allocations_resource_provider_class_id_idx') # Add a unique constraint so that any resource provider can have # only one inventory for any given resource class. inventories = Table('inventories', meta, autoload=True) inventories_uc = UniqueConstraint( 'resource_provider_id', 'resource_class_id', table=inventories, name='uniq_inventories0resource_provider_resource_class') inventories_uc.create() utils.add_index(migrate_engine, 'inventories', 'inventories_resource_provider_resource_class_idx', ['resource_provider_id', 'resource_class_id'])