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 函数的同一线程调用。