diff --git a/orm/db.go b/orm/db.go index 3454da79..782e3bc3 100644 --- a/orm/db.go +++ b/orm/db.go @@ -486,6 +486,8 @@ func (d *dbBase) DeleteBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Con rs = r } + defer rs.Close() + var ref interface{} args = make([]interface{}, 0) @@ -640,6 +642,8 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi refs[i] = &ref } + defer rs.Close() + slice := ind var cnt int64 @@ -1150,6 +1154,8 @@ func (d *dbBase) ReadValues(q dbQuerier, qs *querySet, mi *modelInfo, cond *Cond refs[i] = &ref } + defer rs.Close() + var ( cnt int64 columns []string @@ -1268,6 +1274,8 @@ func (d *dbBase) GetTables(db dbQuerier) (map[string]bool, error) { return tables, err } + defer rows.Close() + for rows.Next() { var table string err := rows.Scan(&table) @@ -1290,6 +1298,8 @@ func (d *dbBase) GetColumns(db dbQuerier, table string) (map[string][3]string, e return columns, err } + defer rows.Close() + for rows.Next() { var ( name string diff --git a/orm/orm_raw.go b/orm/orm_raw.go index 7d204876..a713dbac 100644 --- a/orm/orm_raw.go +++ b/orm/orm_raw.go @@ -285,6 +285,8 @@ func (o *rawSet) QueryRow(containers ...interface{}) error { return err } + defer rows.Close() + if rows.Next() { if structMode { columns, err := rows.Columns() @@ -408,11 +410,12 @@ func (o *rawSet) QueryRows(containers ...interface{}) (int64, error) { return 0, err } - nInds := make([]reflect.Value, len(sInds)) - - sInd := sInds[0] + defer rows.Close() var cnt int64 + nInds := make([]reflect.Value, len(sInds)) + sInd := sInds[0] + for rows.Next() { if structMode { @@ -538,6 +541,8 @@ func (o *rawSet) readValues(container interface{}) (int64, error) { rs = r } + defer rs.Close() + var ( refs []interface{} cnt int64 diff --git a/orm/orm_test.go b/orm/orm_test.go index 410aa484..bd4b6972 100644 --- a/orm/orm_test.go +++ b/orm/orm_test.go @@ -1392,7 +1392,8 @@ func TestQueryRows(t *testing.T) { var ids []int var usernames []string - num, err = dORM.Raw("SELECT id, user_name FROM user ORDER BY id asc").QueryRows(&ids, &usernames) + query = fmt.Sprintf("SELECT %sid%s, %suser_name%s FROM %suser%s ORDER BY %sid%s ASC", Q, Q, Q, Q, Q, Q, Q, Q) + num, err = dORM.Raw(query).QueryRows(&ids, &usernames) throwFailNow(t, err) throwFailNow(t, AssertIs(num, 3)) throwFailNow(t, AssertIs(len(ids), 3))