From bc580891dfd727b8d186906e6cf2822eaff78972 Mon Sep 17 00:00:00 2001 From: kanataxa Date: Mon, 4 Jan 2021 19:04:40 +0900 Subject: [PATCH] call defer in function scope instead of in a loop --- connection/adapter/plugin/mysql.go | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/connection/adapter/plugin/mysql.go b/connection/adapter/plugin/mysql.go index a9a2b38..a97e9b1 100644 --- a/connection/adapter/plugin/mysql.go +++ b/connection/adapter/plugin/mysql.go @@ -66,22 +66,28 @@ func (adapter *MySQLAdapter) ExecDDL(config *config.DatabaseConfig) error { if len(config.Masters) > 1 { return errors.New("Sorry, currently supports single master database only") } - dbname := config.NameOrPath for _, master := range config.Masters { - serverDsn := fmt.Sprintf("%s:%s@tcp(%s)/", config.Username, config.Password, master) - serverConn, err := sql.Open(config.Adapter, serverDsn) - defer serverConn.Close() - if err != nil { - return errors.Wrapf(err, "cannot open connection from %s", serverDsn) - } - if _, err := serverConn.Exec(fmt.Sprintf(`CREATE DATABASE IF NOT EXISTS %s`, dbname)); err != nil { - return errors.Wrapf(err, "cannot create database %s", dbname) + if err := adapter.execDDL(config, master); err != nil { + return errors.Wrap(err, "cannot execute DDL") } return nil } return errors.New("must define 'master' server") } +func (adapter *MySQLAdapter) execDDL(config *config.DatabaseConfig, master string) error { + serverDsn := fmt.Sprintf("%s:%s@tcp(%s)/", config.Username, config.Password, master) + serverConn, err := sql.Open(config.Adapter, serverDsn) + if err != nil { + return errors.Wrapf(err, "cannot open connection from %s", serverDsn) + } + defer serverConn.Close() + if _, err := serverConn.Exec(fmt.Sprintf(`CREATE DATABASE IF NOT EXISTS %s`, config.NameOrPath)); err != nil { + return errors.Wrapf(err, "cannot create database %s", config.NameOrPath) + } + return nil +} + // OpenConnection open connection by database configuration file func (adapter *MySQLAdapter) OpenConnection(config *config.DatabaseConfig, queryString string) (*sql.DB, error) { if len(config.Masters) > 1 {