forked from mirrors/gecko-dev
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:
parent
4ab107723d
commit
0a74d744fa
1 changed files with 24 additions and 12 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue