www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit fb6cf4f9a967619713984cb6a22b800f965cefbe
parent 0ce45103bb5a2e5d49eae1918717c26880e66ea7
Author: Dan Stillman <dstillman@zotero.org>
Date:   Thu, 20 Oct 2016 20:07:21 -0400

Fix upgrade error on duplicate creatorData rows

Diffstat:
Mchrome/content/zotero/xpcom/schema.js | 6++++++
1 file changed, 6 insertions(+), 0 deletions(-)

diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js @@ -2046,6 +2046,12 @@ Zotero.Schema = new function(){ yield Zotero.DB.queryAsync("INSERT OR IGNORE INTO items SELECT itemID, itemTypeID, dateAdded, dateModified, clientDateModified, IFNULL(libraryID, 1), key, 0, 0 FROM itemsOld ORDER BY dateAdded DESC"); yield Zotero.DB.queryAsync("CREATE INDEX items_synced ON items(synced)"); + let rows = yield Zotero.DB.queryAsync("SELECT firstName, lastName, fieldMode, COUNT(*) FROM creatorData GROUP BY firstName, lastName, fieldMode HAVING COUNT(*) > 1"); + for (let row of rows) { + let ids = yield Zotero.DB.columnQueryAsync("SELECT creatorDataID FROM creatorData WHERE firstName=? AND lastName=? AND fieldMode=?", [row.firstName, row.lastName, row.fieldMode]); + yield Zotero.DB.queryAsync("UPDATE creators SET creatorDataID=" + ids[0] + " WHERE creatorDataID IN (" + ids.slice(1).join(", ") + ")"); + } + yield Zotero.DB.queryAsync("DELETE FROM creatorData WHERE creatorDataID NOT IN (SELECT creatorDataID FROM creators)"); yield Zotero.DB.queryAsync("ALTER TABLE creators RENAME TO creatorsOld"); yield Zotero.DB.queryAsync("CREATE TABLE creators (\n creatorID INTEGER PRIMARY KEY,\n firstName TEXT,\n lastName TEXT,\n fieldMode INT,\n UNIQUE (lastName, firstName, fieldMode)\n)"); yield Zotero.DB.queryAsync("INSERT INTO creators SELECT creatorDataID, firstName, lastName, fieldMode FROM creatorData");