28 Datum token = PG_GETARG_DATUM(0);
29 Datum token2value = PG_GETARG_DATUM(1);
30 Oid element_type = get_fn_expr_argtype(fcinfo->flinfo, 2);
31 Datum element_one = PG_ARGISNULL(2)?((Datum) 0):PG_GETARG_DATUM(2);
32 Datum plus_function = PG_GETARG_DATUM(3);
33 Datum times_function = PG_GETARG_DATUM(4);
34 Datum monus_function = PG_GETARG_DATUM(5);
35 Datum delta_function = PG_GETARG_DATUM(6);
40 char nulls[8]={
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' '};
44 Datum arguments[8]={token,token2value,element_one,element_type,plus_function,times_function,monus_function,delta_function};
47 if(PG_ARGISNULL(1) || PG_ARGISNULL(2) || PG_ARGISNULL(3) || PG_ARGISNULL(4))
57 argtypes[1]=REGCLASSOID;
58 argtypes[2]=element_type;
59 argtypes[3]=REGTYPEOID;
60 argtypes[4]=REGPROCOID;
61 argtypes[5]=REGPROCOID;
62 argtypes[6]=REGPROCOID;
63 argtypes[7]=REGPROCOID;
67 if(SPI_execute_with_args(
68 "SELECT provsql.provenance_evaluate($1,$2,$3,$4,$5,$6,$7,$8)",
74 1) != SPI_OK_SELECT) {
75 provsql_error(
"Cannot execute real provenance_evaluate function");
78 tuple = SPI_copytuple(SPI_tuptable->vals[0]);
79 result = heap_getattr(tuple, 1, SPI_tuptable->tupdesc, &isnull);
86 PG_RETURN_DATUM(result);