Thread: JDBC Patch

JDBC Patch

From
Christopher Cain
Date:
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.

Re: JDBC Patch

From
Bruce Momjian
Date:
Applied.  Thanks.

> 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.


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

RE: JDBC Patch

From
Peter Mount
Date:
Eeek, I've got this in my copy ready to commit. How is CVS going to handle
this problem?

Peter

--
Peter Mount
Enterprise Support Officer, Maidstone Borough Council
Email: petermount@maidstone.gov.uk
WWW: http://www.maidstone.gov.uk
All views expressed within this email are not the views of Maidstone Borough
Council


-----Original Message-----
From: Bruce Momjian [mailto:pgman@candle.pha.pa.us]
Sent: Tuesday, September 12, 2000 5:17 AM
To: Christopher Cain
Cc: pgsql-interfaces@postgresql.org; pgsql-patches@postgresql.org
Subject: Re: [PATCHES] JDBC Patch


Applied.  Thanks.

> 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.j
ava
postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.
java
> ---
postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.j
ava    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.j
ava
postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.
java
> ---
postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.j
ava    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.


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

Re: JDBC Patch

From
Tom Lane
Date:
Peter Mount <petermount@maidstone.gov.uk> writes:
> Eeek, I've got this in my copy ready to commit. How is CVS going to handle
> this problem?

You'll have to "cvs update" those files and then check that the changes
were merged correctly before you commit.  I believe CVS will not let
you commit a file in which there are changes since your last cvs update.

Although "cvs update" will try to merge the changes from the repository
with your local edits, my experience is that CVS is not too bright about
merging overlapping differences.  I prefer to do the change merge by
hand --- move my modified files someplace else, cvs update to fetch
clean current copies, then edit to bring the files back in sync.  This
process is a bit tedious, but much more reliable than CVS by itself.

Jan Wieck has posted about his preferred method, which IIRC involves
working in a complete separate copy of the source tree, and then
using "diff -c -R" to generate a summary of his changes.  Then he
cvs update's his reference tree and uses "patch" to apply the
diff output to it, followed by hand cleanup of whatever merges patch
couldn't handle.  This is probably a better way if you plan to do
a large pile of changes between syncs with the repository.

            regards, tom lane

RE: JDBC Patch

From
Peter Mount
Date:
Thanks, this follows previous experience where I've had to check out a fresh
set, run diff, and then merge by hand. It's just more tedious with only a
28k connection.

Peter

--
Peter Mount
Enterprise Support Officer, Maidstone Borough Council
Email: petermount@maidstone.gov.uk
WWW: http://www.maidstone.gov.uk
All views expressed within this email are not the views of Maidstone Borough
Council


-----Original Message-----
From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: Tuesday, September 12, 2000 8:16 AM
To: Peter Mount
Cc: 'Bruce Momjian'; Christopher Cain; pgsql-interfaces@postgresql.org;
pgsql-patches@postgresql.org
Subject: Re: [PATCHES] JDBC Patch


Peter Mount <petermount@maidstone.gov.uk> writes:
> Eeek, I've got this in my copy ready to commit. How is CVS going to handle
> this problem?

You'll have to "cvs update" those files and then check that the changes
were merged correctly before you commit.  I believe CVS will not let
you commit a file in which there are changes since your last cvs update.

Although "cvs update" will try to merge the changes from the repository
with your local edits, my experience is that CVS is not too bright about
merging overlapping differences.  I prefer to do the change merge by
hand --- move my modified files someplace else, cvs update to fetch
clean current copies, then edit to bring the files back in sync.  This
process is a bit tedious, but much more reliable than CVS by itself.

Jan Wieck has posted about his preferred method, which IIRC involves
working in a complete separate copy of the source tree, and then
using "diff -c -R" to generate a summary of his changes.  Then he
cvs update's his reference tree and uses "patch" to apply the
diff output to it, followed by hand cleanup of whatever merges patch
couldn't handle.  This is probably a better way if you plan to do
a large pile of changes between syncs with the repository.

            regards, tom lane

Re: JDBC Patch

From
Bruce Momjian
Date:
[ Charset ISO-8859-1 unsupported, converting... ]
> Eeek, I've got this in my copy ready to commit. How is CVS going to handle
> this problem?

Do a cvs update and see if it skips those changes.


>
> Peter
>
> --
> Peter Mount
> Enterprise Support Officer, Maidstone Borough Council
> Email: petermount@maidstone.gov.uk
> WWW: http://www.maidstone.gov.uk
> All views expressed within this email are not the views of Maidstone Borough
> Council
>
>
> -----Original Message-----
> From: Bruce Momjian [mailto:pgman@candle.pha.pa.us]
> Sent: Tuesday, September 12, 2000 5:17 AM
> To: Christopher Cain
> Cc: pgsql-interfaces@postgresql.org; pgsql-patches@postgresql.org
> Subject: Re: [PATCHES] JDBC Patch
>
>
> Applied.  Thanks.
>
> > 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.j
> ava
> postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.
> java
> > ---
> postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.j
> ava    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.j
> ava
> postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.
> java
> > ---
> postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.j
> ava    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.
>
>
> --
>   Bruce Momjian                        |  http://candle.pha.pa.us
>   pgman@candle.pha.pa.us               |  (610) 853-3000
>   +  If your life is a hard drive,     |  830 Blythe Avenue
>   +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
>


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

[INTERFACES] Re: JDBC Patch

From
Bruce Momjian
Date:
[ Charset ISO-8859-1 unsupported, converting... ]
> Eeek, I've got this in my copy ready to commit. How is CVS going to handle
> this problem?

Do a cvs update and see if it skips those changes.


>
> Peter
>
> --
> Peter Mount
> Enterprise Support Officer, Maidstone Borough Council
> Email: petermount@maidstone.gov.uk
> WWW: http://www.maidstone.gov.uk
> All views expressed within this email are not the views of Maidstone Borough
> Council
>
>
> -----Original Message-----
> From: Bruce Momjian [mailto:pgman@candle.pha.pa.us]
> Sent: Tuesday, September 12, 2000 5:17 AM
> To: Christopher Cain
> Cc: pgsql-interfaces@postgresql.org; pgsql-patches@postgresql.org
> Subject: Re: [PATCHES] JDBC Patch
>
>
> Applied.  Thanks.
>
> > 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.j
> ava
> postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.
> java
> > ---
> postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.j
> ava    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.j
> ava
> postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.
> java
> > ---
> postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.j
> ava    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.
>
>
> --
>   Bruce Momjian                        |  http://candle.pha.pa.us
>   pgman@candle.pha.pa.us               |  (610) 853-3000
>   +  If your life is a hard drive,     |  830 Blythe Avenue
>   +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
>


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026