comment Iterator public methods

This commit is contained in:
Nash Tsai 2013-12-25 23:35:34 +08:00
parent 99ebe8f165
commit 6aa911aae0
2 changed files with 11 additions and 8 deletions

View File

@ -45,14 +45,6 @@ type dialect interface {
GetIndexes(tableName string) (map[string]*Index, error) GetIndexes(tableName string) (map[string]*Index, error)
} }
type Iterator struct {
session *Session
stmt *sql.Stmt
rows *sql.Rows
fields []string
beanType reflect.Type
}
type PK []interface{} type PK []interface{}
// Engine is the major struct of xorm, it means a database manager. // Engine is the major struct of xorm, it means a database manager.

View File

@ -5,6 +5,14 @@ import (
"reflect" "reflect"
) )
type Iterator struct {
session *Session
stmt *sql.Stmt
rows *sql.Rows
fields []string
beanType reflect.Type
}
func newIterator(session *Session, bean interface{}) (*Iterator, error) { func newIterator(session *Session, bean interface{}) (*Iterator, error) {
iterator := new(Iterator) iterator := new(Iterator)
iterator.session = session iterator.session = session
@ -55,6 +63,7 @@ func newIterator(session *Session, bean interface{}) (*Iterator, error) {
return iterator, nil return iterator, nil
} }
// iterate to next record and reuse passed bean obj
func (iterator *Iterator) NextReuse(bean interface{}) (interface{}, error) { func (iterator *Iterator) NextReuse(bean interface{}) (interface{}, error) {
if iterator.rows != nil && iterator.rows.Next() { if iterator.rows != nil && iterator.rows.Next() {
result, err := row2map(iterator.rows, iterator.fields) // !nashtsai! TODO remove row2map then scanMapIntoStruct conversation for better performance result, err := row2map(iterator.rows, iterator.fields) // !nashtsai! TODO remove row2map then scanMapIntoStruct conversation for better performance
@ -70,11 +79,13 @@ func (iterator *Iterator) NextReuse(bean interface{}) (interface{}, error) {
return nil, sql.ErrNoRows return nil, sql.ErrNoRows
} }
// iterate to next record
func (iterator *Iterator) Next() (interface{}, error) { func (iterator *Iterator) Next() (interface{}, error) {
b := reflect.New(iterator.beanType).Interface() b := reflect.New(iterator.beanType).Interface()
return iterator.NextReuse(b) return iterator.NextReuse(b)
} }
// close session if session.IsAutoClose is true, and claimed any opened resources
func (iterator *Iterator) Close() { func (iterator *Iterator) Close() {
if iterator.session.IsAutoClose { if iterator.session.IsAutoClose {
defer iterator.session.Close() defer iterator.session.Close()