在线文档教程
Sqlite
C界面 | C Interface

Obtain Aggregate Function Context

获取聚合函数上下文

void *sqlite3_aggregate_context(sqlite3_context*, int nBytes

聚合 SQL 函数的实现使用这个例程来分配内存来存储它们的状态。

第一次为特定的聚集函数调用 sqlite3_aggregate_context(C,N)例程时,SQLite 分配 N 个内存,清零该内存,并返回一个指向新内存的指针。对同一个聚合函数实例调用 sqlite3_aggregate_context()时,返回相同的缓冲区。每次调用 xStep 回调函数时,通常会调用 Sqlite3_aggregate_context(),然后最后一次调用 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()分配的内存。

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

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