def upgrade(migrate_engine): meta = MetaData() meta.bind = migrate_engine (define_images_table,) = from_migration_import( '001_add_images_table', ['define_images_table']) (define_image_properties_table,) = from_migration_import( '002_add_image_properties_table', ['define_image_properties_table']) conn = migrate_engine.connect() images = define_images_table(meta) image_properties = define_image_properties_table(meta) # Steps to take, in this order: # 1) Move the existing type column from Image into # ImageProperty for all image records that have a non-NULL # type column # 2) Drop the type column in images # 3) Add the new columns to images # The below wackiness correlates to the following ANSI SQL: # SELECT images.* FROM images # LEFT JOIN image_properties # ON images.id = image_properties.image_id # AND image_properties.key = 'type' # WHERE image_properties.image_id IS NULL # AND images.type IS NOT NULL # # which returns all the images that have a type set # but that DO NOT yet have an image_property record # with key of type. from_stmt = [ images.outerjoin(image_properties, and_(images.c.id == image_properties.c.image_id, image_properties.c.key == 'type')) ] and_stmt = and_(image_properties.c.image_id == None, images.c.type != None) sel = select([images], from_obj=from_stmt).where(and_stmt) image_records = conn.execute(sel).fetchall() property_insert = image_properties.insert() for record in image_records: conn.execute(property_insert, image_id=record.id, key='type', created_at=record.created_at, deleted=False, value=record.type) conn.close() disk_format = Column('disk_format', String(20)) disk_format.create(images) container_format = Column('container_format', String(20)) container_format.create(images) images.columns['type'].drop()
def upgrade(migrate_engine): meta = MetaData() meta.bind = migrate_engine (define_images_table, ) = from_migration_import('001_add_images_table', ['define_images_table']) (define_image_properties_table, ) = from_migration_import( '002_add_image_properties_table', ['define_image_properties_table']) conn = migrate_engine.connect() images = define_images_table(meta) image_properties = define_image_properties_table(meta) # Steps to take, in this order: # 1) Move the existing type column from Image into # ImageProperty for all image records that have a non-NULL # type column # 2) Drop the type column in images # 3) Add the new columns to images # The below wackiness correlates to the following ANSI SQL: # SELECT images.* FROM images # LEFT JOIN image_properties # ON images.id = image_properties.image_id # AND image_properties.key = 'type' # WHERE image_properties.image_id IS NULL # AND images.type IS NOT NULL # # which returns all the images that have a type set # but that DO NOT yet have an image_property record # with key of type. from_stmt = [ images.outerjoin( image_properties, and_(images.c.id == image_properties.c.image_id, image_properties.c.key == 'type')) ] and_stmt = and_(image_properties.c.image_id == None, images.c.type != None) sel = select([images], from_obj=from_stmt).where(and_stmt) image_records = conn.execute(sel).fetchall() property_insert = image_properties.insert() for record in image_records: conn.execute(property_insert, image_id=record.id, key='type', created_at=record.created_at, deleted=False, value=record.type) conn.close() disk_format = Column('disk_format', String(20)) disk_format.create(images) container_format = Column('container_format', String(20)) container_format.create(images) images.columns['type'].drop()
def upgrade(migrate_engine): meta = MetaData() meta.bind = migrate_engine (get_image_properties_table,) = from_migration_import( '004_add_checksum', ['get_image_properties_table']) image_properties = get_image_properties_table(meta) if migrate_engine.name == "ibm_db_sa": # NOTE(dperaza) ibm db2 does not allow ALTER INDEX so we will drop # the index, rename the column, then re-create the index sql_commands = [ """ALTER TABLE image_properties DROP UNIQUE ix_image_properties_image_id_key;""", """ALTER TABLE image_properties RENAME COLUMN \"key\" to name;""", """ALTER TABLE image_properties ADD CONSTRAINT ix_image_properties_image_id_name UNIQUE(image_id, name);""", ] for command in sql_commands: meta.bind.execute(command) else: index = Index('ix_image_properties_image_id_key', image_properties.c.image_id, image_properties.c.key) index.rename('ix_image_properties_image_id_name') image_properties = get_image_properties_table(meta) image_properties.columns['key'].alter(name="name")
def upgrade(migrate_engine): meta = MetaData() meta.bind = migrate_engine (get_image_properties_table, ) = from_migration_import( '004_add_checksum', ['get_image_properties_table']) image_properties = get_image_properties_table(meta) if migrate_engine.name == "ibm_db_sa": # NOTE(dperaza) ibm db2 does not allow ALTER INDEX so we will drop # the index, rename the column, then re-create the index sql_commands = [ """ALTER TABLE image_properties DROP UNIQUE ix_image_properties_image_id_key;""", """ALTER TABLE image_properties RENAME COLUMN \"key\" to name;""", """ALTER TABLE image_properties ADD CONSTRAINT ix_image_properties_image_id_name UNIQUE(image_id, name);""", ] for command in sql_commands: meta.bind.execute(command) else: index = Index('ix_image_properties_image_id_key', image_properties.c.image_id, image_properties.c.key) index.rename('ix_image_properties_image_id_name') image_properties = get_image_properties_table(meta) image_properties.columns['key'].alter(name="name")
def get_image_properties_table(meta): """ No changes to the image properties table from 002... """ (define_image_properties_table,) = from_migration_import( '002_add_image_properties_table', ['define_image_properties_table']) image_properties = define_image_properties_table(meta) return image_properties
def get_image_members_table(meta): """ No changes to the image members table from 008... """ (get_image_members_table,) = from_migration_import( '008_add_image_members_table', ['get_image_members_table']) images = get_image_members_table(meta) return images
def get_images_table(meta): """ No changes to the image properties table from 002... """ (get_images_table,) = from_migration_import( '004_add_checksum', ['get_images_table']) images = get_images_table(meta) return images
def get_image_properties_table(meta): """ No changes to the image properties table from 007... """ (get_image_properties_table,) = from_migration_import( '007_add_owner', ['get_image_properties_table']) image_properties = get_image_properties_table(meta) return image_properties
def get_image_properties_table(meta): """ No changes to the image properties table from 008... """ (define_image_properties_table, ) = from_migration_import( '008_add_image_members_table', ['define_image_properties_table']) image_properties = define_image_properties_table(meta) return image_properties
def get_images_table(meta): """ No changes to the image properties table from 002... """ (get_images_table, ) = from_migration_import('004_add_checksum', ['get_images_table']) images = get_images_table(meta) return images
def get_image_properties_table(meta): """ No changes to the image properties table from 006... """ (get_image_properties_table, ) = from_migration_import( '006_key_to_name', ['get_image_properties_table']) image_properties = get_image_properties_table(meta) return image_properties
def get_image_properties_table(meta): """ No changes to the image properties table from 006... """ (get_image_properties_table,) = from_migration_import( '006_key_to_name', ['get_image_properties_table']) image_properties = get_image_properties_table(meta) return image_properties
def define_image_properties_table(meta): (define_images_table, ) = from_migration_import('001_add_images_table', ['define_images_table']) images = define_images_table(meta) # noqa # NOTE(dperaza) DB2: specify the UniqueConstraint option when creating the # table will cause an index being created to specify the index # name and skip the step of creating another index with the same columns. # The index name is needed so it can be dropped and re-created later on. constr_kwargs = {} if meta.bind.name == 'ibm_db_sa': constr_kwargs['name'] = 'ix_image_properties_image_id_key' image_properties = Table('image_properties', meta, Column('id', Integer(), primary_key=True, nullable=False), Column('image_id', Integer(), ForeignKey('images.id'), nullable=False, index=True), Column('key', String(255), nullable=False), Column('value', Text()), Column('created_at', DateTime(), nullable=False), Column('updated_at', DateTime()), Column('deleted_at', DateTime()), Column('deleted', Boolean(), nullable=False, default=False, index=True), UniqueConstraint('image_id', 'key', **constr_kwargs), mysql_engine='InnoDB', mysql_charset='utf8', extend_existing=True) if meta.bind.name != 'ibm_db_sa': Index('ix_image_properties_image_id_key', image_properties.c.image_id, image_properties.c.key) return image_properties
def upgrade(migrate_engine): meta = MetaData() meta.bind = migrate_engine # No changes to SQLite stores are necessary, since # there is no BIG INTEGER type in SQLite. Unfortunately, # running the Python 005_size_big_integer.py migration script # on a SQLite datastore results in an error in the sa-migrate # code that does the workarounds for SQLite not having # ALTER TABLE MODIFY COLUMN ability dialect = migrate_engine.url.get_dialect().name if not dialect.startswith('sqlite'): (get_images_table,) = from_migration_import( '003_add_disk_format', ['get_images_table']) images = get_images_table(meta) images.columns['size'].alter(type=BigInteger())
def get_image_properties_table(meta): """ Returns the Table object for the image_properties table that corresponds to the image_properties table definition of this version. """ (get_images_table,) = from_migration_import( '004_add_checksum', ['get_images_table']) images = get_images_table(meta) # noqa image_properties = Table('image_properties', meta, Column('id', Integer(), primary_key=True, nullable=False), Column('image_id', Integer(), ForeignKey('images.id'), nullable=False, index=True), Column('name', String(255), nullable=False), Column('value', Text()), Column('created_at', DateTime(), nullable=False), Column('updated_at', DateTime()), Column('deleted_at', DateTime()), Column('deleted', Boolean(), nullable=False, default=False, index=True), UniqueConstraint('image_id', 'name'), mysql_engine='InnoDB', extend_existing=True) return image_properties
def get_image_properties_table(meta): """ Returns the Table object for the image_properties table that corresponds to the image_properties table definition of this version. """ (get_images_table, ) = from_migration_import('004_add_checksum', ['get_images_table']) images = get_images_table(meta) # noqa image_properties = Table('image_properties', meta, Column('id', Integer(), primary_key=True, nullable=False), Column('image_id', Integer(), ForeignKey('images.id'), nullable=False, index=True), Column('name', String(255), nullable=False), Column('value', Text()), Column('created_at', DateTime(), nullable=False), Column('updated_at', DateTime()), Column('deleted_at', DateTime()), Column('deleted', Boolean(), nullable=False, default=False, index=True), UniqueConstraint('image_id', 'name'), mysql_engine='InnoDB', extend_existing=True) return image_properties