/**
 * call-seq:
 *     aggregate_context( func ) -> hash
 *
 * Returns the aggregate context for the given function. This context is a
 * Hash object that is allocated on demand and is available only to the
 * current invocation of the function. It may be used by aggregate functions
 * to accumulate data over multiple rows, prior to being finalized.
 *
 * The +func+ parameter must be an opaque function handle as given to the
 * callbacks for #create_aggregate.
 *
 * See #create_aggregate and #aggregate_count.
 */
static VALUE
static_api_aggregate_context( VALUE module, VALUE func )
{
  sqlite_func *func_ptr;
  VALUE *ptr;

  GetFunc( func_ptr, func );

  /* FIXME: pointers to VALUEs...how nice is the GC about this kind of
   * thing? Especially when someone else frees the memory? */

  ptr = (VALUE*)sqlite_aggregate_context( func_ptr, sizeof(VALUE) );

  if( *ptr == 0 )
    *ptr = rb_hash_new();

  return *ptr;
}