diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index ab3fcc440e29311f8e8b7e802a42ab92e8f4d2eb..815ba9d2a179eb374bf765169204c80e370aa5ee 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -2272,6 +2272,13 @@ Tue, 06 Nov 2007 09:29:22 +0100
 Fri, 21 Dec 2007 15:30:39 +0100
 
 	- Fixed a few minor glitches pointed out by splint.
+
+Fri, 28 Dec 2007 12:15:38 +0100
+
+	- Applied patch send by ITAGAKI Takahiro
+	  <itagaki.takahiro@oss.ntt.co.jp> to fix bug in connect statement if
+	  user name is a variable. 
+	- Also fixed test case that didn't detect this.
 	- Set pgtypes library version to 3.0.
 	- Set compat library version to 3.0.
 	- Set ecpg library version to 6.0.
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index 860b6a1cee1c0ac220e0a46d209ab55087264b9c..720f0d2c1aae5b21d7aa2e4e307d4194a40bc5f5 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.356 2007/12/21 14:33:20 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.357 2007/12/28 11:25:21 meskes Exp $ */
 
 /* Copyright comment */
 %{
@@ -5114,7 +5114,7 @@ user_name: RoleId
 		{
 			if ($1[0] == '\"')
 				$$ = $1;
-			else if (strcmp($1, " ?") == 0) /* variable */
+			else if ($1[1] == '$') /* variable */
 			{
 				enum ECPGttype type = argsinsert->variable->type->type;
 
diff --git a/src/interfaces/ecpg/test/connect/test5.pgc b/src/interfaces/ecpg/test/connect/test5.pgc
index ae0199daf6bba53f652255c63f5d481800666b83..c747a5b43716a50f3d36d09ed448c3e6a3306e12 100644
--- a/src/interfaces/ecpg/test/connect/test5.pgc
+++ b/src/interfaces/ecpg/test/connect/test5.pgc
@@ -15,6 +15,7 @@ main(void)
 exec sql begin declare section;
 	char db[200];
 	char id[200];
+	char *user="connectuser";
 exec sql end declare section;
 
 	ECPGdebug(1, stderr);
@@ -49,7 +50,7 @@ exec sql end declare section;
 	exec sql connect to "unix:postgresql://localhost/connectdb" as main user connectuser;
 	exec sql disconnect main;
 
-	exec sql connect to 'unix:postgresql://localhost/connectdb' as main user connectuser;
+	exec sql connect to 'unix:postgresql://localhost/connectdb' as main user :user;
 	exec sql disconnect main;
 
 	exec sql connect to "unix:postgresql://200.46.204.71/connectdb" as main user connectuser;
diff --git a/src/interfaces/ecpg/test/expected/connect-test5.c b/src/interfaces/ecpg/test/expected/connect-test5.c
index 129af81b8d976e6b7ccda96af003e2c7e00cd666..c49f78edaa726c78f8a620191b2eecae27eef23d 100644
--- a/src/interfaces/ecpg/test/expected/connect-test5.c
+++ b/src/interfaces/ecpg/test/expected/connect-test5.c
@@ -25,121 +25,125 @@ main(void)
 /* exec sql begin declare section */
 	 
 	 
+	 
 
 #line 16 "test5.pgc"
  char  db [ 200 ]    ;
  
 #line 17 "test5.pgc"
  char  id [ 200 ]    ;
-/* exec sql end declare section */
+ 
 #line 18 "test5.pgc"
+ char * user   = "connectuser" ;
+/* exec sql end declare section */
+#line 19 "test5.pgc"
 
 
 	ECPGdebug(1, stderr);
 
 	{ ECPGconnect(__LINE__, 0, "connectdb" , NULL, NULL , "main", 0); }
-#line 22 "test5.pgc"
+#line 23 "test5.pgc"
 
 	{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "alter user connectuser  encrypted password 'connectpw'", ECPGt_EOIT, ECPGt_EORT);}
-#line 23 "test5.pgc"
+#line 24 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "CURRENT");}
-#line 24 "test5.pgc"
+#line 25 "test5.pgc"
   /* <-- "main" not specified */
 
 	strcpy(db, "connectdb");
 	strcpy(id, "main");
 	{ ECPGconnect(__LINE__, 0, db , NULL, NULL , id, 0); }
-#line 28 "test5.pgc"
+#line 29 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, id);}
-#line 29 "test5.pgc"
+#line 30 "test5.pgc"
 
 
 	{ ECPGconnect(__LINE__, 0, "connectdb" , NULL, NULL , "main", 0); }
-#line 31 "test5.pgc"
+#line 32 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 32 "test5.pgc"
+#line 33 "test5.pgc"
 
 
 	{ ECPGconnect(__LINE__, 0, "connectdb" , NULL, NULL , "main", 0); }
-#line 34 "test5.pgc"
+#line 35 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 35 "test5.pgc"
+#line 36 "test5.pgc"
 
 
 	{ ECPGconnect(__LINE__, 0, "connectdb" , NULL, NULL , "main", 0); }
-#line 37 "test5.pgc"
+#line 38 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 38 "test5.pgc"
+#line 39 "test5.pgc"
 
 
 	{ ECPGconnect(__LINE__, 0, "" , "connectdb" , NULL , "main", 0); }
-#line 40 "test5.pgc"
+#line 41 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 41 "test5.pgc"
+#line 42 "test5.pgc"
 
 
 	{ ECPGconnect(__LINE__, 0, "connectdb" , "connectuser" , "connectdb" , "main", 0); }
-#line 43 "test5.pgc"
+#line 44 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 44 "test5.pgc"
+#line 45 "test5.pgc"
 
 
 	{ ECPGconnect(__LINE__, 0, "unix:postgresql://localhost/connectdb" , "connectuser" , NULL , "main", 0); }
-#line 46 "test5.pgc"
+#line 47 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 47 "test5.pgc"
+#line 48 "test5.pgc"
 
 
 	{ ECPGconnect(__LINE__, 0, "unix:postgresql://localhost/connectdb" , "connectuser" , NULL , "main", 0); }
-#line 49 "test5.pgc"
+#line 50 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 50 "test5.pgc"
+#line 51 "test5.pgc"
 
 
-	{ ECPGconnect(__LINE__, 0, "unix:postgresql://localhost/connectdb" , "connectuser" , NULL , "main", 0); }
-#line 52 "test5.pgc"
+	{ ECPGconnect(__LINE__, 0, "unix:postgresql://localhost/connectdb" , user , NULL , "main", 0); }
+#line 53 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 53 "test5.pgc"
+#line 54 "test5.pgc"
 
 
 	{ ECPGconnect(__LINE__, 0, "unix:postgresql://200.46.204.71/connectdb" , "connectuser" , NULL , "main", 0); }
-#line 55 "test5.pgc"
+#line 56 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 56 "test5.pgc"
+#line 57 "test5.pgc"
 
 
 	{ ECPGconnect(__LINE__, 0, "unix:postgresql://localhost/" , "connectdb" , NULL , "main", 0); }
-#line 58 "test5.pgc"
+#line 59 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 59 "test5.pgc"
+#line 60 "test5.pgc"
 
 
 	/* connect twice */
 	{ ECPGconnect(__LINE__, 0, "connectdb" , NULL, NULL , "main", 0); }
-#line 62 "test5.pgc"
+#line 63 "test5.pgc"
 
 	{ ECPGconnect(__LINE__, 0, "connectdb" , NULL, NULL , "main", 0); }
-#line 63 "test5.pgc"
+#line 64 "test5.pgc"
 
 	{ ECPGdisconnect(__LINE__, "main");}
-#line 64 "test5.pgc"
+#line 65 "test5.pgc"
 
 
 	/* not connected */
 	{ ECPGdisconnect(__LINE__, "nonexistant");}
-#line 67 "test5.pgc"
+#line 68 "test5.pgc"
 
 
 	return (0);
diff --git a/src/interfaces/ecpg/test/expected/connect-test5.stderr b/src/interfaces/ecpg/test/expected/connect-test5.stderr
index ef5676974cbaf78ff911020a5abdf3e7ce9032ac..73742b30f6cce443cf552e4bd7a4b88651bcc378 100644
--- a/src/interfaces/ecpg/test/expected/connect-test5.stderr
+++ b/src/interfaces/ecpg/test/expected/connect-test5.stderr
@@ -2,11 +2,11 @@
 [NO_PID]: sqlca: code: 0, state: 00000
 [NO_PID]: ECPGconnect: opening database connectdb on <DEFAULT> port <DEFAULT> 
 [NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute line 23: QUERY: alter user connectuser  encrypted password 'connectpw' with 0 parameter on connection main 
+[NO_PID]: ecpg_execute line 24: QUERY: alter user connectuser  encrypted password 'connectpw' with 0 parameter on connection main 
 [NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute line 23: using PQexec
+[NO_PID]: ecpg_execute line 24: using PQexec
 [NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute line 23 Ok: ALTER ROLE
+[NO_PID]: ecpg_execute line 24 Ok: ALTER ROLE
 [NO_PID]: sqlca: code: 0, state: 00000
 [NO_PID]: ecpg_finish: Connection main closed.
 [NO_PID]: sqlca: code: 0, state: 00000
@@ -46,11 +46,11 @@
 [NO_PID]: sqlca: code: 0, state: 00000
 [NO_PID]: ecpg_finish: Connection main closed.
 [NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ECPGconnect: non-localhost access via sockets in line 55
+[NO_PID]: ECPGconnect: non-localhost access via sockets in line 56
 [NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: raising sqlcode -402 in line 55, 'Could not connect to database connectdb in line 55.'.
+[NO_PID]: raising sqlcode -402 in line 56, 'Could not connect to database connectdb in line 56.'.
 [NO_PID]: sqlca: code: -402, state: 08001
-[NO_PID]: raising sqlcode -220 in line 56, 'No such connection main in line 56.'.
+[NO_PID]: raising sqlcode -220 in line 57, 'No such connection main in line 57.'.
 [NO_PID]: sqlca: code: -220, state: 08003
 [NO_PID]: ECPGconnect: opening database  on <DEFAULT> port <DEFAULT> for user connectdb
 [NO_PID]: sqlca: code: 0, state: 00000
@@ -62,5 +62,5 @@
 [NO_PID]: sqlca: code: 0, state: 00000
 [NO_PID]: ecpg_finish: Connection main closed.
 [NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: raising sqlcode -220 in line 67, 'No such connection nonexistant in line 67.'.
+[NO_PID]: raising sqlcode -220 in line 68, 'No such connection nonexistant in line 68.'.
 [NO_PID]: sqlca: code: -220, state: 08003