Skip to content

Commit

Permalink
executor: fix compatibility issue of release savepoint (pingcap#35064)
Browse files Browse the repository at this point in the history
  • Loading branch information
crazycs520 committed Jun 1, 2022
1 parent 8401fa0 commit 69b573c
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 8 deletions.
27 changes: 20 additions & 7 deletions executor/executor_txn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,13 +308,13 @@ func TestTxnSavepoint0(t *testing.T) {
{"savepoint s1", []string{"s1"}, ""},
{"savepoint s2", []string{"s1", "s2"}, ""},
{"savepoint s3", []string{"s1", "s2", "s3"}, ""},
{"release savepoint s2", []string{"s1", "s3"}, ""},
{"rollback to S2", []string{"s1", "s3"}, "[executor:1305]SAVEPOINT S2 does not exist"},
{"release savepoint s3", []string{"s1"}, ""},
{"release savepoint s2", []string{"s1"}, ""},
{"rollback to S2", []string{"s1"}, "[executor:1305]SAVEPOINT S2 does not exist"},
{"release savepoint s3", []string{"s1"}, "[executor:1305]SAVEPOINT s3 does not exist"},
{"savepoint s2", []string{"s1", "s2"}, ""},
{"release savepoint s1", []string{"s2"}, ""},
{"release savepoint s1", []string{"s2"}, "[executor:1305]SAVEPOINT s1 does not exist"},
{"release savepoint S2", nil, ""},
{"release savepoint s1", nil, ""},
{"release savepoint s1", nil, "[executor:1305]SAVEPOINT s1 does not exist"},
{"release savepoint S2", nil, "[executor:1305]SAVEPOINT S2 does not exist"},
{"commit", nil, ""},
}

Expand Down Expand Up @@ -366,7 +366,7 @@ func TestTxnSavepoint1(t *testing.T) {
{sql: "savepoint s4"},
{sql: "release savepoint s1"},
{sql: "rollback to s1", err: "[executor:1305]SAVEPOINT s1 does not exist"},
{sql: "rollback to s2"},
{sql: "rollback to s2", err: "[executor:1305]SAVEPOINT s2 does not exist"},
{sql: "rollback to s3", err: "[executor:1305]SAVEPOINT s3 does not exist"},
{sql: "rollback to savepoint s4", err: "[executor:1305]SAVEPOINT s4 does not exist"},
{sql: "rollback"},
Expand Down Expand Up @@ -435,6 +435,19 @@ func TestTxnSavepoint1(t *testing.T) {
{sql: "commit"},
{sql: "select * from t order by id", result: []string{"1 1", "2 2"}},
{sql: "delete from t"},

// Test for release savepoint
{sql: "begin;"},
{sql: "insert into t values (1, 1)"},
{sql: "savepoint s1"},
{sql: "insert into t values (2, 2)"},
{sql: "savepoint s2"},
{sql: "select * from t order by id", result: []string{"1 1", "2 2"}},
{sql: "release savepoint s1;"},
{sql: "select * from t order by id", result: []string{"1 1", "2 2"}},
{sql: "rollback to s2", err: "[executor:1305]SAVEPOINT s2 does not exist"},
{sql: "select * from t order by id", result: []string{"1 1", "2 2"}},
{sql: "rollback"},
}
txnModes := []string{"optimistic", "pessimistic", ""}
for _, txnMode := range txnModes {
Expand Down
2 changes: 1 addition & 1 deletion executor/simple.go
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,7 @@ func (e *SimpleExec) executeSavepoint(s *ast.SavepointStmt) error {
}

func (e *SimpleExec) executeReleaseSavepoint(s *ast.ReleaseSavepointStmt) error {
deleted := e.ctx.GetSessionVars().TxnCtx.DeleteSavepoint(s.Name)
deleted := e.ctx.GetSessionVars().TxnCtx.ReleaseSavepoint(s.Name)
if !deleted {
return errSavepointNotExists.GenWithStackByArgs("SAVEPOINT", s.Name)
}
Expand Down
12 changes: 12 additions & 0 deletions sessionctx/variable/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,18 @@ func (tc *TransactionContext) DeleteSavepoint(name string) bool {
return false
}

// ReleaseSavepoint deletes the named savepoint and the later savepoints, return false indicate the named savepoint doesn't exists.
func (tc *TransactionContext) ReleaseSavepoint(name string) bool {
name = strings.ToLower(name)
for i, sp := range tc.Savepoints {
if sp.Name == name {
tc.Savepoints = append(tc.Savepoints[:i])
return true
}
}
return false
}

// RollbackToSavepoint rollbacks to the specified savepoint by name.
func (tc *TransactionContext) RollbackToSavepoint(name string) *SavepointRecord {
name = strings.ToLower(name)
Expand Down

0 comments on commit 69b573c

Please sign in to comment.