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/10/25 09:40:36 UTC

[02/50] [abbrv] ignite git commit: IGNITE-6529: JDBC: fixed not-null column metadata. This closes #2884.

IGNITE-6529: JDBC: fixed not-null column metadata. This closes #2884.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5c8c4920
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5c8c4920
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5c8c4920

Branch: refs/heads/ignite-3478
Commit: 5c8c492005868e6ee2bad1fb8daac5b202da52dd
Parents: 8f23bca
Author: tledkov-gridgain <tl...@gridgain.com>
Authored: Thu Oct 19 22:20:18 2017 +0300
Committer: devozerov <pp...@gmail.com>
Committed: Thu Oct 19 22:20:18 2017 +0300

----------------------------------------------------------------------
 .../internal/jdbc2/JdbcMetadataSelfTest.java    |  12 +++
 .../jdbc/thin/JdbcThinMetadataSelfTest.java     |  14 +++
 .../jdbc/thin/JdbcThinDatabaseMetadata.java     |  89 +++++++++-------
 .../internal/jdbc2/JdbcDatabaseMetadata.java    | 104 +++++++++++++------
 4 files changed, 149 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5c8c4920/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 bdc6644..1e5db0a 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
@@ -220,6 +220,8 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
 
             assertNotNull(rs);
 
+            assertEquals(24, rs.getMetaData().getColumnCount());
+
             Collection<String> names = new ArrayList<>(2);
 
             names.add("NAME");
@@ -237,14 +239,20 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
                     assertEquals(VARCHAR, rs.getInt("DATA_TYPE"));
                     assertEquals("VARCHAR", rs.getString("TYPE_NAME"));
                     assertEquals(0, rs.getInt("NULLABLE"));
+                    assertEquals(0, rs.getInt(11)); // nullable column by index
+                    assertEquals("NO", rs.getString("IS_NULLABLE"));
                 } else if ("AGE".equals(name)) {
                     assertEquals(INTEGER, rs.getInt("DATA_TYPE"));
                     assertEquals("INTEGER", rs.getString("TYPE_NAME"));
                     assertEquals(0, rs.getInt("NULLABLE"));
+                    assertEquals(0, rs.getInt(11)); // nullable column by index
+                    assertEquals("NO", rs.getString("IS_NULLABLE"));
                 } else if ("ORGID".equals(name)) {
                     assertEquals(INTEGER, rs.getInt("DATA_TYPE"));
                     assertEquals("INTEGER", rs.getString("TYPE_NAME"));
                     assertEquals(1, rs.getInt("NULLABLE"));
+                    assertEquals(1, rs.getInt(11)); // nullable column by index
+                    assertEquals("YES", rs.getString("IS_NULLABLE"));
                 }
 
                 cnt++;
@@ -271,10 +279,14 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
                     assertEquals(INTEGER, rs.getInt("DATA_TYPE"));
                     assertEquals("INTEGER", rs.getString("TYPE_NAME"));
                     assertEquals(0, rs.getInt("NULLABLE"));
+                    assertEquals(0, rs.getInt(11)); // nullable column by index
+                    assertEquals("NO", rs.getString("IS_NULLABLE"));
                 } else if ("name".equals(name)) {
                     assertEquals(VARCHAR, rs.getInt("DATA_TYPE"));
                     assertEquals("VARCHAR", rs.getString("TYPE_NAME"));
                     assertEquals(1, rs.getInt("NULLABLE"));
+                    assertEquals(1, rs.getInt(11)); // nullable column by index
+                    assertEquals("YES", rs.getString("IS_NULLABLE"));
                 }
 
                 cnt++;

