From ba28d782808050465e25f5771ce28165e43656b8 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 22 Feb 2016 19:17:27 +0530 Subject: [PATCH] make sure list names are unique per user --- oml/setup.py | 19 +++++++++++++++++++ oml/update.py | 3 +-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/oml/setup.py b/oml/setup.py index c21dc48..59c4d2e 100644 --- a/oml/setup.py +++ b/oml/setup.py @@ -449,6 +449,7 @@ def update_database(): '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 user_metadata_index ON user_metadata(item_id, user_id)', + 'CREATE UNIQUE INDEX list_username_index on list(user_id, name)', ] layout = db.get_layout() sql = [] @@ -469,6 +470,8 @@ def update_database(): add_useritem_index() elif name == 'listitem_index': add_listitem_index() + elif name == 'list_username_index': + add_list_username_index() else: sql.append(index) index_names.add(name) @@ -512,3 +515,19 @@ def add_useritem_index(): sql = 'CREATE UNIQUE INDEX IF NOT EXISTS useritem_index on useritem(user_id,item_id)' session.execute(sql) session.commit() + +def add_list_username_index(): + from sqlalchemy.orm import load_only + import user.models + with db.session() as session: + lists = {} + for l in user.models.List.query.order_by('id'): + if l.public_id in lists: + ids = [i.id for i in l.get_items().options(load_only('id'))] + lists[l.public_id].add_items(ids) + session.delete(l) + else: + lists[l.public_id] = l + session.commit() + sql = 'CREATE UNIQUE INDEX IF NOT EXISTS list_username_index on list(user_id, name)' + session.connection().execute(sql) diff --git a/oml/update.py b/oml/update.py index 8406b19..35025da 100644 --- a/oml/update.py +++ b/oml/update.py @@ -4,7 +4,6 @@ from contextlib import closing import base64 -import hashlib import json import os import tarfile @@ -568,5 +567,5 @@ def migrate_11(): def migrate_12(): db.run_sql([ 'DROP TABLE IF EXISTS transfer' - ]), + ]) return 12