Fix deletion of tags across libraries

https://forums.zotero.org/discussion/comment/296384/#Comment_296384
This commit is contained in:
Dan Stillman 2017-12-20 20:37:19 -05:00
parent b1b9dcf233
commit a1c96f1db1
2 changed files with 38 additions and 22 deletions

View file

@ -431,9 +431,11 @@ Zotero.Tags = new function() {
Zotero.DB.requireTransaction();
var sql;
// Use given tags, as long as they're orphaned
if (tagIDs) {
let sql = "CREATE TEMPORARY TABLE tagDelete (tagID INT PRIMARY KEY)";
sql = "CREATE TEMPORARY TABLE tagDelete (tagID INT PRIMARY KEY)";
yield Zotero.DB.queryAsync(sql);
yield Zotero.Utilities.Internal.forEachChunkAsync(
tagIDs,
@ -446,13 +448,17 @@ Zotero.Tags = new function() {
);
}
);
sql = "SELECT tagID AS id, name FROM tagDelete JOIN tags USING (tagID) "
+ "WHERE tagID NOT IN (SELECT tagID FROM itemTags)";
// Skip tags that are still linked to items
sql = "DELETE FROM tagDelete WHERE tagID IN (SELECT tagID FROM itemTags)";
yield Zotero.DB.queryAsync(sql);
sql = "SELECT tagID AS id, name FROM tagDelete JOIN tags USING (tagID)";
var toDelete = yield Zotero.DB.queryAsync(sql);
}
// Look for orphaned tags
else {
var sql = "CREATE TEMPORARY TABLE tagDelete AS "
sql = "CREATE TEMPORARY TABLE tagDelete AS "
+ "SELECT tagID FROM tags WHERE tagID NOT IN (SELECT tagID FROM itemTags)";
yield Zotero.DB.queryAsync(sql);
@ -461,11 +467,10 @@ Zotero.Tags = new function() {
sql = "SELECT tagID AS id, name FROM tagDelete JOIN tags USING (tagID)";
var toDelete = yield Zotero.DB.queryAsync(sql);
if (!toDelete.length) {
sql = "DROP TABLE tagDelete";
return Zotero.DB.queryAsync(sql);
}
}
if (!toDelete.length) {
return Zotero.DB.queryAsync("DROP TABLE tagDelete");
}
var ids = [];