41 lines
910 B
Go
41 lines
910 B
Go
|
package sqldb
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type (
|
||
|
// BeforeCallback is a kind of function that can be called before a query is
|
||
|
// executed.
|
||
|
BeforeCallback func(ctx context.Context, query string)
|
||
|
// AfterCallback is a kind of function that can be called after a query was
|
||
|
// executed.
|
||
|
AfterCallback func(ctx context.Context, query string, took time.Duration, err error)
|
||
|
)
|
||
|
|
||
|
type callbacks struct {
|
||
|
before []BeforeCallback
|
||
|
after []AfterCallback
|
||
|
}
|
||
|
|
||
|
func (c *callbacks) addBefore(cb BeforeCallback) {
|
||
|
c.before = append(c.before, cb)
|
||
|
}
|
||
|
|
||
|
func (c *callbacks) addAfter(cb AfterCallback) {
|
||
|
c.after = append(c.after, cb)
|
||
|
}
|
||
|
|
||
|
func (c *callbacks) callBefore(ctx context.Context, query string) {
|
||
|
for _, cb := range c.before {
|
||
|
cb(ctx, query)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *callbacks) callAfter(ctx context.Context, query string, took time.Duration, err error) {
|
||
|
for _, cb := range c.after {
|
||
|
cb(ctx, query, took, err)
|
||
|
}
|
||
|
}
|