Skip to content

Commit 85167df

Browse files
committed
Tighten statement protocol regression coverage
1 parent a9a718b commit 85167df

3 files changed

Lines changed: 89 additions & 6 deletions

File tree

‎flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/ArrowFlightStatementExecuteTest.java‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static org.hamcrest.MatcherAssert.assertThat;
2727
import static org.junit.jupiter.api.Assertions.assertNotNull;
2828
import static org.junit.jupiter.api.Assertions.assertSame;
29+
import static org.junit.jupiter.api.Assertions.assertThrows;
2930

3031
import java.sql.Connection;
3132
import java.sql.ResultSet;
@@ -37,6 +38,7 @@
3738
import java.util.stream.Collectors;
3839
import java.util.stream.IntStream;
3940
import org.apache.arrow.driver.jdbc.utils.MockFlightSqlProducer;
41+
import org.apache.arrow.flight.sql.FlightSqlUtils;
4042
import org.apache.arrow.memory.BufferAllocator;
4143
import org.apache.arrow.memory.RootAllocator;
4244
import org.apache.arrow.util.AutoCloseables;

‎flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/ArrowFlightStatementProtocolTest.java‎

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,11 @@ public void testStatementExecuteUsesPreparedProtocolForQuery() throws SQLExcepti
174174
.getCommandTypeCounter()
175175
.getOrDefault(MockFlightSqlProducer.COMMAND_STATEMENT_QUERY, 0),
176176
is(0));
177+
assertThat(
178+
PRODUCER
179+
.getActionTypeCounter()
180+
.getOrDefault(FlightSqlUtils.FLIGHT_SQL_CLOSE_PREPARED_STATEMENT.getType(), 0),
181+
is(1));
177182
}
178183

179184
@Test
@@ -216,6 +221,16 @@ public void testStatementExecuteUsesPreparedProtocolForUpdate() throws SQLExcept
216221
.getCommandTypeCounter()
217222
.getOrDefault(MockFlightSqlProducer.COMMAND_PREPARED_STATEMENT_UPDATE, 0),
218223
is(1));
224+
assertThat(
225+
PRODUCER
226+
.getCommandTypeCounter()
227+
.getOrDefault(MockFlightSqlProducer.COMMAND_STATEMENT_UPDATE, 0),
228+
is(0));
229+
assertThat(
230+
PRODUCER
231+
.getActionTypeCounter()
232+
.getOrDefault(FlightSqlUtils.FLIGHT_SQL_CLOSE_PREPARED_STATEMENT.getType(), 0),
233+
is(1));
219234
}
220235

221236
@Test
@@ -273,6 +288,60 @@ public void testStatementExecuteUpdateThenExecuteQueryUsesStatementProtocol()
273288
is(1));
274289
}
275290

