diff --git a/src/main/java/com/zaxxer/hikari/pool/PoolBase.java b/src/main/java/com/zaxxer/hikari/pool/PoolBase.java index 291da338..9f987c6f 100644 --- a/src/main/java/com/zaxxer/hikari/pool/PoolBase.java +++ b/src/main/java/com/zaxxer/hikari/pool/PoolBase.java @@ -157,6 +157,11 @@ abstract class PoolBase return lastConnectionFailure.getAndSet(null); } + boolean isAutoCommit() + { + return isAutoCommit; + } + public DataSource getUnwrappedDataSource() { return dataSource; @@ -171,6 +176,11 @@ abstract class PoolBase return new PoolEntry(newConnection(), this); } + public void initConnectionState(ProxyConnection proxyConnection) + { + proxyConnection.isAutoCommit = isAutoCommit; + } + void resetConnectionState(final Connection connection, final ProxyConnection proxyConnection, final int dirtyBits) throws SQLException { int resetBits = 0; diff --git a/src/main/java/com/zaxxer/hikari/pool/PoolEntry.java b/src/main/java/com/zaxxer/hikari/pool/PoolEntry.java index cd3a905e..3dcaa419 100644 --- a/src/main/java/com/zaxxer/hikari/pool/PoolEntry.java +++ b/src/main/java/com/zaxxer/hikari/pool/PoolEntry.java @@ -90,7 +90,7 @@ final class PoolEntry implements IConcurrentBagEntry Connection createProxyConnection(final ProxyLeakTask leakTask, final long now) { - return ProxyFactory.getProxyConnection(this, connection, openStatements, leakTask, now); + return ProxyFactory.getProxyConnection(this, connection, openStatements, leakTask, now, hikariPool.isAutoCommit()); } void resetConnectionState(final ProxyConnection proxyConnection, final int dirtyBits) throws SQLException diff --git a/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java b/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java index 74de3e24..24a435a1 100644 --- a/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java +++ b/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java @@ -63,7 +63,7 @@ public abstract class ProxyConnection implements Connection private long lastAccess; private boolean isCommitStateDirty; - private boolean isAutoCommit; + protected boolean isAutoCommit; private int networkTimeout; private int transactionIsolation; private String dbcatalog; @@ -83,12 +83,13 @@ public abstract class ProxyConnection implements Connection SQL_ERRORS.add("JZ0C1"); // Sybase disconnect error } - protected ProxyConnection(final PoolEntry poolEntry, final Connection connection, final FastList openStatements, final ProxyLeakTask leakTask, final long now) { + protected ProxyConnection(final PoolEntry poolEntry, final Connection connection, final FastList openStatements, final ProxyLeakTask leakTask, final long now, final boolean isAutoCommit) { this.poolEntry = poolEntry; this.delegate = connection; this.openStatements = openStatements; this.leakTask = leakTask; this.lastAccess = now; + this.isAutoCommit = isAutoCommit; } /** {@inheritDoc} */ diff --git a/src/main/java/com/zaxxer/hikari/pool/ProxyFactory.java b/src/main/java/com/zaxxer/hikari/pool/ProxyFactory.java index 181e07db..713ba7c1 100644 --- a/src/main/java/com/zaxxer/hikari/pool/ProxyFactory.java +++ b/src/main/java/com/zaxxer/hikari/pool/ProxyFactory.java @@ -47,7 +47,7 @@ public final class ProxyFactory * @param now current timestamp in milliseconds * @return a proxy that wraps the specified {@link Connection} */ - static ProxyConnection getProxyConnection(final PoolEntry poolEntry, final Connection connection, final FastList openStatements, final ProxyLeakTask leakTask, final long now) + static ProxyConnection getProxyConnection(final PoolEntry poolEntry, final Connection connection, final FastList openStatements, final ProxyLeakTask leakTask, final long now, final boolean isAutoCommit) { // Body is replaced (injected) by JavassistProxyFactory throw new IllegalStateException("You need to run the CLI build and you need target/classes in your classpath to run.");