]> 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 a997cb62642ab4e75fb420c4d4db58bcf86cb88b..016cdf20fb2df543a435d40fc1f744e5dc34350f 100644 (file)
@@ -1489,6 +1489,8 @@ AlterFunction(ParseState *pstate, AlterFunctionStmt *stmt)
 
                procForm->prosupport = newsupport;
        }
+       if (parallel_item)
+               procForm->proparallel = interpret_func_parallel(parallel_item);
        if (set_items)
        {
                Datum           datum;
@@ -1523,8 +1525,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);