The intent of SPI_push/SPI_pop seems to be to draw a boundary line between
nested layers of SPI callers. Which is fine, but the SPI_connect and
SPI_finish calls of the inner layer would suffice for that. AFAICS,
the only thing that SPI_push/SPI_pop buy for us is the ability to detect
a missing SPI_connect or SPI_finish in an inner function layer. And
that seems pretty useless, because any such bug in a function would be
immediately detected in simple testing that calls it without any outer
level of SPI calls.
As against that, we have the risk of forgotten SPI_push/SPI_pop calls that
go undetected for years, as just seen in commit fc8b81a29. We've had that
type of bug before too, cf 0d4899e44. And then there's the fact that we
put conditional SPI_push/SPI_pop calls into various places, eg deac9488d,
which it seems to me largely destroys whatever debugging value the concept
did have.
So I think we should just delete these functions and adjust SPI_connect
and SPI_finish so that they just push/pop a context level unconditionally.
(Which will make them simpler, not more complicated.)
We can provide do-nothing macros by these names to avoid an API break
for third-party extensions.
Comments, objections?
regards, tom lane