Passed
Push — main ( 9e2022...6ef1c9 )
by Christian
02:04 queued 14s
created

connector.prettyQuery   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
package connector
2
3
import (
4
	"context"
5
	"database/sql"
6
	"database/sql/driver"
7
	"strings"
8
	"time"
9
10
	"github.com/cdleo/go-commons/logger"
11
	"github.com/cdleo/go-commons/sqlcommons"
12
	proxy "github.com/cdleo/go-sql-proxy"
13
)
14
15
func registerProxy(name string, logger logger.Logger, translator sqlcommons.SQLAdapter, sqlDriver driver.Driver) {
16
17
	drivers := sql.Drivers()
18
	for _, item := range drivers {
19
		if item == name {
20
			return
21
		}
22
	}
23
24
	sql.Register(name, proxy.NewProxyContext(sqlDriver, &proxy.HooksContext{
25
		Open: func(_ context.Context, _ interface{}, conn *proxy.Conn) error {
26
			logger.Qry("Open conn")
27
			return nil
28
		},
29
		Close: func(_ context.Context, _ interface{}, conn *proxy.Conn) error {
30
			logger.Qry("Close conn")
31
			return nil
32
		},
33
34
		PreExec: func(_ context.Context, stmt *proxy.Stmt, _ []driver.NamedValue) (interface{}, error) {
35
			stmt.QueryString = translator.Translate(stmt.QueryString)
36
			return time.Now(), nil
37
		},
38
		PostExec: func(_ context.Context, ctx interface{}, stmt *proxy.Stmt, args []driver.NamedValue, _ driver.Result, _ error) error {
39
			logger.Tracef("Exec: %s; args = %v (%s)", prettyQuery(stmt.QueryString), args, time.Since(ctx.(time.Time)))
40
			return nil
41
		},
42
43
		PreQuery: func(_ context.Context, stmt *proxy.Stmt, _ []driver.NamedValue) (interface{}, error) {
44
			stmt.QueryString = translator.Translate(stmt.QueryString)
45
			return time.Now(), nil
46
		},
47
		PostQuery: func(_ context.Context, ctx interface{}, stmt *proxy.Stmt, args []driver.NamedValue, _ driver.Rows, _ error) error {
48
			logger.Tracef("Query: %s; args = %v (%s)", prettyQuery(stmt.QueryString), args, time.Since(ctx.(time.Time)))
49
			return nil
50
		},
51
52
		Begin: func(_ context.Context, _ interface{}, conn *proxy.Conn) error {
53
			logger.Qry("Begin")
54
			return nil
55
		},
56
		Commit: func(_ context.Context, _ interface{}, tx *proxy.Tx) error {
57
			logger.Qry("Commit")
58
			return nil
59
		},
60
		Rollback: func(_ context.Context, _ interface{}, tx *proxy.Tx) error {
61
			logger.Qry("Rollback")
62
			return nil
63
		},
64
65
		OnError: func(ctx interface{}, err error) error {
66
			return translator.ErrorHandler(err)
67
		},
68
	}))
69
}
70
71
func prettyQuery(query string) string {
72
	return strings.ReplaceAll(strings.ReplaceAll(query, "\t", ""), "\n", "")
73
}
74