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) {
|
getCacheObjects: Zotero.Promise.coroutine(function* (objectType, libraryID, keyVersionPairs) {
|
||||||
if (!keyVersionPairs.length) return [];
|
if (!keyVersionPairs.length) return [];
|
||||||
|
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 "
|
var sql = "SELECT data FROM syncCache SC JOIN (SELECT "
|
||||||
+ keyVersionPairs.map(function (pair) {
|
+ chunk.map((pair) => {
|
||||||
Zotero.DataObjectUtilities.checkKey(pair[0]);
|
Zotero.DataObjectUtilities.checkKey(pair[0]);
|
||||||
return "'" + pair[0] + "' AS key, " + parseInt(pair[1]) + " AS version";
|
return "'" + pair[0] + "' AS key, " + parseInt(pair[1]) + " AS version";
|
||||||
}).join(" UNION SELECT ")
|
}).join(" UNION SELECT ")
|
||||||
+ ") AS pairs ON (pairs.key=SC.key AND pairs.version=SC.version) "
|
+ ") AS pairs ON (pairs.key=SC.key AND pairs.version=SC.version) "
|
||||||
+ "WHERE libraryID=? AND "
|
+ "WHERE libraryID=? AND "
|
||||||
+ "syncObjectTypeID IN (SELECT syncObjectTypeID FROM syncObjectTypes WHERE name=?)";
|
+ "syncObjectTypeID IN (SELECT syncObjectTypeID FROM syncObjectTypes WHERE name=?)";
|
||||||
var rows = yield Zotero.DB.columnQueryAsync(sql, [libraryID, objectType]);
|
rows.push(...await Zotero.DB.columnQueryAsync(sql, [libraryID, objectType]));
|
||||||
|
}
|
||||||
|
)
|
||||||
return rows.map(row => JSON.parse(row));
|
return rows.map(row => JSON.parse(row));
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user