mirror of
https://gitee.com/johng/gf
synced 2026-06-07 10:22:11 +08:00
完善gdb包调试模式特性及示例代码
This commit is contained in:
@ -97,6 +97,7 @@ type Sql struct {
|
||||
Sql string // SQL语句(可能带有预处理占位符)
|
||||
Args []interface{} // 预处理参数值列表
|
||||
Error error // 执行结果(nil为成功)
|
||||
Cost int64 // 执行时间消耗(毫秒)
|
||||
Func string // 执行方法名称
|
||||
}
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@ import (
|
||||
"gitee.com/johng/gf/g/util/gstr"
|
||||
"gitee.com/johng/gf/g/util/gconv"
|
||||
"gitee.com/johng/gf/g/container/gring"
|
||||
"gitee.com/johng/gf/g/os/gtime"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -68,15 +69,22 @@ func (db *Db) Close() error {
|
||||
|
||||
// 数据库sql查询操作,主要执行查询
|
||||
func (db *Db) Query(query string, args ...interface{}) (*sql.Rows, error) {
|
||||
p := db.link.handleSqlBeforeExec(&query)
|
||||
rows, err := db.slave.Query(*p, args ...)
|
||||
var err error
|
||||
var rows *sql.Rows
|
||||
p := db.link.handleSqlBeforeExec(&query)
|
||||
if db.debug.Val() {
|
||||
militime1 := gtime.Millisecond()
|
||||
rows, err = db.slave.Query(*p, args ...)
|
||||
militime2 := gtime.Millisecond()
|
||||
db.sqls.Put(&Sql{
|
||||
Sql : *p,
|
||||
Args : args,
|
||||
Error : err,
|
||||
Cost : militime2 - militime1,
|
||||
Func : "DB:Query",
|
||||
})
|
||||
} else {
|
||||
rows, err = db.slave.Query(*p, args ...)
|
||||
}
|
||||
if err == nil {
|
||||
return rows, nil
|
||||
@ -88,17 +96,24 @@ func (db *Db) Query(query string, args ...interface{}) (*sql.Rows, error) {
|
||||
|
||||
// 执行一条sql,并返回执行情况,主要用于非查询操作
|
||||
func (db *Db) Exec(query string, args ...interface{}) (sql.Result, error) {
|
||||
p := db.link.handleSqlBeforeExec(&query)
|
||||
r, err := db.master.Exec(*p, args ...)
|
||||
var err error
|
||||
var result sql.Result
|
||||
p := db.link.handleSqlBeforeExec(&query)
|
||||
if db.debug.Val() {
|
||||
militime1 := gtime.Millisecond()
|
||||
result, err = db.master.Exec(*p, args ...)
|
||||
militime2 := gtime.Millisecond()
|
||||
db.sqls.Put(&Sql{
|
||||
Sql : *p,
|
||||
Args : args,
|
||||
Error : err,
|
||||
Cost : militime2 - militime1,
|
||||
Func : "DB:Exec",
|
||||
})
|
||||
} else {
|
||||
result, err = db.master.Exec(*p, args ...)
|
||||
}
|
||||
return r, db.formatError(err, p, args...)
|
||||
return result, db.formatError(err, p, args...)
|
||||
}
|
||||
|
||||
// 格式化错误信息
|
||||
|
||||
@ -15,6 +15,7 @@ import (
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"gitee.com/johng/gf/g/util/gconv"
|
||||
"reflect"
|
||||
"gitee.com/johng/gf/g/os/gtime"
|
||||
)
|
||||
|
||||
// 数据库事务对象
|
||||
@ -35,15 +36,22 @@ func (tx *Tx) Rollback() error {
|
||||
|
||||
// (事务)数据库sql查询操作,主要执行查询
|
||||
func (tx *Tx) Query(query string, args ...interface{}) (*sql.Rows, error) {
|
||||
p := tx.db.link.handleSqlBeforeExec(&query)
|
||||
rows, err := tx.tx.Query(*p, args ...)
|
||||
var err error
|
||||
var rows *sql.Rows
|
||||
p := tx.db.link.handleSqlBeforeExec(&query)
|
||||
if tx.db.debug.Val() {
|
||||
militime1 := gtime.Millisecond()
|
||||
rows, err = tx.tx.Query(*p, args ...)
|
||||
militime2 := gtime.Millisecond()
|
||||
tx.db.sqls.Put(&Sql{
|
||||
Sql : *p,
|
||||
Args : args,
|
||||
Error : err,
|
||||
Cost : militime2 - militime1,
|
||||
Func : "TX:Query",
|
||||
})
|
||||
} else {
|
||||
rows, err = tx.tx.Query(*p, args ...)
|
||||
}
|
||||
if err == nil {
|
||||
return rows, nil
|
||||
@ -55,17 +63,24 @@ func (tx *Tx) Query(query string, args ...interface{}) (*sql.Rows, error) {
|
||||
|
||||
// (事务)执行一条sql,并返回执行情况,主要用于非查询操作
|
||||
func (tx *Tx) Exec(query string, args ...interface{}) (sql.Result, error) {
|
||||
p := tx.db.link.handleSqlBeforeExec(&query)
|
||||
r, err := tx.tx.Exec(*p, args ...)
|
||||
var err error
|
||||
var result sql.Result
|
||||
p := tx.db.link.handleSqlBeforeExec(&query)
|
||||
if tx.db.debug.Val() {
|
||||
militime1 := gtime.Millisecond()
|
||||
result, err = tx.tx.Exec(*p, args ...)
|
||||
militime2 := gtime.Millisecond()
|
||||
tx.db.sqls.Put(&Sql{
|
||||
Sql : *p,
|
||||
Args : args,
|
||||
Error : err,
|
||||
Cost : militime2 - militime1,
|
||||
Func : "TX:Exec",
|
||||
})
|
||||
} else {
|
||||
result, err = tx.tx.Exec(*p, args ...)
|
||||
}
|
||||
return r, tx.db.formatError(err, p, args...)
|
||||
return result, tx.db.formatError(err, p, args...)
|
||||
}
|
||||
|
||||
// 数据库查询,获取查询结果集,以列表结构返回
|
||||
|
||||
43
geg/database/mysql/gdb_debug.go
Normal file
43
geg/database/mysql/gdb_debug.go
Normal file
@ -0,0 +1,43 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gitee.com/johng/gf/g/database/gdb"
|
||||
)
|
||||
|
||||
var db *gdb.Db
|
||||
|
||||
// 初始化配置及创建数据库
|
||||
func init () {
|
||||
gdb.AddDefaultConfigNode(gdb.ConfigNode {
|
||||
Host : "127.0.0.1",
|
||||
Port : "3306",
|
||||
User : "root",
|
||||
Pass : "123456",
|
||||
Name : "test",
|
||||
Type : "mysql",
|
||||
Role : "master",
|
||||
Charset : "utf8",
|
||||
})
|
||||
db, _ = gdb.New()
|
||||
}
|
||||
|
||||
|
||||
func main() {
|
||||
db.SetDebug(true)
|
||||
// 执行3条SQL查询
|
||||
for i := 1; i <= 3; i++ {
|
||||
db.Table("user").Where("uid=?", i).One()
|
||||
}
|
||||
// 构造一条错误查询
|
||||
db.Table("user").Where("no_such_field=?", "just_test").One()
|
||||
|
||||
for k, v := range db.GetQueriedSqls() {
|
||||
fmt.Println(k, ":")
|
||||
fmt.Println("Sql :", v.Sql)
|
||||
fmt.Println("Args :", v.Args)
|
||||
fmt.Println("Error:", v.Error)
|
||||
fmt.Println("Cost :", v.Cost)
|
||||
fmt.Println("Func :", v.Func)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user