diff options
Diffstat (limited to 'src/database/sql/example_test.go')
| -rw-r--r-- | src/database/sql/example_test.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/database/sql/example_test.go b/src/database/sql/example_test.go index dcb74e0699..9032eac2d2 100644 --- a/src/database/sql/example_test.go +++ b/src/database/sql/example_test.go @@ -44,3 +44,65 @@ func ExampleDB_QueryRow() { fmt.Printf("Username is %s\n", username) } } + +func ExampleDB_QueryMultipleResultSets() { + age := 27 + q := ` +create temp table uid (id bigint); -- Create temp table for queries. +insert into uid +select id from users where age < ?; -- Populate temp table. + +-- First result set. +select + users.id, name +from + users + join uid on users.id = uid.id +; + +-- Second result set. +select + ur.user, ur.role +from + user_roles as ur + join uid on uid.id = ur.user +; + ` + rows, err := db.Query(q, age) + if err != nil { + log.Fatal(err) + } + defer rows.Close() + + for rows.Next() { + var ( + id int64 + name string + ) + if err := rows.Scan(&id, &name); err != nil { + log.Fatal(err) + } + fmt.Printf("id %d name is %s\n", id, name) + } + if !rows.NextResultSet() { + log.Fatal("expected more result sets", rows.Err()) + } + var roleMap = map[int64]string{ + 1: "user", + 2: "admin", + 3: "gopher", + } + for rows.Next() { + var ( + id int64 + role int64 + ) + if err := rows.Scan(&id, &role); err != nil { + log.Fatal(err) + } + fmt.Printf("id %d has role %s\n", id, roleMap[role]) + } + if err := rows.Err(); err != nil { + log.Fatal(err) + } +} |
