From 983443da0f8c9fea72422decf6c65e73395269cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=93=E8=B0=B7=E6=9C=BA?= Date: Tue, 1 Nov 2022 19:37:29 +0800 Subject: [PATCH] Modify ToSQL function signature add error return value --- gorm.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/gorm.go b/gorm.go index 589fc4ff..0f640ddb 100644 --- a/gorm.go +++ b/gorm.go @@ -464,15 +464,19 @@ func (db *DB) Use(plugin Plugin) error { // ToSQL for generate SQL string. // -// db.ToSQL(func(tx *gorm.DB) *gorm.DB { +// db.ToSQL(func(tx *gorm.DB) (*gorm.DB, error) { // return tx.Model(&User{}).Where(&User{Name: "foo", Age: 20}) // .Limit(10).Offset(5) // .Order("name ASC") -// .First(&User{}) +// .First(&User{}), nil // }) -func (db *DB) ToSQL(queryFn func(tx *DB) *DB) string { - tx := queryFn(db.Session(&Session{DryRun: true, SkipDefaultTransaction: true})) +func (db *DB) ToSQL(queryFn func(tx *DB) (*DB, error)) (string, error) { + tx, err := queryFn(db.Session(&Session{DryRun: true, SkipDefaultTransaction: true})) + if err != nil { + return "", err + } + stmt := tx.Statement - return db.Dialector.Explain(stmt.SQL.String(), stmt.Vars...) + return db.Dialector.Explain(stmt.SQL.String(), stmt.Vars...), nil }