(1 row)
+-- Savepoints
+BEGIN;
+SAVEPOINT sp1;
+SAVEPOINT sp2;
+SAVEPOINT sp3;
+SAVEPOINT sp4;
+ROLLBACK TO sp4;
+ROLLBACK TO SAVEPOINT sp4;
+ROLLBACK TRANSACTION TO SAVEPOINT sp3;
+RELEASE sp3;
+RELEASE SAVEPOINT sp2;
+ROLLBACK TO sp1;
+RELEASE SAVEPOINT sp1;
+COMMIT;
+SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
+ calls | rows | query
+-------+------+-----------------------------------
+ 1 | 0 | BEGIN
+ 1 | 0 | COMMIT
+ 3 | 0 | RELEASE $1
+ 4 | 0 | ROLLBACK TO $1
+ 4 | 0 | SAVEPOINT $1
+ 1 | 1 | SELECT pg_stat_statements_reset()
+(6 rows)
+
+SELECT pg_stat_statements_reset();
+ pg_stat_statements_reset
+--------------------------
+
+(1 row)
+
-- EXPLAIN statements
-- A Query is used, normalized by the query jumbling.
EXPLAIN (costs off) SELECT 1;
SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
SELECT pg_stat_statements_reset();
+-- Savepoints
+BEGIN;
+SAVEPOINT sp1;
+SAVEPOINT sp2;
+SAVEPOINT sp3;
+SAVEPOINT sp4;
+ROLLBACK TO sp4;
+ROLLBACK TO SAVEPOINT sp4;
+ROLLBACK TRANSACTION TO SAVEPOINT sp3;
+RELEASE sp3;
+RELEASE SAVEPOINT sp2;
+ROLLBACK TO sp1;
+RELEASE SAVEPOINT sp1;
+COMMIT;
+SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
+SELECT pg_stat_statements_reset();
+
-- EXPLAIN statements
-- A Query is used, normalized by the query jumbling.
EXPLAIN (costs off) SELECT 1;
n->kind = TRANS_STMT_ROLLBACK;
n->options = NIL;
n->chain = $3;
+ n->location = -1;
$$ = (Node *) n;
}
| START TRANSACTION transaction_mode_list_or_empty
n->kind = TRANS_STMT_START;
n->options = $3;
+ n->location = -1;
$$ = (Node *) n;
}
| COMMIT opt_transaction opt_transaction_chain
n->kind = TRANS_STMT_COMMIT;
n->options = NIL;
n->chain = $3;
+ n->location = -1;
$$ = (Node *) n;
}
| ROLLBACK opt_transaction opt_transaction_chain
n->kind = TRANS_STMT_ROLLBACK;
n->options = NIL;
n->chain = $3;
+ n->location = -1;
$$ = (Node *) n;
}
| SAVEPOINT ColId
n->kind = TRANS_STMT_SAVEPOINT;
n->savepoint_name = $2;
+ n->location = @2;
$$ = (Node *) n;
}
| RELEASE SAVEPOINT ColId
n->kind = TRANS_STMT_RELEASE;
n->savepoint_name = $3;
+ n->location = @3;
$$ = (Node *) n;
}
| RELEASE ColId
n->kind = TRANS_STMT_RELEASE;
n->savepoint_name = $2;
+ n->location = @2;
$$ = (Node *) n;
}
| ROLLBACK opt_transaction TO SAVEPOINT ColId
n->kind = TRANS_STMT_ROLLBACK_TO;
n->savepoint_name = $5;
+ n->location = @5;
$$ = (Node *) n;
}
| ROLLBACK opt_transaction TO ColId
n->kind = TRANS_STMT_ROLLBACK_TO;
n->savepoint_name = $4;
+ n->location = @4;
$$ = (Node *) n;
}
| PREPARE TRANSACTION Sconst
n->kind = TRANS_STMT_PREPARE;
n->gid = $3;
+ n->location = -1;
$$ = (Node *) n;
}
| COMMIT PREPARED Sconst
n->kind = TRANS_STMT_COMMIT_PREPARED;
n->gid = $3;
+ n->location = -1;
$$ = (Node *) n;
}
| ROLLBACK PREPARED Sconst
n->kind = TRANS_STMT_ROLLBACK_PREPARED;
n->gid = $3;
+ n->location = -1;
$$ = (Node *) n;
}
;
n->kind = TRANS_STMT_BEGIN;
n->options = $3;
+ n->location = -1;
$$ = (Node *) n;
}
| END_P opt_transaction opt_transaction_chain
n->kind = TRANS_STMT_COMMIT;
n->options = NIL;
n->chain = $3;
+ n->location = -1;
$$ = (Node *) n;
}
;
NodeTag type;
TransactionStmtKind kind; /* see above */
List *options; /* for BEGIN/START commands */
- char *savepoint_name; /* for savepoint commands */
+ /* for savepoint commands */
+ char *savepoint_name pg_node_attr(query_jumble_ignore);
char *gid; /* for two-phase-commit related commands */
bool chain; /* AND CHAIN option */
+ /* token location, or -1 if unknown */
+ int location pg_node_attr(query_jumble_location);
} TransactionStmt;
/* ----------------------