2020import com .google .cloud .opentelemetry .trace .TraceExporter ;
2121import com .google .cloud .spanner .DatabaseClient ;
2222import com .google .cloud .spanner .DatabaseId ;
23+ import com .google .cloud .spanner .ReadOnlyTransaction ;
2324import com .google .cloud .spanner .ResultSet ;
2425import com .google .cloud .spanner .SessionPoolOptions ;
2526import com .google .cloud .spanner .SessionPoolOptionsHelper ;
@@ -161,7 +162,10 @@ private Duration executeTransaction(
161162 Stopwatch watch = Stopwatch .createStarted ();
162163 switch (transactionType ) {
163164 case READ_ONLY_SINGLE_USE :
164- executeReadOnlyTransaction (client );
165+ executeSingleUseReadOnlyTransaction (client );
166+ break ;
167+ case READ_ONLY_MULTI_USE :
168+ executeMultiUseReadOnlyTransaction (client );
165169 break ;
166170 case READ_WRITE :
167171 executeReadWriteTransaction (client );
@@ -172,7 +176,7 @@ private Duration executeTransaction(
172176 return elapsedTime ;
173177 }
174178
175- private void executeReadOnlyTransaction (DatabaseClient client ) {
179+ private void executeSingleUseReadOnlyTransaction (DatabaseClient client ) {
176180 try (ResultSet resultSet = client .singleUse ().executeQuery (getRandomisedReadStatement ())) {
177181 while (resultSet .next ()) {
178182 for (int i = 0 ; i < resultSet .getColumnCount (); i ++) {
@@ -186,6 +190,34 @@ private void executeReadOnlyTransaction(DatabaseClient client) {
186190 }
187191 }
188192
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+
189221 private void executeReadWriteTransaction (DatabaseClient client ) {
190222 client
191223 .readWriteTransaction ()
0 commit comments