mirror of
https://gitee.com/johng/gf
synced 2026-06-25 09:15:41 +08:00
增加调试模式下的SQL列表打印方法PrintQueriedSqls;改进gtime.NewFromTimeStamp方法,支持纳秒级的时间戳参数
This commit is contained in:
@ -102,7 +102,8 @@ type Sql struct {
|
||||
Sql string // SQL语句(可能带有预处理占位符)
|
||||
Args []interface{} // 预处理参数值列表
|
||||
Error error // 执行结果(nil为成功)
|
||||
Cost int64 // 执行时间消耗(毫秒)
|
||||
Start int64 // 执行开始时间(毫秒)
|
||||
End int64 // 执行结束时间(毫秒)
|
||||
Func string // 执行方法名称
|
||||
}
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@ func (db *Db) SetDebug(debug bool) {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取已经执行的SQL列表
|
||||
// 获取已经执行的SQL列表(仅在debug=true时有效)
|
||||
func (db *Db) GetQueriedSqls() []*Sql {
|
||||
if db.sqls == nil {
|
||||
return nil
|
||||
@ -49,6 +49,21 @@ func (db *Db) GetQueriedSqls() []*Sql {
|
||||
return sqls
|
||||
}
|
||||
|
||||
// 打印已经执行的SQL列表(仅在debug=true时有效)
|
||||
func (db *Db) PrintQueriedSqls() {
|
||||
sqls := db.GetQueriedSqls()
|
||||
for k, v := range sqls {
|
||||
fmt.Println(len(sqls) - k, ":")
|
||||
fmt.Println(" Sql :", v.Sql)
|
||||
fmt.Println(" Args :", v.Args)
|
||||
fmt.Println(" Error:", v.Error)
|
||||
fmt.Println(" Start:", gtime.NewFromTimeStamp(v.Start).Format("Y-m-d H:i:s.u"))
|
||||
fmt.Println(" End :", gtime.NewFromTimeStamp(v.End).Format("Y-m-d H:i:s.u"))
|
||||
fmt.Println(" Cost :", v.End - v.Start, "ms")
|
||||
fmt.Println(" Func :", v.Func)
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭链接
|
||||
func (db *Db) Close() error {
|
||||
if db.master != nil {
|
||||
@ -81,7 +96,8 @@ func (db *Db) Query(query string, args ...interface{}) (*sql.Rows, error) {
|
||||
Sql : *p,
|
||||
Args : args,
|
||||
Error : err,
|
||||
Cost : militime2 - militime1,
|
||||
Start : militime1,
|
||||
End : militime2,
|
||||
Func : "DB:Query",
|
||||
})
|
||||
} else {
|
||||
@ -108,7 +124,8 @@ func (db *Db) Exec(query string, args ...interface{}) (sql.Result, error) {
|
||||
Sql : *p,
|
||||
Args : args,
|
||||
Error : err,
|
||||
Cost : militime2 - militime1,
|
||||
Start : militime1,
|
||||
End : militime2,
|
||||
Func : "DB:Exec",
|
||||
})
|
||||
} else {
|
||||
|
||||
@ -46,7 +46,8 @@ func (tx *Tx) Query(query string, args ...interface{}) (*sql.Rows, error) {
|
||||
Sql : *p,
|
||||
Args : args,
|
||||
Error : err,
|
||||
Cost : militime2 - militime1,
|
||||
Start : militime1,
|
||||
End : militime2,
|
||||
Func : "TX:Query",
|
||||
})
|
||||
} else {
|
||||
@ -73,7 +74,8 @@ func (tx *Tx) Exec(query string, args ...interface{}) (sql.Result, error) {
|
||||
Sql : *p,
|
||||
Args : args,
|
||||
Error : err,
|
||||
Cost : militime2 - militime1,
|
||||
Start : militime1,
|
||||
End : militime2,
|
||||
Func : "TX:Exec",
|
||||
})
|
||||
} else {
|
||||
|
||||
@ -66,10 +66,13 @@ func NewFromStrLayout (str string, layout string) *Time {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 时间戳转换为时间对象
|
||||
// 时间戳转换为时间对象,时间戳支持到纳秒的数值
|
||||
func NewFromTimeStamp (timestamp int64) *Time {
|
||||
return &Time{
|
||||
time.Unix(timestamp, 0),
|
||||
for timestamp < 1e18 {
|
||||
timestamp *= 10
|
||||
}
|
||||
return &Time {
|
||||
time.Unix(int64(timestamp/1e9), timestamp%1e9),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,20 +1,19 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gitee.com/johng/gf/g/database/gdb"
|
||||
)
|
||||
|
||||
func main() {
|
||||
gdb.AddDefaultConfigNode(gdb.ConfigNode {
|
||||
Host : "127.0.0.1",
|
||||
Port : "3306",
|
||||
User : "root",
|
||||
Pass : "123456",
|
||||
Name : "test",
|
||||
Type : "mysql",
|
||||
Role : "master",
|
||||
Charset : "utf8",
|
||||
gdb.AddDefaultConfigNode(gdb.ConfigNode{
|
||||
Host: "127.0.0.1",
|
||||
Port: "3306",
|
||||
User: "root",
|
||||
Pass: "123456",
|
||||
Name: "test",
|
||||
Type: "mysql",
|
||||
Role: "master",
|
||||
Charset: "utf8",
|
||||
})
|
||||
db, err := gdb.New()
|
||||
if err != nil {
|
||||
@ -29,12 +28,5 @@ func main() {
|
||||
// 构造一条错误查询
|
||||
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)
|
||||
}
|
||||
db.PrintQueriedSqls()
|
||||
}
|
||||
@ -2,14 +2,19 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gitee.com/johng/gf/g/util/gregex"
|
||||
"gitee.com/johng/gf/g/os/gtime"
|
||||
)
|
||||
|
||||
func main() {
|
||||
name := "page"
|
||||
path := "/page/template/{page}.html"
|
||||
rule := fmt.Sprintf(`{%s}`, name, name)
|
||||
tpl, err := gregex.ReplaceString(rule, `{.page}`, path)
|
||||
fmt.Println(err)
|
||||
fmt.Println(tpl)
|
||||
fmt.Println(gtime.Second())
|
||||
fmt.Println(gtime.Nanosecond())
|
||||
t := gtime.Millisecond()
|
||||
for t < 1e18 {
|
||||
t *= 10
|
||||
}
|
||||
fmt.Println(t)
|
||||
fmt.Println(int64(t/1e9))
|
||||
fmt.Println(t%1e9)
|
||||
|
||||
fmt.Println(gtime.NewFromTimeStamp(t).Format("Y-m-d H:i:s.u"))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user