http://git-wip-us.apache.org/repos/asf/ignite/blob/5c8c4920/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 4e1ae4d..2fd40d1 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
@@ -260,6 +260,10 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest {
 
             ResultSet rs = meta.getColumns("", "pers", "PERSON", "%");
 
+            ResultSetMetaData rsMeta = rs.getMetaData();
+
+            assert rsMeta.getColumnCount() == 24 : "Invalid columns count: " + rsMeta.getColumnCount();
+
             assert rs != null;
 
             Collection<String> names = new ArrayList<>(2);
@@ -279,24 +283,34 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest {
                     assert rs.getInt("DATA_TYPE") == VARCHAR;
                     assert "VARCHAR".equals(rs.getString("TYPE_NAME"));
                     assert rs.getInt("NULLABLE") == 0;
+                    assert rs.getInt(11) == 0; // nullable column by index
+                    assert rs.getString("IS_NULLABLE").equals("NO");
                 } else if ("ORGID".equals(name)) {
                     assert rs.getInt("DATA_TYPE") == INTEGER;
                     assert "INTEGER".equals(rs.getString("TYPE_NAME"));
                     assert rs.getInt("NULLABLE") == 1;
+                    assert rs.getInt(11) == 1;  // nullable column by index
+                    assert rs.getString("IS_NULLABLE").equals("YES");
                 } else if ("AGE".equals(name)) {
                     assert rs.getInt("DATA_TYPE") == INTEGER;
                     assert "INTEGER".equals(rs.getString("TYPE_NAME"));
                     assert rs.getInt("NULLABLE") == 0;
+                    assert rs.getInt(11) == 0;  // nullable column by index
+                    assert rs.getString("IS_NULLABLE").equals("NO");
                 }
                 else if ("_KEY".equals(name)) {
                     assert rs.getInt("DATA_TYPE") == OTHER;
                     assert "OTHER".equals(rs.getString("TYPE_NAME"));
                     assert rs.getInt("NULLABLE") == 0;
+                    assert rs.getInt(11) == 0;  // nullable column by index
+                    assert rs.getString("IS_NULLABLE").equals("NO");
                 }
                 else if ("_VAL".equals(name)) {
                     assert rs.getInt("DATA_TYPE") == OTHER;
                     assert "OTHER".equals(rs.getString("TYPE_NAME"));
                     assert rs.getInt("NULLABLE") == 0;
+                    assert rs.getInt(11) == 0;  // nullable column by index
+                    assert rs.getString("IS_NULLABLE").equals("NO");
                 }
 
                 cnt++;

http://git-wip-us.apache.org/repos/asf/ignite/blob/5c8c4920/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 8b26900..cfc3b68 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
@@ -793,26 +793,31 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
         conn.ensureNotClosed();
 
         final List<JdbcColumnMeta> meta = Arrays.asList(
-            new JdbcColumnMeta(null, null, "TABLE_CAT", String.class),
-            new JdbcColumnMeta(null, null, "TABLE_SCHEM", String.class),
-            new JdbcColumnMeta(null, null, "TABLE_NAME", String.class),
-            new JdbcColumnMeta(null, null, "COLUMN_NAME", String.class),
-            new JdbcColumnMeta(null, null, "DATA_TYPE", Short.class),
-            new JdbcColumnMeta(null, null, "TYPE_NAME", String.class),
-            new JdbcColumnMeta(null, null, "COLUMN_SIZE", Integer.class),
-            new JdbcColumnMeta(null, null, "DECIMAL_DIGITS", Integer.class),
-            new JdbcColumnMeta(null, null, "NUM_PREC_RADIX", Short.class),
-            new JdbcColumnMeta(null, null, "NULLABLE", Short.class),
-            new JdbcColumnMeta(null, null, "REMARKS", String.class),
-            new JdbcColumnMeta(null, null, "COLUMN_DEF", String.class),
-            new JdbcColumnMeta(null, null, "CHAR_OCTET_LENGTH", Integer.class),
-            new JdbcColumnMeta(null, null, "ORDINAL_POSITION", Integer.class),
-            new JdbcColumnMeta(null, null, "IS_NULLABLE", String.class),
-            new JdbcColumnMeta(null, null, "SCOPE_CATLOG", String.class),
-            new JdbcColumnMeta(null, null, "SCOPE_SCHEMA", String.class),
-            new JdbcColumnMeta(null, null, "SCOPE_TABLE", String.class),
-            new JdbcColumnMeta(null, null, "SOURCE_DATA_TYPE", Short.class),
-            new JdbcColumnMeta(null, null, "IS_AUTOINCREMENT", String.class));
+            new JdbcColumnMeta(null, null, "TABLE_CAT", String.class),      // 1
+            new JdbcColumnMeta(null, null, "TABLE_SCHEM", String.class),    // 2
+            new JdbcColumnMeta(null, null, "TABLE_NAME", String.class),     // 3
+            new JdbcColumnMeta(null, null, "COLUMN_NAME", String.class),    // 4
+            new JdbcColumnMeta(null, null, "DATA_TYPE", Short.class),       // 5
+            new JdbcColumnMeta(null, null, "TYPE_NAME", String.class),      // 6
+            new JdbcColumnMeta(null, null, "COLUMN_SIZE", Integer.class),   // 7
+            new JdbcColumnMeta(null, null, "BUFFER_LENGTH ", Integer.class), // 8
+            new JdbcColumnMeta(null, null, "DECIMAL_DIGITS", Integer.class), // 9
+            new JdbcColumnMeta(null, null, "NUM_PREC_RADIX", Short.class),  // 10
+            new JdbcColumnMeta(null, null, "NULLABLE", Short.class),        // 11
+            new JdbcColumnMeta(null, null, "REMARKS", String.class),        // 12
+            new JdbcColumnMeta(null, null, "COLUMN_DEF", String.class),     // 13
+            new JdbcColumnMeta(null, null, "SQL_DATA_TYPE", Integer.class), // 14
+            new JdbcColumnMeta(null, null, "SQL_DATETIME_SUB", Integer.class), // 15
+            new JdbcColumnMeta(null, null, "CHAR_OCTET_LENGTH", Integer.class), // 16
+            new JdbcColumnMeta(null, null, "ORDINAL_POSITION", Integer.class), // 17
+            new JdbcColumnMeta(null, null, "IS_NULLABLE", String.class),    // 18
+            new JdbcColumnMeta(null, null, "SCOPE_CATLOG", String.class),   // 19
+            new JdbcColumnMeta(null, null, "SCOPE_SCHEMA", String.class),   // 20
+            new JdbcColumnMeta(null, null, "SCOPE_TABLE", String.class),    // 21
+            new JdbcColumnMeta(null, null, "SOURCE_DATA_TYPE", Short.class), // 22
+            new JdbcColumnMeta(null, null, "IS_AUTOINCREMENT", String.class), // 23
+            new JdbcColumnMeta(null, null, "IS_GENERATEDCOLUMN ", String.class) // 24
+        );
 
         if (!validCatalogPattern(catalog))
             return new JdbcThinResultSet(Collections.<List<Object>>emptyList(), meta);
