Skip to content

Commit

Permalink
feat: support logging sharding stQuery
Browse files Browse the repository at this point in the history
  • Loading branch information
GaleHuang committed Jul 11, 2024
1 parent 04a00d4 commit 24be183
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 4 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
.DS_Store
.idea
37 changes: 33 additions & 4 deletions conn_pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package sharding
import (
"context"
"database/sql"
"time"

"gorm.io/gorm"
)
Expand All @@ -23,6 +24,10 @@ func (pool ConnPool) PrepareContext(ctx context.Context, query string) (*sql.Stm
}

func (pool ConnPool) ExecContext(ctx context.Context, query string, args ...any) (sql.Result, error) {
var (
curTime = time.Now()
)

ftQuery, stQuery, table, err := pool.sharding.resolve(query, args...)
if err != nil {
return nil, err
Expand All @@ -33,16 +38,31 @@ func (pool ConnPool) ExecContext(ctx context.Context, query string, args ...any)
if table != "" {
if r, ok := pool.sharding.configs[table]; ok {
if r.DoubleWrite {
pool.ConnPool.ExecContext(ctx, ftQuery, args...)
pool.sharding.Logger.Trace(ctx, curTime, func() (sql string, rowsAffected int64) {
result, _ := pool.ConnPool.ExecContext(ctx, ftQuery, args...)
rowsAffected, _ = result.RowsAffected()
return pool.sharding.Explain(ftQuery, args...), rowsAffected
}, pool.sharding.Error)
}
}
}

return pool.ConnPool.ExecContext(ctx, stQuery, args...)
var result sql.Result
pool.sharding.Logger.Trace(ctx, curTime, func() (sql string, rowsAffected int64) {
result, err = pool.ConnPool.ExecContext(ctx, stQuery, args...)
rowsAffected, _ = result.RowsAffected()
return pool.sharding.Explain(stQuery, args...), rowsAffected
}, pool.sharding.Error)

return result, err
}

// https://github.com/go-gorm/gorm/blob/v1.21.11/callbacks/query.go#L18
func (pool ConnPool) QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error) {
var (
curTime = time.Now()
)

ftQuery, stQuery, table, err := pool.sharding.resolve(query, args...)
if err != nil {
return nil, err
Expand All @@ -53,12 +73,21 @@ func (pool ConnPool) QueryContext(ctx context.Context, query string, args ...any
if table != "" {
if r, ok := pool.sharding.configs[table]; ok {
if r.DoubleWrite {
pool.ConnPool.ExecContext(ctx, ftQuery, args...)
pool.sharding.Logger.Trace(ctx, curTime, func() (sql string, rowsAffected int64) {
pool.ConnPool.QueryContext(ctx, ftQuery, args...)
return pool.sharding.Explain(ftQuery, args...), 0
}, pool.sharding.Error)
}
}
}

return pool.ConnPool.QueryContext(ctx, stQuery, args...)
var rows *sql.Rows
pool.sharding.Logger.Trace(ctx, curTime, func() (sql string, rowsAffected int64) {
rows, err = pool.ConnPool.QueryContext(ctx, stQuery, args...)
return pool.sharding.Explain(stQuery, args...), 0
}, pool.sharding.Error)

return rows, err
}

func (pool ConnPool) QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row {
Expand Down

0 comments on commit 24be183

Please sign in to comment.