aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2006-12-19 01:53:36 +0000
committerAndrew Dunstan <andrew@dunslane.net>2006-12-19 01:53:36 +0000
commit5133dd786b0041114ba4da6b174ade8c33917e68 (patch)
tree28aebae4a92136e92ebf1b3b390d416c823a2221
parent93b4f0ff7711d42b8c10e48b0a7575e2847e30b3 (diff)
downloadpostgresql-5133dd786b0041114ba4da6b174ade8c33917e68.tar.gz
postgresql-5133dd786b0041114ba4da6b174ade8c33917e68.zip
Interpret a dbName param to PQsetdbLogin as a conninfo string if it contains an = sign. Tom Lane and Andrew Dunstan.
-rw-r--r--doc/src/sgml/libpq.sgml20
-rw-r--r--doc/src/sgml/ref/psql-ref.sgml18
-rw-r--r--src/interfaces/libpq/fe-connect.c49
3 files changed, 61 insertions, 26 deletions
diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml
index 40d0bcb1fbd..0fc0f76fd21 100644
--- a/doc/src/sgml/libpq.sgml
+++ b/doc/src/sgml/libpq.sgml
@@ -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">
<title><application>libpq</application> - C Library</title>
@@ -324,13 +324,19 @@ PGconn *PQsetdbLogin(const char *pghost,
const char *login,
const char *pwd);
</synopsis>
-</para>
+ </para>
-<para>
- This is the predecessor of <function>PQconnectdb</function> with a fixed
- 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
- empty string for any one of the fixed parameters that is to be defaulted.
+ <para>
+ This is the predecessor of <function>PQconnectdb</function> with a fixed
+ 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
+ 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>
</listitem>
</varlistentry>
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index c3071752c71..cd92a217294 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -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
-->
@@ -113,6 +113,10 @@ PostgreSQL documentation
class="parameter">dbname</replaceable> as the first non-option
argument on the command line.
</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>
</varlistentry>
@@ -555,6 +559,18 @@ PostgreSQL documentation
passwords. See <xref linkend="libpq-pgpass"> for more information.
</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>
If the connection could not be made for any reason (e.g., insufficient
privileges, server is not running on the targeted host, etc.),
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index eb6ab6127df..5b29b60a6e1 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -8,7 +8,7 @@
*
*
* 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();
if (conn == NULL)
return NULL;
-
- /*
- * Parse an empty conninfo string in order to set up the same defaults
- * that PQconnectdb() would use.
- */
- if (!connectOptions1(conn, ""))
- return conn;
-
- /*
- * Absorb specified options into conn structure, overriding defaults
+ /*
+ * 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 */
+ if (dbName && dbName[0] != '\0')
+ {
+ if (conn->dbName)
+ free(conn->dbName);
+ conn->dbName = strdup(dbName);
+ }
+ }
+
+ /*
+ * Insert remaining parameters into struct, overriding defaults
+ * (as well as any conflicting data from dbName taken as a conninfo).
*/
if (pghost && pghost[0] != '\0')
{
@@ -613,13 +633,6 @@ PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions,
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 (conn->pguser)