diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js index a748b02eb..9f5af6e7c 100644 --- a/chrome/content/zotero/xpcom/schema.js +++ b/chrome/content/zotero/xpcom/schema.js @@ -1157,6 +1157,13 @@ Zotero.Schema = new function(){ this.integrityCheck = function (fix) { + // Just as a sanity check, make sure combined field tables are populated, + // so that we don't try to wipe out all data + if (!Zotero.DB.valueQuery("SELECT COUNT(*) FROM fieldsCombined") + || !Zotero.DB.valueQuery("SELECT COUNT(*) FROM itemTypeFieldsCombined")) { + return false; + } + // There should be an equivalent SELECT COUNT(*) statement for every // statement run by the DB Repair Tool var queries = [ @@ -1243,8 +1250,8 @@ Zotero.Schema = new function(){ "DELETE FROM itemCreators WHERE creatorID NOT IN (SELECT creatorID FROM creators)", ], [ - "SELECT COUNT(*) FROM itemData WHERE fieldID NOT IN (SELECT fieldID FROM fields)", - "DELETE FROM itemData WHERE fieldID NOT IN (SELECT fieldID FROM fields)", + "SELECT COUNT(*) FROM itemData WHERE fieldID NOT IN (SELECT fieldID FROM fieldsCombined)", + "DELETE FROM itemData WHERE fieldID NOT IN (SELECT fieldID FROM fieldsCombined)", ], [ "SELECT COUNT(*) FROM itemData WHERE valueID NOT IN (SELECT valueID FROM itemDataValues)", @@ -1259,8 +1266,8 @@ Zotero.Schema = new function(){ ], // Fields not in type [ - "SELECT COUNT(*) FROM itemData WHERE fieldID NOT IN (SELECT fieldID FROM itemTypeFields WHERE itemTypeID=(SELECT itemTypeID FROM items WHERE itemID=itemData.itemID))", - "DELETE FROM itemData WHERE fieldID NOT IN (SELECT fieldID FROM itemTypeFields WHERE itemTypeID=(SELECT itemTypeID FROM items WHERE itemID=itemData.itemID))", + "SELECT COUNT(*) FROM itemData WHERE fieldID NOT IN (SELECT fieldID FROM itemTypeFieldsCombined WHERE itemTypeID=(SELECT itemTypeID FROM items WHERE itemID=itemData.itemID))", + "DELETE FROM itemData WHERE fieldID NOT IN (SELECT fieldID FROM itemTypeFieldsCombined WHERE itemTypeID=(SELECT itemTypeID FROM items WHERE itemID=itemData.itemID))", ], // Missing itemAttachments row [