diff --git a/clause/returning.go b/clause/returning.go index d94b7a4c..76064c4a 100644 --- a/clause/returning.go +++ b/clause/returning.go @@ -26,9 +26,12 @@ func (returning Returning) Build(builder Builder) { // MergeClause merge order by clauses func (returning Returning) MergeClause(clause *Clause) { - if v, ok := clause.Expression.(Returning); ok { - returning.Columns = append(v.Columns, returning.Columns...) + if v, ok := clause.Expression.(Returning); ok && len(returning.Columns) > 0 { + if v.Columns != nil { + returning.Columns = append(v.Columns, returning.Columns...) + } else { + returning.Columns = nil + } } - clause.Expression = returning } diff --git a/clause/returning_test.go b/clause/returning_test.go index bd0ecce8..b7a408ba 100644 --- a/clause/returning_test.go +++ b/clause/returning_test.go @@ -26,6 +26,22 @@ func TestReturning(t *testing.T) { }}, "SELECT * FROM `users` RETURNING `users`.`id`,`name`,`age`", nil, }, + { + []clause.Interface{clause.Select{}, clause.From{}, clause.Returning{ + []clause.Column{clause.PrimaryColumn}, + }, clause.Returning{}, clause.Returning{ + []clause.Column{{Name: "name"}, {Name: "age"}}, + }}, + "SELECT * FROM `users` RETURNING *", nil, + }, + { + []clause.Interface{clause.Select{}, clause.From{}, clause.Returning{ + []clause.Column{clause.PrimaryColumn}, + }, clause.Returning{ + []clause.Column{{Name: "name"}, {Name: "age"}}, + }, clause.Returning{}}, + "SELECT * FROM `users` RETURNING *", nil, + }, } for idx, result := range results {