add sql.ErrNoRows feature for querying of gdb

This commit is contained in:
John
2019-07-06 17:13:17 +08:00
parent 6426409bf9
commit 2504e405a7
2 changed files with 40 additions and 22 deletions

View File

@ -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
}

View File

@ -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) {