Fix pg_get_functiondef() to print a function's LEAKPROOF property.
authorTom Lane
Thu, 28 May 2015 15:24:37 +0000 (11:24 -0400)
committerTom Lane
Thu, 28 May 2015 15:24:37 +0000 (11:24 -0400)
Seems to have been an oversight in the original leakproofness patch.
Per report and patch from Jeevan Chalke.

In passing, prettify some awkward leakproof-related code in AlterFunction.

src/backend/commands/functioncmds.c
src/backend/utils/adt/ruleutils.c

index eef78498ba6a30f47946df312c742053293bd780..5915cd7acb34beb1211cc1cf42cd20f8adc21bd1 100644 (file)
@@ -1103,11 +1103,11 @@ AlterFunction(AlterFunctionStmt *stmt)
        procForm->prosecdef = intVal(security_def_item->arg);
    if (leakproof_item)
    {
-       if (intVal(leakproof_item->arg) && !superuser())
+       procForm->proleakproof = intVal(leakproof_item->arg);
+       if (procForm->proleakproof && !superuser())
            ereport(ERROR,
                    (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
                  errmsg("only superuser can define a leakproof function")));
-       procForm->proleakproof = intVal(leakproof_item->arg);
    }
    if (cost_item)
    {
index 578972bba254c20db39330fd9acefeae8418e67a..da28e59a921253230c4203403f51e157659e0b0b 100644 (file)
@@ -1944,6 +1944,8 @@ pg_get_functiondef(PG_FUNCTION_ARGS)
        appendStringInfoString(&buf, " STRICT");
    if (proc->prosecdef)
        appendStringInfoString(&buf, " SECURITY DEFINER");
+   if (proc->proleakproof)
+       appendStringInfoString(&buf, " LEAKPROOF");
 
    /* This code for the default cost and rows should match functioncmds.c */
    if (proc->prolang == INTERNALlanguageId ||