You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/08/31 09:10:29 UTC
[7/9] ignite git commit: IGNITE-5409: JDBC thin: added schema to
connection URL. This closes #2179.
IGNITE-5409: JDBC thin: added schema to connection URL. This closes #2179.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/bc8e6456
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/bc8e6456
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/bc8e6456
Branch: refs/heads/ignite-3478
Commit: bc8e64567eebfb4bfa30e989ee63ddae65b20693
Parents: f9be391
Author: tledkov-gridgain <tl...@gridgain.com>
Authored: Thu Aug 31 11:03:18 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Thu Aug 31 11:03:18 2017 +0300
----------------------------------------------------------------------
.../jdbc/thin/JdbcThinConnectionSelfTest.java | 22 ++++++
.../jdbc/thin/JdbcThinNoDefaultSchemaTest.java | 82 +++++++++++++++++++-
.../org/apache/ignite/IgniteJdbcThinDriver.java | 20 +++--
.../internal/jdbc/thin/JdbcThinConnection.java | 11 ++-
.../internal/jdbc/thin/JdbcThinUtils.java | 2 +-
5 files changed, 123 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc8e6456/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 a2e7be1..2306a2b 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
@@ -287,6 +287,28 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest {
}
/**
+ * Test schema property in URL.
+ *
+ * @throws Exception If failed.
+ */
+ public void testSchema() throws Exception {
+ assertInvalid("jdbc:ignite:thin://127.0.0.1/qwe/qwe",
+ "Invalid URL format (only schema name is allowed in URL path parameter 'host:port[/schemaName]')" );
+
+ try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/public")) {
+ assertEquals("Invalid schema", "public", conn.getSchema());
+ }
+
+ try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/" + DEFAULT_CACHE_NAME)) {
+ assertEquals("Invalid schema", DEFAULT_CACHE_NAME, conn.getSchema());
+ }
+
+ try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/_not_exist_schema_")) {
+ assertEquals("Invalid schema", "_not_exist_schema_", conn.getSchema());
+ }
+ }
+
+ /**
* Get client socket for connection.
*
* @param conn Connection.
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc8e6456/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinNoDefaultSchemaTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinNoDefaultSchemaTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinNoDefaultSchemaTest.java
index ff49742..7b226e5 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinNoDefaultSchemaTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinNoDefaultSchemaTest.java
@@ -20,7 +20,9 @@ package org.apache.ignite.jdbc.thin;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
+import java.sql.SQLException;
import java.sql.Statement;
+import java.util.concurrent.Callable;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.configuration.CacheConfiguration;
@@ -28,6 +30,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.GridTestUtils;
import org.jetbrains.annotations.NotNull;
/**
@@ -119,11 +122,9 @@ public class JdbcThinNoDefaultSchemaTest extends JdbcThinAbstractSelfTest {
/**
* @throws Exception If failed.
*/
- public void testNoCacheNameQuery() throws Exception {
+ public void testSchemaNameInQuery() throws Exception {
Connection conn = DriverManager.getConnection(URL);
- conn.setSchema("cache1");
-
Statement stmt = conn.createStatement();
assertNotNull(stmt);
@@ -155,4 +156,79 @@ public class JdbcThinNoDefaultSchemaTest extends JdbcThinAbstractSelfTest {
stmt.close();
}
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testSchemaInUrl() throws Exception {
+ try(Connection conn = DriverManager.getConnection(URL + "/cache1")) {
+ Statement stmt = conn.createStatement();
+
+ stmt.execute("select t._key, t._val from Integer t");
+
+ ResultSet rs = stmt.getResultSet();
+
+ while (rs.next())
+ assertEquals(rs.getInt(2), rs.getInt(1) * 2);
+ }
+
+ try(Connection conn = DriverManager.getConnection(URL + "/cache2")) {
+ Statement stmt = conn.createStatement();
+
+ stmt.execute("select t._key, t._val from Integer t");
+
+ ResultSet rs = stmt.getResultSet();
+
+ while (rs.next())
+ assertEquals(rs.getInt(2), rs.getInt(1) * 3);
+ }
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testSchemaInUrlAndInQuery() throws Exception {
+ try(Connection conn = DriverManager.getConnection(URL + "/cache2")) {
+ Statement stmt = conn.createStatement();
+
+ stmt.execute("select t._key, t._val, v._val " +
+ "from \"cache1\".Integer t join Integer v on t._key = v._key");
+
+ ResultSet rs = stmt.getResultSet();
+
+ while (rs.next()) {
+ assertEquals(rs.getInt(2), rs.getInt(1) * 2);
+ assertEquals(rs.getInt(3), rs.getInt(1) * 3);
+ }
+ }
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testSetSchema() throws Exception {
+ try(Connection conn = DriverManager.getConnection(URL)) {
+ // Try to execute query without set schema
+ GridTestUtils.assertThrows(log, new Callable<Object>() {
+ @Override public Object call() throws Exception {
+ Statement stmt = conn.createStatement();
+
+ stmt.execute("select t._key, t._val from Integer t");
+
+ return null;
+ }
+ }, SQLException.class, "Failed to query Ignite");
+
+ conn.setSchema("cache1");
+
+ Statement stmt = conn.createStatement();
+
+ stmt.execute("select t._key, t._val from Integer t");
+
+ ResultSet rs = stmt.getResultSet();
+
+ while (rs.next())
+ assertEquals(rs.getInt(2), rs.getInt(1) * 2);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc8e6456/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 7e23d7a..423223c 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java
@@ -166,9 +166,9 @@ public class IgniteJdbcThinDriver implements Driver {
if (!acceptsURL(url))
return null;
- parseUrl(url, props);
+ String schema = parseUrl(url, props);
- return new JdbcThinConnection(url, props);
+ return new JdbcThinConnection(url, props, schema);
}
/** {@inheritDoc} */
@@ -218,9 +218,10 @@ public class IgniteJdbcThinDriver implements Driver {
*
* @param props Properties.
* @param url URL.
+ * @return Scheme name. {@code null} in case the schema isn't specified in the url.
* @throws SQLException On error.
*/
- private void parseUrl(String url, Properties props) throws SQLException {
+ private String parseUrl(String url, Properties props) throws SQLException {
if (F.isEmpty(url))
throw new SQLException("URL cannot be null or empty.");
@@ -234,10 +235,9 @@ public class IgniteJdbcThinDriver implements Driver {
if (nakedUrlParts.length > 2)
throw new SQLException("Invalid URL format (only one ? character is allowed): " + url);
- String endpoint = nakedUrlParts[0];
+ String[] pathParts = nakedUrlParts[0].split("/");
- if (endpoint.endsWith("/"))
- endpoint = endpoint.substring(0, endpoint.length() - 1);
+ String endpoint = pathParts[0];
String[] endpointParts = endpoint.split(":");
@@ -251,6 +251,14 @@ public class IgniteJdbcThinDriver implements Driver {
if (nakedUrlParts.length == 2)
parseParameters(nakedUrlParts[1], props);
+
+ if (pathParts.length > 2) {
+ throw new SQLException("Invalid URL format (only schema name is allowed in URL path parameter " +
+ "'host:port[/schemaName]'): " + url);
+ }
+
+ // Gets schema from URL string & returns.
+ return pathParts.length == 2 ? pathParts[1] : null;
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc8e6456/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 1ed0844..370cfa4 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
@@ -69,7 +69,7 @@ public class JdbcThinConnection implements Connection {
private String url;
/** Schema name. */
- private String schemaName;
+ private String schema;
/** Closed flag. */
private boolean closed;
@@ -100,9 +100,10 @@ public class JdbcThinConnection implements Connection {
*
* @param url Connection URL.
* @param props Additional properties.
+ * @param schema Schema name.
* @throws SQLException In case Ignite client failed to start.
*/
- public JdbcThinConnection(String url, Properties props) throws SQLException {
+ public JdbcThinConnection(String url, Properties props, String schema) throws SQLException {
assert url != null;
assert props != null;
@@ -112,6 +113,8 @@ public class JdbcThinConnection implements Connection {
autoCommit = true;
txIsolation = Connection.TRANSACTION_NONE;
+ this.schema = schema;
+
String host = extractHost(props);
int port = extractPort(props);
@@ -522,12 +525,12 @@ public class JdbcThinConnection implements Connection {
/** {@inheritDoc} */
@Override public void setSchema(String schema) throws SQLException {
- schemaName = schema;
+ this.schema = schema;
}
/** {@inheritDoc} */
@Override public String getSchema() throws SQLException {
- return schemaName;
+ return schema;
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc8e6456/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 675cf2d..bb6eb14 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
@@ -46,7 +46,7 @@ public class JdbcThinUtils {
public static final String URL_PREFIX = "jdbc:ignite:thin://";
/** Prefix for property names. */
- public static final String PROP_PREFIX = "ignite.jdbc";
+ public static final String PROP_PREFIX = "ignite.jdbc.";
/** Port number property name. */
public static final String PROP_PORT = PROP_PREFIX + "port";