Skip to content

Commit c576fab

Browse files
committed
fix: check for error after calling Next()
1 parent a24cf7f commit c576fab

File tree

3 files changed

+23
-7
lines changed

3 files changed

+23
-7
lines changed

spannerlib/api/rows.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,9 @@ func (rows *rows) Metadata() (*spannerpb.ResultSetMetadata, error) {
139139

140140
func (rows *rows) ResultSetStats(ctx context.Context) (*spannerpb.ResultSetStats, error) {
141141
if rows.stats == nil {
142-
rows.readStats(ctx)
142+
if err := rows.readStats(ctx); err != nil {
143+
return nil, err
144+
}
143145
}
144146
return rows.stats, nil
145147
}
@@ -165,10 +167,15 @@ func (rows *rows) Next(ctx context.Context) (*structpb.ListValue, error) {
165167
return nil, spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "cannot read more data after returning stats"))
166168
}
167169
ok := rows.backend.Next()
170+
if !ok && rows.backend.Err() != nil {
171+
return nil, rows.backend.Err()
172+
}
168173
if !ok {
169174
rows.done = true
170175
// No more rows. Read stats and return nil.
171-
rows.readStats(ctx)
176+
if err := rows.readStats(ctx); err != nil {
177+
return nil, err
178+
}
172179
// nil indicates no more rows.
173180
return nil, nil
174181
}
@@ -192,12 +199,20 @@ func (rows *rows) Next(ctx context.Context) (*structpb.ListValue, error) {
192199
return rows.values, nil
193200
}
194201

195-
func (rows *rows) readStats(ctx context.Context) {
202+
func (rows *rows) readStats(ctx context.Context) error {
196203
rows.stats = &spannerpb.ResultSetStats{}
197204
if !rows.backend.NextResultSet() {
198-
return
205+
return status.Error(codes.Internal, "stats results not found")
199206
}
200207
if rows.backend.Next() {
201-
_ = rows.backend.Scan(&rows.stats)
208+
if err := rows.backend.Scan(&rows.stats); err != nil {
209+
return err
210+
}
211+
} else {
212+
if err := rows.backend.Err(); err != nil {
213+
return err
214+
}
215+
return status.Error(codes.Internal, "stats row not found")
202216
}
217+
return nil
203218
}

spannerlib/api/transaction_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func TestBeginAndCommit(t *testing.T) {
5656
t.Fatalf("ResultSetStats returned unexpected error: %v", err)
5757
}
5858
if g, w := stats.GetRowCountExact(), int64(testutil.UpdateBarSetFooRowCount); g != w {
59-
t.Fatalf("row count mismatch\n Got: %v\nWant: %v", g, w)
59+
t.Fatalf("row count mismatch for rows %d:%d:%d\n Got: %v\nWant: %v", poolId, connId, rowsId, g, w)
6060
}
6161
if err := CloseRows(ctx, poolId, connId, rowsId); err != nil {
6262
t.Fatalf("CloseRows returned unexpected error: %v", err)
@@ -125,7 +125,7 @@ func TestBeginAndRollback(t *testing.T) {
125125
t.Fatalf("ResultSetStats returned unexpected error: %v", err)
126126
}
127127
if g, w := stats.GetRowCountExact(), int64(testutil.UpdateBarSetFooRowCount); g != w {
128-
t.Fatalf("row count mismatch\n Got: %v\nWant: %v", g, w)
128+
t.Fatalf("row count mismatch for rows %d:%d:%d\n Got: %v\nWant: %v", poolId, connId, rowsId, g, w)
129129
}
130130
if err := CloseRows(ctx, poolId, connId, rowsId); err != nil {
131131
t.Fatalf("CloseRows returned unexpected error: %v", err)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
go build -o spannerlib.so -buildmode=c-shared shared_lib.go
2+
mkdir -p ../wrappers/spannerlib-java/src/main/resources/darwin-aarch64
23
cp spannerlib.so ../wrappers/spannerlib-java/src/main/resources/darwin-aarch64/libspanner.dylib

0 commit comments

Comments
 (0)