30 Datum token = PG_GETARG_DATUM(0);
31 Datum token2value = PG_GETARG_DATUM(1);
32 Datum agg_function_final = PG_GETARG_DATUM(2);
33 Datum agg_function = PG_GETARG_DATUM(3);
34 Datum semimod_function = PG_GETARG_DATUM(4);
35 Oid element_type = get_fn_expr_argtype(fcinfo->flinfo, 5);
36 Datum element_one = PG_ARGISNULL(5)?((Datum) 0):PG_GETARG_DATUM(5);
37 Datum plus_function = PG_GETARG_DATUM(6);
38 Datum times_function = PG_GETARG_DATUM(7);
39 Datum monus_function = PG_GETARG_DATUM(8);
40 Datum delta_function = PG_GETARG_DATUM(9);
45 char nulls[11]={
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' '};
49 Datum arguments[11]={token,token2value,agg_function_final,agg_function,semimod_function,element_one,element_type,plus_function,
50 times_function,monus_function,delta_function};
53 if(PG_ARGISNULL(1) || PG_ARGISNULL(2) || PG_ARGISNULL(3) || PG_ARGISNULL(4)
54 || PG_ARGISNULL(5) || PG_ARGISNULL(6) || PG_ARGISNULL(7))
64 argtypes[1]=REGCLASSOID;
65 argtypes[2]=REGPROCOID;
66 argtypes[3]=REGPROCOID;
67 argtypes[4]=REGPROCOID;
68 argtypes[5]=element_type;
69 argtypes[6]=REGTYPEOID;
70 argtypes[7]=REGPROCOID;
71 argtypes[8]=REGPROCOID;
72 argtypes[9]=REGPROCOID;
73 argtypes[10]=REGPROCOID;
77 if(SPI_execute_with_args(
78 "SELECT provsql.aggregation_evaluate($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11)",
84 1) != SPI_OK_SELECT) {
85 provsql_error(
"Cannot execute real aggregation_evaluate function");
88 tuple = SPI_copytuple(SPI_tuptable->vals[0]);
89 result = heap_getattr(tuple, 1, SPI_tuptable->tupdesc, &isnull);
96 PG_RETURN_DATUM(result);