1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-03 20:02:46 +03:00

Interpret a dbName param to PQsetdbLogin as a conninfo string if it contains an = sign. Tom Lane and Andrew Dunstan.

This commit is contained in:
Andrew Dunstan
2006-12-19 01:53:36 +00:00
parent 93b4f0ff77
commit 5133dd786b
3 changed files with 59 additions and 24 deletions

View File

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.220 2006/11/10 22:15:26 tgl Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.221 2006/12/19 01:53:36 adunstan Exp $ -->
<chapter id="libpq"> <chapter id="libpq">
<title><application>libpq</application> - C Library</title> <title><application>libpq</application> - C Library</title>
@ -324,13 +324,19 @@ PGconn *PQsetdbLogin(const char *pghost,
const char *login, const char *login,
const char *pwd); const char *pwd);
</synopsis> </synopsis>
</para> </para>
<para> <para>
This is the predecessor of <function>PQconnectdb</function> with a fixed This is the predecessor of <function>PQconnectdb</function> with a fixed
set of parameters. It has the same functionality except that the set of parameters. It has the same functionality except that the
missing parameters will always take on default values. Write <symbol>NULL</symbol> or an missing parameters will always take on default values. Write <symbol>NULL</symbol> or an
empty string for any one of the fixed parameters that is to be defaulted. empty string for any one of the fixed parameters that is to be defaulted.
</para>
<para>
If the <parameter>dbName</parameter> contains an <symbol>=</symbol> sign, it
is taken as a <parameter>conninfo</parameter> string in exactly the same way as
if it had been passed to <function>PQconnectdb</function>, and the remaining
parameters are then applied as above.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@ -1,5 +1,5 @@
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.178 2006/12/06 15:47:22 momjian Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.179 2006/12/19 01:53:36 adunstan Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
@ -113,6 +113,10 @@ PostgreSQL documentation
class="parameter">dbname</replaceable> as the first non-option class="parameter">dbname</replaceable> as the first non-option
argument on the command line. argument on the command line.
</para> </para>
<para>
If this parameter contains an <symbol>=</symbol> sign, it it treated as a
<parameter>conninfo</parameter> string. See <xref linkend="libpq-connect"> for more information.
</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -555,6 +559,18 @@ PostgreSQL documentation
passwords. See <xref linkend="libpq-pgpass"> for more information. passwords. See <xref linkend="libpq-pgpass"> for more information.
</para> </para>
<para>
An alternative way to specify connection parameters is in a
<parameter>conninfo</parameter> string, which is used instead of a
database name. This mechanism give you very wide control over the
connection. For example,
<programlisting>
$ <userinput>psql "service=myservice sslmode=require"</userinput>
</programlisting>
See <xref linkend="libpq-connect"> for more information on all the
available connection options.
</para>
<para> <para>
If the connection could not be made for any reason (e.g., insufficient If the connection could not be made for any reason (e.g., insufficient
privileges, server is not running on the targeted host, etc.), privileges, server is not running on the targeted host, etc.),

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.339 2006/11/21 16:28:00 tgl Exp $ * $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.340 2006/12/19 01:53:36 adunstan Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -574,16 +574,36 @@ PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions,
conn = makeEmptyPGconn(); conn = makeEmptyPGconn();
if (conn == NULL) if (conn == NULL)
return NULL; return NULL;
/*
* If the dbName parameter contains '=', assume it's a conninfo
* string.
*/
if (dbName && strchr(dbName,'='))
{
if (!connectOptions1(conn, dbName))
return conn;
}
else
{
/*
* Old-style path: first, parse an empty conninfo string in
* order to set up the same defaults that PQconnectdb() would use.
*/
if (!connectOptions1(conn, ""))
return conn;
/* /* Insert dbName parameter value into struct */
* Parse an empty conninfo string in order to set up the same defaults if (dbName && dbName[0] != '\0')
* that PQconnectdb() would use. {
*/ if (conn->dbName)
if (!connectOptions1(conn, "")) free(conn->dbName);
return conn; conn->dbName = strdup(dbName);
}
}
/* /*
* Absorb specified options into conn structure, overriding defaults * Insert remaining parameters into struct, overriding defaults
* (as well as any conflicting data from dbName taken as a conninfo).
*/ */
if (pghost && pghost[0] != '\0') if (pghost && pghost[0] != '\0')
{ {
@ -613,13 +633,6 @@ PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions,
conn->pgtty = strdup(pgtty); conn->pgtty = strdup(pgtty);
} }
if (dbName && dbName[0] != '\0')
{
if (conn->dbName)
free(conn->dbName);
conn->dbName = strdup(dbName);
}
if (login && login[0] != '\0') if (login && login[0] != '\0')
{ {
if (conn->pguser) if (conn->pguser)