[tarantool-patches] [PATCH] jdbc: fix primary keys meta retrieval
Sergei Kalashnikov
ztarvos at gmail.com
Wed Sep 26 12:33:28 MSK 2018
Fixed parsing primary keys metadata response.
Updated integration tests.
Closes #41
---
https://github.com/tarantool/tarantool-java/issues/41
https://github.com/ztarvos/tarantool-java/commits/gh-41-fix-jdbc-pk-meta
.../org/tarantool/jdbc/SQLDatabaseMetadata.java | 8 +++---
.../java/org/tarantool/jdbc/AbstractJdbcIT.java | 11 ++++----
.../org/tarantool/jdbc/JdbcDatabaseMetaDataIT.java | 32 ++++++++++++++++++++--
3 files changed, 40 insertions(+), 11 deletions(-)
diff --git a/src/main/java/org/tarantool/jdbc/SQLDatabaseMetadata.java b/src/main/java/org/tarantool/jdbc/SQLDatabaseMetadata.java
index e43bcdc..790bbe7 100644
--- a/src/main/java/org/tarantool/jdbc/SQLDatabaseMetadata.java
+++ b/src/main/java/org/tarantool/jdbc/SQLDatabaseMetadata.java
@@ -774,12 +774,12 @@ public class SQLDatabaseMetadata implements DatabaseMetaData {
List<Map<String, Object>> fields = (List<Map<String, Object>>) space.get(FORMAT_IDX);
List<List<Object>> indexes = (List<List<Object>>) connection.connection.select(_VINDEX, 0, Arrays.asList(space.get(SPACE_ID_IDX), 0), 0, 1, 0);
List<Object> primaryKey = indexes.get(0);
- List<List<Object>> parts = (List<List<Object>>) primaryKey.get(INDEX_FORMAT_IDX);
+ List<Map<String, Object>> parts = (List<Map<String, Object>>) primaryKey.get(INDEX_FORMAT_IDX);
for (int i = 0; i < parts.size(); i++) {
- List<Object> part = parts.get(i);
- int ordinal = ((Number) part.get(0)).intValue();
+ Map<String, Object> part = parts.get(i);
+ int ordinal = ((Number) part.get("field")).intValue();
String column = (String) fields.get(ordinal).get("name");
- rows.add(Arrays.asList(table, column, i + 1, "primary", primaryKey.get(NAME_IDX)));
+ rows.add(Arrays.asList(table, column, i + 1, primaryKey.get(NAME_IDX)));
}
}
return new SQLNullResultSet((JDBCBridge.mock(
diff --git a/src/test/java/org/tarantool/jdbc/AbstractJdbcIT.java b/src/test/java/org/tarantool/jdbc/AbstractJdbcIT.java
index 21e3f53..abed9b6 100644
--- a/src/test/java/org/tarantool/jdbc/AbstractJdbcIT.java
+++ b/src/test/java/org/tarantool/jdbc/AbstractJdbcIT.java
@@ -32,9 +32,6 @@ public abstract class AbstractJdbcIT {
private static String URL = String.format("tarantool://%s:%d?user=%s&password=%s", host, port, user, pass);
private static String[] initSql = new String[] {
- "DROP TABLE IF EXISTS test",
- "DROP TABLE IF EXISTS test_types",
-
"CREATE TABLE test(id INT PRIMARY KEY, val VARCHAR(100))",
"INSERT INTO test VALUES (1, 'one'), (2, 'two'), (3, 'three')",
@@ -78,12 +75,15 @@ public abstract class AbstractJdbcIT {
"X'010203040506'," + //LONGVARBINARY
"'1983-03-14'," + //DATE
"'12:01:06'," + //TIME
- "129479994)" //TIMESTAMP
+ "129479994)", //TIMESTAMP
+
+ "CREATE TABLE test_compound(id1 INT, id2 INT, val VARCHAR(100), PRIMARY KEY (id1, id2))"
};
private static String[] cleanSql = new String[] {
"DROP TABLE IF EXISTS test",
- "DROP TABLE IF EXISTS test_types"
+ "DROP TABLE IF EXISTS test_types",
+ "DROP TABLE IF EXISTS test_compound"
};
static Object[] testRow = new Object[] {
@@ -112,6 +112,7 @@ public abstract class AbstractJdbcIT {
@BeforeAll
public static void setupEnv() throws Exception {
+ sqlExec(cleanSql);
sqlExec(initSql);
}
diff --git a/src/test/java/org/tarantool/jdbc/JdbcDatabaseMetaDataIT.java b/src/test/java/org/tarantool/jdbc/JdbcDatabaseMetaDataIT.java
index b934bbe..984a60b 100644
--- a/src/test/java/org/tarantool/jdbc/JdbcDatabaseMetaDataIT.java
+++ b/src/test/java/org/tarantool/jdbc/JdbcDatabaseMetaDataIT.java
@@ -1,6 +1,5 @@
package org.tarantool.jdbc;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
@@ -45,6 +44,9 @@ public class JdbcDatabaseMetaDataIT extends AbstractJdbcIT {
assertTrue(rs.next());
assertEquals("TEST_TYPES", rs.getString("TABLE_NAME"));
+ assertTrue(rs.next());
+ assertEquals("TEST_COMPOUND", rs.getString("TABLE_NAME"));
+
assertFalse(rs.next());
rs.close();
@@ -84,7 +86,6 @@ public class JdbcDatabaseMetaDataIT extends AbstractJdbcIT {
rs.close();
}
- @Disabled(value="Test ignored, issue#41")
@Test
public void testGetPrimaryKeys() throws SQLException {
ResultSet rs = meta.getPrimaryKeys(null, null, "TEST");
@@ -103,4 +104,31 @@ public class JdbcDatabaseMetaDataIT extends AbstractJdbcIT {
rs.close();
}
+
+ @Test
+ public void testGetPrimaryKeysCompound() throws SQLException {
+ ResultSet rs = meta.getPrimaryKeys(null, null, "TEST_COMPOUND");
+
+ assertNotNull(rs);
+ assertTrue(rs.next());
+
+ assertNull(rs.getString("TABLE_CAT"));
+ assertNull(rs.getString("TABLE_SCHEM"));
+ assertEquals("TEST_COMPOUND", rs.getString("TABLE_NAME"));
+ assertEquals("ID1", rs.getString("COLUMN_NAME"));
+ assertEquals(1, rs.getInt("KEY_SEQ"));
+ assertEquals("pk_unnamed_TEST_COMPOUND_1", rs.getString("PK_NAME"));
+
+ assertTrue(rs.next());
+ assertNull(rs.getString("TABLE_CAT"));
+ assertNull(rs.getString("TABLE_SCHEM"));
+ assertEquals("TEST_COMPOUND", rs.getString("TABLE_NAME"));
+ assertEquals("ID2", rs.getString("COLUMN_NAME"));
+ assertEquals(2, rs.getInt("KEY_SEQ"));
+ assertEquals("pk_unnamed_TEST_COMPOUND_1", rs.getString("PK_NAME"));
+
+ assertFalse(rs.next());
+
+ rs.close();
+ }
}
--
1.8.3.1
More information about the Tarantool-patches
mailing list