Re: *_to_xml() should copy SPI_processed/SPI_tuptable
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Chapman Flack <chap@anastigmatix.net>
Cc: PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2018-09-06T16:25:34Z
Lists: pgsql-hackers
Attachments
- save-restore-SPI-global-variables-1.patch (text/x-diff) patch
I wrote: > Chapman Flack <chap@anastigmatix.net> writes: >> Another alternative might be to have SPI_connect save them and >> SPI_finish put them back, which leaves you just responsible for >> reasoning about your own code. You'd still be expected to save them >> across your own uses of other SPI calls, but no longer exposed to >> spooky action at a distance from nested uses of SPI in stuff you call. > Hmm. I'd thought about that briefly and concluded that it didn't offer > a full fix, but on reflection it's not clear why it'd be any less of > a fix than the macroized-SPI_tuptable approach. You end up with > per-SPI-stack-level storage either way, and while that isn't perfect > it does go a long way, as you say. More, this has the huge advantage > of being back-patchable, because there'd be no API/ABI change. Here's a proposed patch along that line. I included SPI_result (SPI's equivalent of errno) in the set of saved-and-restored variables, so that all the exposed SPI globals behave the same. Also, in further service of providing insulation between SPI nesting levels, I thought it'd be a good idea for SPI_connect() to reset the globals to zero/NULL after saving them. This ensures that a nesting level can't accidentally be affected by the state of an outer level. It's barely possible that there's somebody out there who's *intentionally* accessing state from a calling SPI level, but that seems like it'd be pretty dangerous programming practice. Still, maybe there's an argument for omitting that hunk in released branches. Comments? regards, tom lane
Commits
-
Save/restore SPI's global variables in SPI_connect() and SPI_finish().
- d2003339c396 9.4.20 landed
- 92f0c5083db5 9.3.25 landed
- 82ebf39fcb25 9.6.11 landed
- 825f10fbda7a 11.0 landed
- 3985b75dca6d 10.6 landed
- 361844fe561f 12.0 landed
- 0254aa83b57a 9.5.15 landed