migrate data before adding unique index
This commit is contained in:
parent
4fe8443c35
commit
7e2d6728aa
1 changed files with 39 additions and 29 deletions
68
oml/setup.py
68
oml/setup.py
|
@ -416,32 +416,8 @@ def upgrade_db(old, new=None):
|
||||||
if not len(l.items):
|
if not len(l.items):
|
||||||
l.remove()
|
l.remove()
|
||||||
if old <= '20160107-509-e0857fc':
|
if old <= '20160107-509-e0857fc':
|
||||||
with db.session() as session:
|
add_useritem_index()
|
||||||
sql = "SELECT COUNT(*) AS c,list_id,item_id FROM listitem GROUP BY list_id, item_id HAVING c>1"
|
add_listitem_index()
|
||||||
doubles = [r for r in session.execute(sql)]
|
|
||||||
for r in doubles:
|
|
||||||
params = {'list_id': r[1], 'item_id': r[2]}
|
|
||||||
sql = "DELETE FROM listitem WHERE list_id = :list_id AND item_id = :item_id"
|
|
||||||
session.execute(sql, params)
|
|
||||||
sql = "INSERT INTO listitem (list_id, item_id) VALUES (:list_id, :item_id)"
|
|
||||||
session.execute(sql, params)
|
|
||||||
session.commit()
|
|
||||||
sql = 'CREATE UNIQUE INDEX IF NOT EXISTS listitem_index on listitem(list_id,item_id)'
|
|
||||||
session.execute(sql)
|
|
||||||
session.commit()
|
|
||||||
|
|
||||||
sql = "SELECT COUNT(*) AS c,user_id,item_id FROM useritem GROUP BY user_id, item_id HAVING c>1"
|
|
||||||
doubles = [r for r in session.execute(sql)]
|
|
||||||
for r in doubles:
|
|
||||||
params = {'user_id': r[1], 'item_id': r[2]}
|
|
||||||
sql = "DELETE FROM useritem WHERE user_id = :user_id AND item_id = :item_id"
|
|
||||||
session.execute(sql, params)
|
|
||||||
sql = "INSERT INTO useritem (user_id, item_id) VALUES (:user_id, :item_id)"
|
|
||||||
session.execute(sql, params)
|
|
||||||
session.commit()
|
|
||||||
sql = 'CREATE UNIQUE INDEX IF NOT EXISTS useritem_index on useritem(user_id,item_id)'
|
|
||||||
session.execute(sql)
|
|
||||||
session.commit()
|
|
||||||
if old <= '20160111-603-90648f9' and not new:
|
if old <= '20160111-603-90648f9' and not new:
|
||||||
if not db.table_exists('user_metadata'):
|
if not db.table_exists('user_metadata'):
|
||||||
run_sql('''CREATE TABLE user_metadata (
|
run_sql('''CREATE TABLE user_metadata (
|
||||||
|
@ -499,8 +475,8 @@ def update_database():
|
||||||
'CREATE INDEX ix_find_key ON find ("key")',
|
'CREATE INDEX ix_find_key ON find ("key")',
|
||||||
'CREATE INDEX ix_useritem_user ON useritem ("user_id")',
|
'CREATE INDEX ix_useritem_user ON useritem ("user_id")',
|
||||||
'CREATE INDEX ix_user_metadata_data_hash ON user_metadata (data_hash)',
|
'CREATE INDEX ix_user_metadata_data_hash ON user_metadata (data_hash)',
|
||||||
'CREATE UNIQUE INDEX listitem_index on listitem(list_id,item_id)',
|
'CREATE UNIQUE INDEX listitem_index on listitem(list_id, item_id)',
|
||||||
'CREATE UNIQUE INDEX useritem_index on useritem(user_id,item_id)',
|
'CREATE UNIQUE INDEX useritem_index on useritem(user_id, item_id)',
|
||||||
'CREATE UNIQUE INDEX user_metadata_index ON user_metadata(id, user_id)',
|
'CREATE UNIQUE INDEX user_metadata_index ON user_metadata(id, user_id)',
|
||||||
]
|
]
|
||||||
layout = db.get_layout()
|
layout = db.get_layout()
|
||||||
|
@ -518,7 +494,12 @@ def update_database():
|
||||||
for index in indexes:
|
for index in indexes:
|
||||||
name = index.split('INDEX ')[1].split()[0]
|
name = index.split('INDEX ')[1].split()[0]
|
||||||
if name not in layout['indexes']:
|
if name not in layout['indexes']:
|
||||||
sql.append(index)
|
if name == 'useritem_index':
|
||||||
|
add_useritem_index()
|
||||||
|
elif name == 'listitem_index':
|
||||||
|
add_listitem_index()
|
||||||
|
else:
|
||||||
|
sql.append(index)
|
||||||
index_names.add(name)
|
index_names.add(name)
|
||||||
for index in set(name for name in layout['indexes'] if not name.startswith('ix_sort_')) - index_names:
|
for index in set(name for name in layout['indexes'] if not name.startswith('ix_sort_')) - index_names:
|
||||||
sql.append('DROP INDEX ' + index)
|
sql.append('DROP INDEX ' + index)
|
||||||
|
@ -531,3 +512,32 @@ def update_database():
|
||||||
import item.models
|
import item.models
|
||||||
item.models.update_sort_table()
|
item.models.update_sort_table()
|
||||||
|
|
||||||
|
def add_listitem_index():
|
||||||
|
with db.session() as session:
|
||||||
|
sql = "SELECT COUNT(*) AS c,list_id,item_id FROM listitem GROUP BY list_id, item_id HAVING c>1"
|
||||||
|
doubles = [r for r in session.execute(sql)]
|
||||||
|
for r in doubles:
|
||||||
|
params = {'list_id': r[1], 'item_id': r[2]}
|
||||||
|
sql = "DELETE FROM listitem WHERE list_id = :list_id AND item_id = :item_id"
|
||||||
|
session.execute(sql, params)
|
||||||
|
sql = "INSERT INTO listitem (list_id, item_id) VALUES (:list_id, :item_id)"
|
||||||
|
session.execute(sql, params)
|
||||||
|
session.commit()
|
||||||
|
sql = 'CREATE UNIQUE INDEX IF NOT EXISTS listitem_index on listitem(list_id,item_id)'
|
||||||
|
session.execute(sql)
|
||||||
|
session.commit()
|
||||||
|
|
||||||
|
def add_useritem_index():
|
||||||
|
with db.session() as session:
|
||||||
|
sql = "SELECT COUNT(*) AS c,user_id,item_id FROM useritem GROUP BY user_id, item_id HAVING c>1"
|
||||||
|
doubles = [r for r in session.execute(sql)]
|
||||||
|
for r in doubles:
|
||||||
|
params = {'user_id': r[1], 'item_id': r[2]}
|
||||||
|
sql = "DELETE FROM useritem WHERE user_id = :user_id AND item_id = :item_id"
|
||||||
|
session.execute(sql, params)
|
||||||
|
sql = "INSERT INTO useritem (user_id, item_id) VALUES (:user_id, :item_id)"
|
||||||
|
session.execute(sql, params)
|
||||||
|
session.commit()
|
||||||
|
sql = 'CREATE UNIQUE INDEX IF NOT EXISTS useritem_index on useritem(user_id,item_id)'
|
||||||
|
session.execute(sql)
|
||||||
|
session.commit()
|
||||||
|
|
Loading…
Add table
Reference in a new issue