@@ -197,7 +197,6 @@ typedef struct TransactionStateData
197197 FullTransactionId fullTransactionId ; /* my FullTransactionId */
198198 SubTransactionId subTransactionId ; /* my subxact ID */
199199 char * name ; /* savepoint name, if any */
200- int savepointLevel ; /* savepoint level */
201200 TransState state ; /* low-level state */
202201 TBlockState blockState ; /* high-level state */
203202 int nestingLevel ; /* transaction nesting depth */
@@ -3440,20 +3439,17 @@ CommitTransactionCommandInternal(void)
34403439 case TBLOCK_SUBRESTART :
34413440 {
34423441 char * name ;
3443- int savepointLevel ;
34443442
34453443 /* save name and keep Cleanup from freeing it */
34463444 name = s -> name ;
34473445 s -> name = NULL ;
3448- savepointLevel = s -> savepointLevel ;
34493446
34503447 AbortSubTransaction ();
34513448 CleanupSubTransaction ();
34523449
34533450 DefineSavepoint (NULL );
34543451 s = CurrentTransactionState ; /* changed by push */
34553452 s -> name = name ;
3456- s -> savepointLevel = savepointLevel ;
34573453
34583454 /* This is the same as TBLOCK_SUBBEGIN case */
34593455 Assert (s -> blockState == TBLOCK_SUBBEGIN );
@@ -3469,19 +3465,16 @@ CommitTransactionCommandInternal(void)
34693465 case TBLOCK_SUBABORT_RESTART :
34703466 {
34713467 char * name ;
3472- int savepointLevel ;
34733468
34743469 /* save name and keep Cleanup from freeing it */
34753470 name = s -> name ;
34763471 s -> name = NULL ;
3477- savepointLevel = s -> savepointLevel ;
34783472
34793473 CleanupSubTransaction ();
34803474
34813475 DefineSavepoint (NULL );
34823476 s = CurrentTransactionState ; /* changed by push */
34833477 s -> name = name ;
3484- s -> savepointLevel = savepointLevel ;
34853478
34863479 /* This is the same as TBLOCK_SUBBEGIN case */
34873480 Assert (s -> blockState == TBLOCK_SUBBEGIN );
@@ -4588,11 +4581,6 @@ ReleaseSavepoint(const char *name)
45884581 (errcode (ERRCODE_S_E_INVALID_SPECIFICATION ),
45894582 errmsg ("savepoint \"%s\" does not exist" , name )));
45904583
4591- /* disallow crossing savepoint level boundaries */
4592- if (target -> savepointLevel != s -> savepointLevel )
4593- ereport (ERROR ,
4594- (errcode (ERRCODE_S_E_INVALID_SPECIFICATION ),
4595- errmsg ("savepoint \"%s\" does not exist within current savepoint level" , name )));
45964584
45974585 /*
45984586 * Mark "commit pending" all subtransactions up to the target
@@ -4697,11 +4685,6 @@ RollbackToSavepoint(const char *name)
46974685 (errcode (ERRCODE_S_E_INVALID_SPECIFICATION ),
46984686 errmsg ("savepoint \"%s\" does not exist" , name )));
46994687
4700- /* disallow crossing savepoint level boundaries */
4701- if (target -> savepointLevel != s -> savepointLevel )
4702- ereport (ERROR ,
4703- (errcode (ERRCODE_S_E_INVALID_SPECIFICATION ),
4704- errmsg ("savepoint \"%s\" does not exist within current savepoint level" , name )));
47054688
47064689 /*
47074690 * Mark "abort pending" all subtransactions up to the target
@@ -5506,7 +5489,6 @@ PushTransaction(void)
55065489 s -> parent = p ;
55075490 s -> nestingLevel = p -> nestingLevel + 1 ;
55085491 s -> gucNestLevel = NewGUCNestLevel ();
5509- s -> savepointLevel = p -> savepointLevel ;
55105492 s -> state = TRANS_DEFAULT ;
55115493 s -> blockState = TBLOCK_SUBBEGIN ;
55125494 GetUserIdAndSecContext (& s -> prevUser , & s -> prevSecContext );
0 commit comments