diff options
Diffstat (limited to 'sqlr_test.go')
| -rw-r--r-- | sqlr_test.go | 75 |
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 +} |
