mirror of
https://github.com/ent/ent.git
synced 2026-05-22 09:31:45 +03:00
dialect/sql/sqlscan: skip unexported struct fields
This commit is contained in:
committed by
Ariel Mashraki
parent
9dd3933919
commit
727e41e357
@@ -179,6 +179,10 @@ func scanStruct(typ reflect.Type, columns []string) (*rowScan, error) {
|
||||
)
|
||||
for i := 0; i < typ.NumField(); i++ {
|
||||
f := typ.Field(i)
|
||||
// Skip unexported fields.
|
||||
if f.PkgPath != "" {
|
||||
continue
|
||||
}
|
||||
name := strings.ToLower(f.Name)
|
||||
if tag, ok := f.Tag.Lookup("sql"); ok {
|
||||
name = tag
|
||||
|
||||
@@ -116,18 +116,27 @@ func TestScanSlice(t *testing.T) {
|
||||
AddRow(10, "Ariel", "Mashraki")
|
||||
err := ScanSlice(toRows(mock), nil)
|
||||
require.EqualError(t, err, "sql/scan: ScanSlice(nil)")
|
||||
var p []struct {
|
||||
type P struct {
|
||||
_ int
|
||||
ID int
|
||||
First string
|
||||
Last string
|
||||
}
|
||||
var p []P
|
||||
err = ScanSlice(toRows(mock), p)
|
||||
require.EqualError(t, err, "sql/scan: ScanSlice(non-pointer []struct { _ int; ID int; First string; Last string })")
|
||||
require.EqualError(t, err, "sql/scan: ScanSlice(non-pointer []sql.P)")
|
||||
|
||||
require.NoError(t, ScanSlice(toRows(mock), &p))
|
||||
require.Equal(t, 10, p[0].ID)
|
||||
require.Equal(t, "Ariel", p[0].First)
|
||||
require.Equal(t, "Mashraki", p[0].Last)
|
||||
|
||||
var pp []struct{ _, id int }
|
||||
mock = sqlmock.NewRows([]string{"id"}).
|
||||
AddRow(10)
|
||||
err = ScanSlice(toRows(mock), &pp)
|
||||
require.EqualError(t, err, "sql/scan: missing struct field for column: id (id)")
|
||||
require.Empty(t, pp)
|
||||
}
|
||||
|
||||
func TestScanSlicePtr(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user