@@ -835,26 +840,30 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
     private List<Object> columnRow(JdbcColumnMeta colMeta, int pos) {
         List<Object> row = new ArrayList<>(20);
 
-        row.add((String)null);
-        row.add(colMeta.schemaName());
-        row.add(colMeta.tableName());
-        row.add(colMeta.columnName());
-        row.add(colMeta.dataType());
-        row.add(colMeta.dataTypeName());
-        row.add((Integer)null);
-        row.add((Integer)null);
-        row.add(10);
-        row.add(colMeta.isNullable() ? 1 : 0);
-        row.add((String)null);
-        row.add((String)null);
-        row.add(Integer.MAX_VALUE);
-        row.add(pos);
-        row.add("YES");
-        row.add((String)null);
-        row.add((String)null);
-        row.add((String)null);
-        row.add((Short)null);
-        row.add("NO");
+        row.add((String)null);                  // 1. TABLE_CAT
+        row.add(colMeta.schemaName());          // 2. TABLE_SCHEM
+        row.add(colMeta.tableName());           // 3. TABLE_NAME
+        row.add(colMeta.columnName());          // 4. COLUMN_NAME
+        row.add(colMeta.dataType());            // 5. DATA_TYPE
+        row.add(colMeta.dataTypeName());        // 6. TYPE_NAME
+        row.add((Integer)null);                 // 7. COLUMN_SIZE
+        row.add((Integer)null);                 // 8. BUFFER_LENGTH
+        row.add((Integer)null);                 // 9. DECIMAL_DIGITS
+        row.add(10);                            // 10. NUM_PREC_RADIX
+        row.add(colMeta.isNullable() ? columnNullable : columnNoNulls);  // 11. NULLABLE
+        row.add((String)null);                  // 12. REMARKS
+        row.add((String)null);                  // 13. COLUMN_DEF
+        row.add(colMeta.dataType());            // 14. SQL_DATA_TYPE
+        row.add((Integer)null);                 // 15. SQL_DATETIME_SUB
+        row.add(Integer.MAX_VALUE);             // 16. CHAR_OCTET_LENGTH
+        row.add(pos);                           // 17. ORDINAL_POSITION
+        row.add(colMeta.isNullable() ? "YES" : "NO"); // 18. IS_NULLABLE
+        row.add((String)null);                  // 19. SCOPE_CATALOG
+        row.add((String)null);                  // 20. SCOPE_SCHEMA
+        row.add((String)null);                  // 21. SCOPE_TABLE
+        row.add((Short)null);                   // 22. SOURCE_DATA_TYPE
+        row.add("NO");                          // 23. IS_AUTOINCREMENT
+        row.add("NO");                          // 23. IS_GENERATEDCOLUMN
 
         return row;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/5c8c4920/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 2fe24bb..eb55e4f 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
@@ -815,16 +815,56 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
         return new JdbcResultSet(true, null,
             conn.createStatement0(),
             Collections.<String>emptyList(),
-            Arrays.asList("TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", "DATA_TYPE",
-                "TYPE_NAME", "COLUMN_SIZE", "DECIMAL_DIGITS", "NUM_PREC_RADIX", "NULLABLE",
-                "REMARKS", "COLUMN_DEF", "CHAR_OCTET_LENGTH", "ORDINAL_POSITION", "IS_NULLABLE",
-                "SCOPE_CATLOG", "SCOPE_SCHEMA", "SCOPE_TABLE", "SOURCE_DATA_TYPE", "IS_AUTOINCREMENT"),
-            Arrays.asList(String.class.getName(), String.class.getName(), String.class.getName(),
-                String.class.getName(), Integer.class.getName(), String.class.getName(), Integer.class.getName(),
-                Integer.class.getName(), Integer.class.getName(), Integer.class.getName(), String.class.getName(),
-                String.class.getName(), Integer.class.getName(), Integer.class.getName(), String.class.getName(),
-                String.class.getName(), String.class.getName(), String.class.getName(), Short.class.getName(),
-                String.class.getName()),
+            Arrays.asList(
+                "TABLE_CAT",        // 1
+                "TABLE_SCHEM",      // 2
+                "TABLE_NAME",       // 3
+                "COLUMN_NAME",      // 4
+                "DATA_TYPE",        // 5
+                "TYPE_NAME",        // 6
+                "COLUMN_SIZE",      // 7
+                "BUFFER_LENGTH",    // 8
+                "DECIMAL_DIGITS",   // 9
+                "NUM_PREC_RADIX",   // 10
+                "NULLABLE",         // 11
+                "REMARKS",          // 12
+                "COLUMN_DEF",       // 13
+                "SQL_DATA_TYPE",    // 14
+                "SQL_DATETIME_SUB", // 15
+                "CHAR_OCTET_LENGTH", // 16
+                "ORDINAL_POSITION",  // 17
+                "IS_NULLABLE",      // 18
+                "SCOPE_CATLOG",     // 19
+                "SCOPE_SCHEMA",     // 20
+                "SCOPE_TABLE",      // 21
+                "SOURCE_DATA_TYPE", // 22
+                "IS_AUTOINCREMENT", // 23
+                "IS_GENERATEDCOLUMN"), // 23
+            Arrays.asList(
+                String.class.getName(),     // 1
+                String.class.getName(),     // 2
+                String.class.getName(),     // 3
+                String.class.getName(),     // 4
+                Integer.class.getName(),    // 5
+                String.class.getName(),     // 6
+                Integer.class.getName(),    // 7
+                Integer.class.getName(),    // 8
+                Integer.class.getName(),    // 9
+                Integer.class.getName(),    // 10
+                Integer.class.getName(),    // 11
+                String.class.getName(),     // 12
+                String.class.getName(),     // 13
+                Integer.class.getName(),    // 14
+                Integer.class.getName(),    // 15
+                Integer.class.getName(),    // 16
+                Integer.class.getName(),    // 17
+                String.class.getName(),     // 18
+                String.class.getName(),     // 19
+                String.class.getName(),     // 20
+                String.class.getName(),     // 21
+                Short.class.getName(),      // 22
+                String.class.getName(),     // 23
+                String.class.getName()),    // 24
             rows, true
         );
     }
