diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl index 72c7963578..3821f917c2 100644 --- a/src/backend/nodes/gen_node_support.pl +++ b/src/backend/nodes/gen_node_support.pl @@ -1296,6 +1296,11 @@ _jumble${n}(JumbleState *jstate, Node *node) } } + if ($f eq 'savepoint_name') { + print $jff "\tJUMBLE_LOCATION(location);\n"; + next; + } + # node type if (($t =~ /^(\w+)\*$/ or $t =~ /^struct\s+(\w+)\*$/) and elem $1, @node_types) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 60080e877e..a1fb0d565c 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -10840,6 +10840,7 @@ TransactionStmt: n->kind = TRANS_STMT_ROLLBACK; n->options = NIL; n->chain = $3; + n->location = -1; $$ = (Node *) n; } | START TRANSACTION transaction_mode_list_or_empty @@ -10848,6 +10849,7 @@ TransactionStmt: n->kind = TRANS_STMT_START; n->options = $3; + n->location = -1; $$ = (Node *) n; } | COMMIT opt_transaction opt_transaction_chain @@ -10857,6 +10859,7 @@ TransactionStmt: n->kind = TRANS_STMT_COMMIT; n->options = NIL; n->chain = $3; + n->location = -1; $$ = (Node *) n; } | ROLLBACK opt_transaction opt_transaction_chain @@ -10866,6 +10869,7 @@ TransactionStmt: n->kind = TRANS_STMT_ROLLBACK; n->options = NIL; n->chain = $3; + n->location = -1; $$ = (Node *) n; } | SAVEPOINT ColId @@ -10874,6 +10878,7 @@ TransactionStmt: n->kind = TRANS_STMT_SAVEPOINT; n->savepoint_name = $2; + n->location = @2; $$ = (Node *) n; } | RELEASE SAVEPOINT ColId @@ -10882,6 +10887,7 @@ TransactionStmt: n->kind = TRANS_STMT_RELEASE; n->savepoint_name = $3; + n->location = @3; $$ = (Node *) n; } | RELEASE ColId @@ -10890,6 +10896,7 @@ TransactionStmt: n->kind = TRANS_STMT_RELEASE; n->savepoint_name = $2; + n->location = @2; $$ = (Node *) n; } | ROLLBACK opt_transaction TO SAVEPOINT ColId @@ -10898,6 +10905,7 @@ TransactionStmt: n->kind = TRANS_STMT_ROLLBACK_TO; n->savepoint_name = $5; + n->location = @5; $$ = (Node *) n; } | ROLLBACK opt_transaction TO ColId @@ -10906,6 +10914,7 @@ TransactionStmt: n->kind = TRANS_STMT_ROLLBACK_TO; n->savepoint_name = $4; + n->location = @4; $$ = (Node *) n; } | PREPARE TRANSACTION Sconst @@ -10914,6 +10923,7 @@ TransactionStmt: n->kind = TRANS_STMT_PREPARE; n->gid = $3; + n->location = -1; $$ = (Node *) n; } | COMMIT PREPARED Sconst @@ -10922,6 +10932,7 @@ TransactionStmt: n->kind = TRANS_STMT_COMMIT_PREPARED; n->gid = $3; + n->location = -1; $$ = (Node *) n; } | ROLLBACK PREPARED Sconst @@ -10930,6 +10941,7 @@ TransactionStmt: n->kind = TRANS_STMT_ROLLBACK_PREPARED; n->gid = $3; + n->location = -1; $$ = (Node *) n; } ; @@ -10941,6 +10953,7 @@ TransactionStmtLegacy: n->kind = TRANS_STMT_BEGIN; n->options = $3; + n->location = -1; $$ = (Node *) n; } | END_P opt_transaction opt_transaction_chain @@ -10950,6 +10963,7 @@ TransactionStmtLegacy: n->kind = TRANS_STMT_COMMIT; n->options = NIL; n->chain = $3; + n->location = -1; $$ = (Node *) n; } ; diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index efb5c3e098..e7c6843b48 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -3504,6 +3504,7 @@ typedef struct TransactionStmt char *savepoint_name; /* for savepoint commands */ char *gid; /* for two-phase-commit related commands */ bool chain; /* AND CHAIN option */ + int location; /* token location, or -1 if unknown */ } TransactionStmt; /* ----------------------