JDBC getDatabaseProductVersion() patch

Поиск
Список
Период
Сортировка
От Anders Bengtsson
Тема JDBC getDatabaseProductVersion() patch
Дата
Msg-id 39BFD54E.48D0E627@lecando.com
обсуждение исходный текст
Ответы Re: JDBC getDatabaseProductVersion() patch  (Peter Mount <peter@retep.org.uk>)
Список pgsql-interfaces
Hello,
I don't know if this list is the correct way to contribute patches, but
here we go:

I've implemented getDatabaseProductVersion() for DatabaseMetaData so
that it retreives tha version number from the database server, instead
of using a hard coded constant in the driver.
Attached are patches for jdbc1 and jdbc2.
I've only been able to test the jdbc2 driver, but I hope someone can
check that the jdbc1 version works.

(By the way, has anyone tried to merge the identical parts of the jdbc1
and jdbc2 code?).

/Anders
_____________________________________________________________________
A n d e r s  B e n g t s s o n                     anders@lecando.com
Stockholm, Swedendiff -u -r1.6 DatabaseMetaData.java
--- src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java    2000/09/12 18:56:03    1.6
+++ src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java    2000/09/13 19:14:53
@@ -167,19 +167,23 @@
   /**
    * What is the version of this database product.
    *
-   * <p>Note that PostgreSQL 6.3 has a system catalog called pg_version -
-   * however, select * from pg_version on any database retrieves
-   * no rows.
-   *
-   * <p>For now, we will return the version 6.3 (in the hope that we change
-   * this driver as often as we change the database)
-   *
    * @return the database version
    * @exception SQLException if a database access error occurs
    */
   public String getDatabaseProductVersion() throws SQLException
   {
-    return ("7.0.2");
+      /* The function "version()" has had the format "PostgreSQL X.Y.Z on ..."
+       * since at least 6.5.x, so this should be a safe assumption.
+       */
+
+      java.sql.ResultSet resultSet = connection.ExecSQL("select version()");
+      resultSet.next();
+
+      StringTokenizer versionParts = new StringTokenizer(resultSet.getString(1));
+      versionParts.nextToken(); /* "PostgreSQL" */
+      String versionNumber = versionParts.nextToken(); /* "X.Y.Z" */
+
+      return versionNumber;
   }

   /**
diff -u -r1.6 DatabaseMetaData.java
--- src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java    2000/09/12 18:56:04    1.6
+++ src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java    2000/09/13 19:15:06
@@ -167,19 +167,23 @@
   /**
    * What is the version of this database product.
    *
-   * <p>Note that PostgreSQL 6.3 has a system catalog called pg_version -
-   * however, select * from pg_version on any database retrieves
-   * no rows.
-   *
-   * <p>For now, we will return the version 6.3 (in the hope that we change
-   * this driver as often as we change the database)
-   *
    * @return the database version
    * @exception SQLException if a database access error occurs
    */
   public String getDatabaseProductVersion() throws SQLException
   {
-    return ("7.0.2");
+      /* The function "version()" has had the format "PostgreSQL X.Y.Z on ..."
+       * since at least 6.5.x, so this should be a safe assumption.
+       */
+
+      java.sql.ResultSet resultSet = connection.ExecSQL("select version()");
+      resultSet.next();
+
+      StringTokenizer versionParts = new StringTokenizer(resultSet.getString(1));
+      versionParts.nextToken(); /* "PostgreSQL" */
+      String versionNumber = versionParts.nextToken(); /* "X.Y.Z" */
+
+      return versionNumber;
   }

   /**

В списке pgsql-interfaces по дате отправления:

Предыдущее
От: Philipp Käser
Дата:
Сообщение: reading large objects from DB using ODBC
Следующее
От: "Eric D. Friedman"
Дата:
Сообщение: bug in JDBC UNICODE support