Sqlite migrate_data() utility method

Sqlite db migration scripts are updated to use common
method migrate_data() to migrate data from old table
to new table.

Co-Authored-by: Angus Salkeld <asalkeld@mirantis.com>
Change-Id: I95d84f00cc4acae8ff9af39935e6cc316318ae71
This commit is contained in:
Kanagaraj Manickam 2015-03-09 20:18:59 +05:30
parent b766a40c00
commit b44a651c74
4 changed files with 47 additions and 38 deletions

View File

@ -13,6 +13,8 @@
import sqlalchemy
from heat.db.sqlalchemy import utils as migrate_utils
def upgrade(migrate_engine):
meta = sqlalchemy.MetaData(bind=migrate_engine)
@ -59,16 +61,7 @@ def _downgrade_045_sqlite(migrate_engine, metadata, table):
*(columns + constraints))
new_table.create()
migrate_data = """
INSERT INTO stack__tmp__
SELECT id, created_at, updated_at, name, raw_template_id,
user_creds_id, username, owner_id, status, status_reason,
parameters, timeout, tenant, disable_rollback, action,
deleted_at, stack_user_project_id
FROM stack;"""
migrate_engine.execute(migrate_data)
table.drop()
new_table.rename(table_name)
migrate_utils.migrate_data(migrate_engine,
table,
new_table,
['backup'])

View File

@ -13,6 +13,8 @@
import sqlalchemy
from heat.db.sqlalchemy import utils as migrate_utils
def upgrade(migrate_engine):
meta = sqlalchemy.MetaData(bind=migrate_engine)
@ -47,17 +49,7 @@ def _downgrade_052_sqlite(migrate_engine, metadata, table):
*(columns + constraints))
new_table.create()
migrate_data = """
INSERT INTO %s__tmp__
SELECT id, created_at, updated_at, name, raw_template_id,
user_creds_id, username, owner_id, status, status_reason,
parameters, timeout, tenant, disable_rollback, action,
deleted_at, stack_user_project_id, backup, nested_depth,
tags
FROM stack;""" % table_name
migrate_engine.execute(migrate_data)
table.drop()
new_table.rename(table_name)
migrate_utils.migrate_data(migrate_engine,
table,
new_table,
['convergence'])

View File

@ -114,17 +114,13 @@ def _downgrade_sqlite(migrate_engine):
ignorecols=ignorecols,
ignorecons=ignorecons)
migrate_data = """
INSERT INTO %s
SELECT id, created_at, updated_at, name, raw_template_id,
user_creds_id, username, owner_id, status, status_reason,
parameters, timeout, tenant, disable_rollback, action,
deleted_at, stack_user_project_id, backup, nested_depth,
convergence
FROM stack;""" % new_stack.name
migrate_engine.execute(migrate_data)
stack.drop()
new_stack.rename(table_name)
migrate_utils.migrate_data(migrate_engine,
stack,
new_stack,
['prev_raw_template_id',
'current_traversal',
'current_deps'])
# add the indexes back to new table
_add_indexes(migrate_engine, new_stack)

View File

@ -57,3 +57,31 @@ def clone_table(name, parent, meta, newcols=[], ignorecols=[], swapcols={},
new_table.create()
return new_table
def migrate_data(migrate_engine,
table,
new_table,
skip_columns=None):
table_name = table.name
list_of_rows = list(table.select().order_by(
sqlalchemy.sql.expression.asc(table.c.created_at))
.execute())
colnames = [c.name for c in table.columns]
for row in list_of_rows:
values = dict(zip(colnames,
map(lambda colname: getattr(row, colname),
colnames)))
if skip_columns is not None:
for column in skip_columns:
del values[column]
migrate_engine.execute(new_table.insert(values))
table.drop()
new_table.rename(table_name)