@@ -843,26 +883,30 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
         boolean nullable, int pos) {
         List<Object> row = new ArrayList<>(20);
 
-        row.add(null);
-        row.add(schema);
-        row.add(tbl);
-        row.add(col);
-        row.add(type);
-        row.add(typeName);
-        row.add(null);
-        row.add(null);
-        row.add(10);
-        row.add(nullable ? columnNullable : columnNoNulls);
-        row.add(null);
-        row.add(null);
-        row.add(Integer.MAX_VALUE);
-        row.add(pos);
-        row.add("YES");
-        row.add(null);
-        row.add(null);
-        row.add(null);
-        row.add(null);
-        row.add("NO");
+        row.add(null);                  // 1. TABLE_CAT
+        row.add(schema);                // 2. TABLE_SCHEM
+        row.add(tbl);                   // 3. TABLE_NAME
+        row.add(col);                   // 4. COLUMN_NAME
+        row.add(type);                  // 5. DATA_TYPE
+        row.add(typeName);              // 6. TYPE_NAME
+        row.add(null);                  // 7. COLUMN_SIZE
+        row.add(null);                  // 8. BUFFER_LENGTH
+        row.add(null);                  // 9. DECIMAL_DIGITS
+        row.add(10);                    // 10. NUM_PREC_RADIX
+        row.add(nullable ? columnNullable : columnNoNulls); // 11. NULLABLE
+        row.add(null);                  // 12. REMARKS
+        row.add(null);                  // 13. COLUMN_DEF
+        row.add(type);                  // 14. SQL_DATA_TYPE
+        row.add(null);                  // 15. SQL_DATETIME_SUB
+        row.add(Integer.MAX_VALUE);     // 16. CHAR_OCTET_LENGTH
+        row.add(pos);                   // 17. ORDINAL_POSITION
+        row.add(nullable ? "YES" : "NO"); // 18. IS_NULLABLE
+        row.add(null);                  // 19. SCOPE_CATALOG
+        row.add(null);                  // 20. SCOPE_SCHEMA
+        row.add(null);                  // 21. SCOPE_TABLE
+        row.add(null);                  // 22. SOURCE_DATA_TYPE
+        row.add("NO");                  // 23. IS_AUTOINCREMENT
+        row.add("NO");                  // 24. IS_GENERATEDCOLUMN
 
         return row;
     }