From 2535fcde2a8a56159ed90b0debc05cf3be06ac35 Mon Sep 17 00:00:00 2001 From: "Marc G. Fournier" Date: Mon, 9 Feb 1998 03:22:41 +0000 Subject: [PATCH] From: Peter T Mount This patch fixes the following: * Fixes minor bug found in DatabaseMetaData.getTables() where it doesn't handle default table types. * It now reports an error if the client opens a database using properties, and either the user or password properties are missing. This should make the recent problem with Servlets easier to find. * Commented out obsolete property in Driver.getPropertyInfo() --- src/interfaces/jdbc/Makefile | 6 ++++-- src/interfaces/jdbc/postgresql/Connection.java | 8 ++++++++ .../jdbc/postgresql/DatabaseMetaData.java | 10 ++++++++++ src/interfaces/jdbc/postgresql/Driver.java | 18 +++++++++--------- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/interfaces/jdbc/Makefile b/src/interfaces/jdbc/Makefile index 44a9ca3290..d7ad13ff08 100644 --- a/src/interfaces/jdbc/Makefile +++ b/src/interfaces/jdbc/Makefile @@ -4,7 +4,7 @@ # Makefile for Java JDBC interface # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/interfaces/jdbc/Attic/Makefile,v 1.5 1998/02/02 13:16:38 scrappy Exp $ +# $Header: /cvsroot/pgsql/src/interfaces/jdbc/Attic/Makefile,v 1.6 1998/02/09 03:22:30 scrappy Exp $ # #------------------------------------------------------------------------- @@ -75,7 +75,8 @@ OBJS= postgresql/CallableStatement.class \ postgresql/largeobject/LargeObject.class \ postgresql/largeobject/LargeObjectManager.class \ postgresql/util/PGobject.class \ - postgresql/util/PGtokenizer.class + postgresql/util/PGtokenizer.class \ + postgresql/util/UnixCrypt.class # If you have problems with the first line, try the second one. # This is needed when compiling under Solaris, as the solaris sh doesn't @@ -120,6 +121,7 @@ postgresql/largeobject/LargeObject.class: postgresql/largeobject/LargeObject.jav postgresql/largeobject/LargeObjectManager.class: postgresql/largeobject/LargeObjectManager.java postgresql/util/PGobject.class: postgresql/util/PGobject.java postgresql/util/PGtokenizer.class: postgresql/util/PGtokenizer.java +postgresql/util/UnixCrypt.class: postgresql/util/UnixCrypt.java ####################################################################### # These classes are in the example directory, and form the examples diff --git a/src/interfaces/jdbc/postgresql/Connection.java b/src/interfaces/jdbc/postgresql/Connection.java index 074a3d5579..8dd980e2f0 100644 --- a/src/interfaces/jdbc/postgresql/Connection.java +++ b/src/interfaces/jdbc/postgresql/Connection.java @@ -139,6 +139,14 @@ public class Connection implements java.sql.Connection { //int len = STARTUP_LEN; // Length of a startup packet + // Throw an exception if the user or password properties are missing + // This occasionally occurs when the client uses the properties version + // of getConnection(), and is a common question on the email lists + if(info.getProperty("user")==null) + throw new SQLException("The user property is missing. It is mandatory."); + if(info.getProperty("password")==null) + throw new SQLException("The password property is missing. It is mandatory.") + this_driver = d; this_url = new String(url); PG_DATABASE = new String(database); diff --git a/src/interfaces/jdbc/postgresql/DatabaseMetaData.java b/src/interfaces/jdbc/postgresql/DatabaseMetaData.java index 47c257e782..d717218c8f 100644 --- a/src/interfaces/jdbc/postgresql/DatabaseMetaData.java +++ b/src/interfaces/jdbc/postgresql/DatabaseMetaData.java @@ -1615,6 +1615,10 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData */ public java.sql.ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String types[]) throws SQLException { + // Handle default value for types + if(types==null) + types = defaultTableTypes; + // the field descriptors for the new ResultSet Field f[] = new Field[5]; ResultSet r; // ResultSet for the SQL query that we need to do @@ -1687,6 +1691,12 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData {"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" + }; + /** * Get the schema names available in this database. The results * are ordered by schema name. diff --git a/src/interfaces/jdbc/postgresql/Driver.java b/src/interfaces/jdbc/postgresql/Driver.java index 4b1772c88e..c8ef8b9a15 100644 --- a/src/interfaces/jdbc/postgresql/Driver.java +++ b/src/interfaces/jdbc/postgresql/Driver.java @@ -130,16 +130,16 @@ public class Driver implements java.sql.Driver // naughty, but its best for speed. If anyone adds a property here, then // this _MUST_ be increased to accomodate them. - DriverPropertyInfo d,dpi[] = new DriverPropertyInfo[1]; - int i=0; + DriverPropertyInfo d,dpi[] = new DriverPropertyInfo[0]; + //int i=0; - dpi[i++] = d = new DriverPropertyInfo("auth",p.getProperty("auth","default")); - d.description = "determines if password authentication is used"; - d.choices = new String[4]; - d.choices[0]="default"; // Get value from postgresql.auth property, defaults to trust - d.choices[1]="trust"; // No password authentication - d.choices[2]="password"; // Password authentication - d.choices[3]="ident"; // Ident (RFC 1413) protocol + //dpi[i++] = d = new DriverPropertyInfo("auth",p.getProperty("auth","default")); + //d.description = "determines if password authentication is used"; + //d.choices = new String[4]; + //d.choices[0]="default"; // Get value from postgresql.auth property, defaults to trust + //d.choices[1]="trust"; // No password authentication + //d.choices[2]="password"; // Password authentication + //d.choices[3]="ident"; // Ident (RFC 1413) protocol return dpi; }