parent
ae8f871f20
commit
15d10d18a7
2 changed files with 39 additions and 38 deletions
|
@ -53,7 +53,7 @@ Zotero_Preferences.Advanced = {
|
||||||
|
|
||||||
var ok = yield Zotero.DB.integrityCheck();
|
var ok = yield Zotero.DB.integrityCheck();
|
||||||
if (ok) {
|
if (ok) {
|
||||||
ok = Zotero.Schema.integrityCheck();
|
ok = yield Zotero.Schema.integrityCheck();
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
var buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING)
|
var buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING)
|
||||||
+ (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL);
|
+ (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL);
|
||||||
|
@ -72,10 +72,10 @@ Zotero_Preferences.Advanced = {
|
||||||
yield Zotero.DB.backupDatabase();
|
yield Zotero.DB.backupDatabase();
|
||||||
|
|
||||||
// Fix the errors
|
// Fix the errors
|
||||||
Zotero.Schema.integrityCheck(true);
|
yield Zotero.Schema.integrityCheck(true);
|
||||||
|
|
||||||
// And run the check again
|
// And run the check again
|
||||||
ok = Zotero.Schema.integrityCheck();
|
ok = yield Zotero.Schema.integrityCheck();
|
||||||
var buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING);
|
var buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING);
|
||||||
if (ok) {
|
if (ok) {
|
||||||
var str = 'success';
|
var str = 'success';
|
||||||
|
|
|
@ -69,6 +69,8 @@ Zotero.Schema = new function(){
|
||||||
* Checks if the DB schema exists and is up-to-date, updating if necessary
|
* Checks if the DB schema exists and is up-to-date, updating if necessary
|
||||||
*/
|
*/
|
||||||
this.updateSchema = function () {
|
this.updateSchema = function () {
|
||||||
|
// TODO: Check database integrity first with Zotero.DB.integrityCheck()
|
||||||
|
|
||||||
// 'userdata' is the last upgrade step run in _migrateUserDataSchema() based on the
|
// 'userdata' is the last upgrade step run in _migrateUserDataSchema() based on the
|
||||||
// version in the schema file. Upgrade steps may or may not break DB compatibility.
|
// version in the schema file. Upgrade steps may or may not break DB compatibility.
|
||||||
//
|
//
|
||||||
|
@ -113,7 +115,7 @@ Zotero.Schema = new function(){
|
||||||
yield _updateSchema('triggers');
|
yield _updateSchema('triggers');
|
||||||
|
|
||||||
return updated;
|
return updated;
|
||||||
})
|
}.bind(this))
|
||||||
.then(function (updated) {
|
.then(function (updated) {
|
||||||
// Populate combined tables for custom types and fields
|
// Populate combined tables for custom types and fields
|
||||||
// -- this is likely temporary
|
// -- this is likely temporary
|
||||||
|
@ -1101,11 +1103,11 @@ Zotero.Schema = new function(){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
this.integrityCheck = function (fix) {
|
this.integrityCheck = Zotero.Promise.coroutine(function* (fix) {
|
||||||
// Just as a sanity check, make sure combined field tables are populated,
|
// Just as a sanity check, make sure combined field tables are populated,
|
||||||
// so that we don't try to wipe out all data
|
// so that we don't try to wipe out all data
|
||||||
if (!Zotero.DB.valueQuery("SELECT COUNT(*) FROM fieldsCombined")
|
if (!(yield Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM fieldsCombined"))
|
||||||
|| !Zotero.DB.valueQuery("SELECT COUNT(*) FROM itemTypeFieldsCombined")) {
|
|| !(yield Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM itemTypeFieldsCombined"))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1261,12 +1263,8 @@ Zotero.Schema = new function(){
|
||||||
// Delete empty creators
|
// Delete empty creators
|
||||||
// This may cause itemCreator gaps, but that's better than empty creators
|
// This may cause itemCreator gaps, but that's better than empty creators
|
||||||
[
|
[
|
||||||
"SELECT COUNT(*) FROM creatorData WHERE firstName='' AND lastName=''",
|
"SELECT COUNT(*) FROM creators WHERE firstName='' AND lastName=''",
|
||||||
[
|
"DELETE FROM creators WHERE firstName='' AND lastName=''"
|
||||||
"DELETE FROM itemCreators WHERE creatorID IN (SELECT creatorID FROM creators WHERE creatorDataID IN (SELECT creatorDataID FROM creatorData WHERE firstName='' AND lastName=''))",
|
|
||||||
"DELETE FROM creators WHERE creatorDataID IN (SELECT creatorDataID FROM creatorData WHERE firstName='' AND lastName='')",
|
|
||||||
"DELETE FROM creatorData WHERE firstName='' AND lastName=''"
|
|
||||||
],
|
|
||||||
],
|
],
|
||||||
|
|
||||||
// Non-attachment items in the full-text index
|
// Non-attachment items in the full-text index
|
||||||
|
@ -1288,19 +1286,23 @@ Zotero.Schema = new function(){
|
||||||
];
|
];
|
||||||
|
|
||||||
for each(var sql in queries) {
|
for each(var sql in queries) {
|
||||||
if (Zotero.DB.valueQuery(sql[0])) {
|
let errorsFound = yield Zotero.DB.valueQueryAsync(sql[0]);
|
||||||
|
if (!errorsFound) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Zotero.debug("Test failed!", 1);
|
Zotero.debug("Test failed!", 1);
|
||||||
|
|
||||||
if (fix) {
|
if (fix) {
|
||||||
try {
|
try {
|
||||||
// Single query
|
// Single query
|
||||||
if (typeof sql[1] == 'string') {
|
if (typeof sql[1] == 'string') {
|
||||||
Zotero.DB.valueQuery(sql[1]);
|
yield Zotero.DB.queryAsync(sql[1]);
|
||||||
}
|
}
|
||||||
// Multiple queries
|
// Multiple queries
|
||||||
else {
|
else {
|
||||||
for each(var s in sql[1]) {
|
for each(var s in sql[1]) {
|
||||||
Zotero.DB.valueQuery(s);
|
yield Zotero.DB.queryAsync(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@ -1313,10 +1315,9 @@ Zotero.Schema = new function(){
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
});
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in a new issue