commit 1f3cd9a1ae0ee17dbd2e361ab41188438660d8b5
parent c1c2f6b9decca4c97c5005954f36026b12766b80
Author: Dan Stillman <dstillman@zotero.org>
Date: Fri, 24 Jan 2014 19:05:59 -0500
Don't wipe out fields from fieldsCombined during DB integrity check
Diffstat:
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git 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
[