in src/kll_float_sketch_pg_functions.c [170:201]
Datum pg_kll_float_sketch_combine(PG_FUNCTION_ARGS) {
void* sketchptr1;
void* sketchptr2;
void* sketchptr;
MemoryContext oldcontext;
MemoryContext aggcontext;
if (PG_ARGISNULL(0) && PG_ARGISNULL(1)) PG_RETURN_NULL();
if (!AggCheckCallContext(fcinfo, &aggcontext)) {
elog(ERROR, "kll_float_sketch_combine called in non-aggregate context");
}
oldcontext = MemoryContextSwitchTo(aggcontext);
sketchptr1 = PG_GETARG_POINTER(0);
sketchptr2 = PG_GETARG_POINTER(1);
if (sketchptr1) {
sketchptr = sketchptr1;
if (sketchptr2) {
kll_float_sketch_merge(sketchptr, sketchptr2);
}
kll_float_sketch_delete(sketchptr2);
} else {
sketchptr = sketchptr2;
}
MemoryContextSwitchTo(oldcontext);
PG_RETURN_POINTER(sketchptr);
}