Skip site navigation (1) Skip section navigation (2)

proposed PQconnectdbParams macros (was Re: [BUGS] BUG #5304: psql using conninfo fails in connecting to the server)

From: Joe Conway <mail(at)joeconway(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Fujii Masao <masao(dot)fujii(at)gmail(dot)com>, Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>, "Hackers (PostgreSQL)" <pgsql-hackers(at)postgresql(dot)org>
Subject: proposed PQconnectdbParams macros (was Re: [BUGS] BUG #5304: psql using conninfo fails in connecting to the server)
Date: 2010-02-04 00:34:17
Message-ID: 4B6A1609.9040503@joeconway.com (view raw or flat)
Thread:
Lists: pgsql-bugspgsql-hackers
[moving to hackers]

On 02/02/2010 10:23 PM, Tom Lane wrote:
> Joe Conway <mail(at)joeconway(dot)com> writes:
>> Should I also be looking to replace all (or most) other instances of
>> PQsetdbLogin()?
> 
> I think we at least wanted to fix pg_dump(all)/pg_restore.  Not sure if
> the others are worth troubling over.

Any objection if I add these two macros to libpq-fe.h?
-------------------
+ /* Useful macros for PQconnectdbParams() and PQconnectStartParams() */
+ #define DECL_PARAMS_ARRAYS(PARAMS_ARRAY_SIZE) \
+       const char **keywords = pg_malloc(PARAMS_ARRAY_SIZE * \
+                                         sizeof(*keywords)); \
+       const char **values = pg_malloc(PARAMS_ARRAY_SIZE * \
+                                       sizeof(*values))
+ #define SET_PARAMS_ARRAYS(__kv_idx__,__kv_kw__,__kv_v__) \
+       keywords[__kv_idx__]    = __kv_kw__; \
+       values[__kv_idx__]      = __kv_v__


That way this:
-------------------
! #define PARAMS_ARRAY_SIZE	7
!     const char **keywords = pg_malloc(PARAMS_ARRAY_SIZE *
!                                       sizeof(*keywords));
!     const char **values = pg_malloc(PARAMS_ARRAY_SIZE *
!                                     sizeof(*values));
!
!     keywords[0]	= "host";
!     values[0]		= options.host;
!     keywords[1]	= "port";
!     values[1]		= options.port;
!     keywords[2]	= "user";
!     values[2]		= options.username;
!     keywords[3]	= "password";
!     values[3]		= password;
!     keywords[4]	= "dbname";
!     values[4]		= (options.action == ACT_LIST_DB &&
!                          options.dbname == NULL) ?
!                          "postgres" : options.dbname;
!     keywords[5]	= "fallback_application_name";
!     values[5]		= pset.progname;
!     keywords[6]	= NULL;
!     values[6]		= NULL;


becomes this:
-------------------
!     DECL_PARAMS_ARRAYS(7);

!     SET_PARAMS_ARRAYS(0,"host",options.host);
!     SET_PARAMS_ARRAYS(1,"port",options.port);
!     SET_PARAMS_ARRAYS(2,"user",options.username);
!     SET_PARAMS_ARRAYS(3,"password",password);
!     SET_PARAMS_ARRAYS(4,"dbname",(options.action == ACT_LIST_DB &&
!                                   options.dbname == NULL) ?
!                                   "postgres" : options.dbname);
!     SET_PARAMS_ARRAYS(5,"fallback_application_name",pset.progname);
!     SET_PARAMS_ARRAYS(6,NULL,NULL);


I suppose if we do this maybe we should also do:
#define PARAMS_KEYWORDS keywords
#define PARAMS_VALUES values

so the subsequent use looks like:

pset.db = PQconnectdbParams(PARAMS_KEYWORDS, PARAMS_VALUES, true);

To me it seems easier to read and less error prone. Comments?

Joe


In response to

Responses

pgsql-hackers by date

Next:From: Tom LaneDate: 2010-02-04 01:10:29
Subject: Re: proposed PQconnectdbParams macros (was Re: [BUGS] BUG #5304: psql using conninfo fails in connecting to the server)
Previous:From: Andrew DunstanDate: 2010-02-03 23:41:43
Subject: Re: Add on_trusted_init and on_untrusted_init to plperl UPDATED [PATCH]

pgsql-bugs by date

Next:From: Bruce MomjianDate: 2010-02-04 00:42:21
Subject: Re: BUG #5308: How to disable Case sensitivity on naming identifiers
Previous:From: Tom LaneDate: 2010-02-04 00:18:02
Subject: Re: BUG #5308: How to disable Case sensitivity on naming identifiers

Privacy Policy | About PostgreSQL
Copyright © 1996-2013 The PostgreSQL Global Development Group