func (self *t) qlFetchRow(dst interface{}, rows *sql.Rows) error { dstv := reflect.ValueOf(dst) if dstv.IsNil() || dstv.Kind() != reflect.Ptr { return db.ErrExpectingPointer } item_v := dstv.Elem() columns, err := sqlutil.GetRowColumns(rows) if err != nil { return err } next := rows.Next() if next == false { if err = rows.Err(); err != nil { return err } return db.ErrNoMoreRows } item, err := self.qlFetchResult(item_v.Type(), rows, columns) if err != nil { return err } item_v.Set(reflect.Indirect(item)) return nil }
func (self *t) qlFetchRows(dst interface{}, rows *sql.Rows) error { // Destination. dstv := reflect.ValueOf(dst) if dstv.IsNil() || dstv.Kind() != reflect.Ptr { return db.ErrExpectingPointer } if dstv.Elem().Kind() != reflect.Slice { return db.ErrExpectingSlicePointer } if dstv.Kind() != reflect.Ptr || dstv.Elem().Kind() != reflect.Slice || dstv.IsNil() { return db.ErrExpectingSliceMapStruct } columns, err := sqlutil.GetRowColumns(rows) if err != nil { return err } slicev := dstv.Elem() item_t := slicev.Type().Elem() for rows.Next() { item, err := self.qlFetchResult(item_t, rows, columns) if err != nil { return err } slicev = reflect.Append(slicev, reflect.Indirect(item)) } rows.Close() dstv.Elem().Set(slicev) return nil }