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()。在这些情况下,可能会在 xFinal() 中首次调用 sqlite3_aggregate_context()。

如果 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() 分配的内存。

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

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

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