完善gdb包调试模式特性及示例代码

This commit is contained in:
John
2018-07-10 23:24:13 +08:00
parent db06c6acd3
commit dd528db528
4 changed files with 84 additions and 10 deletions

View File

@ -97,6 +97,7 @@ type Sql struct {
Sql string // SQL语句(可能带有预处理占位符)
Args []interface{} // 预处理参数值列表
Error error // 执行结果(nil为成功)
Cost int64 // 执行时间消耗(毫秒)
Func string // 执行方法名称
}

View File

@ -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...)
}
// 格式化错误信息

View File

@ -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...)
}
// 数据库查询,获取查询结果集,以列表结构返回