Bug 1448044 - kinto-storage-adapter.js chokes on large updates r=glasserc

MozReview-Commit-ID: ncHwROrfHV

--HG--
extra : rebase_source : 5289f5664c9278ad4b9239a7830442eda8bd3551
This commit is contained in:
Mark Goodwin 2018-04-12 15:56:52 +01:00
parent 4ab107723d
commit 0a74d744fa

View file

@ -266,20 +266,32 @@ class FirefoxAdapter extends Kinto.adapters.BaseAdapter {
return conn.executeTransaction(async function doExecuteTransaction() {
// Preload specified records from DB, within transaction.
const parameters = [
collection,
...options.preload,
];
const placeholders = options.preload.map(_ => "?");
const stmt = statements.listRecordsById + "(" + placeholders.join(",") + ");";
const rows = await conn.execute(stmt, parameters);
const preloaded = rows.reduce((acc, row) => {
const record = JSON.parse(row.getResultByName("record"));
acc[row.getResultByName("record_id")] = record;
return acc;
}, {});
// if options.preload has more elements than the sqlite variable
// limit, split it up.
const limit = 100;
let preloaded = {};
let preload;
let more = options.preload;
while (more.length > 0) {
preload = more.slice(0, limit);
more = more.slice(limit, more.length);
const parameters = [
collection,
...preload,
];
const placeholders = preload.map(_ => "?");
const stmt = statements.listRecordsById + "(" + placeholders.join(",") + ");";
const rows = await conn.execute(stmt, parameters);
rows.reduce((acc, row) => {
const record = JSON.parse(row.getResultByName("record"));
acc[row.getResultByName("record_id")] = record;
return acc;
}, preloaded);
}
const proxy = transactionProxy(collection, preloaded);
result = callback(proxy);