小巧。快速。可靠。
三选其二。

SQLite C 接口

获取聚合函数上下文

void *sqlite3_aggregate_context(sqlite3_context*, int nBytes);

聚合 SQL 函数的实现使用此例程为存储其状态分配内存。

对于特定聚合函数,第一次调用 sqlite3_aggregate_context(C,N) 例程时,SQLite 会分配 N 字节的内存,将该内存清零,并返回指向新内存的指针。对于同一聚合函数实例的第二次及后续调用 sqlite3_aggregate_context(),将返回相同的缓冲区。Sqlite3_aggregate_context() 通常在每次调用 xStep 回调时调用一次,然后在调用 xFinal 回调时最后调用一次。当没有行匹配聚合查询时,聚合函数实现的 xStep() 回调永远不会被调用,而 xFinal() 恰好被调用一次。在这些情况下,sqlite3_aggregate_context() 可能会从 xFinal() 内部首次被调用。

如果 N 小于或等于零,或者发生内存分配错误,则第一次调用 sqlite3_aggregate_context(C,N) 例程时会返回 NULL 指针。

sqlite3_aggregate_context(C,N) 分配的空间量由第一次成功调用时的 N 参数确定。在同一聚合函数实例中,在后续任何对 sqlite3_aggregate_context() 的调用中更改 N 的值都不会调整内存分配的大小。在 xFinal 回调中,习惯上在对 sqlite3_aggregate_context(C,N) 的调用中将 N 设置为 0,以便不会发生毫无意义的内存分配。

聚合查询结束时,SQLite 会自动释放 sqlite3_aggregate_context() 分配的内存。

第一个参数必须是实现聚合函数的 xStep 或 xFinal 回调例程的第一个参数 SQL 函数上下文 的副本。

此例程必须在运行聚合 SQL 函数的同一线程中调用。

另请参阅 对象常量函数 列表。