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

terrymanu 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 0fde69148ac Fix NullPointerException in Firebird transaction isolation 
resolution (#39136)
0fde69148ac is described below

commit 0fde69148acb9f6831cae43fdaea7df06761c86a
Author: Eunbin Son <[email protected]>
AuthorDate: Tue Jul 28 15:25:46 2026 +0900

    Fix NullPointerException in Firebird transaction isolation resolution 
(#39136)
    
    * Fix NullPointerException in Firebird transaction isolation resolution
    
    * Resolve omitted Firebird isolation flag to REPEATABLE_READ instead of NONE
    
    An absent isolation flag means Firebird's default concurrency
    (isc_tpb_concurrency), which maps to REPEATABLE_READ. Returning NONE
    produced TRANSACTION_NONE, which Jaybird rejects. Resolve the no-flag
    case to REPEATABLE_READ and update the regression test.
    
    ---------
    
    Co-authored-by: Liang Zhang <[email protected]>
---
 .../FirebirdStartTransactionPacket.java            |  6 +++---
 .../FirebirdStartTransactionPacketTest.java        | 23 +++-------------------
 2 files changed, 6 insertions(+), 23 deletions(-)

diff --git 
a/database/protocol/dialect/firebird/src/main/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/transaction/FirebirdStartTransactionPacket.java
 
b/database/protocol/dialect/firebird/src/main/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/transaction/FirebirdStartTransactionPacket.java
index 6bbe0843e02..39075e74281 100644
--- 
a/database/protocol/dialect/firebird/src/main/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/transaction/FirebirdStartTransactionPacket.java
+++ 
b/database/protocol/dialect/firebird/src/main/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/transaction/FirebirdStartTransactionPacket.java
@@ -67,13 +67,13 @@ public final class FirebirdStartTransactionPacket extends 
FirebirdCommandPacket
         if (null != 
tpb.getValue(FirebirdTransactionParameterBufferType.READ_COMMITTED)) {
             return TransactionIsolationLevel.READ_COMMITTED;
         }
-        if (tpb.getValue(FirebirdTransactionParameterBufferType.CONCURRENCY)) {
+        if (null != 
tpb.getValue(FirebirdTransactionParameterBufferType.CONCURRENCY)) {
             return TransactionIsolationLevel.REPEATABLE_READ;
         }
-        if (tpb.getValue(FirebirdTransactionParameterBufferType.CONSISTENCY)) {
+        if (null != 
tpb.getValue(FirebirdTransactionParameterBufferType.CONSISTENCY)) {
             return TransactionIsolationLevel.SERIALIZABLE;
         }
-        return TransactionIsolationLevel.NONE;
+        return TransactionIsolationLevel.REPEATABLE_READ;
     }
     
     @Override
diff --git 
a/database/protocol/dialect/firebird/src/test/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/transaction/FirebirdStartTransactionPacketTest.java
 
b/database/protocol/dialect/firebird/src/test/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/transaction/FirebirdStartTransactionPacketTest.java
index 7743e6f7f56..c63b0304dc6 100644
--- 
a/database/protocol/dialect/firebird/src/test/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/transaction/FirebirdStartTransactionPacketTest.java
+++ 
b/database/protocol/dialect/firebird/src/test/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/transaction/FirebirdStartTransactionPacketTest.java
@@ -19,16 +19,12 @@ package 
org.apache.shardingsphere.database.protocol.firebird.packet.command.quer
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-import lombok.SneakyThrows;
-import 
org.apache.shardingsphere.database.protocol.firebird.constant.buffer.FirebirdParameterBuffer;
 import 
org.apache.shardingsphere.database.protocol.firebird.constant.buffer.type.FirebirdTransactionParameterBufferType;
 import 
org.apache.shardingsphere.database.protocol.firebird.payload.FirebirdPacketPayload;
 import 
org.apache.shardingsphere.sql.parser.statement.core.enums.TransactionIsolationLevel;
 import org.junit.jupiter.api.Test;
-import org.mockito.internal.configuration.plugins.Plugins;
 
 import java.nio.charset.StandardCharsets;
-import java.util.Map;
 
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -64,25 +60,12 @@ class FirebirdStartTransactionPacketTest {
     
     @Test
     void assertIsolationLevelSerializable() {
-        FirebirdStartTransactionPacket packet = new 
FirebirdStartTransactionPacket(createPayload(1, 
FirebirdTransactionParameterBufferType.CONSISTENCY));
-        
getParameterBuffer(packet).put(FirebirdTransactionParameterBufferType.CONCURRENCY,
 false);
-        assertThat(packet.getIsolationLevel(), 
is(TransactionIsolationLevel.SERIALIZABLE));
+        assertThat(new FirebirdStartTransactionPacket(createPayload(1, 
FirebirdTransactionParameterBufferType.CONSISTENCY)).getIsolationLevel(), 
is(TransactionIsolationLevel.SERIALIZABLE));
     }
     
     @Test
-    void assertIsolationLevelNone() {
-        FirebirdStartTransactionPacket packet = new 
FirebirdStartTransactionPacket(createPayload(1));
-        Map<FirebirdTransactionParameterBufferType, Object> parameterBuffer = 
getParameterBuffer(packet);
-        
parameterBuffer.put(FirebirdTransactionParameterBufferType.CONCURRENCY, false);
-        
parameterBuffer.put(FirebirdTransactionParameterBufferType.CONSISTENCY, false);
-        assertThat(packet.getIsolationLevel(), 
is(TransactionIsolationLevel.NONE));
-    }
-    
-    @SuppressWarnings("unchecked")
-    @SneakyThrows(ReflectiveOperationException.class)
-    private Map<FirebirdTransactionParameterBufferType, Object> 
getParameterBuffer(final FirebirdStartTransactionPacket packet) {
-        FirebirdParameterBuffer tpb = (FirebirdParameterBuffer) 
Plugins.getMemberAccessor().get(FirebirdStartTransactionPacket.class.getDeclaredField("tpb"),
 packet);
-        return (Map<FirebirdTransactionParameterBufferType, Object>) 
Plugins.getMemberAccessor().get(FirebirdParameterBuffer.class.getDeclaredField("parameterBuffer"),
 tpb);
+    void assertIsolationLevelDefaultsToRepeatableRead() {
+        assertThat(new 
FirebirdStartTransactionPacket(createPayload(1)).getIsolationLevel(), 
is(TransactionIsolationLevel.REPEATABLE_READ));
     }
     
     @Test

Reply via email to