Tom Lane wrote:
Martijn van Oosterhout <kleptog@svana.org> writes:
Does that mean that:
psql -d "service=myservice"
should Just Work(tm)? That would be nice.

Even more to the point,

        psql "service=myservice"

which is why we want to overload dbname rather than any of the other
PQsetdbLogin parameters for this --- dbname has pride of place in the
command line syntax for several of the client programs.

                        regards, tom lane


Right. Here's the patch I just knocked up, which seems to Just Work (tm) ;-)

cheers

andrew


Index: src/interfaces/libpq/fe-connect.c
===================================================================
RCS file: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v
retrieving revision 1.339
diff -c -r1.339 fe-connect.c
*** src/interfaces/libpq/fe-connect.c   21 Nov 2006 16:28:00 -0000      1.339
--- src/interfaces/libpq/fe-connect.c   12 Dec 2006 22:49:28 -0000
***************
*** 567,572 ****
--- 567,573 ----
                         const char *pwd)
  {
        PGconn     *conn;
+       bool       have_conninfo = false;
  
        /*
         * Allocate memory for the conn structure
***************
*** 575,585 ****
        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;
  
        /*
--- 576,609 ----
        if (conn == NULL)
                return NULL;
  
+       /* 
+        * Have we got something that might be a conninfo string? 
+        * If so, try that first.
+        */
+       if (dbName && strchr(dbName,'='))
+       {
+               if(connectOptions1(conn,dbName))
+               {
+                       /* it was a conninfo string */
+                       have_conninfo = true;
+               }
+               else
+               {
+                       /* put things back the way they were so we can try 
again */
+                       freePGconn(conn);
+                       conn = makeEmptyPGconn();
+                       if (conn == NULL)
+                               return NULL;
+                       
+               }
+       }
+ 
        /*
         * Parse an empty conninfo string in order to set up the same defaults
!        * that PQconnectdb() would use. Skip this if we already found a 
!        * conninfo string.
         */
!       if (!have_conninfo && !connectOptions1(conn, ""))
                return conn;
  
        /*
***************
*** 613,619 ****
                conn->pgtty = strdup(pgtty);
        }
  
!       if (dbName && dbName[0] != '\0')
        {
                if (conn->dbName)
                        free(conn->dbName);
--- 637,643 ----
                conn->pgtty = strdup(pgtty);
        }
  
!       if (!have_conninfo && dbName && dbName[0] != '\0')
        {
                if (conn->dbName)
                        free(conn->dbName);
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to