Skip to content

Commit 7138a1e

Browse files
author
Michael Meskes
committed
- Fixed variable handling for struct members.
- Removed check for array input. An attribut might store the complete array.
1 parent 4b20cc1 commit 7138a1e

File tree

6 files changed

+24
-19
lines changed

6 files changed

+24
-19
lines changed

src/interfaces/ecpg/ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,5 +1201,11 @@ Fri Jan 11 15:43:39 CET 2002
12011201

12021202
- clear sqlca on : [de]allocate descriptor & get descriptor and set
12031203
sqlca.sqlerrd[2] accordingly (Christof).
1204+
1205+
Sat Jan 12 22:04:02 CET 2002
1206+
1207+
- Fixed variable handling for struct members.
1208+
- Removed check for array input. An attribut might store the
1209+
complete array.
12041210
- Set ecpg version to 2.9.0.
12051211
- Set library version to 3.3.0.

src/interfaces/ecpg/lib/execute.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.35 2002/01/08 14:25:04 meskes Exp $ */
1+
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.36 2002/01/13 08:52:08 meskes Exp $ */
22

33
/*
44
* The aim is to get a simpler inteface to the database routines.
@@ -486,14 +486,15 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
486486
char *newcopy = NULL;
487487

488488
/*
489-
* arrays are not possible
489+
* arrays are not possible unless the attribute is an array too
490+
* FIXME: we do not know if the attribute is an array here
490491
*/
491-
492-
if (var->arrsize > 1)
492+
493+
/* if (var->arrsize > 1 && ...)
493494
{
494495
ECPGraise(stmt->lineno, ECPG_ARRAY_INSERT, NULL);
495496
return false;
496-
}
497+
}*/
497498

498499
/*
499500
* Some special treatment is needed for records since we want their

src/interfaces/ecpg/preproc/extern.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ extern void adjust_array(enum ECPGttype, int *, int *, int, int, int);
7575
extern void reset_variables(void);
7676
extern void check_indicator(struct ECPGtype *);
7777
extern void remove_variables(int);
78-
extern struct variable *new_variable(const char *, struct ECPGtype *);
78+
extern struct variable *new_variable(const char *, struct ECPGtype *, int);
7979
extern ScanKeyword *ScanKeywordLookup(char *text);
8080

8181
/* return codes */

src/interfaces/ecpg/preproc/preproc.y

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4417,7 +4417,7 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_initializer
44174417
}
44184418

44194419
if (struct_level == 0)
4420-
new_variable($2, type);
4420+
new_variable($2, type, braces_open);
44214421
else
44224422
ECPGmake_struct_member($2, type, &(struct_member_list[struct_level - 1]));
44234423

src/interfaces/ecpg/preproc/variable.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
struct variable *allvariables = NULL;
66

77
struct variable *
8-
new_variable(const char *name, struct ECPGtype * type)
8+
new_variable(const char *name, struct ECPGtype * type, int brace_level)
99
{
1010
struct variable *p = (struct variable *) mm_alloc(sizeof(struct variable));
1111

1212
p->name = mm_strdup(name);
1313
p->type = type;
14-
p->brace_level = braces_open;
14+
p->brace_level = brace_level;
1515

1616
p->next = allvariables;
1717
allvariables = p;
@@ -20,7 +20,7 @@ new_variable(const char *name, struct ECPGtype * type)
2020
}
2121

2222
static struct variable *
23-
find_struct_member(char *name, char *str, struct ECPGstruct_member * members)
23+
find_struct_member(char *name, char *str, struct ECPGstruct_member * members, int brace_level)
2424
{
2525
char *next = strchr(++str, '.'),
2626
c = '\0';
@@ -41,12 +41,12 @@ find_struct_member(char *name, char *str, struct ECPGstruct_member * members)
4141
switch (members->type->type)
4242
{
4343
case ECPGt_array:
44-
return (new_variable(name, ECPGmake_array_type(members->type->u.element, members->type->size)));
44+
return (new_variable(name, ECPGmake_array_type(members->type->u.element, members->type->size), brace_level));
4545
case ECPGt_struct:
4646
case ECPGt_union:
47-
return (new_variable(name, ECPGmake_struct_type(members->type->u.members, members->type->type, members->type->struct_sizeof)));
47+
return (new_variable(name, ECPGmake_struct_type(members->type->u.members, members->type->type, members->type->struct_sizeof), brace_level));
4848
default:
49-
return (new_variable(name, ECPGmake_simple_type(members->type->type, members->type->size)));
49+
return (new_variable(name, ECPGmake_simple_type(members->type->type, members->type->size), brace_level));
5050
}
5151
}
5252
else
@@ -55,10 +55,10 @@ find_struct_member(char *name, char *str, struct ECPGstruct_member * members)
5555
if (c == '-')
5656
{
5757
next++;
58-
return (find_struct_member(name, next, members->type->u.element->u.members));
58+
return (find_struct_member(name, next, members->type->u.element->u.members, brace_level));
5959
}
6060
else
61-
return (find_struct_member(name, next, members->type->u.members));
61+
return (find_struct_member(name, next, members->type->u.members, brace_level));
6262
}
6363
}
6464
}
@@ -94,7 +94,7 @@ find_struct(char *name, char *next)
9494
*next = c;
9595
next++;
9696

97-
return find_struct_member(name, next, p->type->u.element->u.members);
97+
return find_struct_member(name, next, p->type->u.element->u.members, p->brace_level);
9898
}
9999
else
100100
{
@@ -107,7 +107,7 @@ find_struct(char *name, char *next)
107107
/* restore the name, we will need it later on */
108108
*next = c;
109109

110-
return find_struct_member(name, next, p->type->u.members);
110+
return find_struct_member(name, next, p->type->u.members, p->brace_level);
111111
}
112112
}
113113

src/interfaces/ecpg/test/test1.pgc

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#include <string.h>
22

3-
exec sql include sqlca;
4-
53
/* just a test comment */ exec sql whenever sqlerror do PrintAndStop(msg);
64
exec sql whenever sqlwarning do warn();
75

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