This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new efebb9c9e94 Add more test cases on 
FirebirdFetchStatementCommandExecutorTest (#37948)
efebb9c9e94 is described below

commit efebb9c9e946db1d70e2781dcb313a400c99af36
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Feb 3 23:02:43 2026 +0800

    Add more test cases on FirebirdFetchStatementCommandExecutorTest (#37948)
---
 .../FirebirdFetchStatementCommandExecutorTest.java | 94 +++++++++++++++-------
 1 file changed, 64 insertions(+), 30 deletions(-)

diff --git 
a/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/fetch/FirebirdFetchStatementCommandExecutorTest.java
 
b/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/fetch/FirebirdFetchStatementCommandExecutorTest.java
index 3be58d2591a..c0bc6c15dea 100644
--- 
a/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/fetch/FirebirdFetchStatementCommandExecutorTest.java
+++ 
b/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/fetch/FirebirdFetchStatementCommandExecutorTest.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
 import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
 import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import 
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager;
 import org.firebirdsql.gds.ISCConstants;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
@@ -40,10 +41,11 @@ import java.util.Collections;
 import java.util.Iterator;
 
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.hamcrest.Matchers.nullValue;
+import static org.hamcrest.Matchers.is;
 import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.verify;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 @ExtendWith(MockitoExtension.class)
 class FirebirdFetchStatementCommandExecutorTest {
@@ -58,51 +60,83 @@ class FirebirdFetchStatementCommandExecutorTest {
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private ConnectionSession connectionSession;
     
+    @Mock
+    private ProxyDatabaseConnectionManager databaseConnectionManager;
+    
     @Mock
     private ProxyBackendHandler proxyBackendHandler;
     
+    private FirebirdFetchStatementCommandExecutor executor;
+    
     @BeforeEach
     void setup() {
         
FirebirdFetchStatementCache.getInstance().registerConnection(CONNECTION_ID);
-        
FirebirdFetchStatementCache.getInstance().registerStatement(CONNECTION_ID, 
STATEMENT_ID, proxyBackendHandler);
         when(connectionSession.getConnectionId()).thenReturn(CONNECTION_ID);
+        
when(connectionSession.getDatabaseConnectionManager()).thenReturn(databaseConnectionManager);
         when(packet.getStatementId()).thenReturn(STATEMENT_ID);
-        when(packet.getFetchSize()).thenReturn(1);
     }
     
     @AfterEach
     void tearDown() {
-        
FirebirdFetchStatementCache.getInstance().unregisterStatement(CONNECTION_ID, 
STATEMENT_ID);
         
FirebirdFetchStatementCache.getInstance().unregisterConnection(CONNECTION_ID);
     }
     
     @Test
-    void assertExecute() throws SQLException {
-        when(proxyBackendHandler.next()).thenReturn(true);
-        QueryResponseRow row = new 
QueryResponseRow(Collections.singletonList(new QueryResponseCell(Types.INTEGER, 
1)));
-        when(proxyBackendHandler.getRowData()).thenReturn(row, row);
-        FirebirdFetchStatementCommandExecutor executor = new 
FirebirdFetchStatementCommandExecutor(packet, connectionSession);
-        Collection<DatabasePacket> actual = executor.execute();
-        Iterator<DatabasePacket> iterator = actual.iterator();
-        FirebirdFetchResponsePacket first = (FirebirdFetchResponsePacket) 
iterator.next();
-        assertThat(first.getStatus(), equalTo(ISCConstants.FETCH_OK));
-        assertThat(first.getCount(), equalTo(1));
-        assertThat(first.getRow(), notNullValue());
-        FirebirdFetchResponsePacket second = (FirebirdFetchResponsePacket) 
iterator.next();
-        assertThat(second.getStatus(), equalTo(ISCConstants.FETCH_OK));
-        assertThat(second.getCount(), equalTo(0));
-        assertThat(second.getRow(), nullValue());
+    void assertExecuteWhenNoBackendHandler() throws SQLException {
+        executor = new FirebirdFetchStatementCommandExecutor(packet, 
connectionSession);
+        Collection<DatabasePacket> actualPackets = executor.execute();
+        Iterator<DatabasePacket> packetIterator = actualPackets.iterator();
+        FirebirdFetchResponsePacket actualPacket = 
(FirebirdFetchResponsePacket) packetIterator.next();
+        assertThat(actualPackets.size(), is(1));
+        assertThat(actualPacket.getStatus(), 
is(ISCConstants.FETCH_NO_MORE_ROWS));
+        assertThat(actualPacket.getCount(), is(0));
+        assertNull(actualPacket.getRow());
     }
     
     @Test
-    void assertExecuteNoMoreRows() throws SQLException {
-        when(proxyBackendHandler.next()).thenReturn(false);
-        FirebirdFetchStatementCommandExecutor executor = new 
FirebirdFetchStatementCommandExecutor(packet, connectionSession);
-        Collection<DatabasePacket> actual = executor.execute();
-        Iterator<DatabasePacket> iterator = actual.iterator();
-        FirebirdFetchResponsePacket packet = (FirebirdFetchResponsePacket) 
iterator.next();
-        assertThat(packet.getStatus(), 
equalTo(ISCConstants.FETCH_NO_MORE_ROWS));
-        assertThat(packet.getCount(), equalTo(0));
-        assertThat(packet.getRow(), nullValue());
+    void assertExecuteWithRowsAndFetchEnd() throws SQLException {
+        
FirebirdFetchStatementCache.getInstance().registerStatement(CONNECTION_ID, 
STATEMENT_ID, proxyBackendHandler);
+        when(packet.getFetchSize()).thenReturn(2);
+        QueryResponseRow responseRow = new 
QueryResponseRow(Collections.singletonList(new QueryResponseCell(Types.INTEGER, 
1)));
+        when(proxyBackendHandler.next()).thenReturn(true, true);
+        when(proxyBackendHandler.getRowData()).thenReturn(responseRow, 
responseRow);
+        executor = new FirebirdFetchStatementCommandExecutor(packet, 
connectionSession);
+        Collection<DatabasePacket> actualPackets = executor.execute();
+        Iterator<DatabasePacket> packetIterator = actualPackets.iterator();
+        FirebirdFetchResponsePacket actualFirstPacket = 
(FirebirdFetchResponsePacket) packetIterator.next();
+        assertThat(actualPackets.size(), is(3));
+        assertThat(actualFirstPacket.getStatus(), is(ISCConstants.FETCH_OK));
+        assertThat(actualFirstPacket.getCount(), is(1));
+        assertNotNull(actualFirstPacket.getRow());
+        FirebirdFetchResponsePacket actualSecondPacket = 
(FirebirdFetchResponsePacket) packetIterator.next();
+        assertThat(actualSecondPacket.getStatus(), is(ISCConstants.FETCH_OK));
+        assertThat(actualSecondPacket.getCount(), is(1));
+        assertNotNull(actualSecondPacket.getRow());
+        FirebirdFetchResponsePacket actualEndPacket = 
(FirebirdFetchResponsePacket) packetIterator.next();
+        assertThat(actualEndPacket.getStatus(), is(ISCConstants.FETCH_OK));
+        assertThat(actualEndPacket.getCount(), is(0));
+        assertNull(actualEndPacket.getRow());
+    }
+    
+    @Test
+    void assertExecuteStopsWhenRowsExhausted() throws SQLException {
+        
FirebirdFetchStatementCache.getInstance().registerStatement(CONNECTION_ID, 
STATEMENT_ID, proxyBackendHandler);
+        when(packet.getFetchSize()).thenReturn(2);
+        QueryResponseRow responseRow = new 
QueryResponseRow(Collections.singletonList(new QueryResponseCell(Types.INTEGER, 
1)));
+        when(proxyBackendHandler.next()).thenReturn(true, false);
+        when(proxyBackendHandler.getRowData()).thenReturn(responseRow);
+        executor = new FirebirdFetchStatementCommandExecutor(packet, 
connectionSession);
+        Collection<DatabasePacket> actualPackets = executor.execute();
+        Iterator<DatabasePacket> packetIterator = actualPackets.iterator();
+        FirebirdFetchResponsePacket actualRowPacket = 
(FirebirdFetchResponsePacket) packetIterator.next();
+        assertThat(actualPackets.size(), is(2));
+        assertThat(actualRowPacket.getStatus(), is(ISCConstants.FETCH_OK));
+        assertThat(actualRowPacket.getCount(), is(1));
+        assertNotNull(actualRowPacket.getRow());
+        FirebirdFetchResponsePacket actualNoMorePacket = 
(FirebirdFetchResponsePacket) packetIterator.next();
+        assertThat(actualNoMorePacket.getStatus(), 
is(ISCConstants.FETCH_NO_MORE_ROWS));
+        assertThat(actualNoMorePacket.getCount(), is(0));
+        assertNull(actualNoMorePacket.getRow());
+        
verify(databaseConnectionManager).unmarkResourceInUse(proxyBackendHandler);
     }
 }

Reply via email to