From a6b8eb4ba447619e7f9f18a7c871e4b9b05b4629 Mon Sep 17 00:00:00 2001 From: a631807682 <631807682@qq.com> Date: Tue, 24 May 2022 10:50:34 +0800 Subject: [PATCH] fix: duplicate column scan --- scan.go | 1 + tests/scan_test.go | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/scan.go b/scan.go index ad3734d8..21ca51a2 100644 --- a/scan.go +++ b/scan.go @@ -196,6 +196,7 @@ func Scan(rows Rows, db *DB, mode ScanMode) { for idx, column := range columns { if field := sch.LookUpField(column); field != nil && field.Readable { if curIndex, ok := selectedColumnsMap[column]; ok { + fields[idx] = field // handle duplicate fields for fieldIndex, selectField := range sch.Fields[curIndex+1:] { if selectField.DBName == column && selectField.Readable { selectedColumnsMap[column] = curIndex + fieldIndex + 1 diff --git a/tests/scan_test.go b/tests/scan_test.go index 425c0a29..1824c088 100644 --- a/tests/scan_test.go +++ b/tests/scan_test.go @@ -214,4 +214,11 @@ func TestScanToEmbedded(t *testing.T) { if !addressMatched { t.Errorf("Failed, no address matched") } + + personDupField := Person{ID: person1.ID} + if err := DB.Select("people.id, people.*"). + First(&personDupField).Error; err != nil { + t.Errorf("Failed to run join query, got error: %v", err) + } + AssertEqual(t, person1, personDupField) }