Eliminate a few more user-visible "cache lookup failed" errors.
authorRobert Haas <rhaas@postgresql.org>
Fri, 29 Jul 2016 16:06:18 +0000 (12:06 -0400)
committerRobert Haas <rhaas@postgresql.org>
Fri, 29 Jul 2016 16:06:18 +0000 (12:06 -0400)
Michael Paquier

src/backend/utils/adt/ruleutils.c
src/test/regress/expected/rules.out
src/test/regress/sql/rules.sql

index 51c765ad8772b2c38e625f5aa5940038bb95860e..80f0def75d56122e6f6b28c5d8cc2aa6f321025c 100644 (file)
@@ -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))
index 7c633ac8d7d3b8f8474aa259915226a387c12984..c5ff3181a3e15237f98be819fcf4998a542c95e0 100644 (file)
@@ -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)
+
index 111c9ba062ab3c19735fd75cd3efc5d5d6dc3f0b..835945f4b7bf07808914d0b22f6331eec0e2efa2 100644 (file)
@@ -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);