From 80dab06a5741a0048ec271c55f7218d12f4194d8 Mon Sep 17 00:00:00 2001 From: Ariel Mashraki Date: Sun, 1 Dec 2019 03:20:16 -0800 Subject: [PATCH] dialect/sql: match column scan with sql tag Summary: Pull Request resolved: https://github.com/facebookincubator/ent/pull/209 Reviewed By: alexsn Differential Revision: D18757390 fbshipit-source-id: 534a8404a06487d90f1f4f10b1f93c774bac2e97 --- dialect/sql/scan.go | 4 +++- dialect/sql/scan_test.go | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/dialect/sql/scan.go b/dialect/sql/scan.go index 42802bfb8..b880fc962 100644 --- a/dialect/sql/scan.go +++ b/dialect/sql/scan.go @@ -101,7 +101,9 @@ func scanStruct(typ reflect.Type, columns []string) (*rowScan, error) { for i := 0; i < typ.NumField(); i++ { f := typ.Field(i) name := strings.ToLower(f.Name) - if tag, ok := f.Tag.Lookup("json"); ok { + if tag, ok := f.Tag.Lookup("sql"); ok { + name = tag + } else if tag, ok := f.Tag.Lookup("json"); ok { name = strings.Split(tag, ",")[0] } names[name] = i diff --git a/dialect/sql/scan_test.go b/dialect/sql/scan_test.go index 375841ac5..884149772 100644 --- a/dialect/sql/scan_test.go +++ b/dialect/sql/scan_test.go @@ -71,6 +71,20 @@ func TestScanSlice(t *testing.T) { require.Equal(t, "bar", v4[1].Name) require.Equal(t, 1, v4[0].Count) require.Equal(t, 2, v4[1].Count) + + rows = &mockRows{ + columns: []string{"nick_name", "COUNT(*)"}, + values: [][]interface{}{{"foo", 1}, {"bar", 2}}, + } + var v5 []*struct { + Count int + Name string `json:"name" sql:"nick_name"` + } + require.NoError(t, ScanSlice(rows, &v5)) + require.Equal(t, "foo", v5[0].Name) + require.Equal(t, "bar", v5[1].Name) + require.Equal(t, 1, v5[0].Count) + require.Equal(t, 2, v5[1].Count) } type mockRows struct {