Thread: ECPG Connect user :variable problem
Hello, I'm having a major problem using ecpg with 7.4beta1. The problem is that if I try to pass in the username or password as :variables to the EXEC SQL CONNECT code they are essentially ignored (replaced by " ?"). I've tried it on both redhat 7.2 IA64 and Redhat 9.0 IA32 (different enough that I don't think its the platform). I also tried it with postgres 7.3.2 which seemed to do the "right thing" and put the variables into the ECPGconnect call. Any thoughts? ------------------------------<snip "connect.pgc">--------------------------------- int pg_connect(void) { EXEC SQL BEGIN DECLARE SECTION; char *target = "dbname"; char *connection_name = "myconnection"; char *uname = "myuser"; char *password = "mypassword"; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO :target as :connection_name user :uname using :password; } ------------------------------<snip "connect.c">--------------------------------- int pg_connect(void) { /* exec sql begin declare section */ #line 5 "connect.pgc"char * target = "dbname" ; #line 6 "connect.pgc"char * connection_name = "myconnection" ; #line 7 "connect.pgc"char * uname = "myuser" ; #line 8 "connect.pgc"char * password = "mypassword" ; /* exec sql end declare section */ #line 9 "connect.pgc" { ECPGconnect(__LINE__, 0, target , " ?" , " ?" , connection_name, 0); } #line 11 "connect.pgc" } -- >-=-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-=-< Ryan Mooney ryan@pcslink.com <-=-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-=->
All, It appears that there is an extra space around a " ?" replaceable string in the preprocessor that should have read "?". Attached (and inline) is a patch to /src/interfaces/ecpg/preproc/prepoc.y that fixes the problem. Also interestingly none of the test files for the ecpg processor exercise the "USER :user USING :password" functionality (at least that I could see - although I'm sortof blind so I might be missing something :) *** preproc.y Tue Aug 19 17:06:44 2003 --- preproc.y.old Tue Aug 19 17:06:35 2003 *************** *** 4174,4180 **** { if ($1[0] == '\"') $$ = $1; ! else if (strcmp($1, "?") == 0) /* variable */ { enum ECPGttype type = argsinsert->variable->type->type; --- 4174,4180 ---- { if ($1[0] == '\"') $$ = $1; ! else if (strcmp($1, " ?") == 0) /* variable */ { enum ECPGttype type = argsinsert->variable->type->type; > > Hello, > > I'm having a major problem using ecpg with 7.4beta1. The problem is that > if I try to pass in the username or password as :variables to the EXEC SQL > CONNECT code they are essentially ignored (replaced by " ?"). > > I've tried it on both redhat 7.2 IA64 and Redhat 9.0 IA32 (different enough > that I don't think its the platform). I also tried it with postgres 7.3.2 > which seemed to do the "right thing" and put the variables into the ECPGconnect > call. > > Any thoughts? > > ------------------------------<snip "connect.pgc">--------------------------------- > int pg_connect(void) > { > > EXEC SQL BEGIN DECLARE SECTION; > char *target = "dbname"; > char *connection_name = "myconnection"; > char *uname = "myuser"; > char *password = "mypassword"; > EXEC SQL END DECLARE SECTION; > > EXEC SQL CONNECT TO :target as :connection_name user :uname using :password; > > } > > ------------------------------<snip "connect.c">--------------------------------- > > int pg_connect(void) > { > > /* exec sql begin declare section */ > > > > > > #line 5 "connect.pgc" > char * target = "dbname" ; > > #line 6 "connect.pgc" > char * connection_name = "myconnection" ; > > #line 7 "connect.pgc" > char * uname = "myuser" ; > > #line 8 "connect.pgc" > char * password = "mypassword" ; > /* exec sql end declare section */ > #line 9 "connect.pgc" > > > { ECPGconnect(__LINE__, 0, target , " ?" , " ?" , connection_name, 0); } > #line 11 "connect.pgc" > > > } > > > -- > >-=-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-=-< > Ryan Mooney ryan@pcslink.com > <-=-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-=-> > > ---------------------------(end of broadcast)--------------------------- > TIP 5: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faqs/FAQ.html -- >-=-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-=-< Ryan Mooney ryan@pcslink.com <-=-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-=->
Attachment
Sorry about that last patch, I hit the wrong one (my bison is way out of date, so I'm hacking the resulting .c file for test and backporting to the .y file, not that thats an excuse :) Anyway here is a patch to 7.4b1 that seems to apply to the snap from yesterday as well. This allows you to EXEC SQL CONNECT TO :target as :connection_name user :uname using :password; and have the uname and password C variables get passed correctly to the ECPGconnect fucntion after epgc processing. On Tue, Aug 19, 2003 at 12:17:08PM -1000, Ryan Mooney wrote: > > Hello, > > I'm having a major problem using ecpg with 7.4beta1. The problem is that > if I try to pass in the username or password as :variables to the EXEC SQL > CONNECT code they are essentially ignored (replaced by " ?"). > > I've tried it on both redhat 7.2 IA64 and Redhat 9.0 IA32 (different enough > that I don't think its the platform). I also tried it with postgres 7.3.2 > which seemed to do the "right thing" and put the variables into the ECPGconnect > call. > > Any thoughts? > > ------------------------------<snip "connect.pgc">--------------------------------- > int pg_connect(void) > { > > EXEC SQL BEGIN DECLARE SECTION; > char *target = "dbname"; > char *connection_name = "myconnection"; > char *uname = "myuser"; > char *password = "mypassword"; > EXEC SQL END DECLARE SECTION; > > EXEC SQL CONNECT TO :target as :connection_name user :uname using :password; > > } > > ------------------------------<snip "connect.c">--------------------------------- > > int pg_connect(void) > { > > /* exec sql begin declare section */ > > > > > > #line 5 "connect.pgc" > char * target = "dbname" ; > > #line 6 "connect.pgc" > char * connection_name = "myconnection" ; > > #line 7 "connect.pgc" > char * uname = "myuser" ; > > #line 8 "connect.pgc" > char * password = "mypassword" ; > /* exec sql end declare section */ > #line 9 "connect.pgc" > > > { ECPGconnect(__LINE__, 0, target , " ?" , " ?" , connection_name, 0); } > #line 11 "connect.pgc" > > > } > > > -- > >-=-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-=-< > Ryan Mooney ryan@pcslink.com > <-=-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-=-> > > ---------------------------(end of broadcast)--------------------------- > TIP 5: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faqs/FAQ.html -- >-=-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-<>-=-=-=-=-=-=-< Ryan Mooney ryan@pcslink.com <-=-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-><-=-=-=-=-=-=->
On Wed, Aug 20, 2003 at 08:05:28AM -1000, Ryan Mooney wrote: > Anyway here is a patch to 7.4b1 that seems to apply to the snap > from yesterday as well. Well there seems to be an attachement missing, but I think I know what you meant and just fixed this. Also I added one test case. :-) Thanks. Michael -- Michael Meskes Email: Michael at Fam-Meskes dot De ICQ: 179140304, AIM/Yahoo: michaelmeskes, Jabber: meskes@jabber.org Go SF 49ers! Go Rhein Fire! Use Debian GNU/Linux! Use PostgreSQL!