291+
@Test
292+
public void testStatementExecuteQueryThenExecuteUsesPreparedProtocol() throws SQLException {
293+
try (Statement statement = connection.createStatement()) {
294+
try (ResultSet resultSet = statement.executeQuery(SELECT_QUERY)) {
295+
assertTrue(resultSet.next());
296+
}
297+
assertThat(statement.execute(SELECT_QUERY), is(true));
298+
try (ResultSet resultSet = statement.getResultSet()) {
299+
assertTrue(resultSet.next());
300+
}
301+
}
302+
303+
assertThat(
304+
PRODUCER
305+
.getCommandTypeCounter()
306+
.getOrDefault(MockFlightSqlProducer.COMMAND_STATEMENT_QUERY, 0),
307+
is(1));
308+
assertThat(
309+
PRODUCER
310+
.getActionTypeCounter()
311+
.getOrDefault(FlightSqlUtils.FLIGHT_SQL_CREATE_PREPARED_STATEMENT.getType(), 0),
312+
is(1));
313+
assertThat(
314+
PRODUCER
315+
.getCommandTypeCounter()
316+
.getOrDefault(MockFlightSqlProducer.COMMAND_PREPARED_STATEMENT_QUERY, 0),
317+
is(1));
318+
}
319+
320+
@Test
321+
public void testStatementExecuteUpdateThenExecuteUsesPreparedProtocol() throws SQLException {
322+
try (Statement statement = connection.createStatement()) {
323+
assertThat(statement.executeUpdate(UPDATE_QUERY), is(1));
324+
assertThat(statement.execute(UPDATE_QUERY), is(false));
325+
assertThat(statement.getUpdateCount(), is(1));
326+
}
327+
328+
assertThat(
329+
PRODUCER
330+
.getCommandTypeCounter()
331+
.getOrDefault(MockFlightSqlProducer.COMMAND_STATEMENT_UPDATE, 0),
332+
is(1));
333+
assertThat(
334+
PRODUCER
335+
.getActionTypeCounter()
336+
.getOrDefault(FlightSqlUtils.FLIGHT_SQL_CREATE_PREPARED_STATEMENT.getType(), 0),
337+
is(1));
338+
assertThat(
339+
PRODUCER
340+
.getCommandTypeCounter()
341+
.getOrDefault(MockFlightSqlProducer.COMMAND_PREPARED_STATEMENT_UPDATE, 0),
342+
is(1));
343+
}
344+
276345
@Test
277346
public void testPreparedStatementExecuteQueryUsesPreparedProtocol() throws SQLException {
278347
try (PreparedStatement statement = connection.prepareStatement(SELECT_QUERY);
@@ -339,6 +408,11 @@ public void testPreparedStatementExecuteUpdateUsesPreparedProtocol() throws SQLE
339408
.getCommandTypeCounter()
340409
.getOrDefault(MockFlightSqlProducer.COMMAND_PREPARED_STATEMENT_UPDATE, 0),
341410
is(1));
411+
assertThat(
412+
PRODUCER
413+
.getCommandTypeCounter()
414+
.getOrDefault(MockFlightSqlProducer.COMMAND_STATEMENT_UPDATE, 0),
415+
is(0));
342416
}
343417

344418
@Test
@@ -358,6 +432,11 @@ public void testPreparedStatementExecuteUsesPreparedProtocolForUpdate() throws S
358432
.getCommandTypeCounter()
359433
.getOrDefault(MockFlightSqlProducer.COMMAND_PREPARED_STATEMENT_UPDATE, 0),
360434
is(1));
435+
assertThat(
436+
PRODUCER
437+
.getCommandTypeCounter()
438+
.getOrDefault(MockFlightSqlProducer.COMMAND_STATEMENT_UPDATE, 0),
439+
is(0));
361440
}
362441

363442
@Test

‎flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/utils/MockFlightSqlProducer.java‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -407,8 +407,14 @@ public Runnable acceptPutStatement(
407407
final FlightStream flightStream,
408408
final StreamListener<PutResult> streamListener) {
409409
incrementCommandTypeCounter(COMMAND_STATEMENT_UPDATE);
410+
return acceptUpdate(commandStatementUpdate.getQuery(), flightStream, streamListener);
411+
}
412+
413+
private Runnable acceptUpdate(
414+
final String query,
415+
final FlightStream flightStream,
416+
final StreamListener<PutResult> streamListener) {
410417
return () -> {
411-
final String query = commandStatementUpdate.getQuery();
412418
final BiConsumer<FlightStream, StreamListener<PutResult>> resultProvider =
413419
Preconditions.checkNotNull(
414420
updateResultProviders.get(query),
@@ -491,11 +497,7 @@ public Runnable acceptPutPreparedStatementUpdate(
491497
return () -> {};
492498
}
493499

494-
return acceptPutStatement(
495-
CommandStatementUpdate.newBuilder().setQuery(query).build(),
496-
callContext,
497-
flightStream,
498-
streamListener);
500+
return acceptUpdate(query, flightStream, streamListener);
499501
}
500502

501503
@Override

0 commit comments

Comments
 (0)