mysqlite/query_test.go
Sebastiaan de Schaetzen 258dcc7180
All checks were successful
Build / build (push) Successful in 1m18s
Add reading of multiple rows with optional iterator
2025-02-20 12:02:16 +01:00

69 lines
1.8 KiB
Go

package mysqlite
import (
"github.com/stretchr/testify/require"
"testing"
)
func openTestDb(t *testing.T) *Db {
db := openEmptyTestDb(t)
db.Query("create table mytable (key text, value text)").MustExec()
db.Query("insert into mytable(key, value) values ('foo', 'bar')").MustExec()
return db
}
func TestSimpleQuery(t *testing.T) {
db := openTestDb(t)
var count int
db.Query("select count(*) from mytable").MustScanSingle(&count)
require.Equal(t, 1, count, "expected empty count")
}
func TestSimpleQueryWithArgs(t *testing.T) {
db := openTestDb(t)
var value string
db.Query("select value from mytable where key = ?").Bind("foo").MustScanSingle(&value)
require.Equal(t, "bar", value, "bad value returned")
}
func TestQueryWithTwoRows(t *testing.T) {
db := openTestDb(t)
db.Query("insert into mytable(key, value) values ('lorem', 'ipsum')").MustExec()
rows, err := db.Query("select value from mytable").ScanMulti()
require.NoError(t, err)
defer rows.MustFinish()
require.True(t, rows.MustNext(), "expected first row")
var value string
rows.MustScan(&value)
require.Equal(t, "bar", value, "bad value returned")
require.True(t, rows.MustNext(), "expected second row")
rows.MustScan(&value)
require.Equal(t, "ipsum", value, "bad value returned")
require.False(t, rows.MustNext(), "expected no more rows")
}
func TestQueryWithRange(t *testing.T) {
db := openTestDb(t)
db.Query("insert into mytable(key, value) values ('lorem', 'ipsum')").MustExec()
var err error
index := 0
for row := range db.Query("select value from mytable").Range(&err) {
var value string
row.MustScan(&value)
if index == 0 {
require.Equal(t, "bar", value)
} else if index == 1 {
require.Equal(t, "ipsum", value)
} else {
require.FailNow(t, "more rows than expected")
}
index++
}
require.NoError(t, err)
}