]> granicus.if.org Git - postgresql/commitdiff
Interpret a dbName param to PQsetdbLogin as a conninfo string if it contains an ...
authorAndrew Dunstan <andrew@dunslane.net>
Tue, 19 Dec 2006 01:53:36 +0000 (01:53 +0000)
committerAndrew Dunstan <andrew@dunslane.net>
Tue, 19 Dec 2006 01:53:36 +0000 (01:53 +0000)
doc/src/sgml/libpq.sgml
doc/src/sgml/ref/psql-ref.sgml
src/interfaces/libpq/fe-connect.c

index 40d0bcb1fbdcd67a36ef3397bf0fbc1fcf213d5a..0fc0f76fd21ccb1a4bbbc4d2404ddfb50f3aca32 100644 (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">
   <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>
index c3071752c71b57b9ff7d10abc0e26a01bdc92a16..cd92a21729461b17dc76628b3b023d5a687b8870 100644 (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
 -->
 
@@ -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.),
index eb6ab6127df61ec20fc6fe56b314d4069dec4439..5b29b60a6e1b9b2715a8299cb41bc9ddf38f99c3 100644 (file)
@@ -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)