Skip to content

Commit 3615a6a

Browse files
author
Michael Meskes
committed
Fixed handling of variables in connect rule.
1 parent 38c8346 commit 3615a6a

File tree

5 files changed

+48
-20
lines changed

5 files changed

+48
-20
lines changed

src/interfaces/ecpg/ChangeLog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -965,5 +965,9 @@ Thu Oct 12 20:13:00 CEST 2000
965965

966966
- Changed parser to accept a variable instead of a constant wherever
967967
possible.
968+
969+
Mon Oct 16 21:33:17 CEST 2000
970+
971+
- Fixed handling of variables in connect rule.
968972
- Set ecpg version to 2.8.0.
969973
- Set library version to 3.2.0.

src/interfaces/ecpg/preproc/descriptor.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,7 @@ drop_descriptor(char *name, char *connection)
113113
}
114114

115115
struct descriptor
116-
*
117-
lookup_descriptor(char *name, char *connection)
116+
*lookup_descriptor(char *name, char *connection)
118117
{
119118
struct descriptor *i;
120119

src/interfaces/ecpg/preproc/preproc.y

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,15 @@ stmt: AlterSchemaStmt { output_statement($1, 0, NULL, connection); }
465465
if (connection)
466466
mmerror(ET_ERROR, "no at option for connect statement.\n");
467467

468-
fprintf(yyout, "{ ECPGconnect(__LINE__, %s, %d);", $1, autocommit);
468+
fputs("{ ECPGconnect(__LINE__,", yyout);
469+
470+
if ($1[1] == '?')
471+
fprintf(yyout, "%s, %s, %d);", argsinsert->variable->name, $1 + sizeof("\"?\","), autocommit);
472+
else
473+
fprintf(yyout, "%s, %d); ", $1, autocommit);
474+
475+
reset_variables();
476+
469477
whenever_action(2);
470478
free($1);
471479
}
@@ -3965,10 +3973,10 @@ connection_target: database_name opt_server opt_port
39653973
}
39663974
| StringConst
39673975
{
3968-
$$ = mm_strdup($1);
3969-
$$[0] = '\"';
3970-
$$[strlen($$) - 1] = '\"';
3971-
free($1);
3976+
if ($1[0] == '\"')
3977+
$$ = $1;
3978+
else
3979+
$$ = make3_str(make_str("\""), $1, make_str("\""));
39723980
}
39733981

39743982
db_prefix: ident cvariable
@@ -4032,12 +4040,18 @@ ora_user: user_name
40324040
$$ = cat_str(3, $1, make_str(","), $3);
40334041
}
40344042

4035-
user_name: UserId { if ($1[0] == '\"')
4043+
user_name: UserId {
4044+
if ($1[0] == '\"')
4045+
$$ = $1;
4046+
else
4047+
$$ = make3_str(make_str("\""), $1, make_str("\""));
4048+
}
4049+
| StringConst {
4050+
if ($1[0] == '\"')
40364051
$$ = $1;
40374052
else
40384053
$$ = make3_str(make_str("\""), $1, make_str("\""));
40394054
}
4040-
| StringConst { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
40414055

40424056
char_variable: cvariable
40434057
{ /* check if we have a char variable */

src/interfaces/ecpg/preproc/type.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,11 @@ static void ECPGdump_a_struct(FILE *o, const char *name, const char *ind_name, l
204204
void
205205
ECPGdump_a_type(FILE *o, const char *name, struct ECPGtype * typ, const char *ind_name, struct ECPGtype * ind_typ, const char *prefix, const char *ind_prefix)
206206
{
207-
if (ind_typ == NULL)
207+
/* if (ind_typ == NULL)
208208
{
209209
ind_typ = &ecpg_no_indicator;
210210
ind_name = "no_indicator";
211-
}
211+
}*/
212212

213213
switch (typ->typ)
214214
{
@@ -228,17 +228,20 @@ ECPGdump_a_type(FILE *o, const char *name, struct ECPGtype * typ, const char *in
228228

229229
ECPGdump_a_simple(o, name, typ->u.element->typ,
230230
typ->u.element->size, typ->size, NULL, prefix);
231-
if (ind_typ->typ == ECPGt_NO_INDICATOR)
232-
ECPGdump_a_simple(o, ind_name, ind_typ->typ, ind_typ->size, -1, NULL, ind_prefix);
233-
else
231+
if (ind_typ != NULL)
234232
{
235-
if (ind_typ->typ != ECPGt_array)
233+
if (ind_typ->typ == ECPGt_NO_INDICATOR)
234+
ECPGdump_a_simple(o, ind_name, ind_typ->typ, ind_typ->size, -1, NULL, ind_prefix);
235+
else
236236
{
237-
fprintf(stderr, "Indicator for an array has to be array too.\n");
238-
exit(INDICATOR_NOT_ARRAY);
237+
if (ind_typ->typ != ECPGt_array)
238+
{
239+
fprintf(stderr, "Indicator for an array has to be array too.\n");
240+
exit(INDICATOR_NOT_ARRAY);
241+
}
242+
ECPGdump_a_simple(o, ind_name, ind_typ->u.element->typ,
243+
ind_typ->u.element->size, ind_typ->size, NULL, prefix);
239244
}
240-
ECPGdump_a_simple(o, ind_name, ind_typ->u.element->typ,
241-
ind_typ->u.element->size, ind_typ->size, NULL, prefix);
242245
}
243246
}
244247
break;

src/interfaces/ecpg/test/dyntest.pgc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
*
33
* Copyright (c) 2000, Christof Petig <christof.petig@wtal.de>
44
*
5-
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/test/Attic/dyntest.pgc,v 1.6 2000/03/17 23:26:36 tgl Exp $
5+
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/test/Attic/dyntest.pgc,v 1.7 2000/10/16 19:53:04 meskes Exp $
66
*/
77

88
#include <stdio.h>
@@ -32,7 +32,11 @@ int main(int argc,char **argv)
3232
char DB[1024];
3333
exec sql end declare section;
3434
int done=0;
35+
FILE *dbgs;
3536

37+
if ((dbgs = fopen("log", "w")) != NULL)
38+
ECPGdebug(1, dbgs);
39+
3640
snprintf(QUERY,sizeof QUERY,"select * from %s",argc>1 && argv[1][0]?argv[1]:"pg_tables");
3741

3842
exec sql whenever sqlerror do error();
@@ -179,5 +183,9 @@ int main(int argc,char **argv)
179183
exec sql close MYCURS;
180184

181185
exec sql deallocate descriptor MYDESC;
186+
187+
if (dbgs != NULL)
188+
fclose(dbgs);
189+
182190
return 0;
183191
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy