From 004671d826d7d682849dec07aafb427578792b01 Mon Sep 17 00:00:00 2001
From: Taeho Kim <dittos@gmail.com>
Date: Mon, 4 Nov 2024 04:18:04 +0900
Subject: [PATCH] Don't clear isCommitStateDirty flag in setReadOnly (#1842)

When autoCommit is false, if setReadOnly is called after some queries, then closing the connection leads to dirty (transaction opened) connection being reused.
---
 src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java     | 1 -
 src/test/java/com/zaxxer/hikari/pool/ConnectionStateTest.java | 3 +++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java b/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java
index 81ae4fd3..f064f9c7 100644
--- a/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java
+++ b/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java
@@ -430,7 +430,6 @@ public abstract class ProxyConnection implements Connection
    {
       delegate.setReadOnly(readOnly);
       isReadOnly = readOnly;
-      isCommitStateDirty = false;
       dirtyBits |= DIRTY_BIT_READONLY;
    }
 
diff --git a/src/test/java/com/zaxxer/hikari/pool/ConnectionStateTest.java b/src/test/java/com/zaxxer/hikari/pool/ConnectionStateTest.java
index 5599bee4..b2da043b 100644
--- a/src/test/java/com/zaxxer/hikari/pool/ConnectionStateTest.java
+++ b/src/test/java/com/zaxxer/hikari/pool/ConnectionStateTest.java
@@ -164,6 +164,9 @@ public class ConnectionStateTest
 
             resultSet.updateRow();
             assertTrue(TestElf.getConnectionCommitDirtyState(connection));
+
+            connection.setReadOnly(!connection.isReadOnly());
+            assertTrue(TestElf.getConnectionCommitDirtyState(connection));
          }
       }
    }