fix(spanner): explicitly close the stream context upon receiving the last message
diff --git a/spanner/read.go b/spanner/read.go
index 1c09ac3..711aed9 100644
--- a/spanner/read.go
+++ b/spanner/read.go
@@ -684,6 +684,9 @@
 				span.SetStatus(otcodes.Ok, "Stream finished successfully")
 				span.End()
 			}
+			if d.cancel != nil {
+				d.cancel()
+			}
 			d.changeState(finished)
 			return
 		}
diff --git a/spanner/test/opentelemetry/test/ot_traces_test.go b/spanner/test/opentelemetry/test/ot_traces_test.go
index e8412db..03b4988 100644
--- a/spanner/test/opentelemetry/test/ot_traces_test.go
+++ b/spanner/test/opentelemetry/test/ot_traces_test.go
@@ -52,6 +52,9 @@
 		},
 	}, option.WithGRPCDialOption(grpc.WithStreamInterceptor(otelgrpc.StreamClientInterceptor(otelgrpc.WithTracerProvider(te.tp)))))
 	defer teardown()
+	res := server.CreateSingersResults(4, true)
+	sql := "SELECT SingerId, AlbumId, AlbumTitle FROM Albums WHERE 1=2"
+	err := server.TestSpanner.PutStatementResult(sql, res)
 
 	waitFor(t, func() error {
 		if isMultiplexEnabled {
@@ -69,8 +72,8 @@
 		transactionTag = "tx-tag"
 		requestTag     = "req-tag"
 	)
-	_, err := client.ReadWriteTransactionWithOptions(context.Background(), func(ctx context.Context, tx *spanner.ReadWriteTransaction) error {
-		iter := tx.QueryWithOptions(ctx, spanner.NewStatement(stestutil.SelectSingerIDAlbumIDAlbumTitleFromAlbums), spanner.QueryOptions{
+	_, err = client.ReadWriteTransactionWithOptions(context.Background(), func(ctx context.Context, tx *spanner.ReadWriteTransaction) error {
+		iter := tx.QueryWithOptions(ctx, spanner.NewStatement(sql), spanner.QueryOptions{
 			RequestTag: requestTag,
 		})
 		return iter.Do(func(r *spanner.Row) error {
@@ -153,7 +156,7 @@
 		case "cloud.google.com/go/spanner.RowIterator":
 			if hasAttribute(&span, "statement.tag", requestTag) {
 				foundTaggedQuerySpan = true
-				if !hasAttribute(&span, "db.statement", stestutil.SelectSingerIDAlbumIDAlbumTitleFromAlbums) {
+				if !hasAttribute(&span, "db.statement", sql) {
 					t.Errorf("tagged span %q was missing db.statement", span.Name)
 				}
 				if !hasAttribute(&span, "transaction.tag", transactionTag) {