You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2017/11/13 12:37:13 UTC
ignite git commit: IGNITE-6752: JDBC thin: connection properties
refactoring. This closes #2927.
Repository: ignite
Updated Branches:
refs/heads/master 85027e7fa -> 69acdaaaa
IGNITE-6752: JDBC thin: connection properties refactoring. This closes #2927.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/69acdaaa
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/69acdaaa
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/69acdaaa
Branch: refs/heads/master
Commit: 69acdaaaa3ef8bd5964f881707fc58d84bf8e5b4
Parents: 85027e7
Author: tledkov-gridgain <tl...@gridgain.com>
Authored: Mon Nov 13 15:37:02 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Nov 13 15:37:02 2017 +0300
----------------------------------------------------------------------
.../thin/JdbcThinAutoCloseServerCursorTest.java | 4 +-
.../jdbc/thin/JdbcThinConnectionSelfTest.java | 155 ++---
.../org/apache/ignite/IgniteJdbcDriver.java | 29 +-
.../org/apache/ignite/IgniteJdbcThinDriver.java | 35 +-
.../jdbc/thin/ConnectionProperties.java | 148 +++++
.../jdbc/thin/ConnectionPropertiesImpl.java | 637 +++++++++++++++++++
.../internal/jdbc/thin/JdbcThinConnection.java | 163 +----
.../internal/jdbc/thin/JdbcThinTcpIo.java | 195 ++----
.../internal/jdbc/thin/JdbcThinUtils.java | 79 +--
9 files changed, 945 insertions(+), 500 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/69acdaaa/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAutoCloseServerCursorTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAutoCloseServerCursorTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAutoCloseServerCursorTest.java
index db4ed3f..943ca0e 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAutoCloseServerCursorTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAutoCloseServerCursorTest.java
@@ -29,7 +29,6 @@ import org.apache.ignite.IgniteCache;
import org.apache.ignite.cache.query.annotations.QuerySqlField;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.jdbc.thin.JdbcThinUtils;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
@@ -51,8 +50,7 @@ public class JdbcThinAutoCloseServerCursorTest extends JdbcThinAbstractSelfTest
private static final String CACHE_NAME = "cache";
/** URL. */
- private static final String URL = "jdbc:ignite:thin://127.0.0.1/?" +
- JdbcThinUtils.PARAM_AUTO_CLOSE_SERVER_CURSOR + "=true";
+ private static final String URL = "jdbc:ignite:thin://127.0.0.1/?autoCloseServerCursor=true";
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
http://git-wip-us.apache.org/repos/asf/ignite/blob/69acdaaa/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinConnectionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinConnectionSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinConnectionSelfTest.java
index 7f67136..0cf6ab6 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinConnectionSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinConnectionSelfTest.java
@@ -135,9 +135,10 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest {
assertInvalid("jdbc:ignite:thin://:10000", "Host name is empty");
assertInvalid("jdbc:ignite:thin:// :10000", "Host name is empty");
- assertInvalid("jdbc:ignite:thin://127.0.0.1:-1", "Invalid port");
- assertInvalid("jdbc:ignite:thin://127.0.0.1:0", "Invalid port");
- assertInvalid("jdbc:ignite:thin://127.0.0.1:100000", "Invalid port");
+ assertInvalid("jdbc:ignite:thin://127.0.0.1:-1", "Property cannot be lower than 1 [name=port, value=-1]");
+ assertInvalid("jdbc:ignite:thin://127.0.0.1:0", "Property cannot be lower than 1 [name=port, value=0]");
+ assertInvalid("jdbc:ignite:thin://127.0.0.1:100000",
+ "Property cannot be upper than 65535 [name=port, value=100000]");
}
/**
@@ -147,31 +148,31 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest {
*/
public void testSocketBuffers() throws Exception {
assertInvalid("jdbc:ignite:thin://127.0.0.1?socketSendBuffer=-1",
- "Property cannot be negative [name=" + JdbcThinUtils.PARAM_SOCK_SND_BUF);
+ "Property cannot be lower than 0 [name=socketSendBuffer, value=-1]");
assertInvalid("jdbc:ignite:thin://127.0.0.1?socketReceiveBuffer=-1",
- "Property cannot be negative [name=" + JdbcThinUtils.PARAM_SOCK_RCV_BUF);
+ "Property cannot be lower than 0 [name=socketReceiveBuffer, value=-1]");
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1")) {
- assertEquals(0, io(conn).socketSendBuffer());
- assertEquals(0, io(conn).socketReceiveBuffer());
+ assertEquals(0, io(conn).connectionProperties().getSocketSendBuffer());
+ assertEquals(0, io(conn).connectionProperties().getSocketReceiveBuffer());
}
// Note that SO_* options are hints, so we check that value is equals to either what we set or to default.
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?socketSendBuffer=1024")) {
- assertEquals(1024, io(conn).socketSendBuffer());
- assertEquals(0, io(conn).socketReceiveBuffer());
+ assertEquals(1024, io(conn).connectionProperties().getSocketSendBuffer());
+ assertEquals(0, io(conn).connectionProperties().getSocketReceiveBuffer());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?socketReceiveBuffer=1024")) {
- assertEquals(0, io(conn).socketSendBuffer());
- assertEquals(1024, io(conn).socketReceiveBuffer());
+ assertEquals(0, io(conn).connectionProperties().getSocketSendBuffer());
+ assertEquals(1024, io(conn).connectionProperties().getSocketReceiveBuffer());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?" +
"socketSendBuffer=1024&socketReceiveBuffer=2048")) {
- assertEquals(1024, io(conn).socketSendBuffer());
- assertEquals(2048, io(conn).socketReceiveBuffer());
+ assertEquals(1024, io(conn).connectionProperties().getSocketSendBuffer());
+ assertEquals(2048, io(conn).connectionProperties().getSocketReceiveBuffer());
}
}
@@ -182,76 +183,76 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest {
*/
public void testSqlHints() throws Exception {
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1")) {
- assertFalse(io(conn).distributedJoins());
- assertFalse(io(conn).enforceJoinOrder());
- assertFalse(io(conn).collocated());
- assertFalse(io(conn).replicatedOnly());
- assertFalse(io(conn).lazy());
- assertFalse(io(conn).skipReducerOnUpdate());
+ assertFalse(io(conn).connectionProperties().isDistributedJoins());
+ assertFalse(io(conn).connectionProperties().isEnforceJoinOrder());
+ assertFalse(io(conn).connectionProperties().isCollocated());
+ assertFalse(io(conn).connectionProperties().isReplicatedOnly());
+ assertFalse(io(conn).connectionProperties().isLazy());
+ assertFalse(io(conn).connectionProperties().isSkipReducerOnUpdate());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?distributedJoins=true")) {
- assertTrue(io(conn).distributedJoins());
- assertFalse(io(conn).enforceJoinOrder());
- assertFalse(io(conn).collocated());
- assertFalse(io(conn).replicatedOnly());
- assertFalse(io(conn).lazy());
- assertFalse(io(conn).skipReducerOnUpdate());
+ assertTrue(io(conn).connectionProperties().isDistributedJoins());
+ assertFalse(io(conn).connectionProperties().isEnforceJoinOrder());
+ assertFalse(io(conn).connectionProperties().isCollocated());
+ assertFalse(io(conn).connectionProperties().isReplicatedOnly());
+ assertFalse(io(conn).connectionProperties().isLazy());
+ assertFalse(io(conn).connectionProperties().isSkipReducerOnUpdate());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?enforceJoinOrder=true")) {
- assertFalse(io(conn).distributedJoins());
- assertTrue(io(conn).enforceJoinOrder());
- assertFalse(io(conn).collocated());
- assertFalse(io(conn).replicatedOnly());
- assertFalse(io(conn).lazy());
- assertFalse(io(conn).skipReducerOnUpdate());
+ assertFalse(io(conn).connectionProperties().isDistributedJoins());
+ assertTrue(io(conn).connectionProperties().isEnforceJoinOrder());
+ assertFalse(io(conn).connectionProperties().isCollocated());
+ assertFalse(io(conn).connectionProperties().isReplicatedOnly());
+ assertFalse(io(conn).connectionProperties().isLazy());
+ assertFalse(io(conn).connectionProperties().isSkipReducerOnUpdate());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?collocated=true")) {
- assertFalse(io(conn).distributedJoins());
- assertFalse(io(conn).enforceJoinOrder());
- assertTrue(io(conn).collocated());
- assertFalse(io(conn).replicatedOnly());
- assertFalse(io(conn).lazy());
- assertFalse(io(conn).skipReducerOnUpdate());
+ assertFalse(io(conn).connectionProperties().isDistributedJoins());
+ assertFalse(io(conn).connectionProperties().isEnforceJoinOrder());
+ assertTrue(io(conn).connectionProperties().isCollocated());
+ assertFalse(io(conn).connectionProperties().isReplicatedOnly());
+ assertFalse(io(conn).connectionProperties().isLazy());
+ assertFalse(io(conn).connectionProperties().isSkipReducerOnUpdate());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?replicatedOnly=true")) {
- assertFalse(io(conn).distributedJoins());
- assertFalse(io(conn).enforceJoinOrder());
- assertFalse(io(conn).collocated());
- assertTrue(io(conn).replicatedOnly());
- assertFalse(io(conn).lazy());
- assertFalse(io(conn).skipReducerOnUpdate());
+ assertFalse(io(conn).connectionProperties().isDistributedJoins());
+ assertFalse(io(conn).connectionProperties().isEnforceJoinOrder());
+ assertFalse(io(conn).connectionProperties().isCollocated());
+ assertTrue(io(conn).connectionProperties().isReplicatedOnly());
+ assertFalse(io(conn).connectionProperties().isLazy());
+ assertFalse(io(conn).connectionProperties().isSkipReducerOnUpdate());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?lazy=true")) {
- assertFalse(io(conn).distributedJoins());
- assertFalse(io(conn).enforceJoinOrder());
- assertFalse(io(conn).collocated());
- assertFalse(io(conn).replicatedOnly());
- assertTrue(io(conn).lazy());
- assertFalse(io(conn).skipReducerOnUpdate());
+ assertFalse(io(conn).connectionProperties().isDistributedJoins());
+ assertFalse(io(conn).connectionProperties().isEnforceJoinOrder());
+ assertFalse(io(conn).connectionProperties().isCollocated());
+ assertFalse(io(conn).connectionProperties().isReplicatedOnly());
+ assertTrue(io(conn).connectionProperties().isLazy());
+ assertFalse(io(conn).connectionProperties().isSkipReducerOnUpdate());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?skipReducerOnUpdate=true")) {
- assertFalse(io(conn).distributedJoins());
- assertFalse(io(conn).enforceJoinOrder());
- assertFalse(io(conn).collocated());
- assertFalse(io(conn).replicatedOnly());
- assertFalse(io(conn).lazy());
- assertTrue(io(conn).skipReducerOnUpdate());
+ assertFalse(io(conn).connectionProperties().isDistributedJoins());
+ assertFalse(io(conn).connectionProperties().isEnforceJoinOrder());
+ assertFalse(io(conn).connectionProperties().isCollocated());
+ assertFalse(io(conn).connectionProperties().isReplicatedOnly());
+ assertFalse(io(conn).connectionProperties().isLazy());
+ assertTrue(io(conn).connectionProperties().isSkipReducerOnUpdate());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?distributedJoins=true&" +
"enforceJoinOrder=true&collocated=true&replicatedOnly=true&lazy=true&skipReducerOnUpdate=true")) {
- assertTrue(io(conn).distributedJoins());
- assertTrue(io(conn).enforceJoinOrder());
- assertTrue(io(conn).collocated());
- assertTrue(io(conn).replicatedOnly());
- assertTrue(io(conn).lazy());
- assertTrue(io(conn).skipReducerOnUpdate());
+ assertTrue(io(conn).connectionProperties().isDistributedJoins());
+ assertTrue(io(conn).connectionProperties().isEnforceJoinOrder());
+ assertTrue(io(conn).connectionProperties().isCollocated());
+ assertTrue(io(conn).connectionProperties().isReplicatedOnly());
+ assertTrue(io(conn).connectionProperties().isLazy());
+ assertTrue(io(conn).connectionProperties().isSkipReducerOnUpdate());
}
}
@@ -262,35 +263,35 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest {
*/
public void testTcpNoDelay() throws Exception {
assertInvalid("jdbc:ignite:thin://127.0.0.1?tcpNoDelay=0",
- "Failed to parse boolean property [name=" + JdbcThinUtils.PARAM_TCP_NO_DELAY);
+ "Failed to parse boolean property [name=tcpNoDelay, value=0]");
assertInvalid("jdbc:ignite:thin://127.0.0.1?tcpNoDelay=1",
- "Failed to parse boolean property [name=" + JdbcThinUtils.PARAM_TCP_NO_DELAY);
+ "Failed to parse boolean property [name=tcpNoDelay, value=1]");
assertInvalid("jdbc:ignite:thin://127.0.0.1?tcpNoDelay=false1",
- "Failed to parse boolean property [name=" + JdbcThinUtils.PARAM_TCP_NO_DELAY);
+ "Failed to parse boolean property [name=tcpNoDelay, value=false1]");
assertInvalid("jdbc:ignite:thin://127.0.0.1?tcpNoDelay=true1",
- "Failed to parse boolean property [name=" + JdbcThinUtils.PARAM_TCP_NO_DELAY);
+ "Failed to parse boolean property [name=tcpNoDelay, value=true1]");
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1")) {
- assertTrue(io(conn).tcpNoDelay());
+ assertTrue(io(conn).connectionProperties().isTcpNoDelay());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?tcpNoDelay=true")) {
- assertTrue(io(conn).tcpNoDelay());
+ assertTrue(io(conn).connectionProperties().isTcpNoDelay());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?tcpNoDelay=True")) {
- assertTrue(io(conn).tcpNoDelay());
+ assertTrue(io(conn).connectionProperties().isTcpNoDelay());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?tcpNoDelay=false")) {
- assertFalse(io(conn).tcpNoDelay());
+ assertFalse(io(conn).connectionProperties().isTcpNoDelay());
}
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1?tcpNoDelay=False")) {
- assertFalse(io(conn).tcpNoDelay());
+ assertFalse(io(conn).connectionProperties().isTcpNoDelay());
}
}
@@ -300,9 +301,9 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest {
* @throws Exception If failed.
*/
public void testAutoCloseServerCursorProperty() throws Exception {
- String url = "jdbc:ignite:thin://127.0.0.1?" + JdbcThinUtils.PARAM_AUTO_CLOSE_SERVER_CURSOR;
+ String url = "jdbc:ignite:thin://127.0.0.1?autoCloseServerCursor";
- String err = "Failed to parse boolean property [name=" + JdbcThinUtils.PARAM_AUTO_CLOSE_SERVER_CURSOR;
+ String err = "Failed to parse boolean property [name=autoCloseServerCursor";
assertInvalid(url + "=0", err);
assertInvalid(url + "=1", err);
@@ -310,23 +311,23 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest {
assertInvalid(url + "=true1", err);
try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1")) {
- assertFalse(io(conn).autoCloseServerCursor());
+ assertFalse(io(conn).connectionProperties().isAutoCloseServerCursor());
}
try (Connection conn = DriverManager.getConnection(url + "=true")) {
- assertTrue(io(conn).autoCloseServerCursor());
+ assertTrue(io(conn).connectionProperties().isAutoCloseServerCursor());
}
try (Connection conn = DriverManager.getConnection(url + "=True")) {
- assertTrue(io(conn).autoCloseServerCursor());
+ assertTrue(io(conn).connectionProperties().isAutoCloseServerCursor());
}
try (Connection conn = DriverManager.getConnection(url + "=false")) {
- assertFalse(io(conn).autoCloseServerCursor());
+ assertFalse(io(conn).connectionProperties().isAutoCloseServerCursor());
}
try (Connection conn = DriverManager.getConnection(url + "=False")) {
- assertFalse(io(conn).autoCloseServerCursor());
+ assertFalse(io(conn).connectionProperties().isAutoCloseServerCursor());
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/69acdaaa/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 ea9b7f8..8195bd4 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteJdbcDriver.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcDriver.java
@@ -30,7 +30,6 @@ import java.util.logging.Logger;
import org.apache.ignite.cache.affinity.AffinityKey;
import org.apache.ignite.internal.jdbc.JdbcConnection;
import org.apache.ignite.internal.jdbc.JdbcDriverPropertyInfo;
-import org.apache.ignite.internal.jdbc.thin.JdbcThinUtils;
import org.apache.ignite.logger.java.JavaLogger;
/**
@@ -304,12 +303,6 @@ public class IgniteJdbcDriver implements Driver {
/** Collocated parameter name. */
private static final String PARAM_COLLOCATED = "collocated";
- /** Parameter: enforce join order flag. */
- public static final String PARAM_ENFORCE_JOIN_ORDER = "enforceJoinOrder";
-
- /** Parameter: lazy query execution flag. */
- public static final String PARAM_LAZY = "lazy";
-
/** Distributed joins parameter name. */
private static final String PARAM_DISTRIBUTED_JOINS = "distributedJoins";
@@ -337,6 +330,12 @@ public class IgniteJdbcDriver implements Driver {
/** Skip reducer on update property name. */
private static final String PARAM_SKIP_REDUCER_ON_UPDATE = "skipReducerOnUpdate";
+ /** Parameter: enforce join order flag (SQL hint). */
+ public static final String PARAM_ENFORCE_JOIN_ORDER = "enforceJoinOrder";
+
+ /** Parameter: replicated only flag (SQL hint). */
+ public static final String PARAM_LAZY = "lazy";
+
/** Hostname property name. */
public static final String PROP_HOST = PROP_PREFIX + "host";
@@ -358,12 +357,6 @@ public class IgniteJdbcDriver implements Driver {
/** Distributed joins property name. */
public static final String PROP_DISTRIBUTED_JOINS = PROP_PREFIX + PARAM_DISTRIBUTED_JOINS;
- /** Enforce join order property name. */
- public static final String PROP_ENFORCE_JOIN_ORDER = PROP_PREFIX + PARAM_ENFORCE_JOIN_ORDER;
-
- /** Lazy query execution property name. */
- public static final String PROP_LAZY = PROP_PREFIX + PARAM_LAZY;
-
/** Transactions allowed property name. */
public static final String PROP_TX_ALLOWED = PROP_PREFIX + PARAM_TX_ALLOWED;
@@ -388,6 +381,12 @@ public class IgniteJdbcDriver implements Driver {
/** Skip reducer on update update property name. */
public static final String PROP_SKIP_REDUCER_ON_UPDATE = PROP_PREFIX + PARAM_SKIP_REDUCER_ON_UPDATE;
+ /** Transactions allowed property name. */
+ public static final String PROP_ENFORCE_JOIN_ORDER = PROP_PREFIX + PARAM_ENFORCE_JOIN_ORDER;
+
+ /** Lazy property name. */
+ public static final String PROP_LAZY = PROP_PREFIX + PARAM_LAZY;
+
/** Cache name property name. */
public static final String PROP_CFG = PROP_PREFIX + "cfg";
@@ -457,8 +456,8 @@ public class IgniteJdbcDriver implements Driver {
new JdbcDriverPropertyInfo("Local", info.getProperty(PROP_LOCAL), ""),
new JdbcDriverPropertyInfo("Collocated", info.getProperty(PROP_COLLOCATED), ""),
new JdbcDriverPropertyInfo("Distributed Joins", info.getProperty(PROP_DISTRIBUTED_JOINS), ""),
- new JdbcDriverPropertyInfo("Enforce Join Order", info.getProperty(JdbcThinUtils.PROP_ENFORCE_JOIN_ORDER), ""),
- new JdbcDriverPropertyInfo("Lazy query execution", info.getProperty(JdbcThinUtils.PROP_LAZY), ""),
+ new JdbcDriverPropertyInfo("Enforce Join Order", info.getProperty(PROP_ENFORCE_JOIN_ORDER), ""),
+ new JdbcDriverPropertyInfo("Lazy query execution", info.getProperty(PROP_LAZY), ""),
new JdbcDriverPropertyInfo("Transactions Allowed", info.getProperty(PROP_TX_ALLOWED), ""),
new JdbcDriverPropertyInfo("Queries with multiple statements allowed", info.getProperty(PROP_MULTIPLE_STMTS), ""),
new JdbcDriverPropertyInfo("Skip reducer on update", info.getProperty(PROP_SKIP_REDUCER_ON_UPDATE), "")
http://git-wip-us.apache.org/repos/asf/ignite/blob/69acdaaa/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java
index a313f92..03f126f 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java
@@ -23,17 +23,17 @@ import java.sql.DriverManager;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
-import java.util.Arrays;
-import java.util.List;
import java.util.Properties;
import java.util.logging.Logger;
import org.apache.ignite.cache.affinity.AffinityKey;
import org.apache.ignite.internal.IgniteVersionUtils;
-import org.apache.ignite.internal.jdbc.JdbcDriverPropertyInfo;
+import org.apache.ignite.internal.jdbc.thin.ConnectionPropertiesImpl;
import org.apache.ignite.internal.jdbc.thin.JdbcThinConnection;
import org.apache.ignite.internal.jdbc.thin.JdbcThinUtils;
import org.apache.ignite.internal.util.typedef.F;
+import static org.apache.ignite.internal.jdbc.thin.ConnectionPropertiesImpl.PROP_PREFIX;
+
/**
* JDBC driver thin implementation for In-Memory Data Grid.
* <p>
@@ -130,18 +130,6 @@ import org.apache.ignite.internal.util.typedef.F;
*/
@SuppressWarnings("JavadocReference")
public class IgniteJdbcThinDriver implements Driver {
- /*
- * Static initializer.
- */
- static {
- try {
- DriverManager.registerDriver(new IgniteJdbcThinDriver());
- }
- catch (SQLException e) {
- throw new RuntimeException("Failed to register " + IgniteJdbcThinDriver.class.getName(), e);
- }
- }
-
/** Major version. */
private static final int MAJOR_VER = IgniteVersionUtils.VER.major();
@@ -167,7 +155,7 @@ public class IgniteJdbcThinDriver implements Driver {
String schema = parseUrl(url, props);
- return new JdbcThinConnection(url, props, schema);
+ return new JdbcThinConnection(url, schema, props);
}
/** {@inheritDoc} */
@@ -179,18 +167,7 @@ public class IgniteJdbcThinDriver implements Driver {
@Override public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException {
parseUrl(url, info);
- List<DriverPropertyInfo> props = Arrays.<DriverPropertyInfo>asList(
- new JdbcDriverPropertyInfo("Hostname", info.getProperty(JdbcThinUtils.PROP_HOST), ""),
- new JdbcDriverPropertyInfo("Port number", info.getProperty(JdbcThinUtils.PROP_PORT), ""),
- new JdbcDriverPropertyInfo("Distributed Joins", info.getProperty(JdbcThinUtils.PROP_DISTRIBUTED_JOINS), ""),
- new JdbcDriverPropertyInfo("Enforce Join Order", info.getProperty(JdbcThinUtils.PROP_ENFORCE_JOIN_ORDER), ""),
- new JdbcDriverPropertyInfo("Collocated", info.getProperty(JdbcThinUtils.PROP_COLLOCATED), ""),
- new JdbcDriverPropertyInfo("Replicated only", info.getProperty(JdbcThinUtils.PROP_REPLICATED_ONLY), ""),
- new JdbcDriverPropertyInfo("Lazy query execution flag", info.getProperty(JdbcThinUtils.PROP_LAZY),""),
- new JdbcDriverPropertyInfo("Skip reducer on update", info.getProperty(JdbcThinUtils.PROP_SKIP_REDUCER_ON_UPDATE),"")
- );
-
- return props.toArray(new DriverPropertyInfo[0]);
+ return ConnectionPropertiesImpl.getDriverPropertyInfo(info);
}
/** {@inheritDoc} */
@@ -285,7 +262,7 @@ public class IgniteJdbcThinDriver implements Driver {
if (key.isEmpty() || val.isEmpty())
throw new SQLException("Invalid parameter format (key and value cannot be empty): " + param);
- props.setProperty(JdbcThinUtils.PROP_PREFIX + key, val);
+ props.setProperty(PROP_PREFIX + key, val);
}
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/69acdaaa/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionProperties.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionProperties.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionProperties.java
new file mode 100644
index 0000000..d793484
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionProperties.java
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.jdbc.thin;
+
+import java.sql.SQLException;
+
+/**
+ * Provide access and manipulations with connection JDBC properties.
+ */
+public interface ConnectionProperties {
+ /**
+ * @return Host name or host's IP to connect.
+ */
+ public String getHost();
+
+ /**
+ * @param host Host name or host's IP to connect.
+ */
+ public void setHost(String host);
+
+ /**
+ * @return Port to connect.
+ */
+ public int getPort();
+
+ /**
+ * @param port Port to connect.
+ * @throws SQLException On error.
+ */
+ public void setPort(int port) throws SQLException;
+
+ /**
+ * @return Distributed joins flag.
+ */
+ public boolean isDistributedJoins();
+
+ /**
+ * @param distributedJoins Distributed joins flag.
+ */
+ public void setDistributedJoins(boolean distributedJoins);
+
+ /**
+ * @return Enforce join order flag.
+ */
+ public boolean isEnforceJoinOrder();
+
+ /**
+ * @param enforceJoinOrder Enforce join order flag.
+ */
+ public void setEnforceJoinOrder(boolean enforceJoinOrder);
+
+ /**
+ * @return Collocated flag.
+ */
+ public boolean isCollocated();
+
+ /**
+ * @param collocated Collocated flag.
+ */
+ public void setCollocated(boolean collocated);
+
+ /**
+ * @return Replicated only flag.
+ */
+ public boolean isReplicatedOnly();
+
+ /**
+ * @param replicatedOnly Replicated only flag.
+ */
+ public void setReplicatedOnly(boolean replicatedOnly);
+
+ /**
+ * @return Auto close server cursors flag.
+ */
+ public boolean isAutoCloseServerCursor();
+
+ /**
+ * @param autoCloseServerCursor Auto close server cursors flag.
+ */
+ public void setAutoCloseServerCursor(boolean autoCloseServerCursor);
+
+ /**
+ * @return Socket send buffer size.
+ */
+ public int getSocketSendBuffer();
+
+ /**
+ * @param size Socket send buffer size.
+ * @throws SQLException On error.
+ */
+ public void setSocketSendBuffer(int size) throws SQLException;
+
+ /**
+ * @return Socket receive buffer size.
+ */
+ public int getSocketReceiveBuffer();
+
+ /**
+ * @param size Socket receive buffer size.
+ * @throws SQLException On error.
+ */
+ public void setSocketReceiveBuffer(int size) throws SQLException;
+
+ /**
+ * @return TCP no delay flag.
+ */
+ public boolean isTcpNoDelay();
+
+ /**
+ * @param tcpNoDelay TCP no delay flag.
+ */
+ public void setTcpNoDelay(boolean tcpNoDelay);
+
+ /**
+ * @return Lazy query execution flag.
+ */
+ public boolean isLazy();
+
+ /**
+ * @param lazy Lazy query execution flag.
+ */
+ public void setLazy(boolean lazy);
+
+ /**
+ * @return Skip reducer on update flag.
+ */
+ public boolean isSkipReducerOnUpdate();
+
+ /**
+ * @param skipReducerOnUpdate Skip reducer on update flag.
+ */
+ public void setSkipReducerOnUpdate(boolean skipReducerOnUpdate);
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/69acdaaa/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionPropertiesImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionPropertiesImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionPropertiesImpl.java
new file mode 100644
index 0000000..86ba2fa
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionPropertiesImpl.java
@@ -0,0 +1,637 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.jdbc.thin;
+
+import java.io.Serializable;
+import java.sql.DriverPropertyInfo;
+import java.sql.SQLException;
+import java.util.Properties;
+import javax.naming.RefAddr;
+import javax.naming.Reference;
+import org.apache.ignite.configuration.ClientConnectorConfiguration;
+import org.apache.ignite.internal.processors.odbc.SqlStateCode;
+import org.apache.ignite.internal.util.typedef.F;
+
+/**
+ * Holds JDBC connection properties.
+ */
+public class ConnectionPropertiesImpl implements ConnectionProperties, Serializable {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Prefix for property names. */
+ public static final String PROP_PREFIX = "ignite.jdbc.";
+
+ /** Host name property. */
+ private StringProperty host = new StringProperty(
+ "host", "Ignite node IP to connect", null, null, true, new PropertyValidator() {
+ private static final long serialVersionUID = 0L;
+
+ @Override public void validate(String host) throws SQLException {
+ if (F.isEmpty(host))
+ throw new SQLException("Host name is empty", SqlStateCode.CLIENT_CONNECTION_FAILED);
+ }
+ });
+
+ /** Connection port property. */
+ private IntegerProperty port = new IntegerProperty(
+ "port", "Ignite node IP to connect", ClientConnectorConfiguration.DFLT_PORT, false, 1, 0xFFFF);
+
+ /** Distributed joins property. */
+ private BooleanProperty distributedJoins = new BooleanProperty(
+ "distributedJoins", "Enable distributed joins", false, false);
+
+ /** Enforce join order property. */
+ private BooleanProperty enforceJoinOrder = new BooleanProperty(
+ "enforceJoinOrder", "Enable enforce join order", false, false);
+
+ /** Collocated property. */
+ private BooleanProperty collocated = new BooleanProperty(
+ "collocated", "Enable collocated query", false, false);
+
+ /** Replicated only property. */
+ private BooleanProperty replicatedOnly = new BooleanProperty(
+ "replicatedOnly", "Specify if the all queries contain only replicated tables", false, false);
+
+ /** Auto close server cursor property. */
+ private BooleanProperty autoCloseServerCursor = new BooleanProperty(
+ "autoCloseServerCursor", "Enable auto close server cursors when last piece of result set is retrieved. " +
+ "If the server-side cursor is already closed, you may get an exception when trying to call " +
+ "`ResultSet.getMetadata()` method.", false, false);
+
+ /** TCP no delay property. */
+ private BooleanProperty tcpNoDelay = new BooleanProperty(
+ "tcpNoDelay", "TCP no delay flag", true, false);
+
+ /** Lazy query execution property. */
+ private BooleanProperty lazy = new BooleanProperty(
+ "lazy", "Enable lazy query execution", false, false);
+
+ /** Socket send buffer size property. */
+ private IntegerProperty socketSendBuffer = new IntegerProperty(
+ "socketSendBuffer", "Socket send buffer size",
+ 0, false, 0, Integer.MAX_VALUE);
+
+ /** Socket receive buffer size property. */
+ private IntegerProperty socketReceiveBuffer = new IntegerProperty(
+ "socketReceiveBuffer", "Socket send buffer size",
+ 0, false, 0, Integer.MAX_VALUE);
+
+ /** Executes update queries on ignite server nodes flag. */
+ private BooleanProperty skipReducerOnUpdate = new BooleanProperty(
+ "skipReducerOnUpdate", "Enable execution update queries on ignite server nodes", false, false);
+
+ /** Properties array. */
+ private final ConnectionProperty [] propsArray = {
+ host, port,
+ distributedJoins, enforceJoinOrder, collocated, replicatedOnly, autoCloseServerCursor,
+ tcpNoDelay, lazy, socketSendBuffer, socketReceiveBuffer, skipReducerOnUpdate
+ };
+
+ /** {@inheritDoc} */
+ @Override public String getHost() {
+ return host.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setHost(String host) {
+ this.host.setValue(host);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int getPort() {
+ return port.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setPort(int port) throws SQLException {
+ this.port.setValue(port);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isDistributedJoins() {
+ return distributedJoins.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setDistributedJoins(boolean val) {
+ distributedJoins.setValue(val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isEnforceJoinOrder() {
+ return enforceJoinOrder.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setEnforceJoinOrder(boolean val) {
+ enforceJoinOrder.setValue(val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isCollocated() {
+ return collocated.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setCollocated(boolean val) {
+ collocated.setValue(val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isReplicatedOnly() {
+ return replicatedOnly.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setReplicatedOnly(boolean val) {
+ replicatedOnly.setValue(val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isAutoCloseServerCursor() {
+ return autoCloseServerCursor.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setAutoCloseServerCursor(boolean val) {
+ autoCloseServerCursor.setValue(val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int getSocketSendBuffer() {
+ return socketSendBuffer.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setSocketSendBuffer(int size) throws SQLException {
+ socketSendBuffer.setValue(size);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int getSocketReceiveBuffer() {
+ return socketReceiveBuffer.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setSocketReceiveBuffer(int size) throws SQLException {
+ socketReceiveBuffer.setValue(size);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isTcpNoDelay() {
+ return tcpNoDelay.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setTcpNoDelay(boolean val) {
+ tcpNoDelay.setValue(val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isLazy() {
+ return lazy.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setLazy(boolean val) {
+ lazy.setValue(val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isSkipReducerOnUpdate() {
+ return skipReducerOnUpdate.value();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void setSkipReducerOnUpdate(boolean val) {
+ skipReducerOnUpdate.setValue(val);
+ }
+
+ /**
+ * @param props Environment properties.
+ * @throws SQLException On error.
+ */
+ void init(Properties props) throws SQLException {
+ Properties props0 = (Properties)props.clone();
+
+ for (ConnectionProperty aPropsArray : propsArray)
+ aPropsArray.init(props0);
+ }
+
+ /**
+ * @return Driver's properties info array.
+ */
+ private DriverPropertyInfo[] getDriverPropertyInfo() {
+ DriverPropertyInfo[] dpis = new DriverPropertyInfo[propsArray.length];
+
+ for (int i = 0; i < propsArray.length; ++i)
+ dpis[i] = propsArray[i].getDriverPropertyInfo();
+
+ return dpis;
+ }
+
+ /**
+ * @param props Environment properties.
+ * @return Driver's properties info array.
+ * @throws SQLException On error.
+ */
+ public static DriverPropertyInfo[] getDriverPropertyInfo(Properties props) throws SQLException {
+ ConnectionPropertiesImpl cpi = new ConnectionPropertiesImpl();
+
+ cpi.init(props);
+
+ return cpi.getDriverPropertyInfo();
+ }
+
+ /**
+ *
+ */
+ private interface PropertyValidator extends Serializable {
+ /**
+ * @param val String representation of the property value to validate.
+ * @throws SQLException On validation fails.
+ */
+ void validate(String val) throws SQLException;
+ }
+
+ /**
+ *
+ */
+ private abstract static class ConnectionProperty implements Serializable {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Name. */
+ protected String name;
+
+ /** Property description. */
+ protected String desc;
+
+ /** Default value. */
+ protected Object dfltVal;
+
+ /**
+ * An array of possible values if the value may be selected
+ * from a particular set of values; otherwise null.
+ */
+ protected String [] choices;
+
+ /** Required flag. */
+ protected boolean required;
+
+ /** Property validator. */
+ protected PropertyValidator validator;
+
+ /**
+ * @param name Name.
+ * @param desc Description.
+ * @param dfltVal Default value.
+ * @param choices Possible values.
+ * @param required {@code true} if the property is required.
+ */
+ ConnectionProperty(String name, String desc, Object dfltVal, String[] choices, boolean required) {
+ this.name = name;
+ this.desc= desc;
+ this.dfltVal = dfltVal;
+ this.choices = choices;
+ this.required = required;
+ }
+
+ /**
+ * @param name Name.
+ * @param desc Description.
+ * @param dfltVal Default value.
+ * @param choices Possible values.
+ * @param required {@code true} if the property is required.
+ * @param validator Property validator.
+ */
+ ConnectionProperty(String name, String desc, Object dfltVal, String[] choices, boolean required,
+ PropertyValidator validator) {
+ this.name = name;
+ this.desc= desc;
+ this.dfltVal = dfltVal;
+ this.choices = choices;
+ this.required = required;
+ this.validator = validator;
+ }
+
+ /**
+ * @return Default value.
+ */
+ Object getDfltVal() {
+ return dfltVal;
+ }
+
+ /**
+ * @return Property name.
+ */
+ String getName() {
+ return name;
+ }
+
+ /**
+ * @return Array of possible values if the value may be selected
+ * from a particular set of values; otherwise null
+ */
+ String[] choices() {
+ return choices;
+ }
+
+ /**
+ * @param props Properties.
+ * @throws SQLException On error.
+ */
+ void init(Properties props) throws SQLException {
+ String strVal = props.getProperty(PROP_PREFIX + name);
+
+ if (required && strVal == null) {
+ throw new SQLException("Property '" + name + "' is required but not defined",
+ SqlStateCode.CLIENT_CONNECTION_FAILED);
+ }
+
+ if (validator != null)
+ validator.validate(strVal);
+
+ props.remove(name);
+
+ init(strVal);
+ }
+
+ /**
+ * @param ref Reference object.
+ * @throws SQLException On error.
+ */
+ void init(Reference ref) throws SQLException {
+ RefAddr refAddr = ref.get(name);
+
+ if (refAddr != null) {
+ String str = (String) refAddr.getContent();
+
+ if (validator != null)
+ validator.validate(str);
+
+ init(str);
+ }
+ }
+
+ /**
+ * @param str String representation of the
+ * @throws SQLException on error.
+ */
+ abstract void init(String str) throws SQLException;
+
+ /**
+ * @return String representation of the property value.
+ */
+ abstract String valueObject();
+
+ /**
+ * @return JDBC property info object.
+ */
+ DriverPropertyInfo getDriverPropertyInfo() {
+ DriverPropertyInfo dpi = new DriverPropertyInfo(name, valueObject());
+
+ dpi.choices = choices();
+ dpi.required = required;
+ dpi.description = desc;
+
+ return dpi;
+ }
+ }
+
+ /**
+ *
+ */
+ private static class BooleanProperty extends ConnectionProperty {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Bool choices. */
+ private static final String [] boolChoices = new String[] {Boolean.TRUE.toString(), Boolean.FALSE.toString()};
+
+ /** Value. */
+ private boolean val;
+
+ /**
+ * @param name Name.
+ * @param desc Description.
+ * @param dfltVal Default value.
+ * @param required {@code true} if the property is required.
+ */
+ BooleanProperty(String name, String desc, boolean dfltVal, boolean required) {
+ super(name, desc, dfltVal, boolChoices, required);
+
+ val = dfltVal;
+ }
+
+ /**
+ * @return Property value.
+ */
+ boolean value() {
+ return val;
+ }
+
+ /** {@inheritDoc} */
+ @Override void init(String str) throws SQLException {
+ if (str == null)
+ val = (Boolean)dfltVal;
+ else {
+ if (Boolean.TRUE.toString().equalsIgnoreCase(str))
+ val = true;
+ else if (Boolean.FALSE.toString().equalsIgnoreCase(str))
+ val = false;
+ else
+ throw new SQLException("Failed to parse boolean property [name=" + name +
+ ", value=" + str + ']', SqlStateCode.CLIENT_CONNECTION_FAILED);
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override String valueObject() {
+ return Boolean.toString(val);
+ }
+
+ /**
+ * @param val Property value to set.
+ */
+ void setValue(boolean val) {
+ this.val = val;
+ }
+ }
+
+ /**
+ *
+ */
+ private abstract static class NumberProperty extends ConnectionProperty {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Value. */
+ protected Number val;
+
+ /** Allowed value range. */
+ private Number [] range;
+
+ /**
+ * @param name Name.
+ * @param desc Description.
+ * @param dfltVal Default value.
+ * @param required {@code true} if the property is required.
+ * @param min Lower bound of allowed range.
+ * @param max Upper bound of allowed range.
+ */
+ NumberProperty(String name, String desc, Number dfltVal, boolean required, Number min, Number max) {
+ super(name, desc, dfltVal, null, required);
+
+ assert dfltVal != null;
+
+ val = dfltVal;
+
+ range = new Number[] {min, max};
+ }
+
+ /** {@inheritDoc} */
+ @Override void init(String str) throws SQLException {
+ if (str == null)
+ val = (int)dfltVal;
+ else {
+ try {
+ setValue(parse(str));
+ } catch (NumberFormatException e) {
+ throw new SQLException("Failed to parse int property [name=" + name +
+ ", value=" + str + ']', SqlStateCode.CLIENT_CONNECTION_FAILED);
+ }
+ }
+ }
+
+ /**
+ * @param str String value.
+ * @return Number value.
+ * @throws NumberFormatException On parse error.
+ */
+ protected abstract Number parse(String str) throws NumberFormatException;
+
+ /** {@inheritDoc} */
+ @Override String valueObject() {
+ return String.valueOf(val);
+ }
+
+ /**
+ * @param val Property value.
+ * @throws SQLException On error.
+ */
+ void setValue(Number val) throws SQLException {
+ if (range != null) {
+ if (val.doubleValue() < range[0].doubleValue()) {
+ throw new SQLException("Property cannot be lower than " + range[0].toString() + " [name=" + name +
+ ", value=" + val.toString() + ']', SqlStateCode.CLIENT_CONNECTION_FAILED);
+ }
+
+ if (val.doubleValue() > range[1].doubleValue()) {
+ throw new SQLException("Property cannot be upper than " + range[1].toString() + " [name=" + name +
+ ", value=" + val.toString() + ']', SqlStateCode.CLIENT_CONNECTION_FAILED);
+ }
+ }
+
+ this.val = val;
+ }
+ }
+
+ /**
+ *
+ */
+ private static class IntegerProperty extends NumberProperty {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /**
+ * @param name Name.
+ * @param desc Description.
+ * @param dfltVal Default value.
+ * @param required {@code true} if the property is required.
+ * @param min Lower bound of allowed range.
+ * @param max Upper bound of allowed range.
+ */
+ IntegerProperty(String name, String desc, Number dfltVal, boolean required, int min, int max) {
+ super(name, desc, dfltVal, required, min, max);
+ }
+
+ /** {@inheritDoc} */
+ @Override protected Number parse(String str) throws NumberFormatException {
+ return Integer.parseInt(str);
+ }
+
+ /**
+ * @return Property value.
+ */
+ int value() {
+ return val.intValue();
+ }
+ }
+
+ /**
+ *
+ */
+ private static class StringProperty extends ConnectionProperty {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Value */
+ private String val;
+
+ /**
+ * @param name Name.
+ * @param desc Description.
+ * @param dfltVal Default value.
+ * @param choices Possible values.
+ * @param required {@code true} if the property is required.
+ * @param validator Property value validator.
+ */
+ StringProperty(String name, String desc, String dfltVal, String [] choices, boolean required,
+ PropertyValidator validator) {
+ super(name, desc, dfltVal, choices, required, validator);
+
+ val = dfltVal;
+ }
+
+ /**
+ * @param val Property value.
+ */
+ void setValue(String val) {
+ this.val = val;
+ }
+
+ /**
+ * @return Property value.
+ */
+ String value() {
+ return val;
+ }
+
+ /** {@inheritDoc} */
+ @Override void init(String str) throws SQLException {
+ val = str;
+ }
+
+ /** {@inheritDoc} */
+ @Override String valueObject() {
+ return val;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/69acdaaa/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
index 57b25e1..999c793 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
@@ -51,18 +51,6 @@ import static java.sql.ResultSet.CLOSE_CURSORS_AT_COMMIT;
import static java.sql.ResultSet.CONCUR_READ_ONLY;
import static java.sql.ResultSet.HOLD_CURSORS_OVER_COMMIT;
import static java.sql.ResultSet.TYPE_FORWARD_ONLY;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_AUTO_CLOSE_SERVER_CURSORS;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_COLLOCATED;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_DISTRIBUTED_JOINS;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_ENFORCE_JOIN_ORDER;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_HOST;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_LAZY;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_PORT;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_REPLICATED_ONLY;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_SOCK_RCV_BUF;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_SOCK_SND_BUF;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_TCP_NO_DELAY;
-import static org.apache.ignite.internal.jdbc.thin.JdbcThinUtils.PROP_SKIP_REDUCER_ON_UPDATE;
/**
* JDBC connection implementation.
@@ -103,53 +91,42 @@ public class JdbcThinConnection implements Connection {
/** Jdbc metadata. Cache the JDBC object on the first access */
private JdbcThinDatabaseMetadata metadata;
+ /** Connection properties. */
+ private ConnectionProperties connProps;
+
/**
* Creates new connection.
*
* @param url Connection URL.
- * @param props Additional properties.
* @param schema Schema name.
+ * @param props Connection properties.
* @throws SQLException In case Ignite client failed to start.
*/
- public JdbcThinConnection(String url, Properties props, String schema) throws SQLException {
+ public JdbcThinConnection(String url, String schema, Properties props) throws SQLException {
assert url != null;
- assert props != null;
this.url = url;
+ connProps = new ConnectionPropertiesImpl();
+
+ ((ConnectionPropertiesImpl)connProps).init(props);
+
holdability = HOLD_CURSORS_OVER_COMMIT;
autoCommit = true;
txIsolation = Connection.TRANSACTION_NONE;
this.schema = normalizeSchema(schema);
- String host = extractHost(props);
- int port = extractPort(props);
-
- boolean distributedJoins = extractBoolean(props, PROP_DISTRIBUTED_JOINS, false);
- boolean enforceJoinOrder = extractBoolean(props, PROP_ENFORCE_JOIN_ORDER, false);
- boolean collocated = extractBoolean(props, PROP_COLLOCATED, false);
- boolean replicatedOnly = extractBoolean(props, PROP_REPLICATED_ONLY, false);
- boolean autoCloseServerCursor = extractBoolean(props, PROP_AUTO_CLOSE_SERVER_CURSORS, false);
- boolean lazyExec = extractBoolean(props, PROP_LAZY, false);
-
- int sockSndBuf = extractIntNonNegative(props, PROP_SOCK_SND_BUF, 0);
- int sockRcvBuf = extractIntNonNegative(props, PROP_SOCK_RCV_BUF, 0);
-
- boolean tcpNoDelay = extractBoolean(props, PROP_TCP_NO_DELAY, true);
- boolean skipReducerOnUpdate = extractBoolean(props, PROP_SKIP_REDUCER_ON_UPDATE, false);
-
try {
- cliIo = new JdbcThinTcpIo(host, port, distributedJoins, enforceJoinOrder, collocated, replicatedOnly,
- autoCloseServerCursor, lazyExec, sockSndBuf, sockRcvBuf, tcpNoDelay, skipReducerOnUpdate);
+ cliIo = new JdbcThinTcpIo(connProps);
cliIo.start();
}
catch (Exception e) {
cliIo.close();
- throw new SQLException("Failed to connect to Ignite cluster [host=" + host + ", port=" + port + ']',
- SqlStateCode.CLIENT_CONNECTION_FAILED, e);
+ throw new SQLException("Failed to connect to Ignite cluster [host=" + connProps.getHost() +
+ ", port=" + connProps.getPort() + ']', SqlStateCode.CLIENT_CONNECTION_FAILED, e);
}
}
@@ -653,7 +630,7 @@ public class JdbcThinConnection implements Connection {
* @return Auto close server cursors flag.
*/
boolean autoCloseServerCursor() {
- return cliIo.autoCloseServerCursor();
+ return connProps.isAutoCloseServerCursor();
}
/**
@@ -683,120 +660,6 @@ public class JdbcThinConnection implements Connection {
}
/**
- * Extract host.
- *
- * @param props Properties.
- * @return Host.
- * @throws SQLException If failed.
- */
- private static String extractHost(Properties props) throws SQLException {
- String host = props.getProperty(PROP_HOST);
-
- if (host != null)
- host = host.trim();
-
- if (F.isEmpty(host))
- throw new SQLException("Host name is empty.", SqlStateCode.CLIENT_CONNECTION_FAILED);
-
- return host;
- }
-
- /**
- * Extract port.
- *
- * @param props Properties.
- * @return Port.
- * @throws SQLException If failed.
- */
- private static int extractPort(Properties props) throws SQLException {
- String portStr = props.getProperty(PROP_PORT);
-
- if (portStr == null)
- return JdbcThinUtils.DFLT_PORT;
-
- int port;
-
- try {
- port = Integer.parseInt(portStr);
-
- if (port <= 0 || port > 0xFFFF)
- throw new SQLException("Invalid port: " + portStr, SqlStateCode.CLIENT_CONNECTION_FAILED);
- }
- catch (NumberFormatException e) {
- throw new SQLException("Invalid port: " + portStr, SqlStateCode.CLIENT_CONNECTION_FAILED);
- }
-
- return port;
- }
-
- /**
- * Extract boolean property.
- *
- * @param props Properties.
- * @param propName Property name.
- * @param dfltVal Default value.
- * @return Value.
- * @throws SQLException If failed.
- */
- private static boolean extractBoolean(Properties props, String propName, boolean dfltVal) throws SQLException {
- String strVal = props.getProperty(propName);
-
- if (strVal == null)
- return dfltVal;
-
- if (Boolean.TRUE.toString().equalsIgnoreCase(strVal))
- return true;
- else if (Boolean.FALSE.toString().equalsIgnoreCase(strVal))
- return false;
- else
- throw new SQLException("Failed to parse boolean property [name=" + JdbcThinUtils.trimPrefix(propName) +
- ", value=" + strVal + ']', SqlStateCode.CLIENT_CONNECTION_FAILED);
- }
-
- /**
- * Extract non-negative int property.
- *
- * @param props Properties.
- * @param propName Property name.
- * @param dfltVal Default value.
- * @return Value.
- * @throws SQLException If failed.
- */
- private static int extractIntNonNegative(Properties props, String propName, int dfltVal) throws SQLException {
- int res = extractInt(props, propName, dfltVal);
-
- if (res < 0)
- throw new SQLException("Property cannot be negative [name=" + JdbcThinUtils.trimPrefix(propName) +
- ", value=" + res + ']', SqlStateCode.CLIENT_CONNECTION_FAILED);
-
- return res;
- }
-
- /**
- * Extract int property.
- *
- * @param props Properties.
- * @param propName Property name.
- * @param dfltVal Default value.
- * @return Value.
- * @throws SQLException If failed.
- */
- private static int extractInt(Properties props, String propName, int dfltVal) throws SQLException {
- String strVal = props.getProperty(propName);
-
- if (strVal == null)
- return dfltVal;
-
- try {
- return Integer.parseInt(strVal);
- }
- catch (NumberFormatException e) {
- throw new SQLException("Failed to parse int property [name=" + JdbcThinUtils.trimPrefix(propName) +
- ", value=" + strVal + ']', SqlStateCode.CLIENT_CONNECTION_FAILED);
- }
- }
-
- /**
* @return Connection URL.
*/
public String url() {
http://git-wip-us.apache.org/repos/asf/ignite/blob/69acdaaa/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinTcpIo.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinTcpIo.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinTcpIo.java
index 0670fb1..4d23934 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinTcpIo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinTcpIo.java
@@ -20,9 +20,27 @@ package org.apache.ignite.internal.jdbc.thin;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.net.InetSocketAddress;
+import java.net.MalformedURLException;
import java.net.Socket;
+import java.net.URL;
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.internal.binary.BinaryReaderExImpl;
import org.apache.ignite.internal.binary.BinaryWriterExImpl;
@@ -39,6 +57,7 @@ import org.apache.ignite.internal.processors.odbc.jdbc.JdbcQueryMetadataRequest;
import org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequest;
import org.apache.ignite.internal.processors.odbc.jdbc.JdbcResponse;
import org.apache.ignite.internal.util.ipc.loopback.IpcClientTcpEndpoint;
+import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteProductVersion;
@@ -76,41 +95,8 @@ public class JdbcThinTcpIo {
/** Initial output for query close message. */
private static final int QUERY_CLOSE_MSG_SIZE = 9;
- /** Host. */
- private final String host;
-
- /** Port. */
- private final int port;
-
- /** Distributed joins. */
- private final boolean distributedJoins;
-
- /** Enforce join order. */
- private final boolean enforceJoinOrder;
-
- /** Collocated flag. */
- private final boolean collocated;
-
- /** Replicated only flag. */
- private final boolean replicatedOnly;
-
- /** Lazy execution query flag. */
- private final boolean lazy;
-
- /** Flag to automatically close server cursor. */
- private final boolean autoCloseServerCursor;
-
- /** Executes update queries on server nodes. */
- private final boolean skipReducerOnUpdate;
-
- /** Socket send buffer. */
- private final int sockSndBuf;
-
- /** Socket receive buffer. */
- private final int sockRcvBuf;
-
- /** TCP no delay flag. */
- private final boolean tcpNoDelay;
+ /** Connection properties. */
+ private final ConnectionProperties connProps;
/** Endpoint. */
private IpcClientTcpEndpoint endpoint;
@@ -130,34 +116,10 @@ public class JdbcThinTcpIo {
/**
* Constructor.
*
- * @param host Host.
- * @param port Port.
- * @param distributedJoins Distributed joins flag.
- * @param enforceJoinOrder Enforce join order flag.
- * @param collocated Collocated flag.
- * @param replicatedOnly Replicated only flag.
- * @param autoCloseServerCursor Flag to automatically close server cursors.
- * @param lazy Lazy execution query flag.
- * @param sockSndBuf Socket send buffer.
- * @param sockRcvBuf Socket receive buffer.
- * @param tcpNoDelay TCP no delay flag.
- * @param skipReducerOnUpdate Executes update queries on ignite server nodes.
+ * @param connProps Connection properties.
*/
- JdbcThinTcpIo(String host, int port, boolean distributedJoins, boolean enforceJoinOrder, boolean collocated,
- boolean replicatedOnly, boolean autoCloseServerCursor, boolean lazy, int sockSndBuf, int sockRcvBuf,
- boolean tcpNoDelay, boolean skipReducerOnUpdate) {
- this.host = host;
- this.port = port;
- this.distributedJoins = distributedJoins;
- this.enforceJoinOrder = enforceJoinOrder;
- this.collocated = collocated;
- this.replicatedOnly = replicatedOnly;
- this.autoCloseServerCursor = autoCloseServerCursor;
- this.lazy = lazy;
- this.sockSndBuf = sockSndBuf;
- this.sockRcvBuf = sockRcvBuf;
- this.tcpNoDelay = tcpNoDelay;
- this.skipReducerOnUpdate = skipReducerOnUpdate;
+ JdbcThinTcpIo(ConnectionProperties connProps) {
+ this.connProps = connProps;
}
/**
@@ -167,16 +129,16 @@ public class JdbcThinTcpIo {
public void start() throws SQLException, IOException {
Socket sock = new Socket();
- if (sockSndBuf != 0)
- sock.setSendBufferSize(sockSndBuf);
+ if (connProps.getSocketSendBuffer() != 0)
+ sock.setSendBufferSize(connProps.getSocketSendBuffer());
- if (sockRcvBuf != 0)
- sock.setReceiveBufferSize(sockRcvBuf);
+ if (connProps.getSocketReceiveBuffer() != 0)
+ sock.setReceiveBufferSize(connProps.getSocketReceiveBuffer());
- sock.setTcpNoDelay(tcpNoDelay);
+ sock.setTcpNoDelay(connProps.isTcpNoDelay());
try {
- sock.connect(new InetSocketAddress(host, port));
+ sock.connect(new InetSocketAddress(connProps.getHost(), connProps.getPort()));
endpoint = new IpcClientTcpEndpoint(sock);
@@ -184,8 +146,8 @@ public class JdbcThinTcpIo {
in = new BufferedInputStream(endpoint.inputStream());
}
catch (IOException | IgniteCheckedException e) {
- throw new SQLException("Failed to connect to server [host=" + host + ", port=" + port + ']',
- SqlStateCode.CLIENT_CONNECTION_FAILED, e);
+ throw new SQLException("Failed to connect to server [host=" + connProps.getHost() +
+ ", port=" + connProps.getPort() + ']', SqlStateCode.CLIENT_CONNECTION_FAILED, e);
}
handshake(CURRENT_VER);
@@ -210,13 +172,13 @@ public class JdbcThinTcpIo {
writer.writeByte(ClientListenerNioListener.JDBC_CLIENT);
- writer.writeBoolean(distributedJoins);
- writer.writeBoolean(enforceJoinOrder);
- writer.writeBoolean(collocated);
- writer.writeBoolean(replicatedOnly);
- writer.writeBoolean(autoCloseServerCursor);
- writer.writeBoolean(lazy);
- writer.writeBoolean(skipReducerOnUpdate);
+ writer.writeBoolean(connProps.isDistributedJoins());
+ writer.writeBoolean(connProps.isEnforceJoinOrder());
+ writer.writeBoolean(connProps.isCollocated());
+ writer.writeBoolean(connProps.isReplicatedOnly());
+ writer.writeBoolean(connProps.isAutoCloseServerCursor());
+ writer.writeBoolean(connProps.isLazy());
+ writer.writeBoolean(connProps.isSkipReducerOnUpdate());
send(writer.array());
@@ -280,11 +242,11 @@ public class JdbcThinTcpIo {
writer.writeByte(ClientListenerNioListener.JDBC_CLIENT);
- writer.writeBoolean(distributedJoins);
- writer.writeBoolean(enforceJoinOrder);
- writer.writeBoolean(collocated);
- writer.writeBoolean(replicatedOnly);
- writer.writeBoolean(autoCloseServerCursor);
+ writer.writeBoolean(connProps.isDistributedJoins());
+ writer.writeBoolean(connProps.isEnforceJoinOrder());
+ writer.writeBoolean(connProps.isCollocated());
+ writer.writeBoolean(connProps.isReplicatedOnly());
+ writer.writeBoolean(connProps.isAutoCloseServerCursor());
send(writer.array());
@@ -429,59 +391,10 @@ public class JdbcThinTcpIo {
}
/**
- * @return Distributed joins flag.
- */
- public boolean distributedJoins() {
- return distributedJoins;
- }
-
- /**
- * @return Enforce join order flag.
- */
- public boolean enforceJoinOrder() {
- return enforceJoinOrder;
- }
-
- /**
- * @return Collocated flag.
- */
- public boolean collocated() {
- return collocated;
- }
-
- /**
- * @return Replicated only flag.
+ * @return Connection properties.
*/
- public boolean replicatedOnly() {
- return replicatedOnly;
- }
-
- /**
- * @return Auto close server cursors flag.
- */
- public boolean autoCloseServerCursor() {
- return autoCloseServerCursor;
- }
-
- /**
- * @return Socket send buffer size.
- */
- public int socketSendBuffer() {
- return sockSndBuf;
- }
-
- /**
- * @return Socket receive buffer size.
- */
- public int socketReceiveBuffer() {
- return sockRcvBuf;
- }
-
- /**
- * @return TCP no delay flag.
- */
- public boolean tcpNoDelay() {
- return tcpNoDelay;
+ public ConnectionProperties connectionProperties() {
+ return connProps;
}
/**
@@ -490,18 +403,4 @@ public class JdbcThinTcpIo {
IgniteProductVersion igniteVersion() {
return igniteVer;
}
-
- /**
- * @return Lazy query execution flag.
- */
- public boolean lazy() {
- return lazy;
- }
-
- /**
- * @return Server side update flag.
- */
- public boolean skipReducerOnUpdate() {
- return skipReducerOnUpdate;
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/69acdaaa/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinUtils.java
index c9bf61c..5f895dd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinUtils.java
@@ -17,8 +17,6 @@
package org.apache.ignite.internal.jdbc.thin;
-import org.apache.ignite.configuration.ClientConnectorConfiguration;
-
import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
@@ -37,6 +35,7 @@ import static java.sql.Types.TIME;
import static java.sql.Types.TIMESTAMP;
import static java.sql.Types.TINYINT;
import static java.sql.Types.VARCHAR;
+import static org.apache.ignite.internal.jdbc.thin.ConnectionPropertiesImpl.PROP_PREFIX;
/**
* Utility methods for thin JDBC driver.
@@ -45,88 +44,12 @@ public class JdbcThinUtils {
/** URL prefix. */
public static final String URL_PREFIX = "jdbc:ignite:thin://";
- /** Prefix for property names. */
- public static final String PROP_PREFIX = "ignite.jdbc.";
-
/** Port number property name. */
public static final String PROP_PORT = PROP_PREFIX + "port";
/** Hostname property name. */
public static final String PROP_HOST = PROP_PREFIX + "host";
- /** Parameter: distributed joins flag (SQL hint). */
- public static final String PARAM_DISTRIBUTED_JOINS = "distributedJoins";
-
- /** Parameter: enforce join order flag (SQL hint). */
- public static final String PARAM_ENFORCE_JOIN_ORDER = "enforceJoinOrder";
-
- /** Parameter: collocated flag (SQL hint). */
- public static final String PARAM_COLLOCATED = "collocated";
-
- /** Parameter: lazy query execution flag (SQL hint). */
- public static final String PARAM_REPLICATED_ONLY = "replicatedOnly";
-
- /** Parameter: replicated only flag (SQL hint). */
- public static final String PARAM_LAZY = "lazy";
-
- /** Parameter: socket send buffer. */
- public static final String PARAM_SOCK_SND_BUF = "socketSendBuffer";
-
- /** Parameter: socket receive buffer. */
- public static final String PARAM_SOCK_RCV_BUF = "socketReceiveBuffer";
-
- /** Parameter: TCP no-delay flag. */
- public static final String PARAM_TCP_NO_DELAY = "tcpNoDelay";
-
- /** Parameter: Automatically close server cursor. */
- public static final String PARAM_AUTO_CLOSE_SERVER_CURSOR = "autoCloseServerCursor";
-
- /** Parameter: execute update query in distributed mode on ignite server nodes. */
- public static final String PARAM_SKIP_REDUCER_ON_UPDATE = "skipReducerOnUpdate";
-
- /** 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_ENFORCE_JOIN_ORDER = PROP_PREFIX + PARAM_ENFORCE_JOIN_ORDER;
-
- /** Collocated property name. */
- public static final String PROP_COLLOCATED = PROP_PREFIX + PARAM_COLLOCATED;
-
- /** Lazy property name. */
- public static final String PROP_LAZY = PROP_PREFIX + PARAM_LAZY;
-
- /** Replicated only property name. */
- public static final String PROP_REPLICATED_ONLY = PROP_PREFIX + PARAM_REPLICATED_ONLY;
-
- /** Socket send buffer property name. */
- public static final String PROP_SOCK_SND_BUF = PROP_PREFIX + PARAM_SOCK_SND_BUF;
-
- /** Socket receive buffer property name. */
- public static final String PROP_SOCK_RCV_BUF = PROP_PREFIX + PARAM_SOCK_RCV_BUF;
-
- /** TCP no delay property name. */
- public static final String PROP_TCP_NO_DELAY = PROP_PREFIX + PARAM_TCP_NO_DELAY;
-
- /** Automatically close server cursor. */
- public static final String PROP_AUTO_CLOSE_SERVER_CURSORS = PROP_PREFIX + PARAM_AUTO_CLOSE_SERVER_CURSOR;
-
- /** Executes update queries on ignite server nodes in distributed mode. */
- public static final String PROP_SKIP_REDUCER_ON_UPDATE = PROP_PREFIX + PARAM_SKIP_REDUCER_ON_UPDATE;
-
- /** Default port. */
- public static final int DFLT_PORT = ClientConnectorConfiguration.DFLT_PORT;
-
- /**
- * Trim prefix from property.
- *
- * @param prop Property.
- * @return Parameter name.
- */
- public static String trimPrefix(String prop) {
- return prop.substring(PROP_PREFIX.length());
- }
-
/**
* Converts Java class name to type from {@link Types}.
*