database.aggregate(name, options)
在 SQLite 数据库中注册一个新的聚合函数。此方法是 sqlite3_create_window_function() 的封装。
【Registers a new aggregate function with the SQLite database. This method is a wrapper around
sqlite3_create_window_function().】
name<string> 要创建的 SQLite 函数的名称。options<Object> 功能配置设置。deterministic<boolean> 如果为true,则在创建的函数上设置SQLITE_DETERMINISTIC标志。默认值:false。directOnly<boolean> 如果为true,则在创建的函数上设置SQLITE_DIRECTONLY标志。默认值:false。useBigIntArguments<boolean> 如果为true,则传给options.step和options.inverse的整数参数会被转换为BigInt。如果为false,整数参数会作为 JavaScript 数字传递。默认值:false。varargs<boolean> 如果为true,options.step和options.inverse可以使用任意数量的参数(从零到SQLITE_MAX_FUNCTION_ARG)调用。如果为false,inverse和step必须使用准确的length个参数调用。默认值:false。start<number> | <string> | <null> | <Array> | <Object> | <Function> 聚合函数的初始值。该值在聚合函数初始化时使用。当传入 <Function> 时,初始值将作为其返回值。step<Function> 每行聚合时调用的函数。该函数接收当前状态和行的值。此函数的返回值应为新的状态。result<Function> 用于获取聚合结果的函数。该函数接收最终状态,并应返回聚合的结果。inverse<Function> 当提供此函数时,aggregate方法将作为窗口函数运行。该函数接收当前状态和被丢弃的行的值。此函数的返回值应为新的状态。
当作为窗口函数使用时,result 函数会被调用多次。
【When used as a window function, the result function will be called multiple times.】
const { DatabaseSync } = require('node:sqlite');
const db = new DatabaseSync(':memory:');
db.exec(`
CREATE TABLE t3(x, y);
INSERT INTO t3 VALUES ('a', 4),
('b', 5),
('c', 3),
('d', 8),
('e', 1);
`);
db.aggregate('sumint', {
start: 0,
step: (acc, value) => acc + value,
});
db.prepare('SELECT sumint(y) as total FROM t3').get(); // { total: 21 }import { DatabaseSync } from 'node:sqlite';
const db = new DatabaseSync(':memory:');
db.exec(`
CREATE TABLE t3(x, y);
INSERT INTO t3 VALUES ('a', 4),
('b', 5),
('c', 3),
('d', 8),
('e', 1);
`);
db.aggregate('sumint', {
start: 0,
step: (acc, value) => acc + value,
});
db.prepare('SELECT sumint(y) as total FROM t3').get(); // { total: 21 }