Arrange for SET LOCAL's effects to persist until the end of the current top

Tom Lane <tgl@sss.pgh.pa.us>

Commit: 82a47982f37077a9bfe67c0e9cc87b4f9b16e34b
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2007-09-11T00:06:42Z
Releases: 8.3.0
Arrange for SET LOCAL's effects to persist until the end of the current top
transaction, unless rolled back or overridden by a SET clause for the same
variable attached to a surrounding function call.  Per discussion, these
seem the best semantics.  Note that this is an INCOMPATIBLE CHANGE: in 8.0
through 8.2, SET LOCAL's effects disappeared at subtransaction commit
(leading to behavior that made little sense at the SQL level).

I took advantage of the opportunity to rewrite and simplify the GUC variable
save/restore logic a little bit.  The old idea of a "tentative" value is gone;
it was a hangover from before we had a stack.  Also, we no longer need a stack
entry for every nesting level, but only for those in which a variable's value
actually changed.

Files