Skip to content
This repository was archived by the owner on Mar 31, 2021. It is now read-only.

Commit 47f4b3e

Browse files
echo-42Alexandr Serov
and
Alexandr Serov
authored
Implementation of the execute method in the PreparedStatementImpl class (#49)
* Implementation of the execute method in the PreparedStatementImpl class * PreparedStatement.execute unit test Co-authored-by: e_c_h_o <e11ery86> Co-authored-by: Alexandr Serov <[email protected]>
1 parent 4680384 commit 47f4b3e

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

src/main/java/com/amazon/opendistroforelasticsearch/jdbc/PreparedStatementImpl.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,11 @@ private int javaToSqlType(Object x) throws SQLException {
291291

292292
@Override
293293
public boolean execute() throws SQLException {
294-
throw new SQLFeatureNotSupportedException("execute is not supported");
294+
log.debug(() -> logEntry("execute()"));
295+
checkOpen();
296+
executeQueryX();
297+
log.debug(() -> logExit("execute", true));
298+
return true;
295299
}
296300

297301
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.amazon.opendistroforelasticsearch.jdbc;
2+
3+
import java.io.IOException;
4+
import java.sql.Connection;
5+
import java.sql.PreparedStatement;
6+
import java.sql.ResultSet;
7+
import java.sql.SQLException;
8+
import java.util.Collections;
9+
10+
import com.amazon.opendistroforelasticsearch.jdbc.config.ConnectionConfig;
11+
import com.amazon.opendistroforelasticsearch.jdbc.logging.NoOpLogger;
12+
import com.amazon.opendistroforelasticsearch.jdbc.protocol.ConnectionResponse;
13+
import com.amazon.opendistroforelasticsearch.jdbc.protocol.JdbcQueryRequest;
14+
import com.amazon.opendistroforelasticsearch.jdbc.protocol.Protocol;
15+
import com.amazon.opendistroforelasticsearch.jdbc.protocol.ProtocolFactory;
16+
import com.amazon.opendistroforelasticsearch.jdbc.protocol.QueryRequest;
17+
import com.amazon.opendistroforelasticsearch.jdbc.protocol.QueryResponse;
18+
import com.amazon.opendistroforelasticsearch.jdbc.protocol.exceptions.ResponseException;
19+
import com.amazon.opendistroforelasticsearch.jdbc.test.PerTestWireMockServerExtension;
20+
import com.amazon.opendistroforelasticsearch.jdbc.transport.Transport;
21+
import com.amazon.opendistroforelasticsearch.jdbc.transport.TransportFactory;
22+
import org.junit.jupiter.api.Test;
23+
import org.junit.jupiter.api.extension.ExtendWith;
24+
25+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
26+
import static org.junit.jupiter.api.Assertions.assertTrue;
27+
import static org.mockito.ArgumentMatchers.any;
28+
import static org.mockito.ArgumentMatchers.anyInt;
29+
import static org.mockito.Mockito.*;
30+
31+
32+
/**
33+
* PreparedStatement tests
34+
*
35+
* @author echo
36+
* @since 12.03.20
37+
**/
38+
@ExtendWith(PerTestWireMockServerExtension.class)
39+
public class PreparedStatementTests {
40+
41+
@Test
42+
void testPreparedStatementExecute() throws ResponseException, IOException, SQLException {
43+
44+
final String sql = "select pickup_datetime, trip_type, passenger_count, " +
45+
"fare_amount, extra, vendor_id from nyc_taxis LIMIT 5";
46+
47+
TransportFactory tf = mock(TransportFactory.class);
48+
ProtocolFactory pf = mock(ProtocolFactory.class);
49+
Protocol mockProtocol = mock(Protocol.class);
50+
51+
when(mockProtocol.connect(anyInt())).thenReturn(mock(ConnectionResponse.class));
52+
53+
when(tf.getTransport(any(), any(), any()))
54+
.thenReturn(mock(Transport.class));
55+
56+
when(pf.getProtocol(any(ConnectionConfig.class), any(Transport.class)))
57+
.thenReturn(mockProtocol);
58+
59+
when(mockProtocol.execute(any(QueryRequest.class)))
60+
.thenReturn(mock(QueryResponse.class));
61+
62+
try (Connection con = new ConnectionImpl(ConnectionConfig.builder().build(), tf, pf, NoOpLogger.INSTANCE)) {
63+
try (PreparedStatement pstm = con.prepareStatement(sql)) {
64+
assertTrue(pstm.execute());
65+
ResultSet rs = assertDoesNotThrow(() -> pstm.getResultSet());
66+
rs.close();
67+
}
68+
}
69+
}
70+
71+
}

0 commit comments

Comments
 (0)