Fix 'too many terms in compound SELECT' sync error
This commit is contained in:
parent
8f2508e167
commit
aad12db2ff
|
@ -593,15 +593,22 @@ Zotero.Sync.Data.Local = {
|
|||
|
||||
getCacheObjects: Zotero.Promise.coroutine(function* (objectType, libraryID, keyVersionPairs) {
|
||||
if (!keyVersionPairs.length) return [];
|
||||
var sql = "SELECT data FROM syncCache SC JOIN (SELECT "
|
||||
+ keyVersionPairs.map(function (pair) {
|
||||
Zotero.DataObjectUtilities.checkKey(pair[0]);
|
||||
return "'" + pair[0] + "' AS key, " + parseInt(pair[1]) + " AS version";
|
||||
}).join(" UNION SELECT ")
|
||||
+ ") AS pairs ON (pairs.key=SC.key AND pairs.version=SC.version) "
|
||||
+ "WHERE libraryID=? AND "
|
||||
+ "syncObjectTypeID IN (SELECT syncObjectTypeID FROM syncObjectTypes WHERE name=?)";
|
||||
var rows = yield Zotero.DB.columnQueryAsync(sql, [libraryID, objectType]);
|
||||
var rows = [];
|
||||
yield Zotero.Utilities.Internal.forEachChunkAsync(
|
||||
keyVersionPairs,
|
||||
240, // SQLITE_MAX_COMPOUND_SELECT defaults to 500
|
||||
async function (chunk) {
|
||||
var sql = "SELECT data FROM syncCache SC JOIN (SELECT "
|
||||
+ chunk.map((pair) => {
|
||||
Zotero.DataObjectUtilities.checkKey(pair[0]);
|
||||
return "'" + pair[0] + "' AS key, " + parseInt(pair[1]) + " AS version";
|
||||
}).join(" UNION SELECT ")
|
||||
+ ") AS pairs ON (pairs.key=SC.key AND pairs.version=SC.version) "
|
||||
+ "WHERE libraryID=? AND "
|
||||
+ "syncObjectTypeID IN (SELECT syncObjectTypeID FROM syncObjectTypes WHERE name=?)";
|
||||
rows.push(...await Zotero.DB.columnQueryAsync(sql, [libraryID, objectType]));
|
||||
}
|
||||
)
|
||||
return rows.map(row => JSON.parse(row));
|
||||
}),
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user