Callback for tracing sql queries
This commit is contained in:
parent
0fbff1e8f0
commit
0cf74aa0e6
13
callback.go
13
callback.go
@ -13,6 +13,7 @@ var DefaultCallback = &Callback{}
|
|||||||
// Field `deletes` contains callbacks will be call when deleting object
|
// Field `deletes` contains callbacks will be call when deleting object
|
||||||
// Field `queries` contains callbacks will be call when querying object with query methods like Find, First, Related, Association...
|
// Field `queries` contains callbacks will be call when querying object with query methods like Find, First, Related, Association...
|
||||||
// Field `rowQueries` contains callbacks will be call when querying object with Row, Rows...
|
// Field `rowQueries` contains callbacks will be call when querying object with Row, Rows...
|
||||||
|
// Field `trace` contains callbacks will be call after any sql query was executed
|
||||||
// Field `processors` contains all callback processors, will be used to generate above callbacks in order
|
// Field `processors` contains all callback processors, will be used to generate above callbacks in order
|
||||||
type Callback struct {
|
type Callback struct {
|
||||||
creates []*func(scope *Scope)
|
creates []*func(scope *Scope)
|
||||||
@ -20,6 +21,7 @@ type Callback struct {
|
|||||||
deletes []*func(scope *Scope)
|
deletes []*func(scope *Scope)
|
||||||
queries []*func(scope *Scope)
|
queries []*func(scope *Scope)
|
||||||
rowQueries []*func(scope *Scope)
|
rowQueries []*func(scope *Scope)
|
||||||
|
trace []*func(scope *Scope)
|
||||||
processors []*CallbackProcessor
|
processors []*CallbackProcessor
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,6 +45,7 @@ func (c *Callback) clone() *Callback {
|
|||||||
queries: c.queries,
|
queries: c.queries,
|
||||||
rowQueries: c.rowQueries,
|
rowQueries: c.rowQueries,
|
||||||
processors: c.processors,
|
processors: c.processors,
|
||||||
|
trace: c.trace,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,6 +82,11 @@ func (c *Callback) RowQuery() *CallbackProcessor {
|
|||||||
return &CallbackProcessor{kind: "row_query", parent: c}
|
return &CallbackProcessor{kind: "row_query", parent: c}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Trace could be used to register callbacks for tracing sql queries, refer `Create` for usage
|
||||||
|
func (c *Callback) Trace() *CallbackProcessor {
|
||||||
|
return &CallbackProcessor{kind: "trace", parent: c}
|
||||||
|
}
|
||||||
|
|
||||||
// After insert a new callback after callback `callbackName`, refer `Callbacks.Create`
|
// After insert a new callback after callback `callbackName`, refer `Callbacks.Create`
|
||||||
func (cp *CallbackProcessor) After(callbackName string) *CallbackProcessor {
|
func (cp *CallbackProcessor) After(callbackName string) *CallbackProcessor {
|
||||||
cp.after = callbackName
|
cp.after = callbackName
|
||||||
@ -210,7 +218,7 @@ func sortProcessors(cps []*CallbackProcessor) []*func(scope *Scope) {
|
|||||||
|
|
||||||
// reorder all registered processors, and reset CURD callbacks
|
// reorder all registered processors, and reset CURD callbacks
|
||||||
func (c *Callback) reorder() {
|
func (c *Callback) reorder() {
|
||||||
var creates, updates, deletes, queries, rowQueries []*CallbackProcessor
|
var creates, updates, deletes, queries, rowQueries, trace []*CallbackProcessor
|
||||||
|
|
||||||
for _, processor := range c.processors {
|
for _, processor := range c.processors {
|
||||||
if processor.name != "" {
|
if processor.name != "" {
|
||||||
@ -225,6 +233,8 @@ func (c *Callback) reorder() {
|
|||||||
queries = append(queries, processor)
|
queries = append(queries, processor)
|
||||||
case "row_query":
|
case "row_query":
|
||||||
rowQueries = append(rowQueries, processor)
|
rowQueries = append(rowQueries, processor)
|
||||||
|
case "trace":
|
||||||
|
trace = append(trace, processor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -234,4 +244,5 @@ func (c *Callback) reorder() {
|
|||||||
c.deletes = sortProcessors(deletes)
|
c.deletes = sortProcessors(deletes)
|
||||||
c.queries = sortProcessors(queries)
|
c.queries = sortProcessors(queries)
|
||||||
c.rowQueries = sortProcessors(rowQueries)
|
c.rowQueries = sortProcessors(rowQueries)
|
||||||
|
c.trace = sortProcessors(trace)
|
||||||
}
|
}
|
||||||
|
3
scope.go
3
scope.go
@ -947,6 +947,9 @@ func (scope *Scope) typeName() string {
|
|||||||
|
|
||||||
// trace print sql log
|
// trace print sql log
|
||||||
func (scope *Scope) trace(t time.Time) {
|
func (scope *Scope) trace(t time.Time) {
|
||||||
|
scope.Set("gorm:trace-time", t)
|
||||||
|
scope.callCallbacks(scope.db.parent.callbacks.trace)
|
||||||
|
|
||||||
if len(scope.SQL) > 0 {
|
if len(scope.SQL) > 0 {
|
||||||
scope.db.slog(scope.SQL, t, scope.SQLVars...)
|
scope.db.slog(scope.SQL, t, scope.SQLVars...)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user