6767 */
6868@ RunWith (Parameterized .class )
6969public class ExecuteMockServerTest extends AbstractMockServerTest {
70+ private static final IllegalStateException REQUEST_NOT_FOUND =
71+ new IllegalStateException ("request not found" );
7072 private static Dialect currentDialect ;
7173
7274 @ Parameters (name = "dialect = {0}" )
@@ -220,9 +222,27 @@ public void testStatementExecuteQuery() throws SQLException {
220222 try (ResultSet resultSet = statement .executeQuery (query )) {
221223 verifyResultSet (resultSet );
222224 }
225+ ExecuteSqlRequest request =
226+ mockSpanner .getRequestsOfType (ExecuteSqlRequest .class ).stream ()
227+ .filter (r -> r .getSql ().equals (query ))
228+ .findAny ()
229+ .orElseThrow (() -> REQUEST_NOT_FOUND );
230+ assertTrue (request .getTransaction ().hasSingleUse ());
231+ assertTrue (request .getTransaction ().getSingleUse ().hasReadOnly ());
232+ assertFalse (request .getLastStatement ());
233+
223234 try (ResultSet resultSet = statement .executeQuery (dmlReturning )) {
224235 verifyResultSet (resultSet );
225236 }
237+ request =
238+ mockSpanner .getRequestsOfType (ExecuteSqlRequest .class ).stream ()
239+ .filter (r -> r .getSql ().equals (dmlReturning ))
240+ .findAny ()
241+ .orElseThrow (() -> REQUEST_NOT_FOUND );
242+ assertTrue (request .getTransaction ().hasBegin ());
243+ assertTrue (request .getTransaction ().getBegin ().hasReadWrite ());
244+ assertTrue (request .getLastStatement ());
245+
226246 try (ResultSet resultSet = statement .executeQuery (clientSideQuery )) {
227247 verifyClientSideResultSet (resultSet );
228248 }
@@ -238,6 +258,15 @@ public void testStatementExecuteUpdate() throws SQLException {
238258 try (Connection connection = createJdbcConnection ();
239259 Statement statement = connection .createStatement ()) {
240260 assertEquals (1 , statement .executeUpdate (dml ));
261+ ExecuteSqlRequest request =
262+ mockSpanner .getRequestsOfType (ExecuteSqlRequest .class ).stream ()
263+ .filter (r -> r .getSql ().equals (dml ))
264+ .findAny ()
265+ .orElseThrow (() -> REQUEST_NOT_FOUND );
266+ assertTrue (request .getTransaction ().hasBegin ());
267+ assertTrue (request .getTransaction ().getBegin ().hasReadWrite ());
268+ assertTrue (request .getLastStatement ());
269+
241270 assertEquals (0 , statement .executeUpdate (DDL ));
242271
243272 connection .setAutoCommit (false );
@@ -257,6 +286,14 @@ public void testStatementExecuteUpdateReturnGeneratedKeys() throws SQLException
257286 Statement statement = connection .createStatement ()) {
258287 // TODO: Add tests for RETURN_GENERATED_KEYS when that is supported.
259288 assertEquals (1 , statement .executeUpdate (dml , Statement .NO_GENERATED_KEYS ));
289+ ExecuteSqlRequest request =
290+ mockSpanner .getRequestsOfType (ExecuteSqlRequest .class ).stream ()
291+ .findAny ()
292+ .orElseThrow (() -> REQUEST_NOT_FOUND );
293+ assertTrue (request .getTransaction ().hasBegin ());
294+ assertTrue (request .getTransaction ().getBegin ().hasReadWrite ());
295+ assertTrue (request .getLastStatement ());
296+
260297 assertEquals (0 , statement .executeUpdate (DDL , Statement .NO_GENERATED_KEYS ));
261298 assertEquals (0 , statement .executeUpdate (clientSideUpdate , Statement .NO_GENERATED_KEYS ));
262299
@@ -272,6 +309,14 @@ public void testStatementExecuteUpdateReturnColumnNames() throws SQLException {
272309 try (Connection connection = createJdbcConnection ();
273310 Statement statement = connection .createStatement ()) {
274311 assertEquals (1 , statement .executeUpdate (dml , new String [] {"id" }));
312+ ExecuteSqlRequest request =
313+ mockSpanner .getRequestsOfType (ExecuteSqlRequest .class ).stream ()
314+ .findAny ()
315+ .orElseThrow (() -> REQUEST_NOT_FOUND );
316+ assertTrue (request .getTransaction ().hasBegin ());
317+ assertTrue (request .getTransaction ().getBegin ().hasReadWrite ());
318+ assertTrue (request .getLastStatement ());
319+
275320 assertEquals (0 , statement .executeUpdate (DDL , new String [] {"id" }));
276321 assertEquals (0 , statement .executeUpdate (clientSideUpdate , new String [] {"id" }));
277322
@@ -290,6 +335,14 @@ public void testStatementExecuteUpdateReturnColumnIndexes() throws SQLException
290335 try (Connection connection = createJdbcConnection ();
291336 Statement statement = connection .createStatement ()) {
292337 assertEquals (1 , statement .executeUpdate (dml , new int [] {1 }));
338+ ExecuteSqlRequest request =
339+ mockSpanner .getRequestsOfType (ExecuteSqlRequest .class ).stream ()
340+ .findAny ()
341+ .orElseThrow (() -> REQUEST_NOT_FOUND );
342+ assertTrue (request .getTransaction ().hasBegin ());
343+ assertTrue (request .getTransaction ().getBegin ().hasReadWrite ());
344+ assertTrue (request .getLastStatement ());
345+
293346 assertEquals (0 , statement .executeUpdate (DDL , new int [] {1 }));
294347 assertEquals (0 , statement .executeUpdate (clientSideUpdate , new int [] {1 }));
295348 verifyOverflow (() -> statement .executeUpdate (largeDml , new int [] {1 }));
@@ -304,6 +357,14 @@ public void testStatementLargeExecuteUpdate() throws SQLException {
304357 try (Connection connection = createJdbcConnection ();
305358 Statement statement = connection .createStatement ()) {
306359 assertEquals (1L , statement .executeLargeUpdate (dml ));
360+ ExecuteSqlRequest request =
361+ mockSpanner .getRequestsOfType (ExecuteSqlRequest .class ).stream ()
362+ .findAny ()
363+ .orElseThrow (() -> REQUEST_NOT_FOUND );
364+ assertTrue (request .getTransaction ().hasBegin ());
365+ assertTrue (request .getTransaction ().getBegin ().hasReadWrite ());
366+ assertTrue (request .getLastStatement ());
367+
307368 assertEquals (0L , statement .executeLargeUpdate (DDL ));
308369 assertEquals (0L , statement .executeLargeUpdate (clientSideUpdate ));
309370 assertEquals (LARGE_UPDATE_COUNT , statement .executeLargeUpdate (largeDml ));
@@ -319,6 +380,14 @@ public void testStatementExecuteLargeUpdateReturnGeneratedKeys() throws SQLExcep
319380 Statement statement = connection .createStatement ()) {
320381 // TODO: Add tests for RETURN_GENERATED_KEYS when that is supported.
321382 assertEquals (1 , statement .executeLargeUpdate (dml , Statement .NO_GENERATED_KEYS ));
383+ ExecuteSqlRequest request =
384+ mockSpanner .getRequestsOfType (ExecuteSqlRequest .class ).stream ()
385+ .findAny ()
386+ .orElseThrow (() -> REQUEST_NOT_FOUND );
387+ assertTrue (request .getTransaction ().hasBegin ());
388+ assertTrue (request .getTransaction ().getBegin ().hasReadWrite ());
389+ assertTrue (request .getLastStatement ());
390+
322391 assertEquals (0 , statement .executeLargeUpdate (DDL , Statement .NO_GENERATED_KEYS ));
323392 assertEquals (0 , statement .executeLargeUpdate (clientSideUpdate , Statement .NO_GENERATED_KEYS ));
324393 assertEquals (
0 commit comments