Skip to content

Commit

Permalink
Add ParameterizedQueries option support for logger, close #5288
Browse files Browse the repository at this point in the history
  • Loading branch information
jinzhu committed Dec 25, 2022
1 parent 794edad commit ddd3cc2
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 8 deletions.
6 changes: 5 additions & 1 deletion callbacks.go
Expand Up @@ -132,7 +132,11 @@ func (p *processor) Execute(db *DB) *DB {

if stmt.SQL.Len() > 0 {
db.Logger.Trace(stmt.Context, curTime, func() (string, int64) {
return db.Dialector.Explain(stmt.SQL.String(), stmt.Vars...), db.RowsAffected
sql, vars := stmt.SQL.String(), stmt.Vars
if filter, ok := db.Logger.(ParamsFilter); ok {
sql, vars = filter.ParamsFilter(stmt.Context, stmt.SQL.String(), stmt.Vars...)
}
return db.Dialector.Explain(sql, vars...), db.RowsAffected
}, db.Error)
}

Expand Down
12 changes: 6 additions & 6 deletions gorm.go
Expand Up @@ -464,12 +464,12 @@ func (db *DB) Use(plugin Plugin) error {

// ToSQL for generate SQL string.
//
// db.ToSQL(func(tx *gorm.DB) *gorm.DB {
// return tx.Model(&User{}).Where(&User{Name: "foo", Age: 20})
// .Limit(10).Offset(5)
// .Order("name ASC")
// .First(&User{})
// })
// db.ToSQL(func(tx *gorm.DB) *gorm.DB {
// return tx.Model(&User{}).Where(&User{Name: "foo", Age: 20})
// .Limit(10).Offset(5)
// .Order("name ASC")
// .First(&User{})
// })
func (db *DB) ToSQL(queryFn func(tx *DB) *DB) string {
tx := queryFn(db.Session(&Session{DryRun: true, SkipDefaultTransaction: true}))
stmt := tx.Statement
Expand Down
4 changes: 4 additions & 0 deletions interfaces.go
Expand Up @@ -26,6 +26,10 @@ type Plugin interface {
Initialize(*DB) error
}

type ParamsFilter interface {
ParamsFilter(ctx context.Context, sql string, params ...interface{}) (string, []interface{})
}

// ConnPool db conns pool interface
type ConnPool interface {
PrepareContext(ctx context.Context, query string) (*sql.Stmt, error)
Expand Down
10 changes: 10 additions & 0 deletions logger/logger.go
Expand Up @@ -55,6 +55,7 @@ type Config struct {
SlowThreshold time.Duration
Colorful bool
IgnoreRecordNotFoundError bool
ParameterizedQueries bool
LogLevel LogLevel
}

Expand All @@ -75,6 +76,7 @@ var (
SlowThreshold: 200 * time.Millisecond,
LogLevel: Warn,
IgnoreRecordNotFoundError: false,
ParameterizedQueries: true,
Colorful: true,
})
// Recorder Recorder logger records running SQL into a recorder instance
Expand Down Expand Up @@ -181,6 +183,14 @@ func (l logger) Trace(ctx context.Context, begin time.Time, fc func() (string, i
}
}

// Trace print sql message
func (l logger) ParamsFilter(ctx context.Context, sql string, params ...interface{}) (string, []interface{}) {
if l.Config.ParameterizedQueries {
return sql, nil
}
return sql, params
}

type traceRecorder struct {
Interface
BeginAt time.Time
Expand Down
5 changes: 4 additions & 1 deletion tests/go.mod
Expand Up @@ -3,11 +3,14 @@ module gorm.io/gorm/tests
go 1.16

require (
github.com/go-sql-driver/mysql v1.7.0 // indirect
github.com/google/uuid v1.3.0
github.com/jackc/pgtype v1.13.0 // indirect
github.com/jinzhu/now v1.1.5
github.com/lib/pq v1.10.7
github.com/mattn/go-sqlite3 v1.14.16 // indirect
golang.org/x/crypto v0.3.0 // indirect
github.com/microsoft/go-mssqldb v0.19.0 // indirect
golang.org/x/crypto v0.4.0 // indirect
gorm.io/driver/mysql v1.4.4
gorm.io/driver/postgres v1.4.5
gorm.io/driver/sqlite v1.4.3
Expand Down

0 comments on commit ddd3cc2

Please sign in to comment.