From dd6be6b9b641a736cd4c9a4528ad9c6ddb089fdf Mon Sep 17 00:00:00 2001 From: Sebastiaan de Schaetzen Date: Thu, 8 May 2025 11:14:41 +0200 Subject: [PATCH] Return a verifiable error if no results were returned --- errors.go | 5 +++++ query.go | 2 +- query_test.go | 11 ++++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 errors.go diff --git a/errors.go b/errors.go new file mode 100644 index 0000000..d691fe5 --- /dev/null +++ b/errors.go @@ -0,0 +1,5 @@ +package mysqlite + +import "errors" + +var ErrNoRows = errors.New("mysqlite: no rows returned") diff --git a/query.go b/query.go index 73ef203..362d0c9 100644 --- a/query.go +++ b/query.go @@ -116,7 +116,7 @@ func (q *Query) ScanSingle(results ...any) (rerr error) { return err } if !hasResult { - return fmt.Errorf("did not return any rows") + return ErrNoRows } // Scan its columns diff --git a/query_test.go b/query_test.go index 81bf575..14144f9 100644 --- a/query_test.go +++ b/query_test.go @@ -1,6 +1,7 @@ package mysqlite import ( + "errors" "github.com/stretchr/testify/require" "testing" ) @@ -19,6 +20,14 @@ func TestSimpleQuery(t *testing.T) { require.Equal(t, 1, count, "expected empty count") } +func TestSimpleQueryWithNoResults(t *testing.T) { + db := openTestDb(t) + var count int + err := db.Query("select 1 from mytable where key=999").ScanSingle(&count) + require.Equal(t, ErrNoRows, err) + require.True(t, errors.Is(err, ErrNoRows)) +} + func TestSimpleQueryWithArgs(t *testing.T) { db := openTestDb(t) var value string @@ -102,7 +111,7 @@ func TestQueryWithPointerStringArguments(t *testing.T) { func TestQueryWithPointerStringArgumentsCanSetToNull(t *testing.T) { db := openTestDb(t) - db.Query("update mytable set value=NULL where key = 'foo'").MustExec() + db.Query("update mytable set value=null where key = 'foo'").MustExec() myString := "some string" var result *string result = &myString