www

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

commit 65f493471f501e013b62f9525cccd8e292de061f
parent a8e03b1830558d01bee8a0d72fd128c89b95ef64
Author: Dan Stillman <dstillman@zotero.org>
Date:   Mon, 15 Mar 2010 07:16:05 +0000

Work around an SQLite limit that can cause a 1.0->2.0 upgrade error in very rare cases (in code from July 2008)


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

diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js @@ -1978,12 +1978,25 @@ Zotero.Schema = new function(){ var rows = Zotero.DB.columnQuery("SELECT GROUP_CONCAT(valueID) FROM itemDataValues GROUP BY value HAVING COUNT(*) > 1"); for each(var row in rows) { var ids = row.split(','); + var id = parseInt(ids[0]); var deleteIDs = []; for (var j=1; j<ids.length; j++) { deleteIDs.push(parseInt(ids[j])); } - Zotero.DB.query("UPDATE itemData SET valueID=? WHERE valueID IN (" + deleteIDs.map(function () '?').join() + ")", [parseInt(ids[0])].concat(deleteIDs)); - Zotero.DB.query("DELETE FROM itemDataValues WHERE valueID IN (" + deleteIDs.map(function () '?').join() + ")", deleteIDs); + + var done = 0; + var max = 998; // compiled limit + var num = deleteIDs.length; + + do { + var chunk = deleteIDs.splice(0, max); + + Zotero.DB.query("UPDATE itemData SET valueID=? WHERE valueID IN (" + chunk.map(function () '?').join() + ")", [id].concat(chunk)); + Zotero.DB.query("DELETE FROM itemDataValues WHERE valueID IN (" + chunk.map(function () '?').join() + ")", chunk); + + done += chunk.length; + } + while (done < num); } Zotero.DB.query("CREATE UNIQUE INDEX itemDataValues_value ON itemDataValues(value)");