Skip to content

Commit 39ba5ed

Browse files
winkyaozimulala
authored andcommitted
parser, variable: fix #5478, make 'set transaction read only' works. (#5491)
1 parent ba17715 commit 39ba5ed

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

expression/integration_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2918,6 +2918,25 @@ func (s *testIntegrationSuite) TestSetVariables(c *C) {
29182918
_, err = tk.Exec("INSERT INTO tab0 select cast('999:44:33' as time);")
29192919
c.Assert(err, NotNil)
29202920
c.Assert(err.Error(), Equals, "[types:1292]Truncated incorrect time value: '999h44m33s'")
2921+
2922+
// issue #5478
2923+
_, err = tk.Exec("set session transaction read write;")
2924+
_, err = tk.Exec("set global transaction read write;")
2925+
r = tk.MustQuery(`select @@session.tx_read_only, @@global.tx_read_only, @@session.transaction_read_only, @@global.transaction_read_only;`)
2926+
r.Check(testkit.Rows("0 0 0 0"))
2927+
2928+
_, err = tk.Exec("set session transaction read only;")
2929+
c.Assert(err, IsNil)
2930+
r = tk.MustQuery(`select @@session.tx_read_only, @@global.tx_read_only, @@session.transaction_read_only, @@global.transaction_read_only;`)
2931+
r.Check(testkit.Rows("1 0 1 0"))
2932+
_, err = tk.Exec("set global transaction read only;")
2933+
r = tk.MustQuery(`select @@session.tx_read_only, @@global.tx_read_only, @@session.transaction_read_only, @@global.transaction_read_only;`)
2934+
r.Check(testkit.Rows("1 1 1 1"))
2935+
2936+
_, err = tk.Exec("set session transaction read write;")
2937+
_, err = tk.Exec("set global transaction read write;")
2938+
r = tk.MustQuery(`select @@session.tx_read_only, @@global.tx_read_only, @@session.transaction_read_only, @@global.transaction_read_only;`)
2939+
r.Check(testkit.Rows("0 0 0 0"))
29212940
}
29222941

29232942
func (s *testIntegrationSuite) TestIssue4954(c *C) {

parser/parser.y

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4217,15 +4217,16 @@ TransactionChars:
42174217
TransactionChar
42184218
{
42194219
if $1 != nil {
4220-
$$ = []*ast.VariableAssignment{$1.(*ast.VariableAssignment)}
4220+
$$ = $1
42214221
} else {
42224222
$$ = []*ast.VariableAssignment{}
42234223
}
42244224
}
42254225
| TransactionChars ',' TransactionChar
42264226
{
42274227
if $3 != nil {
4228-
$$ = append($1.([]*ast.VariableAssignment), $3.(*ast.VariableAssignment))
4228+
varAssigns := $3.([]*ast.VariableAssignment)
4229+
$$ = append($1.([]*ast.VariableAssignment), varAssigns...)
42294230
} else {
42304231
$$ = $1
42314232
}
@@ -4234,18 +4235,26 @@ TransactionChars:
42344235
TransactionChar:
42354236
"ISOLATION" "LEVEL" IsolationLevel
42364237
{
4238+
varAssigns := []*ast.VariableAssignment{}
42374239
expr := ast.NewValueExpr($3)
4238-
$$ = &ast.VariableAssignment{Name: "tx_isolation", Value: expr, IsSystem: true}
4240+
varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_isolation", Value: expr, IsSystem: true})
4241+
$$ = varAssigns
42394242
}
42404243
| "READ" "WRITE"
42414244
{
4242-
// Parsed but ignored
4243-
$$ = nil
4245+
varAssigns := []*ast.VariableAssignment{}
4246+
expr := ast.NewValueExpr("0")
4247+
varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_only", Value: expr, IsSystem: true})
4248+
varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "transaction_read_only", Value: expr, IsSystem: true})
4249+
$$ = varAssigns
42444250
}
42454251
| "READ" "ONLY"
42464252
{
4247-
// Parsed but ignored
4248-
$$ = nil
4253+
varAssigns := []*ast.VariableAssignment{}
4254+
expr := ast.NewValueExpr("1")
4255+
varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_only", Value: expr, IsSystem: true})
4256+
varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "transaction_read_only", Value: expr, IsSystem: true})
4257+
$$ = varAssigns
42494258
}
42504259

42514260
IsolationLevel:

sessionctx/variable/sysvar.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ var defaultSysVars = []*SysVar{
162162
{ScopeNone, "thread_stack", "262144"},
163163
{ScopeGlobal, "relay_log_info_repository", "FILE"},
164164
{ScopeGlobal | ScopeSession, "sql_log_bin", "ON"},
165-
{ScopeGlobal, "super_read_only", ""},
165+
{ScopeGlobal, "super_read_only", "OFF"},
166166
{ScopeGlobal | ScopeSession, "max_delayed_threads", "20"},
167167
{ScopeNone, "protocol_version", "10"},
168168
{ScopeGlobal | ScopeSession, "new", "OFF"},
@@ -391,6 +391,7 @@ var defaultSysVars = []*SysVar{
391391
{ScopeGlobal | ScopeSession, "net_write_timeout", "60"},
392392
{ScopeGlobal, "innodb_buffer_pool_load_abort", "OFF"},
393393
{ScopeGlobal | ScopeSession, "tx_isolation", "REPEATABLE-READ"},
394+
{ScopeGlobal | ScopeSession, "transaction_isolation", "REPEATABLE-READ"},
394395
{ScopeGlobal | ScopeSession, "collation_connection", "latin1_swedish_ci"},
395396
{ScopeGlobal, "rpl_semi_sync_master_timeout", ""},
396397
{ScopeGlobal | ScopeSession, "transaction_prealloc_size", "4096"},
@@ -494,6 +495,7 @@ var defaultSysVars = []*SysVar{
494495
{ScopeNone, "performance_schema_events_waits_history_size", "10"},
495496
{ScopeGlobal, "log_syslog_tag", ""},
496497
{ScopeGlobal | ScopeSession, "tx_read_only", "0"},
498+
{ScopeGlobal | ScopeSession, "transaction_read_only", "0"},
497499
{ScopeGlobal, "rpl_semi_sync_master_wait_point", ""},
498500
{ScopeGlobal, "innodb_undo_log_truncate", ""},
499501
{ScopeNone, "simplified_binlog_gtid_recovery", "OFF"},

0 commit comments

Comments
 (0)