diff --git a/g/database/gdb/gdb.go b/g/database/gdb/gdb.go index 001564faf..adb1a6735 100644 --- a/g/database/gdb/gdb.go +++ b/g/database/gdb/gdb.go @@ -308,12 +308,14 @@ func (bs *dbBase) getSqlDb(master bool) (sqlDb *sql.DB, err error) { if node.Charset == "" { node.Charset = "utf8" } + // 缓存连接对象(该对象其实是一个连接池对象) v := bs.cache.GetOrSetFuncLock(node.String(), func() interface{} { sqlDb, err = bs.db.Open(node) if err != nil { return nil } - + // 接口对象可能会覆盖这些连接参数,所以这里优先判断有误设置连接池属性。 + // 若无设置则使用配置节点的连接池参数 if n := bs.maxIdleConnCount.Val(); n > 0 { sqlDb.SetMaxIdleConns(n) } else if node.MaxIdleConnCount > 0 { @@ -336,6 +338,8 @@ func (bs *dbBase) getSqlDb(master bool) (sqlDb *sql.DB, err error) { if v != nil && sqlDb == nil { sqlDb = v.(*sql.DB) } + // 是否开启调试模式 + bs.SetDebug(node.Debug) // 是否手动选择数据库 if v := bs.schema.Val(); v != "" { sqlDb.Exec("USE " + v) diff --git a/g/database/gdb/gdb_config.go b/g/database/gdb/gdb_config.go index df9a02c89..c18992b94 100644 --- a/g/database/gdb/gdb_config.go +++ b/g/database/gdb/gdb_config.go @@ -33,6 +33,7 @@ type ConfigNode struct { Name string // 数据库名称 Type string // 数据库类型:mysql, sqlite, mssql, pgsql, oracle Role string // (可选,默认为master)数据库的角色,用于主从操作分离,至少需要有一个master,参数值:master, slave + Debug bool // (可选)开启调试模式 Weight int // (可选)用于负载均衡的权重计算,当集群中只有一个节点时,权重没有任何意义 Charset string // (可选,默认为 utf8)编码,默认为 utf8 LinkInfo string // (可选)自定义链接信息,当该字段被设置值时,以上链接字段(Host,Port,User,Pass,Name)将失效(该字段是一个扩展功能) @@ -132,8 +133,8 @@ func (node *ConfigNode) String() string { if node.LinkInfo != "" { return node.LinkInfo } - return fmt.Sprintf(`%s@%s:%s,%s,%s,%s,%s,%d-%d-%d`, node.User, node.Host, node.Port, - node.Name, node.Type, node.Role, node.Charset, + return fmt.Sprintf(`%s@%s:%s,%s,%s,%s,%s,%v,%d-%d-%d`, node.User, node.Host, node.Port, + node.Name, node.Type, node.Role, node.Charset, node.Debug, node.MaxIdleConnCount, node.MaxOpenConnCount, node.MaxConnLifetime, ) } diff --git a/g/frame/gins/gins.go b/g/frame/gins/gins.go index aa7380001..983b13c82 100644 --- a/g/frame/gins/gins.go +++ b/g/frame/gins/gins.go @@ -115,12 +115,15 @@ func Database(name ...string) gdb.DB { if value, ok := nodeMap["role"]; ok { node.Role = gconv.String(value) } - if value, ok := nodeMap["charset"]; ok { - node.Charset = gconv.String(value) + if value, ok := nodeMap["debug"]; ok { + node.Debug = gconv.Bool(value) } if value, ok := nodeMap["weight"]; ok { node.Weight = gconv.Int(value) } + if value, ok := nodeMap["charset"]; ok { + node.Charset = gconv.String(value) + } // Deprecated if value, ok := nodeMap["linkinfo"]; ok { node.LinkInfo = gconv.String(value) diff --git a/geg/database/gdb/mysql/config.toml b/geg/database/gdb/mysql/config.toml index 300ff3557..db81820fe 100644 --- a/geg/database/gdb/mysql/config.toml +++ b/geg/database/gdb/mysql/config.toml @@ -9,5 +9,6 @@ name = "test" type = "mysql" role = "master" + debug = "true" weight = "1" charset = "utf8" diff --git a/geg/database/gdb/mysql/gdb_debug.go b/geg/database/gdb/mysql/gdb_debug1.go similarity index 94% rename from geg/database/gdb/mysql/gdb_debug.go rename to geg/database/gdb/mysql/gdb_debug1.go index 8354514e2..6452d5eed 100644 --- a/geg/database/gdb/mysql/gdb_debug.go +++ b/geg/database/gdb/mysql/gdb_debug1.go @@ -24,8 +24,7 @@ func main() { panic(err) } db.SetDebug(true) - db.Table("user").Limit(2).Delete() - return + glog.SetPath("/tmp") // 执行3条SQL查询 diff --git a/geg/database/gdb/mysql/gdb_debug2.go b/geg/database/gdb/mysql/gdb_debug2.go new file mode 100644 index 000000000..504e25e82 --- /dev/null +++ b/geg/database/gdb/mysql/gdb_debug2.go @@ -0,0 +1,17 @@ +package main + +import ( + "github.com/gogf/gf/g" +) + +func main() { + db := g.DB() + // 执行3条SQL查询 + for i := 1; i <= 3; i++ { + db.Table("user").Where("id=?", i).One() + } + // 构造一条错误查询 + db.Table("user").Where("no_such_field=?", "just_test").One() + + db.Table("user").Data(g.Map{"name": "smith"}).Where("uid=?", 1).Save() +}