AlterionA
Reactiflux2y ago
3 replies
Alterion

✅ – Can anyone help with better-sqlite3's `aggregate` method to read more than one row?

Can anyone help with better-sqlite3's
aggregate
method to read more than one row?
Solution
I'm using better-sqlite3 and I want to use its
aggregate
method but I need to have access to 2 rows, not just 1, in the aggregate step function. This is the code that works
  filter(predicate) {
    this.#db.aggregate('filter', {
      start: [],
      step: (accumulator, currentValue) => {
        const parsed = JSON.parse(currentValue);
        if (predicate(parsed)) {
          accumulator.push(parsed);
        }
        return accumulator;
      },
      result: (accumulator) => JSON.stringify(accumulator),
    });
    const results = this.#db
      .prepare(`SELECT filter(value) FROM mytable`)
      .pluck()
      .get();
    return JSON.parse(results);
  }

But I need too add a second row,
key
. I don't know how. I tried to do
.prepare('SELECT filter(key, value) FROM mytable')
but that tells me
wrong number of arguments to function filter()
. I tried
SELECT filter(key), filter(value) from mytable
and that runs the function twice, not once, with the key then the value and that's obviously not what I want.

Any idea on how I can get both values at once in the
step
?
Was this page helpful?