diff options
Diffstat (limited to 'src/backend/utils')
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 31 | ||||
-rw-r--r-- | src/backend/utils/fmgr/fmgr.c | 10 |
2 files changed, 13 insertions, 28 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index dc4a6cc4a8f..c7f896c524a 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.276 2008/07/16 01:30:22 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.277 2008/07/16 16:55:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -5389,29 +5389,12 @@ generate_function_name(Oid funcid, int nargs, Oid *argtypes, /* Check variadic-ness if caller cares */ if (is_variadic) { - /* XXX change this if we simplify code in FuncnameGetCandidates */ - Datum proargmodes; - bool isnull; - - *is_variadic = false; - - proargmodes = SysCacheGetAttr(PROCOID, proctup, - Anum_pg_proc_proargmodes, &isnull); - if (!isnull) - { - ArrayType *ar = DatumGetArrayTypeP(proargmodes); - char *argmodes; - int j; - - argmodes = ARR_DATA_PTR(ar); - j = ARR_DIMS(ar)[0] - 1; - if (j >= 0 && argmodes[j] == PROARGMODE_VARIADIC) - { - /* "any" variadics are not treated as variadics for listing */ - if (procform->proargtypes.values[j] != ANYOID) - *is_variadic = true; - } - } + /* "any" variadics are not treated as variadics for listing */ + if (OidIsValid(procform->provariadic) && + procform->provariadic != ANYOID) + *is_variadic = true; + else + *is_variadic = false; } ReleaseSysCache(proctup); diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c index b0553b026b8..cd23bae0779 100644 --- a/src/backend/utils/fmgr/fmgr.c +++ b/src/backend/utils/fmgr/fmgr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/fmgr/fmgr.c,v 1.120 2008/06/06 22:35:22 alvherre Exp $ + * $PostgreSQL: pgsql/src/backend/utils/fmgr/fmgr.c,v 1.121 2008/07/16 16:55:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -324,18 +324,20 @@ fmgr_info_C_lang(Oid functionId, FmgrInfo *finfo, HeapTuple procedureTuple) void *libraryhandle; /* - * Get prosrc and probin strings (link symbol and library filename) + * Get prosrc and probin strings (link symbol and library filename). + * While in general these columns might be null, that's not allowed + * for C-language functions. */ prosrcattr = SysCacheGetAttr(PROCOID, procedureTuple, Anum_pg_proc_prosrc, &isnull); if (isnull) - elog(ERROR, "null prosrc for function %u", functionId); + elog(ERROR, "null prosrc for C function %u", functionId); prosrcstring = TextDatumGetCString(prosrcattr); probinattr = SysCacheGetAttr(PROCOID, procedureTuple, Anum_pg_proc_probin, &isnull); if (isnull) - elog(ERROR, "null probin for function %u", functionId); + elog(ERROR, "null probin for C function %u", functionId); probinstring = TextDatumGetCString(probinattr); /* Look up the function itself */ |