From 1dfd1b3ae5c0e67829a460d58e3277e0a469f38d Mon Sep 17 00:00:00 2001 From: demoManito <1430482733@qq.com> Date: Mon, 26 Sep 2022 18:31:01 +0800 Subject: [PATCH] fix test --- gorm.go | 8 ++++++-- tests/sql_builder_test.go | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gorm.go b/gorm.go index 043f76b9..b1544d33 100644 --- a/gorm.go +++ b/gorm.go @@ -400,8 +400,12 @@ func Expr(expr string, args ...interface{}) clause.Expr { // ExprToString clause.Expression Build to SQL String func (db *DB) ExprToString(expr clause.Expression) string { - expr.Build(db.Statement) - return db.Dialector.Explain(db.Statement.SQL.String(), db.Statement.Vars...) + stmt := &Statement{ + DB: db, + Clauses: map[string]clause.Clause{}, + } + expr.Build(stmt) + return db.Dialector.Explain(stmt.SQL.String(), stmt.Vars...) } // SetupJoinTable setup join table schema diff --git a/tests/sql_builder_test.go b/tests/sql_builder_test.go index 526e2bf0..39daf4eb 100644 --- a/tests/sql_builder_test.go +++ b/tests/sql_builder_test.go @@ -365,7 +365,20 @@ func TestExprToString(t *testing.T) { wantSQL := "((`age` > 10 AND `age` < 18) AND (`age` > 18 AND `age` < 21))" gotSQL := DB.ExprToString(clause.And(exprs...)) if wantSQL != gotSQL { - t.Errorf("want: %s \n, got: %s", wantSQL, gotSQL) + t.Fatalf("want: %s \n, got: %s", wantSQL, gotSQL) + } + + sql := DB.ToSQL(func(tx *gorm.DB) *gorm.DB { + exprs := []clause.Expression{ + clause.And(clause.Gt{Column: "age", Value: 10}, clause.Lt{Column: "age", Value: 18}), + clause.And(clause.Gt{Column: "age", Value: 18}, clause.Lt{Column: "age", Value: 21}), + } + gotSQL := tx.ExprToString(clause.And(exprs...)) + return tx.Where("name LIKE ?", "jesse*").Where(gotSQL).Find(&[]User{}) + }) + wantSQL = "SELECT * FROM `users` WHERE name LIKE \"jesse*\" AND (((`age` > 10 AND `age` < 18) AND (`age` > 18 AND `age` < 21))) AND `users`.`deleted_at` IS NULL" + if wantSQL != sql { + t.Fatalf("want: %s \n, got: %s", wantSQL, sql) } }