commit 3ca64f746a13975701d67a0502343fd1989ecaa7
parent f018e7d433130151e0e56b16efba72fc83b85c49
Author: Dan Stillman <dstillman@zotero.org>
Date: Mon, 18 May 2009 10:15:19 +0000
- Remove empty creators from the database -- they shouldn't exist and were causing sync errors for some people
- Better logging for errors in metadata pane
Diffstat:
4 files changed, 49 insertions(+), 2 deletions(-)
diff --git a/chrome/content/zotero/bindings/itembox.xml b/chrome/content/zotero/bindings/itembox.xml
@@ -1488,6 +1488,7 @@
<parameter name="textbox"/>
<body>
<![CDATA[
+ try {
Zotero.debug('Hiding editor');
/*
var textbox = Zotero.getAncestorByTagName(t, 'textbox');
@@ -1666,6 +1667,13 @@
}
this._focusNextField(focusMode, focusBox, this._lastTabIndex, this._tabDirection == -1);
}
+ }
+ // Thrown errors don't seem to show up within XBL without explicit logging
+ catch (e) {
+ Zotero.debug(e);
+ Components.utils.reportError(e);
+ throw (e);
+ }
]]>
</body>
</method>
@@ -1802,6 +1810,8 @@
<parameter name="changeGlobally"/>
<body>
<![CDATA[
+ try {
+
var libraryID = this.item.libraryID;
var firstName = fields.firstName;
var lastName = fields.lastName;
@@ -1927,6 +1937,13 @@
}
Zotero.DB.commitTransaction();
+
+ }
+ catch (e) {
+ Zotero.debug(e);
+ Components.utils.reportError(e);
+ throw (e);
+ }
]]>
</body>
</method>
diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js
@@ -2372,6 +2372,20 @@ Zotero.Schema = new function(){
Zotero.DB.query("UPDATE creatorData SET shortName='' WHERE shortName IS NULL");
Zotero.DB.query("UPDATE creatorData SET birthYear=NULL WHERE birthYear=''");
}
+
+ if (i==55) {
+ Zotero.DB.query("CREATE TEMPORARY TABLE tmpEmptyCreators AS SELECT creatorID FROM creators WHERE creatorDataID IN (SELECT creatorDataID FROM creatorData WHERE firstName='' AND lastName='')");
+ Zotero.DB.query("INSERT INTO syncDeleteLog SELECT 2, libraryID, key, CURRENT_TIMESTAMP FROM creators WHERE creatorID IN (SELECT creatorID FROM tmpEmptyCreators)");
+ var rows = Zotero.DB.query("SELECT * FROM itemCreators WHERE creatorID IN (SELECT creatorID FROM tmpEmptyCreators) ORDER BY orderIndex DESC");
+ for each(var row in rows) {
+ Zotero.DB.query("DELETE FROM itemCreators WHERE itemID=? AND creatorID=? AND orderIndex=?", [row.itemID, row.creatorID, row.orderIndex]);
+ Zotero.DB.query("UPDATE itemCreators SET orderIndex=orderIndex-1 WHERE itemID=? AND orderIndex>?", [row.itemID, row.orderIndex]);
+ }
+ Zotero.DB.query("DELETE FROM itemCreators WHERE creatorID IN (SELECT creatorID FROM tmpEmptyCreators)");
+ Zotero.DB.query("DELETE FROM creators WHERE creatorDataID IN (SELECT creatorDataID FROM creatorData WHERE firstName='' AND lastName='')");
+ Zotero.DB.query("DROP TABLE tmpEmptyCreators");
+ Zotero.DB.query("DELETE FROM creatorData WHERE firstName='' AND lastName=''");
+ }
}
_updateDBVersion('userdata', toVersion);
diff --git a/triggers.sql b/triggers.sql
@@ -1,4 +1,4 @@
--- 9
+-- 10
-- Triggers to validate date field
DROP TRIGGER IF EXISTS insert_date_field;
@@ -28,6 +28,22 @@ CREATE TRIGGER update_date_field BEFORE UPDATE ON itemData
END;
+-- Don't allow empty creators
+DROP TRIGGER IF EXISTS insert_creatorData;
+CREATE TRIGGER insert_creatorData BEFORE INSERT ON creatorData
+ FOR EACH ROW WHEN NEW.firstName='' AND NEW.lastName=''
+ BEGIN
+ SELECT RAISE (ABORT, 'Creator names cannot be empty');
+ END;
+
+DROP TRIGGER IF EXISTS update_creatorData;
+CREATE TRIGGER update_creatorData BEFORE UPDATE ON creatorData
+ FOR EACH ROW WHEN NEW.firstName='' AND NEW.lastName=''
+ BEGIN
+ SELECT RAISE (ABORT, 'Creator names cannot be empty');
+ END;
+
+
--
-- Fake foreign key constraint checks using triggers
--
diff --git a/userdata.sql b/userdata.sql
@@ -1,4 +1,4 @@
--- 54
+-- 55
-- This file creates tables containing user-specific data for new users --
-- any changes made here must be mirrored in transition steps in schema.js::_migrateSchema()