package model

import (
	"dbweb/lib/bill"
	"reflect"
)

//Rows 类似sql.Rows
type Rows struct {
	m    *Model
	rows *bill.Rows
}

//Next 读取下一条，第一条必须调用Next后才可获取
func (b *Rows) Next() bool {
	return b.rows.Next()

}

//Err 返回最后一个操作是否有错误
func (b *Rows) Err() error {
	return b.rows.Err()
}

//Close 关闭Scaner，在读取所有的记录后也会自动关闭
func (b *Rows) Close() error {
	return b.rows.Close()
}

//Scan 扫描出当前的数据至一个struct中
func (b *Rows) Scan(out interface{}) error {
	rec, err := b.rows.Scan()
	if err != nil {
		return err
	}
	return rec.Scan(out)
}

//ScanVal 扫描出当前的数据,采用Model预定义的Scan方法
//主要用于DumpInstitution
func (b *Rows) ScanVal() (out interface{}, rec *bill.Record, err error) {
	rec, err = b.rows.Scan()
	if err != nil {
		return
	}
	out = reflect.New(reflect.TypeOf(b.m.m)).Interface()
	err = rec.Scan(out)
	return
}
