From e55534f1e95202e13030903e5fbc22fddb7117ca Mon Sep 17 00:00:00 2001 From: Shen Li Date: Sun, 19 Mar 2017 16:09:55 +0800 Subject: [PATCH] varsutil: tiny cleanup (#2884) Extract a function to check if the option is on. --- sessionctx/varsutil/varsutil.go | 15 ++++++++++----- sessionctx/varsutil/varsutil_test.go | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/sessionctx/varsutil/varsutil.go b/sessionctx/varsutil/varsutil.go index 09f1769ddd..732cf3cf62 100644 --- a/sessionctx/varsutil/varsutil.go +++ b/sessionctx/varsutil/varsutil.go @@ -108,24 +108,29 @@ func SetSessionSystemVar(vars *variable.SessionVars, name string, value types.Da return errors.Trace(err) } case variable.AutocommitVar: - isAutocommit := strings.EqualFold(sVal, "ON") || sVal == "1" + isAutocommit := tidbOptOn(sVal) vars.SetStatusFlag(mysql.ServerStatusAutocommit, isAutocommit) if isAutocommit { vars.SetStatusFlag(mysql.ServerStatusInTrans, false) } case variable.TiDBSkipConstraintCheck: - vars.SkipConstraintCheck = (sVal == "1") + vars.SkipConstraintCheck = tidbOptOn(sVal) case variable.TiDBSkipDDLWait: - vars.SkipDDLWait = (sVal == "1") + vars.SkipDDLWait = tidbOptOn(sVal) case variable.TiDBOptAggPushDown: - vars.AllowAggPushDown = strings.EqualFold(sVal, "ON") || sVal == "1" + vars.AllowAggPushDown = tidbOptOn(sVal) case variable.TiDBOptInSubqUnFolding: - vars.AllowInSubqueryUnFolding = strings.EqualFold(sVal, "ON") || sVal == "1" + vars.AllowInSubqueryUnFolding = tidbOptOn(sVal) } vars.Systems[name] = sVal return nil } +// For all tidb session variable options, we use "ON"/1 to turn on the options. +func tidbOptOn(opt string) bool { + return strings.EqualFold(opt, "ON") || opt == "1" +} + func parseTimeZone(s string) *time.Location { if s == "SYSTEM" { // TODO: Support global time_zone variable, it should be set to global time_zone value. diff --git a/sessionctx/varsutil/varsutil_test.go b/sessionctx/varsutil/varsutil_test.go index 667affaedf..60922bfd68 100644 --- a/sessionctx/varsutil/varsutil_test.go +++ b/sessionctx/varsutil/varsutil_test.go @@ -33,6 +33,28 @@ var _ = Suite(&testVarsutilSuite{}) type testVarsutilSuite struct { } +func (s *testVarsutilSuite) TestTiDBOptOn(c *C) { + defer testleak.AfterTest(c)() + tbl := []struct { + val string + on bool + }{ + {"ON", true}, + {"on", true}, + {"On", true}, + {"1", true}, + {"off", false}, + {"No", false}, + {"0", false}, + {"1.1", false}, + {"", false}, + } + for _, t := range tbl { + on := tidbOptOn(t.val) + c.Assert(on, Equals, t.on) + } +} + func (s *testVarsutilSuite) TestVarsutil(c *C) { defer testleak.AfterTest(c)() v := variable.NewSessionVars()