mirror of
https://github.com/ent/ent.git
synced 2026-05-22 09:31:45 +03:00
dialect/sqlscan: add interface{} scanning support
Summary: Pull Request resolved: https://github.com/facebookincubator/ent/pull/223 Reviewed By: alexsn Differential Revision: D18878581 fbshipit-source-id: 4a60ceea6c092f065e52e6b3bb625487451a815d
This commit is contained in:
committed by
Facebook Github Bot
parent
0fb33aaa5e
commit
f65cf5150e
@@ -98,6 +98,8 @@ func (r *rowScan) values() []interface{} {
|
||||
// scanType returns rowScan for the given reflect.Type.
|
||||
func scanType(typ reflect.Type, columns []string) (*rowScan, error) {
|
||||
switch k := typ.Kind(); {
|
||||
case k == reflect.Interface && typ.NumMethod() == 0:
|
||||
fallthrough // interface{}
|
||||
case k == reflect.String || k >= reflect.Bool && k <= reflect.Float64:
|
||||
return &rowScan{
|
||||
columns: []reflect.Type{typ},
|
||||
|
||||
@@ -6,6 +6,7 @@ package sql
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"database/sql/driver"
|
||||
"testing"
|
||||
|
||||
"github.com/DATA-DOG/go-sqlmock"
|
||||
@@ -139,6 +140,24 @@ func TestScanInt64(t *testing.T) {
|
||||
require.EqualValues(t, 10, n)
|
||||
}
|
||||
|
||||
func TestInterface(t *testing.T) {
|
||||
mock := sqlmock.NewRows([]string{"age"}).
|
||||
AddRow("10").
|
||||
AddRow("20")
|
||||
var values []driver.Value
|
||||
err := ScanSlice(toRows(mock), &values)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, []driver.Value{"10", "20"}, values)
|
||||
|
||||
mock = sqlmock.NewRows([]string{"age"}).
|
||||
AddRow(10).
|
||||
AddRow(20)
|
||||
values = values[:0:0]
|
||||
err = ScanSlice(toRows(mock), &values)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, []driver.Value{int64(10), int64(20)}, values)
|
||||
}
|
||||
|
||||
func toRows(mrows *sqlmock.Rows) *sql.Rows {
|
||||
db, mock, _ := sqlmock.New()
|
||||
mock.ExpectQuery("").WillReturnRows(mrows)
|
||||
|
||||
Reference in New Issue
Block a user