33 lines
790 B
JavaScript
33 lines
790 B
JavaScript
|
export async function incrFetch(
|
||
|
runQuery,
|
||
|
terms,
|
||
|
compare,
|
||
|
makeQuery,
|
||
|
params = []
|
||
|
) {
|
||
|
let pageCount = 500;
|
||
|
let results = [];
|
||
|
|
||
|
let fetchedIds = new Set();
|
||
|
|
||
|
for (let i = 0; i < terms.length; i += pageCount) {
|
||
|
let slice = terms.slice(i, i + pageCount).filter(id => !fetchedIds.has(id));
|
||
|
if (slice.length > 0) {
|
||
|
let filter = slice.map(id => compare(id)).join(' OR ');
|
||
|
let query = makeQuery('(' + filter + ')');
|
||
|
|
||
|
let rows = await runQuery(query, params, true);
|
||
|
fetchedIds = new Set([...fetchedIds, ...slice]);
|
||
|
results = results.concat(rows);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return results;
|
||
|
}
|
||
|
|
||
|
export function whereIn(ids, field) {
|
||
|
let ids2 = [...new Set(ids)];
|
||
|
let filter = `${field} IN (` + ids2.map(id => `'${id}'`).join(',') + ')';
|
||
|
return filter;
|
||
|
}
|