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 2018/11/14 12:27:02 UTC
ignite git commit: IGNITE-3467: JDBC: Display catalog as "IGNITE".
This closes #5061.
Repository: ignite
Updated Branches:
refs/heads/master b85b041bc -> 21eb0dead
IGNITE-3467: JDBC: Display catalog as "IGNITE". This closes #5061.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/21eb0dea
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/21eb0dea
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/21eb0dea
Branch: refs/heads/master
Commit: 21eb0dead7b709e437434355f58246e0e8c7a3af
Parents: b85b041
Author: Pavel Kuznetsov <pa...@gmail.com>
Authored: Wed Nov 14 15:26:54 2018 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Wed Nov 14 15:26:54 2018 +0300
----------------------------------------------------------------------
.../internal/jdbc2/JdbcMetadataSelfTest.java | 74 +++++++++++++++++---
.../jdbc/thin/JdbcThinMetadataSelfTest.java | 74 +++++++++++++++++---
.../jdbc/thin/JdbcThinDatabaseMetadata.java | 38 +++++-----
.../internal/jdbc2/JdbcDatabaseMetadata.java | 37 +++++-----
4 files changed, 173 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/21eb0dea/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
index a1c36e1..4c127b6 100755
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
@@ -25,6 +25,7 @@ import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
@@ -175,43 +176,99 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
try (Connection conn = DriverManager.getConnection(BASE_URL)) {
DatabaseMetaData meta = conn.getMetaData();
- ResultSet rs = meta.getTables("", "pers", "%", new String[]{"TABLE"});
+ ResultSet rs = meta.getTables(null, "pers", "%", new String[]{"TABLE"});
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
+ assertEquals(JdbcDatabaseMetadata.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("PERSON", rs.getString("TABLE_NAME"));
- rs = meta.getTables("", "org", "%", new String[]{"TABLE"});
+ rs = meta.getTables(null, "org", "%", new String[]{"TABLE"});
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
+ assertEquals(JdbcDatabaseMetadata.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("ORGANIZATION", rs.getString("TABLE_NAME"));
- rs = meta.getTables("", "pers", "%", null);
+ rs = meta.getTables(null, "pers", "%", null);
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
+ assertEquals(JdbcDatabaseMetadata.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("PERSON", rs.getString("TABLE_NAME"));
- rs = meta.getTables("", "org", "%", null);
+ rs = meta.getTables(null, "org", "%", null);
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
+ assertEquals(JdbcDatabaseMetadata.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("ORGANIZATION", rs.getString("TABLE_NAME"));
- rs = meta.getTables("", "PUBLIC", "", new String[]{"WRONG"});
+ rs = meta.getTables(null, "PUBLIC", "", new String[]{"WRONG"});
assertFalse(rs.next());
}
}
/**
+ * Negative scenarios for catalog name.
+ * Perform metadata lookups, that use incorrect catalog names.
+ */
+ public void testCatalogWithNotExistingName() throws SQLException {
+ checkNoEntitiesFoundForCatalog("");
+ checkNoEntitiesFoundForCatalog("NOT_EXISTING_CATALOG");
+ }
+
+ /**
+ * Check that lookup in the metadata have been performed using specified catalog name (that is neither {@code null}
+ * nor correct catalog name), empty result set is returned.
+ *
+ * @param invalidCat catalog name that is not either
+ */
+ private void checkNoEntitiesFoundForCatalog(String invalidCat) throws SQLException {
+ try (Connection conn = DriverManager.getConnection(BASE_URL)) {
+ DatabaseMetaData meta = conn.getMetaData();
+
+ // Intention: we set the other arguments that way, the values to have as many results as possible.
+ assertIsEmpty(meta.getTables(invalidCat, null, "%", new String[] {"TABLE"}));
+ assertIsEmpty(meta.getColumns(invalidCat, null, "%", "%"));
+ assertIsEmpty(meta.getColumnPrivileges(invalidCat, "pers", "PERSON", "%"));
+ assertIsEmpty(meta.getTablePrivileges(invalidCat, null, "%"));
+ assertIsEmpty(meta.getPrimaryKeys(invalidCat, "pers", "PERSON"));
+ assertIsEmpty(meta.getImportedKeys(invalidCat, "pers", "PERSON"));
+ assertIsEmpty(meta.getExportedKeys(invalidCat, "pers", "PERSON"));
+ // meta.getCrossReference(...) doesn't make sense because we don't have FK constraint.
+ assertIsEmpty(meta.getIndexInfo(invalidCat, null, "%", false, true));
+ assertIsEmpty(meta.getSuperTables(invalidCat, "%", "%"));
+ assertIsEmpty(meta.getSchemas(invalidCat, null));
+ assertIsEmpty(meta.getPseudoColumns(invalidCat, null, "%", ""));
+ }
+ }
+
+ /**
+ * Assert that specified ResultSet contains no rows.
+ *
+ * @param rs result set to check.
+ * @throws SQLException on error.
+ */
+ private static void assertIsEmpty(ResultSet rs) throws SQLException {
+ try {
+ boolean empty = !rs.next();
+
+ assertTrue("Result should be empty because invalid catalog is specified.", empty);
+ }
+ finally {
+ rs.close();
+ }
+ }
+
+ /**
* @throws Exception If failed.
*/
public void testGetColumns() throws Exception {
try (Connection conn = DriverManager.getConnection(BASE_URL)) {
DatabaseMetaData meta = conn.getMetaData();
- ResultSet rs = meta.getColumns("", "pers", "PERSON", "%");
+ ResultSet rs = meta.getColumns(null, "pers", "PERSON", "%");
assertNotNull(rs);
@@ -256,7 +313,7 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
assertTrue(names.isEmpty());
assertEquals(3, cnt);
- rs = meta.getColumns("", "org", "ORGANIZATION", "%");
+ rs = meta.getColumns(null, "org", "ORGANIZATION", "%");
assertNotNull(rs);
@@ -405,7 +462,8 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
while (rs.next()) {
schemas.add(rs.getString(1));
- assertNull(rs.getString(2));
+ assertEquals("There is only one possible catalog.",
+ JdbcDatabaseMetadata.CATALOG_NAME, rs.getString(2));
}
assertEquals(expectedSchemas, schemas);
http://git-wip-us.apache.org/repos/asf/ignite/blob/21eb0dea/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
index 6e08862..9759965 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
@@ -25,6 +25,7 @@ import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
@@ -44,6 +45,7 @@ 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.IgniteVersionUtils;
+import org.apache.ignite.internal.jdbc.thin.JdbcThinDatabaseMetadata;
import org.apache.ignite.internal.processors.query.QueryEntityEx;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
@@ -202,39 +204,43 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest {
try (Connection conn = DriverManager.getConnection(URL)) {
DatabaseMetaData meta = conn.getMetaData();
- ResultSet rs = meta.getTables("", "pers", "%", new String[]{"TABLE"});
+ ResultSet rs = meta.getTables(null, "pers", "%", new String[]{"TABLE"});
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
+ assertEquals(JdbcThinDatabaseMetadata.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("PERSON", rs.getString("TABLE_NAME"));
assertFalse(rs.next());
- rs = meta.getTables("", "org", "%", new String[]{"TABLE"});
+ rs = meta.getTables(null, "org", "%", new String[]{"TABLE"});
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
+ assertEquals(JdbcThinDatabaseMetadata.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("ORGANIZATION", rs.getString("TABLE_NAME"));
assertFalse(rs.next());
- rs = meta.getTables("", "pers", "%", null);
+ rs = meta.getTables(null, "pers", "%", null);
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
+ assertEquals(JdbcThinDatabaseMetadata.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("PERSON", rs.getString("TABLE_NAME"));
assertFalse(rs.next());
- rs = meta.getTables("", "org", "%", null);
+ rs = meta.getTables(null, "org", "%", null);
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
+ assertEquals(JdbcThinDatabaseMetadata.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("ORGANIZATION", rs.getString("TABLE_NAME"));
assertFalse(rs.next());
- rs = meta.getTables("", "PUBLIC", "", new String[]{"WRONG"});
+ rs = meta.getTables(null, "PUBLIC", "", new String[]{"WRONG"});
assertFalse(rs.next());
}
}
@@ -278,7 +284,7 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest {
DatabaseMetaData meta = conn.getMetaData();
- ResultSet rs = meta.getColumns("", "pers", "PERSON", "%");
+ ResultSet rs = meta.getColumns(null, "pers", "PERSON", "%");
ResultSetMetaData rsMeta = rs.getMetaData();
@@ -339,7 +345,7 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest {
assert names.isEmpty();
assert cnt == 3;
- rs = meta.getColumns("", "org", "ORGANIZATION", "%");
+ rs = meta.getColumns(null, "org", "ORGANIZATION", "%");
assert rs != null;
@@ -614,13 +620,65 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest {
while (rs.next()) {
schemas.add(rs.getString(1));
- assert rs.getString(2) == null;
+ assertEquals("There is only one possible catalog.",
+ JdbcThinDatabaseMetadata.CATALOG_NAME, rs.getString(2));
}
assert expectedSchemas.equals(schemas) : "Unexpected schemas: " + schemas +
". Expected schemas: " + expectedSchemas;
}
}
+ /**
+ * Negative scenarios for catalog name.
+ * Perform metadata lookups, that use incorrect catalog names.
+ */
+ public void testCatalogWithNotExistingName() throws SQLException {
+ checkNoEntitiesFoundForCatalog("");
+ checkNoEntitiesFoundForCatalog("NOT_EXISTING_CATALOG");
+ }
+
+ /**
+ * Check that lookup in the metadata have been performed using specified catalog name (that is neither {@code null}
+ * nor correct catalog name), empty result set is returned.
+ *
+ * @param invalidCat catalog name that is not either
+ */
+ private void checkNoEntitiesFoundForCatalog(String invalidCat) throws SQLException {
+ try (Connection conn = DriverManager.getConnection(URL)) {
+ DatabaseMetaData meta = conn.getMetaData();
+
+ // Intention: we set the other arguments that way, the values to have as many results as possible.
+ assertIsEmpty(meta.getTables(invalidCat, null, "%", new String[] {"TABLE"}));
+ assertIsEmpty(meta.getColumns(invalidCat, null, "%", "%"));
+ assertIsEmpty(meta.getColumnPrivileges(invalidCat, "pers", "PERSON", "%"));
+ assertIsEmpty(meta.getTablePrivileges(invalidCat, null, "%"));
+ assertIsEmpty(meta.getPrimaryKeys(invalidCat, "pers", "PERSON"));
+ assertIsEmpty(meta.getImportedKeys(invalidCat, "pers", "PERSON"));
+ assertIsEmpty(meta.getExportedKeys(invalidCat, "pers", "PERSON"));
+ // meta.getCrossReference(...) doesn't make sense because we don't have FK constraint.
+ assertIsEmpty(meta.getIndexInfo(invalidCat, null, "%", false, true));
+ assertIsEmpty(meta.getSuperTables(invalidCat, "%", "%"));
+ assertIsEmpty(meta.getSchemas(invalidCat, null));
+ assertIsEmpty(meta.getPseudoColumns(invalidCat, null, "%", ""));
+ }
+ }
+
+ /**
+ * Assert that specified ResultSet contains no rows.
+ *
+ * @param rs result set to check.
+ * @throws SQLException on error.
+ */
+ private static void assertIsEmpty(ResultSet rs) throws SQLException {
+ try {
+ boolean empty = !rs.next();
+
+ assertTrue("Result should be empty because invalid catalog is specified.", empty);
+ }
+ finally {
+ rs.close();
+ }
+ }
/**
* @throws Exception If failed.
http://git-wip-us.apache.org/repos/asf/ignite/blob/21eb0dea/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinDatabaseMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinDatabaseMetadata.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinDatabaseMetadata.java
index e24ecbb..f79b16d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinDatabaseMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinDatabaseMetadata.java
@@ -43,7 +43,6 @@ import org.apache.ignite.internal.processors.odbc.jdbc.JdbcMetaTablesRequest;
import org.apache.ignite.internal.processors.odbc.jdbc.JdbcMetaTablesResult;
import org.apache.ignite.internal.processors.odbc.jdbc.JdbcPrimaryKeyMeta;
import org.apache.ignite.internal.processors.odbc.jdbc.JdbcTableMeta;
-import org.apache.ignite.internal.util.typedef.F;
import static java.sql.Connection.TRANSACTION_NONE;
import static java.sql.Connection.TRANSACTION_REPEATABLE_READ;
@@ -57,6 +56,9 @@ import static java.sql.RowIdLifetime.ROWID_UNSUPPORTED;
*/
@SuppressWarnings("RedundantCast")
public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
+ /** The only possible name for catalog. */
+ public static final String CATALOG_NAME = "IGNITE";
+
/** Driver name. */
public static final String DRIVER_NAME = "Apache Ignite Thin JDBC Driver";
@@ -737,7 +739,7 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
}
}
- if (!validCatalogPattern(catalog) || !tblTypeMatch)
+ if (!isValidCatalog(catalog) || !tblTypeMatch)
return new JdbcThinResultSet(Collections.<List<Object>>emptyList(), meta);
JdbcMetaTablesResult res = conn.sendRequest(new JdbcMetaTablesRequest(schemaPtrn, tblNamePtrn));
@@ -757,7 +759,7 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
private List<Object> tableRow(JdbcTableMeta tblMeta) {
List<Object> row = new ArrayList<>(10);
- row.add(null);
+ row.add(CATALOG_NAME);
row.add(tblMeta.schemaName());
row.add(tblMeta.tableName());
row.add("TABLE");
@@ -779,7 +781,7 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
/** {@inheritDoc} */
@SuppressWarnings("ArraysAsListWithZeroOrOneArgument")
@Override public ResultSet getCatalogs() throws SQLException {
- return new JdbcThinResultSet(Collections.<List<Object>>emptyList(),
+ return new JdbcThinResultSet(Collections.singletonList(Collections.singletonList(CATALOG_NAME)),
Arrays.asList(new JdbcColumnMeta(null, null, "TABLE_CAT", String.class)));
}
@@ -822,7 +824,7 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
new JdbcColumnMeta(null, null, "IS_GENERATEDCOLUMN ", String.class) // 24
);
- if (!validCatalogPattern(catalog))
+ if (!isValidCatalog(catalog))
return new JdbcThinResultSet(Collections.<List<Object>>emptyList(), meta);
JdbcMetaColumnsResult res = conn.sendRequest(new JdbcMetaColumnsRequest(schemaPtrn, tblNamePtrn, colNamePtrn));
@@ -841,9 +843,9 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
* @return Column metadata row.
*/
private List<Object> columnRow(JdbcColumnMeta colMeta, int pos) {
- List<Object> row = new ArrayList<>(20);
+ List<Object> row = new ArrayList<>(24);
- row.add((String)null); // 1. TABLE_CAT
+ row.add(CATALOG_NAME); // 1. TABLE_CAT
row.add(colMeta.schemaName()); // 2. TABLE_SCHEM
row.add(colMeta.tableName()); // 3. TABLE_NAME
row.add(colMeta.columnName()); // 4. COLUMN_NAME
@@ -941,7 +943,7 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
new JdbcColumnMeta(null, null, "KEY_SEQ", Short.class),
new JdbcColumnMeta(null, null, "PK_NAME", String.class));
- if (!validCatalogPattern(catalog))
+ if (!isValidCatalog(catalog))
return new JdbcThinResultSet(Collections.<List<Object>>emptyList(), meta);
JdbcMetaPrimaryKeysResult res = conn.sendRequest(new JdbcMetaPrimaryKeysRequest(schema, tbl));
@@ -964,7 +966,7 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
for (int i = 0; i < pkMeta.fields().size(); ++i) {
List<Object> row = new ArrayList<>(6);
- row.add((String)null); // table catalog
+ row.add(CATALOG_NAME); // table catalog
row.add(pkMeta.schemaName());
row.add(pkMeta.tableName());
row.add(pkMeta.fields().get(i));
@@ -1168,7 +1170,7 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
new JdbcColumnMeta(null, null, "PAGES", Integer.class),
new JdbcColumnMeta(null, null, "FILTER_CONDITION", String.class));
- if (!validCatalogPattern(catalog))
+ if (!isValidCatalog(catalog))
return new JdbcThinResultSet(Collections.<List<Object>>emptyList(), meta);
JdbcMetaIndexesResult res = conn.sendRequest(new JdbcMetaIndexesRequest(schema, tbl));
@@ -1191,7 +1193,7 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
for (int i = 0; i < idxMeta.fields().size(); ++i) {
List<Object> row = new ArrayList<>(13);
- row.add((String)null); // table catalog
+ row.add(CATALOG_NAME); // table catalog
row.add(idxMeta.schemaName());
row.add(idxMeta.tableName());
row.add(true); // non unique
@@ -1421,7 +1423,7 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
new JdbcColumnMeta(null, null, "TABLE_CATALOG", String.class)
);
- if (!validCatalogPattern(catalog))
+ if (!isValidCatalog(catalog))
return new JdbcThinResultSet(Collections.<List<Object>>emptyList(), meta);
JdbcMetaSchemasResult res = conn.sendRequest(new JdbcMetaSchemasRequest(schemaPtrn));
@@ -1432,7 +1434,7 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
List<Object> row = new ArrayList<>(2);
row.add(schema);
- row.add(null);
+ row.add(CATALOG_NAME);
rows.add(row);
}
@@ -1533,12 +1535,14 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
}
/**
- * @param catalog Catalog pattern.
- * @return {@code true} If patter is valid for Ignite (null, empty, or '%' wildcard).
+ * Checks if specified catalog matches the only possible catalog value. See {@link #CATALOG_NAME}.
+ *
+ * @param catalog Catalog name or {@code null}.
+ * @return {@code true} If catalog equal ignoring case to {@link #CATALOG_NAME} or null (which means any catalog).
* Otherwise returns {@code false}.
*/
- private static boolean validCatalogPattern(String catalog) {
- return F.isEmpty(catalog) || "%".equals(catalog);
+ private static boolean isValidCatalog(String catalog) {
+ return catalog == null || catalog.equalsIgnoreCase(CATALOG_NAME);
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/21eb0dea/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
index 846ec06..20cf0d3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
@@ -53,6 +53,9 @@ import static org.apache.ignite.internal.jdbc2.JdbcUtils.convertToSqlException;
* JDBC database metadata implementation.
*/
public class JdbcDatabaseMetadata implements DatabaseMetaData {
+ /** The only possible name for catalog. */
+ public static final String CATALOG_NAME = "IGNITE";
+
/** Driver name. */
public static final String DRIVER_NAME = "Apache Ignite JDBC Driver";
@@ -714,7 +717,7 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
List<List<?>> rows = new LinkedList<>();
- if (validCatalogPattern(catalog) && (tblTypes == null || Arrays.asList(tblTypes).contains("TABLE"))) {
+ if (isValidCatalog(catalog) && (tblTypes == null || Arrays.asList(tblTypes).contains("TABLE"))) {
for (Map.Entry<String, Map<String, Map<String, ColumnInfo>>> schema : meta.entrySet()) {
if (matches(schema.getKey(), schemaPtrn)) {
for (String tbl : schema.getValue().keySet()) {
@@ -745,7 +748,7 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
private List<Object> tableRow(String schema, String tbl) {
List<Object> row = new ArrayList<>(10);
- row.add(null);
+ row.add(CATALOG_NAME);
row.add(schema);
row.add(tbl.toUpperCase());
row.add("TABLE");
@@ -771,7 +774,7 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
Collections.<String>emptyList(),
Collections.singletonList("TABLE_CAT"),
Collections.singletonList(String.class.getName()),
- Collections.<List<?>>emptyList(),
+ Collections.singletonList(Collections.singletonList(CATALOG_NAME)),
true
);
}
@@ -796,7 +799,7 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
int cnt = 0;
- if (validCatalogPattern(catalog)) {
+ if (isValidCatalog(catalog)) {
for (Map.Entry<String, Map<String, Map<String, ColumnInfo>>> schema : meta.entrySet()) {
if (matches(schema.getKey(), schemaPtrn)) {
for (Map.Entry<String, Map<String, ColumnInfo>> tbl : schema.getValue().entrySet()) {
@@ -881,9 +884,9 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
*/
private List<Object> columnRow(String schema, String tbl, String col, int type, String typeName,
boolean nullable, int pos) {
- List<Object> row = new ArrayList<>(20);
+ List<Object> row = new ArrayList<>(24);
- row.add(null); // 1. TABLE_CAT
+ row.add(CATALOG_NAME); // 1. TABLE_CAT
row.add(schema); // 2. TABLE_SCHEM
row.add(tbl); // 3. TABLE_NAME
row.add(col); // 4. COLUMN_NAME
@@ -969,12 +972,12 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
List<List<?>> rows = new LinkedList<>();
- if (validCatalogPattern(catalog)) {
+ if (isValidCatalog(catalog)) {
for (Map.Entry<String, Map<String, Map<String, ColumnInfo>>> schema : meta.entrySet()) {
if (matches(schema.getKey(), schemaPtrn)) {
for (Map.Entry<String, Map<String, ColumnInfo>> tbl : schema.getValue().entrySet()) {
if (matches(tbl.getKey(), tblNamePtrn))
- rows.add(Arrays.<Object>asList(null, schema.getKey(), tbl.getKey(), "_KEY", 1, "_KEY"));
+ rows.add(Arrays.<Object>asList(CATALOG_NAME, schema.getKey(), tbl.getKey(), "_KEY", 1, "_KEY"));
}
}
}
@@ -1046,7 +1049,7 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
List<List<?>> rows = new ArrayList<>(indexes.size());
- if (validCatalogPattern(catalog)) {
+ if (isValidCatalog(catalog)) {
for (List<Object> idx : indexes) {
String idxSchema = (String)idx.get(0);
String idxTbl = (String)idx.get(1);
@@ -1054,7 +1057,7 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
if ((schema == null || schema.equals(idxSchema)) && (tbl == null || tbl.equals(idxTbl))) {
List<Object> row = new ArrayList<>(13);
- row.add(null);
+ row.add(CATALOG_NAME);
row.add(idxSchema);
row.add(idxTbl);
row.add(idx.get(2));
@@ -1270,10 +1273,10 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
List<List<?>> rows = new ArrayList<>(meta.size());
- if (validCatalogPattern(catalog)) {
+ if (isValidCatalog(catalog)) {
for (String schema : meta.keySet()) {
if (matches(schema, schemaPtrn))
- rows.add(Arrays.<Object>asList(schema, null));
+ rows.add(Arrays.<Object>asList(schema, CATALOG_NAME));
}
}
@@ -1452,14 +1455,14 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
}
/**
- * Checks whether pattern matches any catalog.
+ * Checks if specified catalog matches the only possible catalog value. See {@link #CATALOG_NAME}.
*
- * @param catalog Catalog pattern.
- * @return {@code true} If patter is valid for Ignite (null, empty, or '%' wildcard).
+ * @param catalog Catalog name or {@code null}.
+ * @return {@code true} If catalog equal ignoring case to {@link #CATALOG_NAME} or null (which means any catalog).
* Otherwise returns {@code false}.
*/
- private static boolean validCatalogPattern(String catalog) {
- return F.isEmpty(catalog) || "%".equals(catalog);
+ private static boolean isValidCatalog(String catalog) {
+ return catalog == null || catalog.equalsIgnoreCase(CATALOG_NAME);
}
/**