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