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:
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()