mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
dialect/sql: support mapping non-lowercased tags
This commit is contained in:
committed by
Ariel Mashraki
parent
f1223dc879
commit
e7ce44adb1
@@ -213,10 +213,15 @@ func scanStruct(typ reflect.Type, columns []string) (*rowScan, error) {
|
||||
names[columnName(f)] = []int{i}
|
||||
}
|
||||
for _, c := range columns {
|
||||
// Normalize columns if necessary, for example: COUNT(*) => count.
|
||||
name := strings.ToLower(strings.Split(c, "(")[0])
|
||||
idx, ok := names[name]
|
||||
if !ok {
|
||||
var idx []int
|
||||
// Normalize columns if necessary,
|
||||
// for example: COUNT(*) => count.
|
||||
switch name := strings.Split(c, "(")[0]; {
|
||||
case names[name] != nil:
|
||||
idx = names[name]
|
||||
case names[strings.ToLower(name)] != nil:
|
||||
idx = names[strings.ToLower(name)]
|
||||
default:
|
||||
return nil, fmt.Errorf("sql/scan: missing struct field for column: %s (%s)", c, name)
|
||||
}
|
||||
idxs = append(idxs, idx)
|
||||
|
||||
@@ -140,6 +140,17 @@ func TestScanSlice(t *testing.T) {
|
||||
require.Empty(t, pp)
|
||||
}
|
||||
|
||||
func TestScanSlice_CamelTags(t *testing.T) {
|
||||
mock := sqlmock.NewRows([]string{"nickName"}).
|
||||
AddRow("foo").
|
||||
AddRow("bar")
|
||||
var v []*struct {
|
||||
NickName string `json:"nickName"`
|
||||
}
|
||||
require.NoError(t, ScanSlice(toRows(mock), &v))
|
||||
require.Equal(t, "foo", v[0].NickName)
|
||||
}
|
||||
|
||||
func TestScanJSON(t *testing.T) {
|
||||
mock := sqlmock.NewRows([]string{"v", "p"}).
|
||||
AddRow([]byte(`{"i": 1, "s":"a8m"}`), []byte(`{"i": 1, "s":"a8m"}`)).
|
||||
|
||||
Reference in New Issue
Block a user