From 04af65df3599af1b2e32164390e62208833a4d1b Mon Sep 17 00:00:00 2001 From: a631807682 <631807682@qq.com> Date: Mon, 6 Feb 2023 14:28:44 +0800 Subject: [PATCH] fix:throw model value required error --- callbacks/row.go | 2 +- statement.go | 2 ++ tests/query_test.go | 13 +++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/callbacks/row.go b/callbacks/row.go index 56be742e..beaa189e 100644 --- a/callbacks/row.go +++ b/callbacks/row.go @@ -7,7 +7,7 @@ import ( func RowQuery(db *gorm.DB) { if db.Error == nil { BuildQuerySQL(db) - if db.DryRun { + if db.DryRun || db.Error != nil { return } diff --git a/statement.go b/statement.go index 08165293..d32e13f3 100644 --- a/statement.go +++ b/statement.go @@ -120,6 +120,8 @@ func (stmt *Statement) QuoteTo(writer clause.Writer, field interface{}) { write(v.Raw, stmt.Schema.PrioritizedPrimaryField.DBName) } else if len(stmt.Schema.DBNames) > 0 { write(v.Raw, stmt.Schema.DBNames[0]) + } else { + stmt.DB.AddError(ErrModelValueRequired) } } else { write(v.Raw, v.Name) diff --git a/tests/query_test.go b/tests/query_test.go index fa8f09e8..affbaf6b 100644 --- a/tests/query_test.go +++ b/tests/query_test.go @@ -1366,3 +1366,16 @@ func TestQueryResetNullValue(t *testing.T) { AssertEqual(t, q1, qs[0]) AssertEqual(t, q2, qs[1]) } + +func TestQueryError(t *testing.T) { + type P struct{} + var p1 P + err := DB.Take(&p1, 1).Error + AssertEqual(t, err, gorm.ErrModelValueRequired) + + var p2 interface{} + + err = DB.Table("ps").Clauses(clause.Eq{Column: clause.Column{ + Table: clause.CurrentTable, Name: clause.PrimaryKey}, Value: 1}).Scan(&p2).Error + AssertEqual(t, err, gorm.ErrModelValueRequired) +}