diff --git a/g/database/gdb/gdb_base.go b/g/database/gdb/gdb_base.go index 00ab5afb6..311f826ff 100644 --- a/g/database/gdb/gdb_base.go +++ b/g/database/gdb/gdb_base.go @@ -567,6 +567,9 @@ func (bs *dbBase) getCache() *gcache.Cache { // 将数据查询的列表数据*sql.Rows转换为Result类型 func (bs *dbBase) rowsToResult(rows *sql.Rows) (Result, error) { + if !rows.Next() { + return nil, sql.ErrNoRows + } // 列信息列表, 名称与类型 columnTypes, err := rows.ColumnTypes() if err != nil { @@ -585,7 +588,7 @@ func (bs *dbBase) rowsToResult(rows *sql.Rows) (Result, error) { for i := range values { scanArgs[i] = &values[i] } - for rows.Next() { + for { if err := rows.Scan(scanArgs...); err != nil { return records, err } @@ -603,6 +606,9 @@ func (bs *dbBase) rowsToResult(rows *sql.Rows) (Result, error) { } } records = append(records, row) + if !rows.Next() { + break + } } return records, nil } diff --git a/g/database/gdb/gdb_unit_model_test.go b/g/database/gdb/gdb_unit_model_test.go index 1daf31db4..9f97fe586 100644 --- a/g/database/gdb/gdb_unit_model_test.go +++ b/g/database/gdb/gdb_unit_model_test.go @@ -280,33 +280,45 @@ func TestModel_Safe(t *testing.T) { } func TestModel_All(t *testing.T) { - result, err := db.Table("user").All() - if err != nil { - gtest.Fatal(err) - } - gtest.Assert(len(result), 3) + gtest.Case(t, func() { + result, err := db.Table("user").All() + gtest.Assert(err, nil) + gtest.Assert(len(result), 3) + }) + // sql.ErrNoRows + gtest.Case(t, func() { + result, err := db.Table("user").Where("id<0").All() + gtest.Assert(result, nil) + gtest.Assert(err, sql.ErrNoRows) + }) } func TestModel_One(t *testing.T) { - record, err := db.Table("user").Where("id", 1).One() - if err != nil { - gtest.Fatal(err) - } - if record == nil { - gtest.Fatal("FAIL") - } - gtest.Assert(record["nickname"].String(), "T111") + gtest.Case(t, func() { + record, err := db.Table("user").Where("id", 1).One() + gtest.Assert(err, nil) + gtest.Assert(record["nickname"].String(), "T111") + }) + // sql.ErrNoRows + gtest.Case(t, func() { + record, err := db.Table("user").Where("id", 0).One() + gtest.Assert(err, sql.ErrNoRows) + gtest.Assert(record, nil) + }) } func TestModel_Value(t *testing.T) { - value, err := db.Table("user").Fields("nickname").Where("id", 1).Value() - if err != nil { - gtest.Fatal(err) - } - if value == nil { - gtest.Fatal("FAIL") - } - gtest.Assert(value.String(), "T111") + gtest.Case(t, func() { + value, err := db.Table("user").Fields("nickname").Where("id", 1).Value() + gtest.Assert(err, nil) + gtest.Assert(value.String(), "T111") + }) + // sql.ErrNoRows + gtest.Case(t, func() { + value, err := db.Table("user").Fields("nickname").Where("id", 0).Value() + gtest.Assert(err, sql.ErrNoRows) + gtest.Assert(value, nil) + }) } func TestModel_Count(t *testing.T) {