www

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

commit 4d7bca4f439ccc11eae201a97b1cc8cefbff06a1
parent b8b75dd115f59a40341acd2e9a5a4a49b4ba00bd
Author: Dan Stillman <dstillman@zotero.org>
Date:   Fri, 31 Oct 2008 00:29:04 +0000

Fix for some numeric directories being left behind during upgrade process, except this time maybe for real


Diffstat:
Mchrome/content/zotero/xpcom/schema.js | 214++++++++++++++++++++++++++++++++++++++++---------------------------------------
Muserdata.sql | 2+-
2 files changed, 110 insertions(+), 106 deletions(-)

diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js @@ -1796,6 +1796,7 @@ Zotero.Schema = new function(){ entries.QueryInterface(Components.interfaces.nsIDirectoryEnumerator); var file; var renameQueue = []; + var orphanQueue = []; while (file = entries.nextFile) { var id = parseInt(file.leafName); if (!file.isDirectory() || file.leafName != id) { @@ -1805,18 +1806,10 @@ Zotero.Schema = new function(){ var renameTarget = storage37.clone(); renameTarget.append(keys[id]); if (renameTarget.exists()) { - if (!orphaned.exists()) { - orphaned.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755); - } - var target = orphaned.clone(); - target.append(keys[id]); - var newName = null; - if (target.exists()) { - target.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644); - newName = target.leafName; - target.remove(null); - } - renameTarget.moveTo(orphaned, newName); + orphanQueue.push({ + id: id, + file: renameTarget + }); } renameQueue.push({ id: id, @@ -1825,22 +1818,31 @@ Zotero.Schema = new function(){ }); } else { - if (!orphaned.exists()) { - orphaned.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755); - } + orphanQueue.push({ + id: id, + file: file + }); + } + } + entries.close(); + + if (orphanQueue.length) { + if (!orphaned.exists()) { + orphaned.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755); + } + for each(var orphan in orphanQueue) { var target = orphaned.clone(); - target.append(file.leafName); + target.append(orphan.file.leafName); var newName = null; if (target.exists()) { target.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644); newName = target.leafName; target.remove(null); } - file.moveTo(orphaned, newName); - movedFiles37[id] = file; + orphan.file.moveTo(orphaned, newName); + movedFiles37[orphan.id] = orphan.file; } } - entries.close(); for each(var dir in renameQueue) { Zotero.debug("Moving " + dir.file.leafName + " to " + dir.key); @@ -1964,7 +1966,63 @@ Zotero.Schema = new function(){ Zotero.DB.query("UPDATE itemNotes SET note='<div class=\"zotero-note znv1\">' || TEXT2HTML(note) || '</div>' WHERE note NOT LIKE '<div class=\"zotero-note %'"); } - if (i==44) { + if (i==45) { + Zotero.DB.query("DELETE FROM itemData WHERE valueID IN (SELECT valueID FROM itemDataValues WHERE value REGEXP '^\\s*$')"); + Zotero.DB.query("DELETE FROM itemDataValues WHERE value REGEXP '^\\s*$'"); + var rows = Zotero.DB.query("SELECT * FROM itemDataValues WHERE value REGEXP '(^\\s+|\\s+$)'"); + if (rows) { + for each(var row in rows) { + var trimmed = Zotero.Utilities.prototype.trim(row.value); + var valueID = Zotero.DB.valueQuery("SELECT valueID FROM itemDataValues WHERE value=?", trimmed); + if (valueID) { + Zotero.DB.query("UPDATE OR REPLACE itemData SET valueID=? WHERE valueID=?", [valueID, row.valueID]); + Zotero.DB.query("DELETE FROM itemDataValues WHERE valueID=?", row.valueID); + } + else { + Zotero.DB.query("UPDATE itemDataValues SET value=? WHERE valueID=?", [trimmed, row.valueID]); + } + } + } + + Zotero.DB.query("UPDATE creatorData SET firstName=TRIM(firstName), lastName=TRIM(lastName)"); + var rows = Zotero.DB.query("SELECT * FROM creatorData ORDER BY lastName, firstName, creatorDataID"); + if (rows) { + for (var j=0; j<rows.length-1; j++) { + var k = j + 1; + while (k < rows.length && + rows[k].lastName == rows[j].lastName && + rows[k].firstName == rows[j].firstName && + rows[k].fieldMode == rows[j].fieldMode) { + Zotero.DB.query("UPDATE creators SET creatorDataID=? WHERE creatorDataID=?", [rows[j].creatorDataID, rows[k].creatorDataID]); + Zotero.DB.query("DELETE FROM creatorData WHERE creatorDataID=?", rows[k].creatorDataID); + k++; + } + } + } + + Zotero.DB.query("DELETE FROM itemTags WHERE tagID IN (SELECT tagID FROM tags WHERE name REGEXP '^\\s*$')"); + Zotero.DB.query("DELETE FROM tags WHERE name REGEXP '^\\s*$'"); + var rows = Zotero.DB.query("SELECT * FROM tags WHERE name REGEXP '(^\\s+|\\s+$)'"); + if (rows) { + for each(var row in rows) { + var trimmed = Zotero.Utilities.prototype.trim(row.name); + var tagID = Zotero.DB.valueQuery("SELECT tagID FROM tags WHERE name=?", trimmed); + if (tagID) { + Zotero.DB.query("UPDATE OR REPLACE itemTags SET tagID=? WHERE tagID=?", [tagID, row.tagID]); + Zotero.DB.query("DELETE FROM tags WHERE tagID=?", row.tagID); + } + else { + Zotero.DB.query("UPDATE tags SET name=? WHERE tagID=?", [trimmed, row.tagID]); + } + } + } + + Zotero.DB.query("UPDATE itemNotes SET note=TRIM(note)"); + Zotero.DB.query("UPDATE collections SET collectionName=TRIM(collectionName)"); + Zotero.DB.query("UPDATE savedSearches SET savedSearchName=TRIM(savedSearchName)"); + } + + if (i==46) { if (fromVersion < 37) { continue; } @@ -1981,42 +2039,35 @@ Zotero.Schema = new function(){ var e = { name: "NS_ERROR_FILE_NOT_FOUND" }; throw (e); } - var movedFiles44 = {}; + var movedFiles46 = {}; var orphaned = dataDir.clone(); - var storage44 = dataDir.clone(); + var storage46 = dataDir.clone(); orphaned.append('orphaned-files'); - storage44.append('storage'); + storage46.append('storage'); var keys = {}; var rows = Zotero.DB.query("SELECT itemID, key FROM items NATURAL JOIN itemAttachments"); for each(var row in rows) { keys[row.itemID] = row.key; } - if (storage44.exists()) { - var entries = storage44.directoryEntries; + if (storage46.exists()) { + var entries = storage46.directoryEntries; entries.QueryInterface(Components.interfaces.nsIDirectoryEnumerator); var file; var renameQueue = []; + var orphanQueue = []; while (file = entries.nextFile) { var id = parseInt(file.leafName); if (!file.isDirectory() || file.leafName != id) { continue; } if (keys[id]) { - var renameTarget = storage44.clone(); + var renameTarget = storage46.clone(); renameTarget.append(keys[id]); if (renameTarget.exists()) { - if (!orphaned.exists()) { - orphaned.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755); - } - var target = orphaned.clone(); - target.append(id); - var newName = null; - if (target.exists()) { - target.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644); - newName = target.leafName; - target.remove(null); - } - renameTarget.moveTo(orphaned, newName); + orphanQueue.push({ + id: id, + file: renameTarget + }); } renameQueue.push({ id: id, @@ -2025,85 +2076,38 @@ Zotero.Schema = new function(){ }); } else { - if (!orphaned.exists()) { - orphaned.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755); - } + orphanQueue.push({ + id: id, + file: file + }); + } + } + entries.close(); + + if (orphanQueue.length) { + if (!orphaned.exists()) { + orphaned.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755); + } + for each(var orphan in orphanQueue) { var target = orphaned.clone(); - target.append(file.leafName); + target.append(orphan.file.leafName); var newName = null; if (target.exists()) { target.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644); newName = target.leafName; target.remove(null); } - file.moveTo(orphaned, newName); - movedFiles44[id] = file; + orphan.file.moveTo(orphaned, newName); + movedFiles46[orphan.id] = orphan.file; } } - entries.close(); for each(var dir in renameQueue) { Zotero.debug("Moving " + dir.file.leafName + " to " + dir.key); dir.file.moveTo(null, dir.key); - movedFiles44[dir.id] = dir.file; - } - } - } - - if (i==45) { - Zotero.DB.query("DELETE FROM itemData WHERE valueID IN (SELECT valueID FROM itemDataValues WHERE value REGEXP '^\\s*$')"); - Zotero.DB.query("DELETE FROM itemDataValues WHERE value REGEXP '^\\s*$'"); - var rows = Zotero.DB.query("SELECT * FROM itemDataValues WHERE value REGEXP '(^\\s+|\\s+$)'"); - if (rows) { - for each(var row in rows) { - var trimmed = Zotero.Utilities.prototype.trim(row.value); - var valueID = Zotero.DB.valueQuery("SELECT valueID FROM itemDataValues WHERE value=?", trimmed); - if (valueID) { - Zotero.DB.query("UPDATE OR REPLACE itemData SET valueID=? WHERE valueID=?", [valueID, row.valueID]); - Zotero.DB.query("DELETE FROM itemDataValues WHERE valueID=?", row.valueID); - } - else { - Zotero.DB.query("UPDATE itemDataValues SET value=? WHERE valueID=?", [trimmed, row.valueID]); - } + movedFiles46[dir.id] = dir.file; } } - - Zotero.DB.query("UPDATE creatorData SET firstName=TRIM(firstName), lastName=TRIM(lastName)"); - var rows = Zotero.DB.query("SELECT * FROM creatorData ORDER BY lastName, firstName, creatorDataID"); - if (rows) { - for (var j=0; j<rows.length-1; j++) { - var k = j + 1; - while (k < rows.length && - rows[k].lastName == rows[j].lastName && - rows[k].firstName == rows[j].firstName && - rows[k].fieldMode == rows[j].fieldMode) { - Zotero.DB.query("UPDATE creators SET creatorDataID=? WHERE creatorDataID=?", [rows[j].creatorDataID, rows[k].creatorDataID]); - Zotero.DB.query("DELETE FROM creatorData WHERE creatorDataID=?", rows[k].creatorDataID); - k++; - } - } - } - - Zotero.DB.query("DELETE FROM itemTags WHERE tagID IN (SELECT tagID FROM tags WHERE name REGEXP '^\\s*$')"); - Zotero.DB.query("DELETE FROM tags WHERE name REGEXP '^\\s*$'"); - var rows = Zotero.DB.query("SELECT * FROM tags WHERE name REGEXP '(^\\s+|\\s+$)'"); - if (rows) { - for each(var row in rows) { - var trimmed = Zotero.Utilities.prototype.trim(row.name); - var tagID = Zotero.DB.valueQuery("SELECT tagID FROM tags WHERE name=?", trimmed); - if (tagID) { - Zotero.DB.query("UPDATE OR REPLACE itemTags SET tagID=? WHERE tagID=?", [tagID, row.tagID]); - Zotero.DB.query("DELETE FROM tags WHERE tagID=?", row.tagID); - } - else { - Zotero.DB.query("UPDATE tags SET name=? WHERE tagID=?", [trimmed, row.tagID]); - } - } - } - - Zotero.DB.query("UPDATE itemNotes SET note=TRIM(note)"); - Zotero.DB.query("UPDATE collections SET collectionName=TRIM(collectionName)"); - Zotero.DB.query("UPDATE savedSearches SET savedSearchName=TRIM(savedSearchName)"); } } @@ -2120,10 +2124,10 @@ Zotero.Schema = new function(){ catch (e2) { Zotero.debug(e2); } } } - if (movedFiles44) { - for (var id in movedFiles44) { + if (movedFiles46) { + for (var id in movedFiles46) { try { - movedFiles44[id].moveTo(storage44, id); + movedFiles46[id].moveTo(storage46, id); } catch (e2) { Zotero.debug(e2); } } diff --git a/userdata.sql b/userdata.sql @@ -1,4 +1,4 @@ --- 45 +-- 46 -- This file creates tables containing user-specific data -- any changes made -- here must be mirrored in transition steps in schema.js::_migrateSchema()