Don't wipe out fields from fieldsCombined during DB integrity check

This commit is contained in:
Dan Stillman 2014-01-24 19:05:59 -05:00
parent c1c2f6b9de
commit 1f3cd9a1ae

View File

@ -1157,6 +1157,13 @@ Zotero.Schema = new function(){
this.integrityCheck = function (fix) { 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 // There should be an equivalent SELECT COUNT(*) statement for every
// statement run by the DB Repair Tool // statement run by the DB Repair Tool
var queries = [ var queries = [
@ -1243,8 +1250,8 @@ Zotero.Schema = new function(){
"DELETE FROM itemCreators WHERE creatorID NOT IN (SELECT creatorID FROM creators)", "DELETE FROM itemCreators WHERE creatorID NOT IN (SELECT creatorID FROM creators)",
], ],
[ [
"SELECT COUNT(*) 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 fields)", "DELETE FROM itemData WHERE fieldID NOT IN (SELECT fieldID FROM fieldsCombined)",
], ],
[ [
"SELECT COUNT(*) FROM itemData WHERE valueID NOT IN (SELECT valueID FROM itemDataValues)", "SELECT COUNT(*) FROM itemData WHERE valueID NOT IN (SELECT valueID FROM itemDataValues)",
@ -1259,8 +1266,8 @@ Zotero.Schema = new function(){
], ],
// Fields not in type // 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))", "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 itemTypeFields 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 // Missing itemAttachments row
[ [