diff --git a/engine.go b/engine.go index bb490125..ff52d204 100644 --- a/engine.go +++ b/engine.go @@ -45,14 +45,6 @@ type dialect interface { 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{} // Engine is the major struct of xorm, it means a database manager. diff --git a/iterator.go b/iterator.go index 4841d9df..1dc11b94 100644 --- a/iterator.go +++ b/iterator.go @@ -5,6 +5,14 @@ import ( "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) { iterator := new(Iterator) iterator.session = session @@ -55,6 +63,7 @@ func newIterator(session *Session, bean interface{}) (*Iterator, error) { return iterator, nil } +// iterate to next record and reuse passed bean obj func (iterator *Iterator) NextReuse(bean interface{}) (interface{}, error) { if iterator.rows != nil && iterator.rows.Next() { 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 } +// iterate to next record func (iterator *Iterator) Next() (interface{}, error) { b := reflect.New(iterator.beanType).Interface() return iterator.NextReuse(b) } +// close session if session.IsAutoClose is true, and claimed any opened resources func (iterator *Iterator) Close() { if iterator.session.IsAutoClose { defer iterator.session.Close()