20
20
import com .google .cloud .opentelemetry .trace .TraceExporter ;
21
21
import com .google .cloud .spanner .DatabaseClient ;
22
22
import com .google .cloud .spanner .DatabaseId ;
23
+ import com .google .cloud .spanner .ReadOnlyTransaction ;
23
24
import com .google .cloud .spanner .ResultSet ;
24
25
import com .google .cloud .spanner .SessionPoolOptions ;
25
26
import com .google .cloud .spanner .SessionPoolOptionsHelper ;
@@ -161,7 +162,10 @@ private Duration executeTransaction(
161
162
Stopwatch watch = Stopwatch .createStarted ();
162
163
switch (transactionType ) {
163
164
case READ_ONLY_SINGLE_USE :
164
- executeReadOnlyTransaction (client );
165
+ executeSingleUseReadOnlyTransaction (client );
166
+ break ;
167
+ case READ_ONLY_MULTI_USE :
168
+ executeMultiUseReadOnlyTransaction (client );
165
169
break ;
166
170
case READ_WRITE :
167
171
executeReadWriteTransaction (client );
@@ -172,7 +176,7 @@ private Duration executeTransaction(
172
176
return elapsedTime ;
173
177
}
174
178
175
- private void executeReadOnlyTransaction (DatabaseClient client ) {
179
+ private void executeSingleUseReadOnlyTransaction (DatabaseClient client ) {
176
180
try (ResultSet resultSet = client .singleUse ().executeQuery (getRandomisedReadStatement ())) {
177
181
while (resultSet .next ()) {
178
182
for (int i = 0 ; i < resultSet .getColumnCount (); i ++) {
@@ -186,6 +190,34 @@ private void executeReadOnlyTransaction(DatabaseClient client) {
186
190
}
187
191
}
188
192
193
+ private void executeMultiUseReadOnlyTransaction (DatabaseClient client ) {
194
+ try (ReadOnlyTransaction transaction = client .readOnlyTransaction ()) {
195
+ ResultSet resultSet = transaction .executeQuery (getRandomisedReadStatement ());
196
+ iterateResultSet (resultSet );
197
+
198
+ ResultSet resultSet1 = transaction .executeQuery (getRandomisedReadStatement ());
199
+ iterateResultSet (resultSet1 );
200
+
201
+ ResultSet resultSet2 = transaction .executeQuery (getRandomisedReadStatement ());
202
+ iterateResultSet (resultSet2 );
203
+
204
+ ResultSet resultSet3 = transaction .executeQuery (getRandomisedReadStatement ());
205
+ iterateResultSet (resultSet3 );
206
+ }
207
+ }
208
+
209
+ private void iterateResultSet (ResultSet resultSet ) {
210
+ while (resultSet .next ()) {
211
+ for (int i = 0 ; i < resultSet .getColumnCount (); i ++) {
212
+ if (resultSet .isNull (i )) {
213
+ numNullValues ++;
214
+ } else {
215
+ numNonNullValues ++;
216
+ }
217
+ }
218
+ }
219
+ }
220
+
189
221
private void executeReadWriteTransaction (DatabaseClient client ) {
190
222
client
191
223
.readWriteTransaction ()
0 commit comments