diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index cbde3387fc33964ea9f2de6d3088566ad240a8eb..3442185fd40556727a04f374bb463f6623a4ff2b 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -316,7 +316,7 @@ char *PQoptions(PGconn *conn) Returns the status of the connection. The status can be CONNECTION_OK or CONNECTION_BAD. <synopsis> -ConnStatusType *PQstatus(PGconn *conn) +ConnStatusType PQstatus(PGconn *conn) </synopsis> </Para> diff --git a/src/interfaces/libpq++/pgconnection.cc b/src/interfaces/libpq++/pgconnection.cc index 96ef215700f36a011fad460d807c5df8f3941c87..9cbdd896171f4fb659cc48922ff540b2e2b67c83 100644 --- a/src/interfaces/libpq++/pgconnection.cc +++ b/src/interfaces/libpq++/pgconnection.cc @@ -10,13 +10,14 @@ * Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq++/Attic/pgconnection.cc,v 1.2 1997/02/13 10:00:27 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq++/Attic/pgconnection.cc,v 1.3 1999/05/10 15:27:18 momjian Exp $ * *------------------------------------------------------------------------- */ #include <stdlib.h> #include <string.h> +#include <strstream> #include "pgconnection.h" extern "C" { @@ -88,21 +89,18 @@ ConnStatusType PgConnection::Connect(const char* dbName) PQtrace(pgConn, debug); #endif - // Set Host Authentication service - char errorMessage[ERROR_MSG_LENGTH]; - memset(errorMessage, 0, sizeof(errorMessage)); - fe_setauthsvc(pgEnv.Auth(), errorMessage); - // Connect to the database - pgConn = PQsetdb(pgEnv.Host(), pgEnv.Port(), pgEnv.Option(), pgEnv.TTY(), dbName); + ostrstream conninfo; + conninfo << "dbname="<<dbName; + conninfo << pgEnv; + pgConn=PQconnectdb(conninfo.str()); + conninfo.freeze(0); - // Return the connection status - if (errorMessage) { - SetErrorMessage( errorMessage ); - return CONNECTION_BAD; + if(ConnectionBad()) { + SetErrorMessage( PQerrorMessage(pgConn) ); } - else - return Status(); + + return Status(); } // PgConnection::status -- return connection or result status diff --git a/src/interfaces/libpq++/pgenv.cc b/src/interfaces/libpq++/pgenv.cc index 451a4f3fde3a90e9fe7642a5701e7b1b15864fba..b7edbd12fe0d003fd328cbacaa03202c73edc5d6 100644 --- a/src/interfaces/libpq++/pgenv.cc +++ b/src/interfaces/libpq++/pgenv.cc @@ -14,7 +14,7 @@ * Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq++/Attic/pgenv.cc,v 1.3 1997/02/13 10:00:33 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq++/Attic/pgenv.cc,v 1.4 1999/05/10 15:27:19 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -66,3 +66,19 @@ string PgEnv::getenv(const char* name) char* env = ::getenv(name); return (env ? env : ""); } + + +// Extract the PgEnv contents into a form suitable for PQconnectdb +// which happens to be readable, hence choice of << +ostream& operator << (ostream &s, const PgEnv& a) +{ + s<<' '; // surround with whitespace, just in case + if(a.pgHost.length() !=0)s<<" host=" <<a.pgHost; + if(a.pgPort.length() !=0)s<<" port=" <<a.pgPort; + // deprecated: if(a.pgAuth.length()!=0)s<<" authtype="<<a.pgAuth; + if(a.pgOption.length()!=0)s<<" options="<<a.pgOption; + if(a.pgTty.length() !=0)s<<" tty=" <<a.pgTty; + s<<' '; + + return s; +} diff --git a/src/interfaces/libpq++/pgenv.h b/src/interfaces/libpq++/pgenv.h index 43068aacce283e115fcd9c877da289e7cf462e53..e3e8d6303b696e0b1b4b508ead22c3e95509db2c 100644 --- a/src/interfaces/libpq++/pgenv.h +++ b/src/interfaces/libpq++/pgenv.h @@ -19,6 +19,7 @@ #define PGENV_H #include <string> +#include <iostream> #ifdef __sun__ #ifndef __GNUC__ @@ -79,6 +80,7 @@ public: protected: string getenv(const char*); + friend ostream& operator << (ostream &, const PgEnv&); }; #endif // PGENV_H