diff options
| author | Daniel Theophanes <kardianos@gmail.com> | 2018-10-29 16:22:37 -0700 |
|---|---|---|
| committer | Daniel Theophanes <kardianos@gmail.com> | 2018-11-08 21:19:17 +0000 |
| commit | 968742a824de0a6459d2820d11b9e2e58803f472 (patch) | |
| tree | 946104b6aa08dd0e575944ee2b56f1ba16711d80 /src/database/sql/sql_test.go | |
| parent | ad4a58e31501bce5de2aad90a620eaecdc1eecb8 (diff) | |
| download | go-968742a824de0a6459d2820d11b9e2e58803f472.tar.xz | |
database/sql: add support for returning cursors to client
This CL add support for converting a returned cursor (presented
to this package as a driver.Rows) and scanning it into a *Rows.
Fixes #28515
Change-Id: Id8191c568dc135af9e5e8555efcd01987708edcb
Reviewed-on: https://go-review.googlesource.com/c/145738
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/database/sql/sql_test.go')
| -rw-r--r-- | src/database/sql/sql_test.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/database/sql/sql_test.go b/src/database/sql/sql_test.go index 82f3f316c6..64b9dfea5c 100644 --- a/src/database/sql/sql_test.go +++ b/src/database/sql/sql_test.go @@ -1338,6 +1338,52 @@ func TestConnQuery(t *testing.T) { } } +func TestCursorFake(t *testing.T) { + db := newTestDB(t, "people") + defer closeDB(t, db) + + ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + defer cancel() + + exec(t, db, "CREATE|peoplecursor|list=table") + exec(t, db, "INSERT|peoplecursor|list=people!name!age") + + rows, err := db.QueryContext(ctx, `SELECT|peoplecursor|list|`) + if err != nil { + t.Fatal(err) + } + defer rows.Close() + + if !rows.Next() { + t.Fatal("no rows") + } + var cursor = &Rows{} + err = rows.Scan(cursor) + if err != nil { + t.Fatal(err) + } + defer cursor.Close() + + const expectedRows = 3 + var currentRow int64 + + var n int64 + var s string + for cursor.Next() { + currentRow++ + err = cursor.Scan(&s, &n) + if err != nil { + t.Fatal(err) + } + if n != currentRow { + t.Errorf("expected number(Age)=%d, got %d", currentRow, n) + } + } + if currentRow != expectedRows { + t.Errorf("expected %d rows, got %d rows", expectedRows, currentRow) + } +} + func TestInvalidNilValues(t *testing.T) { var date1 time.Time var date2 int |
