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;
|
|
}
|