]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix breakage in AlterFunction().
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 20 Apr 2022 03:03:59 +0000 (23:03 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 20 Apr 2022 03:03:59 +0000 (23:03 -0400)
An ALTER FUNCTION command that tried to update both the function's
proparallel property and its proconfig list failed to do the former,
because it stored the new proparallel value into a tuple that was
no longer the interesting one.  Carelessness in 7aea8e4f2.

(I did not bother with a regression test, because the only likely
future breakage would be for someone to ignore the comment I added
and add some other field update after the heap_modify_tuple step.
A test using existing function properties could not catch that.)

Per report from Bryn Llewellyn.  Back-patch to all supported branches.

Discussion: https://postgr.es/m/8AC9A37F-99BD-446F-A2F7-B89AD0022774@yugabyte.com

src/backend/commands/functioncmds.c

index 3698ab90bcd114bbbf6f1ae1ada6d58c02f8a23c..507b075acea5b8664e3d00f384cbe8463a103da6 100644 (file)
@@ -1352,6 +1352,8 @@ AlterFunction(ParseState *pstate, AlterFunctionStmt *stmt)
 
                procForm->prosupport = newsupport;
        }
+       if (parallel_item)
+               procForm->proparallel = interpret_func_parallel(parallel_item);
        if (set_items)
        {
                Datum           datum;
@@ -1386,8 +1388,7 @@ AlterFunction(ParseState *pstate, AlterFunctionStmt *stmt)
                tup = heap_modify_tuple(tup, RelationGetDescr(rel),
                                                                repl_val, repl_null, repl_repl);
        }
-       if (parallel_item)
-               procForm->proparallel = interpret_func_parallel(parallel_item);
+       /* DO NOT put more touches of procForm below here; it's now dangling. */
 
        /* Do the update */
        CatalogTupleUpdate(rel, &tup->t_self, tup);