summaryrefslogtreecommitdiffstats
path: root/sqlr_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'sqlr_test.go')
-rw-r--r--sqlr_test.go75
1 files changed, 70 insertions, 5 deletions
diff --git a/sqlr_test.go b/sqlr_test.go
index 4625fde..f2ebfbf 100644
--- a/sqlr_test.go
+++ b/sqlr_test.go
@@ -1,12 +1,15 @@
-package sqlr
+package sqlr_test
import (
"context"
"database/sql"
- "github.com/google/go-cmp/cmp"
- _ "github.com/mattn/go-sqlite3"
+ "fmt"
"reflect"
"testing"
+
+ "github.com/google/go-cmp/cmp"
+ _ "github.com/mattn/go-sqlite3"
+ "gitlab.com/rhogenson/sqlr"
)
func TestScan(t *testing.T) {
@@ -85,7 +88,7 @@ func TestScan(t *testing.T) {
}
got := reflect.New(reflect.TypeOf(tc.want).Elem()).Interface()
- if err := Scan(rows, got); err != nil {
+ if err := sqlr.Scan(rows, got); err != nil {
t.Fatalf("Scan failed: %s", err)
}
if err := rows.Close(); err != nil {
@@ -167,10 +170,72 @@ func TestScan_Errors(t *testing.T) {
t.Fatalf("No data")
}
- err = Scan(rows, tc.out)
+ err = sqlr.Scan(rows, tc.out)
if err == nil {
t.Errorf("Scan returned nil, want error")
}
})
}
}
+
+func TestQuery(t *testing.T) {
+ ctx := context.Background()
+ db, err := sql.Open("sqlite3", ":memory:")
+ if err != nil {
+ t.Fatalf("Failed to create in-memory database: %s", err)
+ }
+ defer db.Close()
+ if _, err := db.ExecContext(ctx, `
+ CREATE TABLE Tbl (Name, HighScore);
+ INSERT INTO Tbl VALUES ("rose", 100)
+ `); err != nil {
+ t.Fatalf("Failed to initialize test database: %s", err)
+ }
+
+ type row struct {
+ Name string
+ HighScore int
+ }
+ const query = "SELECT Name, HighScore FROM Tbl"
+ var got []row
+ for row, err := range sqlr.Query[row](ctx, db, query) {
+ if err != nil {
+ t.Fatalf("Query(%q) failed: %s", query, err)
+ }
+ got = append(got, row)
+ }
+ want := []row{{
+ Name: "rose",
+ HighScore: 100,
+ }}
+ if diff := cmp.Diff(want, got); diff != "" {
+ t.Errorf("Query(%q) returned unexpected diff (-want +got):\n%s", query, diff)
+ }
+}
+
+func ExampleQuery() {
+ ctx := context.Background()
+ db, err := sql.Open("sqlite3", ":memory:")
+ if err != nil {
+ panic(err)
+ }
+ defer db.Close()
+ if _, err := db.ExecContext(ctx, `
+ CREATE TABLE Tbl (Name, HighScore);
+ INSERT INTO Tbl VALUES ("rose", 100)
+ `); err != nil {
+ panic(err)
+ }
+
+ type row struct {
+ Name string
+ HighScore int
+ }
+ for row, err := range sqlr.Query[row](ctx, db, "SELECT Name, HighScore FROM Tbl") {
+ if err != nil {
+ panic(err)
+ }
+ fmt.Printf("%s %d\n", row.Name, row.HighScore)
+ }
+ // Output: rose 100
+}