postgresql-jdbc.git / summary / log / commit / refs
commit 0ed0e8f2dcd0ae4bbb5caee27b7057cef182c146
Author: Dave Cramer <davecramer@gmail.com>
Commit: GitHub <noreply@github.com>
Date: Thu Nov 22 13:29:53 2018 +0000
fix missing metadata columns, and misspelled columns (#1323)
* fix missing metadata columns, and misspelled columns
.../java/org/postgresql/jdbc/PgDatabaseMetaData.java | 13 +++++++++----
.../postgresql/test/jdbc2/DatabaseMetaDataTest.java | 20 ++++++++++++++++++++
2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/pgjdbc/src/main/java/org/postgresql/jdbc/PgDatabaseMetaData.java b/pgjdbc/src/main/java/org/postgresql/jdbc/PgDatabaseMetaData.java
index f317b234..3d49a67a 100644
--- a/pgjdbc/src/main/java/org/postgresql/jdbc/PgDatabaseMetaData.java
+++ b/pgjdbc/src/main/java/org/postgresql/jdbc/PgDatabaseMetaData.java
@@ -1066,7 +1066,7 @@ public class PgDatabaseMetaData implements DatabaseMetaData {
f[13] = new Field("COLUMN_DEF", Oid.VARCHAR);
f[14] = new Field("SQL_DATA_TYPE", Oid.INT4);
f[15] = new Field("SQL_DATETIME_SUB", Oid.INT4);
- f[16] = new Field("CHAR_OCTECT_LENGTH", Oid.INT4);
+ f[16] = new Field("CHAR_OCTET_LENGTH", Oid.INT4);
f[17] = new Field("ORDINAL_POSITION", Oid.INT4);
f[18] = new Field("IS_NULLABLE", Oid.VARCHAR);
f[19] = new Field("SPECIFIC_NAME", Oid.VARCHAR);
@@ -1284,7 +1284,9 @@ public class PgDatabaseMetaData implements DatabaseMetaData {
+ " END "
+ " ELSE NULL "
+ " END "
- + " AS TABLE_TYPE, d.description AS REMARKS "
+ + " AS TABLE_TYPE, d.description AS REMARKS, "
+ + " '' as TYPE_CAT, '' as TYPE_SCHEM, '' as TYPE_NAME, "
+ + "'' AS SELF_REFERENCING_COL_NAME, '' AS REF_GENERATION "
+ " FROM pg_catalog.pg_namespace n, pg_catalog.pg_class c "
+ " LEFT JOIN pg_catalog.pg_description d ON (c.oid = d.objoid AND d.objsubid = 0) "
+ " LEFT JOIN pg_catalog.pg_class dc ON (d.classoid=dc.oid AND dc.relname='pg_class') "
@@ -1451,7 +1453,7 @@ public class PgDatabaseMetaData implements DatabaseMetaData {
public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern,
String columnNamePattern) throws SQLException {
- int numberOfFields = 23; // JDBC4
+ int numberOfFields = 24; // JDBC4
List<byte[][]> v = new ArrayList<byte[][]>(); // The new ResultSet tuple stuff
Field[] f = new Field[numberOfFields]; // The field descriptors for the new ResultSet
@@ -1473,11 +1475,12 @@ public class PgDatabaseMetaData implements DatabaseMetaData {
f[15] = new Field("CHAR_OCTET_LENGTH", Oid.VARCHAR);
f[16] = new Field("ORDINAL_POSITION", Oid.INT4);
f[17] = new Field("IS_NULLABLE", Oid.VARCHAR);
- f[18] = new Field("SCOPE_CATLOG", Oid.VARCHAR);
+ f[18] = new Field("SCOPE_CATALOG", Oid.VARCHAR);
f[19] = new Field("SCOPE_SCHEMA", Oid.VARCHAR);
f[20] = new Field("SCOPE_TABLE", Oid.VARCHAR);
f[21] = new Field("SOURCE_DATA_TYPE", Oid.INT2);
f[22] = new Field("IS_AUTOINCREMENT", Oid.VARCHAR);
+ f[23] = new Field( "IS_GENERATED", Oid.VARCHAR);
String sql;
// a.attnum isn't decremented when preceding columns are dropped,
@@ -1619,6 +1622,8 @@ public class PgDatabaseMetaData implements DatabaseMetaData {
autoinc = "YES";
}
tuple[22] = connection.encodeString(autoinc);
+ // there is no way to tell if the value was actually autogenerated.
+ tuple[23] = connection.encodeString("");
v.add(tuple);
}
diff --git a/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java b/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java
index 77d8d72a..9e936be6 100644
--- a/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java
+++ b/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java
@@ -177,8 +177,16 @@ public class DatabaseMetaDataTest {
assertEquals("metadatatest", tableName);
String tableType = rs.getString("TABLE_TYPE");
assertEquals("TABLE", tableType);
+ assertEquals(rs.findColumn("REMARKS"), 5);
+ assertEquals(rs.findColumn("TYPE_CAT"), 6);
+ assertEquals(rs.findColumn("TYPE_SCHEM"),7);
+ assertEquals(rs.findColumn("TYPE_NAME"), 8);
+ assertEquals(rs.findColumn("SELF_REFERENCING_COL_NAME"), 9);
+ assertEquals(rs.findColumn("REF_GENERATION"), 10);
+
// There should only be one row returned
assertTrue("getTables() returned too many rows", rs.next() == false);
+
rs.close();
rs = dbmd.getColumns("", "", "meta%", "%");
@@ -455,9 +463,21 @@ public class DatabaseMetaDataTest {
@Test
public void testColumns() throws SQLException {
// At the moment just test that no exceptions are thrown KJ
+ String [] metadataColumns = {"TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME",
+ "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH",
+ "DECIMAL_DIGITS", "NUM_PREC_RADIX", "NULLABLE", "REMARKS",
+ "COLUMN_DEF","SQL_DATA_TYPE","SQL_DATETIME_SUB","CHAR_OCTET_LENGTH",
+ "ORDINAL_POSITION", "IS_NULLABLE", "SCOPE_CATALOG", "SCOPE_SCHEMA",
+ "SCOPE_TABLE", "SOURCE_DATA_TYPE", "IS_AUTOINCREMENT", "IS_GENERATED"};
+
DatabaseMetaData dbmd = con.getMetaData();
assertNotNull(dbmd);
ResultSet rs = dbmd.getColumns(null, null, "pg_class", null);
+ if ( rs.next() ) {
+ for (int i = 0; i < metadataColumns.length; i++) {
+ assertEquals(i + 1, rs.findColumn(metadataColumns[i]));
+ }
+ }
rs.close();
}
[parent: 84e8d90b4bbe]