• Peter Eisentraut's avatar
    Fix assert in nested SQL procedure call · 2e78c5b5
    Peter Eisentraut authored
    When executing CALL in PL/pgSQL, we need to set a snapshot before
    invoking the to-be-called procedure.  Otherwise, the to-be-called
    procedure might end up running without a snapshot.  For LANGUAGE SQL
    procedures, this would result in an assertion failure.  (For most other
    languages, this is usually not a problem, because those use SPI and SPI
    sets snapshots in most cases.)  Setting the snapshot restores the
    behavior of how CALL worked when it was handled as a generic SQL
    statement in PL/pgSQL (exec_stmt_execsql()).
    
    This change revealed another problem:  In SPI_commit(), we popped the
    active snapshot before committing the transaction, to avoid "snapshot %p
    still active" errors.  However, there is no particular reason why only
    at most one snapshot should be on the stack.  So change this to pop all
    active snapshots instead of only one.
    2e78c5b5
spi.c 71.9 KB