From 69f53a4b416a3474bd6f8c16acf16d2351f42651 Mon Sep 17 00:00:00 2001 From: Jinzhu Date: Sat, 26 Oct 2013 11:48:07 +0800 Subject: [PATCH] yay, find from db works --- orm.go | 14 ++++++++++++++ orm_test.go | 3 ++- utils.go | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/orm.go b/orm.go index 9ef9b9d6..e1001cf1 100644 --- a/orm.go +++ b/orm.go @@ -2,6 +2,8 @@ package gorm import ( "errors" + "fmt" + "reflect" "strconv" @@ -115,6 +117,18 @@ func (s *Orm) Exec(sql ...string) *Orm { func (s *Orm) First(out interface{}) *Orm { s.setModel(out) + rows, err := s.db.Query("SELECT * from users limit 1") + s.Error = err + for rows.Next() { + dest := reflect.ValueOf(out).Elem() + fmt.Printf("%+v", dest) + columns, _ := rows.Columns() + var values []interface{} + for _, value := range columns { + values = append(values, dest.FieldByName(value).Addr().Interface()) + } + s.Error = rows.Scan(values...) + } return s } diff --git a/orm_test.go b/orm_test.go index 668e0148..7f872982 100644 --- a/orm_test.go +++ b/orm_test.go @@ -16,12 +16,13 @@ func getDB() DB { } func TestSaveAndFirst(t *testing.T) { + // create table "users" ("name" varchar(255)); db := getDB() u := &User{Name: "jinzhu"} db.Save(u) user := &User{} - db.First(&user) + db.First(user) if user.Name != "jinzhu" { t.Errorf("User should be saved and fetched correctly") } diff --git a/utils.go b/utils.go index 9a439fbd..9e30b543 100644 --- a/utils.go +++ b/utils.go @@ -12,7 +12,7 @@ func modelValues(m interface{}) (columns []string, values []interface{}) { for i := 0; i < typ.NumField(); i++ { p := typ.Field(i) if !p.Anonymous { - columns = append(columns, strings.ToLower(p.Name)) + columns = append(columns, p.Name) value := reflect.ValueOf(m).Elem().FieldByName(p.Name) values = append(values, value.Interface()) }