This commit is contained in:
Lunny Xiao 2020-02-29 08:59:03 +08:00
parent 63d9bc09c2
commit 4e559eee5d
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
2 changed files with 79 additions and 26 deletions

View File

@ -124,19 +124,23 @@ func (db *DB) reflectNew(typ reflect.Type) reflect.Value {
// QueryContext overwrites sql.DB.QueryContext // QueryContext overwrites sql.DB.QueryContext
func (db *DB) QueryContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) { func (db *DB) QueryContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) {
start := time.Now() start := time.Now()
db.Logger.BeforeSQL(log.LogContext{ if db.Logger != nil {
Ctx: ctx, db.Logger.BeforeSQL(log.LogContext{
SQL: query, Ctx: ctx,
Args: args, SQL: query,
}) Args: args,
})
}
rows, err := db.DB.QueryContext(ctx, query, args...) rows, err := db.DB.QueryContext(ctx, query, args...)
db.Logger.AfterSQL(log.LogContext{ if db.Logger != nil {
Ctx: ctx, db.Logger.AfterSQL(log.LogContext{
SQL: query, Ctx: ctx,
Args: args, SQL: query,
ExecuteTime: time.Now().Sub(start), Args: args,
Err: err, ExecuteTime: time.Now().Sub(start),
}) Err: err,
})
}
if err != nil { if err != nil {
if rows != nil { if rows != nil {
rows.Close() rows.Close()
@ -242,19 +246,23 @@ func (db *DB) ExecStructContext(ctx context.Context, query string, st interface{
func (db *DB) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) { func (db *DB) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) {
start := time.Now() start := time.Now()
db.Logger.BeforeSQL(log.LogContext{ if db.Logger != nil {
Ctx: ctx, db.Logger.BeforeSQL(log.LogContext{
SQL: query, Ctx: ctx,
Args: args, SQL: query,
}) Args: args,
})
}
res, err := db.DB.ExecContext(ctx, query, args...) res, err := db.DB.ExecContext(ctx, query, args...)
db.Logger.AfterSQL(log.LogContext{ if db.Logger != nil {
Ctx: ctx, db.Logger.AfterSQL(log.LogContext{
SQL: query, Ctx: ctx,
Args: args, SQL: query,
ExecuteTime: time.Now().Sub(start), Args: args,
Err: err, ExecuteTime: time.Now().Sub(start),
}) Err: err,
})
}
return res, err return res, err
} }

View File

@ -7,6 +7,9 @@ package core
import ( import (
"context" "context"
"database/sql" "database/sql"
"time"
"xorm.io/xorm/log"
) )
type Tx struct { type Tx struct {
@ -64,7 +67,7 @@ func (tx *Tx) ExecMapContext(ctx context.Context, query string, mp interface{})
if err != nil { if err != nil {
return nil, err return nil, err
} }
return tx.Tx.ExecContext(ctx, query, args...) return tx.ExecContext(ctx, query, args...)
} }
func (tx *Tx) ExecMap(query string, mp interface{}) (sql.Result, error) { func (tx *Tx) ExecMap(query string, mp interface{}) (sql.Result, error) {
@ -76,7 +79,29 @@ func (tx *Tx) ExecStructContext(ctx context.Context, query string, st interface{
if err != nil { if err != nil {
return nil, err return nil, err
} }
return tx.Tx.ExecContext(ctx, query, args...) return tx.ExecContext(ctx, query, args...)
}
func (tx *Tx) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) {
start := time.Now()
if tx.db.Logger != nil {
tx.db.Logger.BeforeSQL(log.LogContext{
Ctx: ctx,
SQL: query,
Args: args,
})
}
res, err := tx.Tx.ExecContext(ctx, query, args...)
if tx.db.Logger != nil {
tx.db.Logger.AfterSQL(log.LogContext{
Ctx: ctx,
SQL: query,
Args: args,
ExecuteTime: time.Now().Sub(start),
Err: err,
})
}
return res, err
} }
func (tx *Tx) ExecStruct(query string, st interface{}) (sql.Result, error) { func (tx *Tx) ExecStruct(query string, st interface{}) (sql.Result, error) {
@ -84,8 +109,28 @@ func (tx *Tx) ExecStruct(query string, st interface{}) (sql.Result, error) {
} }
func (tx *Tx) QueryContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) { func (tx *Tx) QueryContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) {
start := time.Now()
if tx.db.Logger != nil {
tx.db.Logger.BeforeSQL(log.LogContext{
Ctx: ctx,
SQL: query,
Args: args,
})
}
rows, err := tx.Tx.QueryContext(ctx, query, args...) rows, err := tx.Tx.QueryContext(ctx, query, args...)
if tx.db.Logger != nil {
tx.db.Logger.AfterSQL(log.LogContext{
Ctx: ctx,
SQL: query,
Args: args,
ExecuteTime: time.Now().Sub(start),
Err: err,
})
}
if err != nil { if err != nil {
if rows != nil {
rows.Close()
}
return nil, err return nil, err
} }
return &Rows{rows, tx.db}, nil return &Rows{rows, tx.db}, nil