Hi,

I worked on a patch to make PostgreSQL binaries use the new
PQconnectdbParams() libpq functions. I tried to mimic the way Joe Conway
changed my previous patch.

I know I'm way over the deadline for this commitfest. I couldn't do it
before because my previous patch (on this commit fest) proposed two
methods to do the new connection functions (a one array method, and a
two-arrays method). Joe chose the two arrays method. Anyways, I would
understand if it gets postponed to the first commitfest for 9.1.

Regards.


-- 
Guillaume.
 http://www.postgresqlfr.org
 http://dalibo.com
Index: contrib/oid2name/oid2name.c
===================================================================
RCS file: /opt/cvsroot_postgresql/pgsql/contrib/oid2name/oid2name.c,v
retrieving revision 1.36
diff -c -p -c -r1.36 oid2name.c
*** contrib/oid2name/oid2name.c	11 Jun 2009 14:48:51 -0000	1.36
--- contrib/oid2name/oid2name.c	31 Jan 2010 01:36:38 -0000
*************** sql_conn(struct options * my_opts)
*** 301,306 ****
--- 301,308 ----
  	PGconn	   *conn;
  	char	   *password = NULL;
  	bool		new_pass;
+ 	const char *keywords[] = {"host","port","dbname","user",
+ 							  "password","application_name",NULL};
  
  	/*
  	 * Start the connection.  Loop until we have a password if requested by
*************** sql_conn(struct options * my_opts)
*** 308,321 ****
  	 */
  	do
  	{
  		new_pass = false;
! 		conn = PQsetdbLogin(my_opts->hostname,
! 							my_opts->port,
! 							NULL,		/* options */
! 							NULL,		/* tty */
! 							my_opts->dbname,
! 							my_opts->username,
! 							password);
  		if (!conn)
  		{
  			fprintf(stderr, "%s: could not connect to database %s\n",
--- 310,327 ----
  	 */
  	do
  	{
+         const char *values[] = {
+                   my_opts->hostname,
+                   my_opts->port,
+                   my_opts->dbname,
+                   my_opts->username,
+                   password,
+                   "oid2name",
+                   NULL
+               };
+         
  		new_pass = false;
!         conn = PQconnectdbParams(keywords, values);
  		if (!conn)
  		{
  			fprintf(stderr, "%s: could not connect to database %s\n",
Index: contrib/pgbench/pgbench.c
===================================================================
RCS file: /opt/cvsroot_postgresql/pgsql/contrib/pgbench/pgbench.c,v
retrieving revision 1.96
diff -c -p -c -r1.96 pgbench.c
*** contrib/pgbench/pgbench.c	6 Jan 2010 01:30:03 -0000	1.96
--- contrib/pgbench/pgbench.c	31 Jan 2010 01:41:45 -0000
*************** doConnect(void)
*** 345,350 ****
--- 345,352 ----
  	PGconn	   *conn;
  	static char *password = NULL;
  	bool		new_pass;
+ 	const char *keywords[] = {"host","port","options","tty","dbname","user",
+ 							  "password","application_name",NULL};
  
  	/*
  	 * Start the connection.  Loop until we have a password if requested by
*************** doConnect(void)
*** 352,361 ****
  	 */
  	do
  	{
  		new_pass = false;
! 
! 		conn = PQsetdbLogin(pghost, pgport, pgoptions, pgtty, dbName,
! 							login, password);
  		if (!conn)
  		{
  			fprintf(stderr, "Connection to database \"%s\" failed\n",
--- 354,373 ----
  	 */
  	do
  	{
+         const char *values[] = {
+                   pghost,
+                   pgport,
+                   pgoptions,
+                   pgtty,
+                   dbName,
+                   login,
+                   password,
+                   "pgbench",
+                   NULL
+               };
+         
  		new_pass = false;
!         conn = PQconnectdbParams(keywords, values);
  		if (!conn)
  		{
  			fprintf(stderr, "Connection to database \"%s\" failed\n",
Index: contrib/vacuumlo/vacuumlo.c
===================================================================
RCS file: /opt/cvsroot_postgresql/pgsql/contrib/vacuumlo/vacuumlo.c,v
retrieving revision 1.44
diff -c -p -c -r1.44 vacuumlo.c
*** contrib/vacuumlo/vacuumlo.c	2 Jan 2010 16:57:33 -0000	1.44
--- contrib/vacuumlo/vacuumlo.c	31 Jan 2010 01:44:55 -0000
*************** vacuumlo(char *database, struct _param *
*** 70,75 ****
--- 70,77 ----
  	int			i;
  	static char *password = NULL;
  	bool		new_pass;
+ 	const char *keywords[] = {"host","port","dbname","user",
+ 							  "password","application_name",NULL};
  
  	if (param->pg_prompt == TRI_YES && password == NULL)
  		password = simple_prompt("Password: ", 100, false);
*************** vacuumlo(char *database, struct _param *
*** 80,94 ****
  	 */
  	do
  	{
  		new_pass = false;
! 
! 		conn = PQsetdbLogin(param->pg_host,
! 							param->pg_port,
! 							NULL,
! 							NULL,
! 							database,
! 							param->pg_user,
! 							password);
  		if (!conn)
  		{
  			fprintf(stderr, "Connection to database \"%s\" failed\n",
--- 82,99 ----
  	 */
  	do
  	{
+         const char *values[] = {
+                   param->pg_host,
+                   param->pg_port,
+                   database,
+                   param->pg_user,
+                   password,
+                   "vacuumlo",
+                   NULL
+               };
+         
  		new_pass = false;
!         conn = PQconnectdbParams(keywords, values);
  		if (!conn)
  		{
  			fprintf(stderr, "Connection to database \"%s\" failed\n",
Index: src/bin/pg_ctl/pg_ctl.c
===================================================================
RCS file: /opt/cvsroot_postgresql/pgsql/src/bin/pg_ctl/pg_ctl.c,v
retrieving revision 1.118
diff -c -p -c -r1.118 pg_ctl.c
*** src/bin/pg_ctl/pg_ctl.c	2 Jan 2010 16:57:58 -0000	1.118
--- src/bin/pg_ctl/pg_ctl.c	30 Jan 2010 22:33:42 -0000
*************** test_postmaster_connection(bool do_check
*** 407,413 ****
  	char		portstr[32];
  	char	   *p;
  	char	   *q;
! 	char		connstr[128];	/* Should be way more than enough! */
  
  	*portstr = '\0';
  
--- 407,414 ----
  	char		portstr[32];
  	char	   *p;
  	char	   *q;
! 	const char *keywords[] = {"dbname","port","connect_timeout",
! 							  "application_name",NULL};
  
  	*portstr = '\0';
  
*************** test_postmaster_connection(bool do_check
*** 501,512 ****
  	 * We need to set a connect timeout otherwise on Windows the SCM will
  	 * probably timeout first
  	 */
! 	snprintf(connstr, sizeof(connstr),
! 			 "dbname=postgres port=%s connect_timeout=5", portstr);
! 
  	for (i = 0; i < wait_seconds; i++)
  	{
! 		if ((conn = PQconnectdb(connstr)) != NULL &&
  			(PQstatus(conn) == CONNECTION_OK ||
  			 PQconnectionNeedsPassword(conn)))
  		{
--- 502,518 ----
  	 * We need to set a connect timeout otherwise on Windows the SCM will
  	 * probably timeout first
  	 */
!     const char *values[] = {
!               "postgres",
!               portstr,
!               5,
!               "pg_ctl",
!               NULL
!           };
!     
  	for (i = 0; i < wait_seconds; i++)
  	{
! 		if ((conn = PQconnectdbParams(keywords, values)) != NULL &&
  			(PQstatus(conn) == CONNECTION_OK ||
  			 PQconnectionNeedsPassword(conn)))
  		{
Index: src/bin/pg_dump/pg_backup_db.c
===================================================================
RCS file: /opt/cvsroot_postgresql/pgsql/src/bin/pg_dump/pg_backup_db.c,v
retrieving revision 1.85
diff -c -p -c -r1.85 pg_backup_db.c
*** src/bin/pg_dump/pg_backup_db.c	14 Dec 2009 00:39:11 -0000	1.85
--- src/bin/pg_dump/pg_backup_db.c	30 Jan 2010 22:13:38 -0000
*************** _connectDB(ArchiveHandle *AH, const char
*** 131,136 ****
--- 131,138 ----
  	const char *newuser;
  	char	   *password = AH->savedPassword;
  	bool		new_pass;
+ 	const char *keywords[] = {"host","port","dbname","user",
+ 							  "password","application_name",NULL};
  
  	if (!reqdb)
  		newdb = PQdb(AH->connection);
*************** _connectDB(ArchiveHandle *AH, const char
*** 154,163 ****
  
  	do
  	{
! 		new_pass = false;
! 		newConn = PQsetdbLogin(PQhost(AH->connection), PQport(AH->connection),
! 							   NULL, NULL, newdb,
! 							   newuser, password);
  		if (!newConn)
  			die_horribly(AH, modulename, "failed to reconnect to database\n");
  
--- 156,173 ----
  
  	do
  	{
!         const char *values[] = {
!                   PQhost(AH->connection),
!                   PQport(AH->connection),
!                   newdb,
!                   newuser,
!                   password,
!                   progname,
!                   NULL
!               };
!         
!         new_pass = false;
!         newConn = PQconnectdbParams(keywords, values);
  		if (!newConn)
  			die_horribly(AH, modulename, "failed to reconnect to database\n");
  
*************** ConnectDatabase(Archive *AHX,
*** 219,224 ****
--- 229,236 ----
  	ArchiveHandle *AH = (ArchiveHandle *) AHX;
  	char	   *password = AH->savedPassword;
  	bool		new_pass;
+ 	const char *keywords[] = {"host","port","dbname","user",
+ 							  "password","application_name",NULL};
  
  	if (AH->connection)
  		die_horribly(AH, modulename, "already connected to a database\n");
*************** ConnectDatabase(Archive *AHX,
*** 237,245 ****
  	 */
  	do
  	{
! 		new_pass = false;
! 		AH->connection = PQsetdbLogin(pghost, pgport, NULL, NULL,
! 									  dbname, username, password);
  
  		if (!AH->connection)
  			die_horribly(AH, modulename, "failed to connect to database\n");
--- 249,266 ----
  	 */
  	do
  	{
!         const char *values[] = {
!                   pghost,
!                   pgport,
!                   dbname,
!                   username,
!                   password,
!                   progname,
!                   NULL
!               };
!         
!         new_pass = false;
!         AH->connection = PQconnectdbParams(keywords, values);
  
  		if (!AH->connection)
  			die_horribly(AH, modulename, "failed to connect to database\n");
Index: src/bin/pg_dump/pg_dumpall.c
===================================================================
RCS file: /opt/cvsroot_postgresql/pgsql/src/bin/pg_dump/pg_dumpall.c,v
retrieving revision 1.131
diff -c -p -c -r1.131 pg_dumpall.c
*** src/bin/pg_dump/pg_dumpall.c	6 Jan 2010 03:34:41 -0000	1.131
--- src/bin/pg_dump/pg_dumpall.c	30 Jan 2010 22:11:02 -0000
*************** connectDatabase(const char *dbname, cons
*** 1608,1613 ****
--- 1608,1615 ----
  	const char *remoteversion_str;
  	int			my_version;
  	static char *password = NULL;
+ 	const char *keywords[] = {"host","port","dbname","user",
+ 							  "password","application_name",NULL};
  
  	if (prompt_password == TRI_YES && !password)
  		password = simple_prompt("Password: ", 100, false);
*************** connectDatabase(const char *dbname, cons
*** 1618,1625 ****
  	 */
  	do
  	{
! 		new_pass = false;
! 		conn = PQsetdbLogin(pghost, pgport, NULL, NULL, dbname, pguser, password);
  
  		if (!conn)
  		{
--- 1620,1637 ----
  	 */
  	do
  	{
!         const char *values[] = {
!                   pghost,
!                   pgport,
!                   dbname,
!                   pguser,
!                   password,
!                   progname,
!                   NULL
!               };
!         
!         new_pass = false;
!         conn = PQconnectdbParams(keywords, values);
  
  		if (!conn)
  		{
Index: src/bin/psql/command.c
===================================================================
RCS file: /opt/cvsroot_postgresql/pgsql/src/bin/psql/command.c,v
retrieving revision 1.213
diff -c -p -c -r1.213 command.c
*** src/bin/psql/command.c	2 Jan 2010 16:57:59 -0000	1.213
--- src/bin/psql/command.c	30 Jan 2010 22:23:52 -0000
*************** param_is_newly_set(const char *old_val, 
*** 1212,1219 ****
   *
   * Connects to a database with given parameters. If there exists an
   * established connection, NULL values will be replaced with the ones
!  * in the current connection. Otherwise NULL will be passed for that
!  * parameter to PQsetdbLogin(), so the libpq defaults will be used.
   *
   * In interactive mode, if connection fails with the given parameters,
   * the old connection will be kept.
--- 1212,1218 ----
   *
   * Connects to a database with given parameters. If there exists an
   * established connection, NULL values will be replaced with the ones
!  * in the current connection. Otherwise the libpq defaults will be used.
   *
   * In interactive mode, if connection fails with the given parameters,
   * the old connection will be kept.
*************** do_connect(char *dbname, char *user, cha
*** 1224,1229 ****
--- 1223,1230 ----
  	PGconn	   *o_conn = pset.db,
  			   *n_conn;
  	char	   *password = NULL;
+ 	const char *keywords[] = {"host","port","dbname","user",
+ 							  "password","application_name",NULL};
  
  	if (!dbname)
  		dbname = PQdb(o_conn);
*************** do_connect(char *dbname, char *user, cha
*** 1255,1262 ****
  
  	while (true)
  	{
! 		n_conn = PQsetdbLogin(host, port, NULL, NULL,
! 							  dbname, user, password);
  
  		/* We can immediately discard the password -- no longer needed */
  		if (password)
--- 1256,1272 ----
  
  	while (true)
  	{
!         const char *values[] = {
!                   host,
!                   port,
!                   dbname,
!                   user,
!                   password,
!                   pset.progname,
!                   NULL
!               };
!         
!         n_conn = PQconnectdbParams(keywords, values);
  
  		/* We can immediately discard the password -- no longer needed */
  		if (password)
Index: src/bin/scripts/common.c
===================================================================
RCS file: /opt/cvsroot_postgresql/pgsql/src/bin/scripts/common.c,v
retrieving revision 1.38
diff -c -p -c -r1.38 common.c
*** src/bin/scripts/common.c	2 Jan 2010 16:58:00 -0000	1.38
--- src/bin/scripts/common.c	30 Jan 2010 22:17:01 -0000
*************** connectDatabase(const char *dbname, cons
*** 98,103 ****
--- 98,105 ----
  	PGconn	   *conn;
  	char	   *password = NULL;
  	bool		new_pass;
+ 	const char *keywords[] = {"host","port","dbname","user",
+ 							  "password","application_name",NULL};
  
  	if (prompt_password == TRI_YES)
  		password = simple_prompt("Password: ", 100, false);
*************** connectDatabase(const char *dbname, cons
*** 108,115 ****
  	 */
  	do
  	{
  		new_pass = false;
! 		conn = PQsetdbLogin(pghost, pgport, NULL, NULL, dbname, pguser, password);
  
  		if (!conn)
  		{
--- 110,127 ----
  	 */
  	do
  	{
+         const char *values[] = {
+                   pghost,
+                   pgport,
+                   dbname,
+                   pguser,
+                   password,
+                   progname,
+                   NULL
+               };
+         
  		new_pass = false;
!         conn = PQconnectdbParams(keywords, values);
  
  		if (!conn)
  		{
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to