JDBC Patch - Mailing list pgsql-interfaces

From Christopher Cain
Subject JDBC Patch
Date
Msg-id 39A577C6.52AD43D8@mhsoftware.com
Whole thread Raw
Responses Re: [PATCHES] JDBC Patch  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-interfaces
This patch for the 7.0.2 JDBC interface addresses four issues I
encountered while getting my reporting tool up and running with the
driver. All changes are in the DatabaseMetaData class.

Problem: The getDatabaseProductVersion() method was returning "6.5.2"
Resolution: Changed it to return "7.0.2"

Problem: A call to getTables() with an unsupported table type (in the
String array) resulted in a malformed SQL statement and subsequent
parsing error
Resolution: Unsupported table types are now ignored without error

Problem: In a getTables() call, tables and views were both returned by
the "TABLE" table type, and the "VIEW" table type was unsupported
Resolution: Changed the "TABLE" type to return only physical tables and
added support for the "VIEW" table type (returning only views)

Problem: The getIdentifierQuoteString() method was returning null
Resolution: This method now returns a double-quote

Regards ...

- Christopher
diff -U 5 -r postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java
postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java
--- postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java    Mon Apr 17 14:07:48 2000
+++ postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java    Thu Aug 24 11:42:28 2000
@@ -177,11 +177,11 @@
    * @return the database version
    * @exception SQLException if a database access error occurs
    */
   public String getDatabaseProductVersion() throws SQLException
   {
-    return ("6.5.2");
+    return ("7.0.2");
   }

   /**
    * What is the name of this JDBC driver?  If we don't know this
    * we are doing something wrong!
@@ -361,11 +361,11 @@
    * @return the quoting string
    * @exception SQLException if a database access error occurs
    */
   public String getIdentifierQuoteString() throws SQLException
   {
-    return null;
+    return "\"";
   }

   /**
    * Get a comma separated list of all a database's SQL keywords that
    * are NOT also SQL92 keywords.
@@ -1652,14 +1652,14 @@

     // Now form the query
     StringBuffer sql = new StringBuffer("select relname,oid from pg_class where (");
     boolean notFirst=false;
     for(int i=0;i<types.length;i++) {
-      if(notFirst)
-    sql.append(" or ");
       for(int j=0;j<getTableTypes.length;j++)
     if(getTableTypes[j][0].equals(types[i])) {
+          if(notFirst)
+            sql.append(" or ");
       sql.append(getTableTypes[j][1]);
       notFirst=true;
     }
     }

@@ -1704,22 +1704,23 @@
   // Each supported type consists of it's name, and the sql where
   // clause to retrieve that value.
   //
   // IMPORTANT: the query must be enclosed in ( )
   private static final String getTableTypes[][] = {
-    {"TABLE",        "(relkind='r' and relname !~ '^pg_' and relname !~ '^xinv')"},
+    {"TABLE",        "(relkind='r' and relhasrules='f' and relname !~ '^pg_' and relname !~ '^xinv')"},
+    {"VIEW",        "(relkind='r' and relhasrules='t' and relname !~ '^pg_' and relname !~ '^xinv')"},
     {"INDEX",        "(relkind='i' and relname !~ '^pg_' and relname !~ '^xinx')"},
     {"LARGE OBJECT",    "(relkind='r' and relname ~ '^xinv')"},
     {"SEQUENCE",    "(relkind='S' and relname !~ '^pg_')"},
     {"SYSTEM TABLE",    "(relkind='r' and relname ~ '^pg_')"},
     {"SYSTEM INDEX",    "(relkind='i' and relname ~ '^pg_')"}
   };

   // These are the default tables, used when NULL is passed to getTables
   // The choice of these provide the same behaviour as psql's \d
   private static final String defaultTableTypes[] = {
-    "TABLE","INDEX","SEQUENCE"
+    "TABLE","VIEW","INDEX","SEQUENCE"
   };

   /**
    * Get the schema names available in this database.  The results
    * are ordered by schema name.
diff -U 5 -r postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
--- postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java    Mon Apr 17 14:07:50 2000
+++ postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java    Wed Aug 23 15:14:50 2000
@@ -177,11 +177,11 @@
    * @return the database version
    * @exception SQLException if a database access error occurs
    */
   public String getDatabaseProductVersion() throws SQLException
   {
-    return ("6.5.2");
+    return ("7.0.2");
   }

   /**
    * What is the name of this JDBC driver?  If we don't know this
    * we are doing something wrong!
@@ -361,11 +361,11 @@
    * @return the quoting string
    * @exception SQLException if a database access error occurs
    */
   public String getIdentifierQuoteString() throws SQLException
   {
-    return null;
+    return "\"";
   }

   /**
    * Get a comma separated list of all a database's SQL keywords that
    * are NOT also SQL92 keywords.
@@ -1652,14 +1652,14 @@

     // Now form the query
     StringBuffer sql = new StringBuffer("select relname,oid from pg_class where (");
     boolean notFirst=false;
     for(int i=0;i<types.length;i++) {
-      if(notFirst)
-    sql.append(" or ");
       for(int j=0;j<getTableTypes.length;j++)
     if(getTableTypes[j][0].equals(types[i])) {
+      if(notFirst)
+        sql.append(" or ");
       sql.append(getTableTypes[j][1]);
       notFirst=true;
     }
     }

@@ -1704,22 +1704,23 @@
   // Each supported type consists of it's name, and the sql where
   // clause to retrieve that value.
   //
   // IMPORTANT: the query must be enclosed in ( )
   private static final String getTableTypes[][] = {
-    {"TABLE",        "(relkind='r' and relname !~ '^pg_' and relname !~ '^xinv')"},
+    {"TABLE",        "(relkind='r' and relhasrules='f' and relname !~ '^pg_' and relname !~ '^xinv')"},
+    {"VIEW",        "(relkind='r' and relhasrules='t' and relname !~ '^pg_' and relname !~ '^xinv')"},
     {"INDEX",        "(relkind='i' and relname !~ '^pg_' and relname !~ '^xinx')"},
     {"LARGE OBJECT",    "(relkind='r' and relname ~ '^xinv')"},
     {"SEQUENCE",    "(relkind='S' and relname !~ '^pg_')"},
     {"SYSTEM TABLE",    "(relkind='r' and relname ~ '^pg_')"},
     {"SYSTEM INDEX",    "(relkind='i' and relname ~ '^pg_')"}
   };

   // These are the default tables, used when NULL is passed to getTables
   // The choice of these provide the same behaviour as psql's \d
   private static final String defaultTableTypes[] = {
-    "TABLE","INDEX","SEQUENCE"
+    "TABLE","VIEW","INDEX","SEQUENCE"
   };

   /**
    * Get the schema names available in this database.  The results
    * are ordered by schema name.

pgsql-interfaces by date:

Previous
From: Kovacs Zoltan
Date:
Subject: Re: OBDC and Postgres v. 7
Next
From: Christophe Vigny
Date:
Subject: odbc