- 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
This commit is contained in:
Dan Stillman 2009-05-18 10:15:19 +00:00
parent f018e7d433
commit 3ca64f746a
4 changed files with 49 additions and 2 deletions

View file

@ -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>

View file

@ -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);

View file

@ -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
--

View file

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