This patch implements the JDBC3 metadata methods: DatabaseMetaData.getDatabaseMajorVersion() DatabaseMetaData.getDatabaseMinorVersion() DatabaseMetaData.getJDBCMajorVersion() DatabaseMetaData.getJDBCMinorVersion() DatabaseMetaData.supportsStatementPooling() Index: src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Connection.java =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Connection.java,v retrieving revision 1.13 diff -u -u -r1.13 AbstractJdbc1Connection.java --- src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Connection.java 2002/11/14 05:35:45 1.13 +++ src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Connection.java 2002/12/17 05:24:15 @@ -1211,6 +1211,56 @@ return dbVersionNumber; } + // Parse a "dirty" integer surrounded by non-numeric characters + private static int integerPart(String dirtyString) + { + int start, end; + + for (start = 0; start < dirtyString.length() && !Character.isDigit(dirtyString.charAt(start)); ++start) + ; + + for (end = start; end < dirtyString.length() && Character.isDigit(dirtyString.charAt(end)); ++end) + ; + + if (start == end) + return 0; + + return Integer.parseInt(dirtyString.substring(start, end)); + } + + /* + * Get server major version + */ + public int getServerMajorVersion() + { + try + { + StringTokenizer versionTokens = new StringTokenizer(dbVersionNumber, "."); // aaXbb.ccYdd + return integerPart(versionTokens.nextToken()); // return X + } + catch (NoSuchElementException e) + { + return 0; + } + } + + /* + * Get server minor version + */ + public int getServerMinorVersion() + { + try + { + StringTokenizer versionTokens = new StringTokenizer(dbVersionNumber, "."); // aaXbb.ccYdd + versionTokens.nextToken(); // Skip aaXbb + return integerPart(versionTokens.nextToken()); // return Y + } + catch (NoSuchElementException e) + { + return 0; + } + } + /** * Is the server we are connected to running at least this version? * This comparison method will fail whenever a major or minor version Index: src/interfaces/jdbc/org/postgresql/jdbc3/AbstractJdbc3DatabaseMetaData.java =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc3/AbstractJdbc3DatabaseMetaData.java,v retrieving revision 1.3 diff -u -u -r1.3 AbstractJdbc3DatabaseMetaData.java --- src/interfaces/jdbc/org/postgresql/jdbc3/AbstractJdbc3DatabaseMetaData.java 2002/11/20 20:37:53 1.3 +++ src/interfaces/jdbc/org/postgresql/jdbc3/AbstractJdbc3DatabaseMetaData.java 2002/12/17 05:25:44 @@ -271,7 +271,7 @@ */ public int getDatabaseMajorVersion() throws SQLException { - throw org.postgresql.Driver.notImplemented(); + return connection.getServerMajorVersion(); } /** @@ -283,7 +283,7 @@ */ public int getDatabaseMinorVersion() throws SQLException { - throw org.postgresql.Driver.notImplemented(); + return connection.getServerMinorVersion(); } /** @@ -296,7 +296,7 @@ */ public int getJDBCMajorVersion() throws SQLException { - throw org.postgresql.Driver.notImplemented(); + return 3; // This class implements JDBC 3.0 } /** @@ -309,7 +309,7 @@ */ public int getJDBCMinorVersion() throws SQLException { - throw org.postgresql.Driver.notImplemented(); + return 0; // This class implements JDBC 3.0 } /** @@ -349,7 +349,7 @@ */ public boolean supportsStatementPooling() throws SQLException { - throw org.postgresql.Driver.notImplemented(); + return false; } }