Skip to content

Commit c27705a

Browse files
morgongaut
authored andcommitted
sessionctx: Error/warning on unsupported isolation levels (#8625)
1 parent ac16ad5 commit c27705a

File tree

3 files changed

+42
-24
lines changed

3 files changed

+42
-24
lines changed

executor/set_test.go

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -141,37 +141,48 @@ func (s *testSuite) TestSetVar(c *C) {
141141
tk.MustExec("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")
142142
tk.MustQuery("select @@session.tx_isolation").Check(testkit.Rows("READ-COMMITTED"))
143143
tk.MustQuery("select @@session.transaction_isolation").Check(testkit.Rows("READ-COMMITTED"))
144-
tk.MustExec("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")
145-
tk.MustQuery("select @@session.tx_isolation").Check(testkit.Rows("READ-UNCOMMITTED"))
146-
tk.MustQuery("select @@session.transaction_isolation").Check(testkit.Rows("READ-UNCOMMITTED"))
147-
tk.MustExec("SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE")
148-
tk.MustQuery("select @@global.tx_isolation").Check(testkit.Rows("SERIALIZABLE"))
149-
tk.MustQuery("select @@global.transaction_isolation").Check(testkit.Rows("SERIALIZABLE"))
144+
// error
145+
_, err = tk.Exec("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")
146+
c.Assert(terror.ErrorEqual(err, variable.ErrUnsupportedValueForVar), IsTrue, Commentf("err %v", err))
147+
tk.MustQuery("select @@session.tx_isolation").Check(testkit.Rows("READ-COMMITTED"))
148+
tk.MustQuery("select @@session.transaction_isolation").Check(testkit.Rows("READ-COMMITTED"))
149+
// Fails
150+
_, err = tk.Exec("SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE")
151+
c.Assert(terror.ErrorEqual(err, variable.ErrUnsupportedValueForVar), IsTrue, Commentf("err %v", err))
152+
tk.MustQuery("select @@global.tx_isolation").Check(testkit.Rows("REPEATABLE-READ"))
153+
tk.MustQuery("select @@global.transaction_isolation").Check(testkit.Rows("REPEATABLE-READ"))
150154

151155
// test synonyms variables
152156
tk.MustExec("SET SESSION tx_isolation = 'READ-COMMITTED'")
153157
tk.MustQuery("select @@session.tx_isolation").Check(testkit.Rows("READ-COMMITTED"))
154158
tk.MustQuery("select @@session.transaction_isolation").Check(testkit.Rows("READ-COMMITTED"))
155159

156-
tk.MustExec("SET SESSION tx_isolation = 'READ-UNCOMMITTED'")
157-
tk.MustQuery("select @@session.tx_isolation").Check(testkit.Rows("READ-UNCOMMITTED"))
158-
tk.MustQuery("select @@session.transaction_isolation").Check(testkit.Rows("READ-UNCOMMITTED"))
160+
_, err = tk.Exec("SET SESSION tx_isolation = 'READ-UNCOMMITTED'")
161+
c.Assert(terror.ErrorEqual(err, variable.ErrUnsupportedValueForVar), IsTrue, Commentf("err %v", err))
162+
tk.MustQuery("select @@session.tx_isolation").Check(testkit.Rows("READ-COMMITTED"))
163+
tk.MustQuery("select @@session.transaction_isolation").Check(testkit.Rows("READ-COMMITTED"))
159164

160-
tk.MustExec("SET SESSION transaction_isolation = 'SERIALIZABLE'")
161-
tk.MustQuery("select @@session.tx_isolation").Check(testkit.Rows("SERIALIZABLE"))
162-
tk.MustQuery("select @@session.transaction_isolation").Check(testkit.Rows("SERIALIZABLE"))
165+
// fails
166+
_, err = tk.Exec("SET SESSION transaction_isolation = 'SERIALIZABLE'")
167+
c.Assert(terror.ErrorEqual(err, variable.ErrUnsupportedValueForVar), IsTrue, Commentf("err %v", err))
168+
tk.MustQuery("select @@session.tx_isolation").Check(testkit.Rows("READ-COMMITTED"))
169+
tk.MustQuery("select @@session.transaction_isolation").Check(testkit.Rows("READ-COMMITTED"))
163170

164-
tk.MustExec("SET GLOBAL transaction_isolation = 'SERIALIZABLE'")
165-
tk.MustQuery("select @@global.tx_isolation").Check(testkit.Rows("SERIALIZABLE"))
166-
tk.MustQuery("select @@global.transaction_isolation").Check(testkit.Rows("SERIALIZABLE"))
171+
// fails
172+
_, err = tk.Exec("SET GLOBAL transaction_isolation = 'SERIALIZABLE'")
173+
c.Assert(terror.ErrorEqual(err, variable.ErrUnsupportedValueForVar), IsTrue, Commentf("err %v", err))
174+
tk.MustQuery("select @@global.tx_isolation").Check(testkit.Rows("REPEATABLE-READ"))
175+
tk.MustQuery("select @@global.transaction_isolation").Check(testkit.Rows("REPEATABLE-READ"))
167176

168-
tk.MustExec("SET GLOBAL transaction_isolation = 'READ-UNCOMMITTED'")
169-
tk.MustQuery("select @@global.tx_isolation").Check(testkit.Rows("READ-UNCOMMITTED"))
170-
tk.MustQuery("select @@global.transaction_isolation").Check(testkit.Rows("READ-UNCOMMITTED"))
177+
_, err = tk.Exec("SET GLOBAL transaction_isolation = 'READ-UNCOMMITTED'")
178+
c.Assert(terror.ErrorEqual(err, variable.ErrUnsupportedValueForVar), IsTrue, Commentf("err %v", err))
179+
tk.MustQuery("select @@global.tx_isolation").Check(testkit.Rows("REPEATABLE-READ"))
180+
tk.MustQuery("select @@global.transaction_isolation").Check(testkit.Rows("REPEATABLE-READ"))
171181

172-
tk.MustExec("SET GLOBAL tx_isolation = 'SERIALIZABLE'")
173-
tk.MustQuery("select @@global.tx_isolation").Check(testkit.Rows("SERIALIZABLE"))
174-
tk.MustQuery("select @@global.transaction_isolation").Check(testkit.Rows("SERIALIZABLE"))
182+
_, err = tk.Exec("SET GLOBAL tx_isolation = 'SERIALIZABLE'")
183+
c.Assert(terror.ErrorEqual(err, variable.ErrUnsupportedValueForVar), IsTrue, Commentf("err %v", err))
184+
tk.MustQuery("select @@global.tx_isolation").Check(testkit.Rows("REPEATABLE-READ"))
185+
tk.MustQuery("select @@global.transaction_isolation").Check(testkit.Rows("REPEATABLE-READ"))
175186

176187
tk.MustExec("SET SESSION tx_read_only = 1")
177188
tk.MustExec("SET SESSION tx_read_only = 0")
@@ -553,7 +564,6 @@ func (s *testSuite) TestValidateSetVar(c *C) {
553564
result = tk.MustQuery("select @@tx_isolation;")
554565
result.Check(testkit.Rows("REPEATABLE-READ"))
555566

556-
tk.MustExec("set @@tx_isolation='SERIALIZABLE'")
557-
result = tk.MustQuery("select @@tx_isolation;")
558-
result.Check(testkit.Rows("SERIALIZABLE"))
567+
_, err = tk.Exec("set @@tx_isolation='SERIALIZABLE'")
568+
c.Assert(terror.ErrorEqual(err, variable.ErrUnsupportedValueForVar), IsTrue, Commentf("err %v", err))
559569
}

sessionctx/variable/session.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,10 @@ func (s *SessionVars) WithdrawAllPreparedStmt() {
582582
func (s *SessionVars) SetSystemVar(name string, val string) error {
583583
switch name {
584584
case TxnIsolationOneShot:
585+
switch val {
586+
case "SERIALIZABLE", "READ-UNCOMMITTED":
587+
return ErrUnsupportedValueForVar.GenWithStackByArgs(name, val)
588+
}
585589
s.TxnIsolationLevelOneShot.State = 1
586590
s.TxnIsolationLevelOneShot.Value = val
587591
case TimeZone:

sessionctx/variable/varsutil.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,10 @@ func ValidateSetSystemVar(vars *SessionVars, name string, value string) (string,
394394
if !exists {
395395
return "", ErrWrongValueForVar.GenWithStackByArgs(name, value)
396396
}
397+
switch upVal {
398+
case "SERIALIZABLE", "READ-UNCOMMITTED":
399+
return "", ErrUnsupportedValueForVar.GenWithStackByArgs(name, value)
400+
}
397401
return upVal, nil
398402
}
399403
return value, nil

0 commit comments

Comments
 (0)