From 3153b1a52f8f2d1efe67306257aec15aaaf9e94c Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Fri, 29 Jul 2016 12:06:18 -0400 Subject: [PATCH] Eliminate a few more user-visible "cache lookup failed" errors. Michael Paquier --- src/backend/utils/adt/ruleutils.c | 20 +++++++++---------- src/test/regress/expected/rules.out | 30 +++++++++++++++++++++++++++++ src/test/regress/sql/rules.sql | 5 +++++ 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 51c765ad87..80f0def75d 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -2238,11 +2238,11 @@ pg_get_function_arguments(PG_FUNCTION_ARGS) StringInfoData buf; HeapTuple proctup; - initStringInfo(&buf); - proctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid)); if (!HeapTupleIsValid(proctup)) - elog(ERROR, "cache lookup failed for function %u", funcid); + PG_RETURN_NULL(); + + initStringInfo(&buf); (void) print_function_arguments(&buf, proctup, false, true); @@ -2264,11 +2264,11 @@ pg_get_function_identity_arguments(PG_FUNCTION_ARGS) StringInfoData buf; HeapTuple proctup; - initStringInfo(&buf); - proctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid)); if (!HeapTupleIsValid(proctup)) - elog(ERROR, "cache lookup failed for function %u", funcid); + PG_RETURN_NULL(); + + initStringInfo(&buf); (void) print_function_arguments(&buf, proctup, false, false); @@ -2289,11 +2289,11 @@ pg_get_function_result(PG_FUNCTION_ARGS) StringInfoData buf; HeapTuple proctup; - initStringInfo(&buf); - proctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid)); if (!HeapTupleIsValid(proctup)) - elog(ERROR, "cache lookup failed for function %u", funcid); + PG_RETURN_NULL(); + + initStringInfo(&buf); print_function_rettype(&buf, proctup); @@ -2547,7 +2547,7 @@ pg_get_function_arg_default(PG_FUNCTION_ARGS) proctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid)); if (!HeapTupleIsValid(proctup)) - elog(ERROR, "cache lookup failed for function %u", funcid); + PG_RETURN_NULL(); numargs = get_func_arg_info(proctup, &argtypes, &argnames, &argmodes); if (nth_arg < 1 || nth_arg > numargs || !is_input_argument(nth_arg - 1, argmodes)) diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 7c633ac8d7..c5ff3181a3 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -3094,3 +3094,33 @@ SELECT pg_get_viewdef(0); (1 row) +SELECT pg_get_function_arguments(0); + pg_get_function_arguments +--------------------------- + +(1 row) + +SELECT pg_get_function_identity_arguments(0); + pg_get_function_identity_arguments +------------------------------------ + +(1 row) + +SELECT pg_get_function_result(0); + pg_get_function_result +------------------------ + +(1 row) + +SELECT pg_get_function_arg_default(0, 0); + pg_get_function_arg_default +----------------------------- + +(1 row) + +SELECT pg_get_function_arg_default('pg_class'::regclass, 0); + pg_get_function_arg_default +----------------------------- + +(1 row) + diff --git a/src/test/regress/sql/rules.sql b/src/test/regress/sql/rules.sql index 111c9ba062..835945f4b7 100644 --- a/src/test/regress/sql/rules.sql +++ b/src/test/regress/sql/rules.sql @@ -1152,3 +1152,8 @@ SELECT pg_get_indexdef(0); SELECT pg_get_ruledef(0); SELECT pg_get_triggerdef(0); SELECT pg_get_viewdef(0); +SELECT pg_get_function_arguments(0); +SELECT pg_get_function_identity_arguments(0); +SELECT pg_get_function_result(0); +SELECT pg_get_function_arg_default(0, 0); +SELECT pg_get_function_arg_default('pg_class'::regclass, 0);