/
pgdebug.go
46 lines (37 loc) · 903 Bytes
/
pgdebug.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package pgdebug
import (
"context"
"fmt"
"github.com/go-pg/pg/v10"
)
// DebugHook is a query hook that logs an error with a query if there are any.
// It can be installed with:
//
// db.AddQueryHook(pgext.DebugHook{})
type DebugHook struct {
// Verbose causes hook to print all queries (even those without an error).
Verbose bool
EmptyLine bool
}
func NewDebugHook() *DebugHook {
return new(DebugHook)
}
var _ pg.QueryHook = (*DebugHook)(nil)
func (h *DebugHook) BeforeQuery(ctx context.Context, evt *pg.QueryEvent) (context.Context, error) {
q, err := evt.FormattedQuery()
if err != nil {
return nil, err
}
if evt.Err != nil {
fmt.Printf("%s executing a query:\n%s\n", evt.Err, q)
} else if h.Verbose {
if h.EmptyLine {
fmt.Println()
}
fmt.Println(string(q))
}
return ctx, nil
}
func (DebugHook) AfterQuery(context.Context, *pg.QueryEvent) error {
return nil
}