You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2017/04/06 10:45:53 UTC
[16/50] [abbrv] ignite git commit: IGNITE-4762 - transactionsAllowed
flag for JDBC driver
IGNITE-4762 - transactionsAllowed flag for JDBC driver
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e47bf27b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e47bf27b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e47bf27b
Branch: refs/heads/ignite-3477-master
Commit: e47bf27b5582cd695a7d3de3c39d54b3df4c59cc
Parents: 39edcc7
Author: Valentin Kulichenko <va...@gmail.com>
Authored: Tue Mar 28 16:51:44 2017 -0700
Committer: Valentin Kulichenko <va...@gmail.com>
Committed: Tue Mar 28 16:51:44 2017 -0700
----------------------------------------------------------------------
.../internal/jdbc2/JdbcConnectionSelfTest.java | 34 +++++++++++++
.../org/apache/ignite/IgniteJdbcDriver.java | 9 +++-
.../ignite/internal/jdbc2/JdbcConnection.java | 50 +++++++++++++-------
3 files changed, 75 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/e47bf27b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnectionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnectionSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnectionSelfTest.java
index 8c05df3..0bbdca8 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnectionSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnectionSelfTest.java
@@ -267,4 +267,38 @@ public class JdbcConnectionSelfTest extends GridCommonAbstractTest {
);
}
}
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testTxAllowedCommit() throws Exception {
+ String url = CFG_URL_PREFIX + "transactionsAllowed=true@" + CFG_URL;
+
+ try (final Connection conn = DriverManager.getConnection(url)) {
+ conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
+
+ assertEquals(Connection.TRANSACTION_SERIALIZABLE, conn.getTransactionIsolation());
+
+ conn.setAutoCommit(false);
+
+ conn.commit();
+ }
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testTxAllowedRollback() throws Exception {
+ String url = CFG_URL_PREFIX + "transactionsAllowed=true@" + CFG_URL;
+
+ try (final Connection conn = DriverManager.getConnection(url)) {
+ conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
+
+ assertEquals(Connection.TRANSACTION_SERIALIZABLE, conn.getTransactionIsolation());
+
+ conn.setAutoCommit(false);
+
+ conn.rollback();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e47bf27b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcDriver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteJdbcDriver.java b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcDriver.java
index d432c1e4..c511d5f 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteJdbcDriver.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcDriver.java
@@ -292,6 +292,9 @@ public class IgniteJdbcDriver implements Driver {
/** Distributed joins parameter name. */
private static final String PARAM_DISTRIBUTED_JOINS = "distributedJoins";
+ /** Transactions allowed parameter name. */
+ private static final String PARAM_TX_ALLOWED = "transactionsAllowed";
+
/** Hostname property name. */
public static final String PROP_HOST = PROP_PREFIX + "host";
@@ -313,6 +316,9 @@ public class IgniteJdbcDriver implements Driver {
/** Distributed joins property name. */
public static final String PROP_DISTRIBUTED_JOINS = PROP_PREFIX + PARAM_DISTRIBUTED_JOINS;
+ /** Transactions allowed property name. */
+ public static final String PROP_TX_ALLOWED = PROP_PREFIX + PARAM_TX_ALLOWED;
+
/** Cache name property name. */
public static final String PROP_CFG = PROP_PREFIX + "cfg";
@@ -378,7 +384,8 @@ public class IgniteJdbcDriver implements Driver {
new PropertyInfo("Node ID", info.getProperty(PROP_NODE_ID), ""),
new PropertyInfo("Local", info.getProperty(PROP_LOCAL), ""),
new PropertyInfo("Collocated", info.getProperty(PROP_COLLOCATED), ""),
- new PropertyInfo("Distributed Joins", info.getProperty(PROP_DISTRIBUTED_JOINS), "")
+ new PropertyInfo("Distributed Joins", info.getProperty(PROP_DISTRIBUTED_JOINS), ""),
+ new PropertyInfo("Transactions Allowed", info.getProperty(PROP_TX_ALLOWED), "")
);
if (info.getProperty(PROP_CFG) != null)
http://git-wip-us.apache.org/repos/asf/ignite/blob/e47bf27b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java
index 5c4a147..dc3fe7f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java
@@ -73,6 +73,7 @@ import static org.apache.ignite.IgniteJdbcDriver.PROP_COLLOCATED;
import static org.apache.ignite.IgniteJdbcDriver.PROP_DISTRIBUTED_JOINS;
import static org.apache.ignite.IgniteJdbcDriver.PROP_LOCAL;
import static org.apache.ignite.IgniteJdbcDriver.PROP_NODE_ID;
+import static org.apache.ignite.IgniteJdbcDriver.PROP_TX_ALLOWED;
/**
* JDBC connection implementation.
@@ -118,6 +119,12 @@ public class JdbcConnection implements Connection {
/** Distributed joins flag. */
private boolean distributedJoins;
+ /** Transactions allowed flag. */
+ private boolean txAllowed;
+
+ /** Current transaction isolation. */
+ private int txIsolation;
+
/** Statements. */
final Set<JdbcStatement> statements = new HashSet<>();
@@ -134,15 +141,16 @@ public class JdbcConnection implements Connection {
this.url = url;
- this.cacheName = props.getProperty(PROP_CACHE);
- this.locQry = Boolean.parseBoolean(props.getProperty(PROP_LOCAL));
- this.collocatedQry = Boolean.parseBoolean(props.getProperty(PROP_COLLOCATED));
- this.distributedJoins = Boolean.parseBoolean(props.getProperty(PROP_DISTRIBUTED_JOINS));
+ cacheName = props.getProperty(PROP_CACHE);
+ locQry = Boolean.parseBoolean(props.getProperty(PROP_LOCAL));
+ collocatedQry = Boolean.parseBoolean(props.getProperty(PROP_COLLOCATED));
+ distributedJoins = Boolean.parseBoolean(props.getProperty(PROP_DISTRIBUTED_JOINS));
+ txAllowed = Boolean.parseBoolean(props.getProperty(PROP_TX_ALLOWED));
String nodeIdProp = props.getProperty(PROP_NODE_ID);
if (nodeIdProp != null)
- this.nodeId = UUID.fromString(nodeIdProp);
+ nodeId = UUID.fromString(nodeIdProp);
try {
String cfgUrl = props.getProperty(PROP_CFG);
@@ -259,7 +267,7 @@ public class JdbcConnection implements Connection {
@Override public void setAutoCommit(boolean autoCommit) throws SQLException {
ensureNotClosed();
- if (!autoCommit)
+ if (!txAllowed && !autoCommit)
throw new SQLFeatureNotSupportedException("Transactions are not supported.");
}
@@ -274,14 +282,16 @@ public class JdbcConnection implements Connection {
@Override public void commit() throws SQLException {
ensureNotClosed();
- throw new SQLFeatureNotSupportedException("Transactions are not supported.");
+ if (!txAllowed)
+ throw new SQLFeatureNotSupportedException("Transactions are not supported.");
}
/** {@inheritDoc} */
@Override public void rollback() throws SQLException {
ensureNotClosed();
- throw new SQLFeatureNotSupportedException("Transactions are not supported.");
+ if (!txAllowed)
+ throw new SQLFeatureNotSupportedException("Transactions are not supported.");
}
/** {@inheritDoc} */
@@ -354,14 +364,20 @@ public class JdbcConnection implements Connection {
@Override public void setTransactionIsolation(int level) throws SQLException {
ensureNotClosed();
- throw new SQLFeatureNotSupportedException("Transactions are not supported.");
+ if (txAllowed)
+ txIsolation = level;
+ else
+ throw new SQLFeatureNotSupportedException("Transactions are not supported.");
}
/** {@inheritDoc} */
@Override public int getTransactionIsolation() throws SQLException {
ensureNotClosed();
- throw new SQLFeatureNotSupportedException("Transactions are not supported.");
+ if (txAllowed)
+ return txIsolation;
+ else
+ throw new SQLFeatureNotSupportedException("Transactions are not supported.");
}
/** {@inheritDoc} */
@@ -413,7 +429,7 @@ public class JdbcConnection implements Connection {
@Override public void setHoldability(int holdability) throws SQLException {
ensureNotClosed();
- if (holdability != HOLD_CURSORS_OVER_COMMIT)
+ if (!txAllowed && holdability != HOLD_CURSORS_OVER_COMMIT)
throw new SQLFeatureNotSupportedException("Invalid holdability (transactions are not supported).");
}
@@ -428,28 +444,28 @@ public class JdbcConnection implements Connection {
@Override public Savepoint setSavepoint() throws SQLException {
ensureNotClosed();
- throw new SQLFeatureNotSupportedException("Transactions are not supported.");
+ throw new SQLFeatureNotSupportedException("Savepoints are not supported.");
}
/** {@inheritDoc} */
@Override public Savepoint setSavepoint(String name) throws SQLException {
ensureNotClosed();
- throw new SQLFeatureNotSupportedException("Transactions are not supported.");
+ throw new SQLFeatureNotSupportedException("Savepoints are not supported.");
}
/** {@inheritDoc} */
@Override public void rollback(Savepoint savepoint) throws SQLException {
ensureNotClosed();
- throw new SQLFeatureNotSupportedException("Transactions are not supported.");
+ throw new SQLFeatureNotSupportedException("Savepoints are not supported.");
}
/** {@inheritDoc} */
@Override public void releaseSavepoint(Savepoint savepoint) throws SQLException {
ensureNotClosed();
- throw new SQLFeatureNotSupportedException("Transactions are not supported.");
+ throw new SQLFeatureNotSupportedException("Savepoints are not supported.");
}
/** {@inheritDoc} */
@@ -463,7 +479,7 @@ public class JdbcConnection implements Connection {
if (resSetConcurrency != CONCUR_READ_ONLY)
throw new SQLFeatureNotSupportedException("Invalid concurrency (updates are not supported).");
- if (resSetHoldability != HOLD_CURSORS_OVER_COMMIT)
+ if (!txAllowed && resSetHoldability != HOLD_CURSORS_OVER_COMMIT)
throw new SQLFeatureNotSupportedException("Invalid holdability (transactions are not supported).");
JdbcStatement stmt = new JdbcStatement(this);
@@ -484,7 +500,7 @@ public class JdbcConnection implements Connection {
if (resSetConcurrency != CONCUR_READ_ONLY)
throw new SQLFeatureNotSupportedException("Invalid concurrency (updates are not supported).");
- if (resSetHoldability != HOLD_CURSORS_OVER_COMMIT)
+ if (!txAllowed && resSetHoldability != HOLD_CURSORS_OVER_COMMIT)
throw new SQLFeatureNotSupportedException("Invalid holdability (transactions are not supported).");
JdbcPreparedStatement stmt = new JdbcPreparedStatement(this, sql);