@@ -3190,12 +3190,25 @@ PreventTransactionChain(bool isTopLevel, const char *stmtType)
31903190}
31913191
31923192/*
3193- *These two functions allow for warnings or errors if a command is
3194- *executed outside of a transaction block.
3193+ *WarnNoTranactionChain
3194+ *RequireTransactionChain
3195+ *
3196+ *These two functions allow for warnings or errors if a command is executed
3197+ *outside of a transaction block. This is useful for commands that have no
3198+ *effects that persist past transaction end (and so calling them outside a
3199+ *transaction block is presumably an error). DECLARE CURSOR is an example.
3200+ *While top-level transaction control commands (BEGIN/COMMIT/ABORT) and SET
3201+ *that have no effect issue warnings, all other no-effect commands generate
3202+ *errors.
3203+ *
3204+ *If we appear to be running inside a user-defined function, we do not
3205+ *issue anything, since the function could issue more commands that make
3206+ *use of the current statement's results. Likewise subtransactions.
3207+ *Thus these are inverses for PreventTransactionChain.
31953208 *
3196- *While top-level transaction control commands (BEGIN/COMMIT/ABORT) and
3197- *SET that have no effect issue warnings, all other no-effect commands
3198- *generate errors .
3209+ *isTopLevel: passed down from ProcessUtility to determine whether we are
3210+ *inside a function.
3211+ *stmtType: statement type name, for warning or error messages .
31993212 */
32003213void
32013214WarnNoTransactionChain (bool isTopLevel ,const char * stmtType )
@@ -3210,21 +3223,7 @@ RequireTransactionChain(bool isTopLevel, const char *stmtType)
32103223}
32113224
32123225/*
3213- *RequireTransactionChain
3214- *
3215- *This routine is to be called by statements that must run inside
3216- *a transaction block, because they have no effects that persist past
3217- *transaction end (and so calling them outside a transaction block
3218- *is presumably an error). DECLARE CURSOR is an example.
3219- *
3220- *If we appear to be running inside a user-defined function, we do not
3221- *issue anything, since the function could issue more commands that make
3222- *use of the current statement's results. Likewise subtransactions.
3223- *Thus this is an inverse for PreventTransactionChain.
3224- *
3225- *isTopLevel: passed down from ProcessUtility to determine whether we are
3226- *inside a function.
3227- *stmtType: statement type name, for warning or error messages.
3226+ * This is the implementation of the above two.
32283227 */
32293228static void
32303229CheckTransactionChain (bool isTopLevel ,bool throwError ,const char * stmtType )