Skip to content

Commit 9f74608

Browse files
author
Michael Meskes
committed
*** empty log message ***
1 parent c969e26 commit 9f74608

File tree

16 files changed

+945
-1020
lines changed

16 files changed

+945
-1020
lines changed

src/interfaces/ecpg/ChangeLog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,5 +824,9 @@ Tue Feb 22 13:48:18 CET 2000
824824

825825
- Synced preproc.y with gram.y.
826826
- Much more clean ups.
827+
828+
Wed Feb 23 17:08:28 CET 2000
829+
830+
- Even more clean ups.
827831
- Set library version to 3.1.0.
828832
- Set ecpg version to 2.7.0.

src/interfaces/ecpg/include/ecpgerrno.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#define ECPG_INVALID_DESCRIPTOR_INDEX -241
3535
#define ECPG_UNKNOWN_DESCRIPTOR_ITEM -242
3636
#define ECPG_VAR_NOT_NUMERIC -243
37+
#define ECPG_VAR_NOT_CHAR -244
3738

3839
/* finally the backend error messages, they start at 400 */
3940
#define ECPG_PGSQL -400

src/interfaces/ecpg/include/ecpglib.h

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,45 +16,35 @@ extern "C"
1616
bool ECPGdisconnect(int, const char *);
1717
bool ECPGprepare(int, char *, char *);
1818
bool ECPGdeallocate(int, char *);
19+
bool ECPGdeallocate_all(int);
1920
char *ECPGprepared_statement(char *);
2021

2122
void ECPGlog(const char *format,...);
22-
23+
24+
/* print an error message */
25+
void sqlprint(void);
26+
2327
#ifdef LIBPQ_FE_H
2428
bool ECPGsetdb(PGconn *);
25-
2629
#endif
2730

2831
/* Here are some methods used by the lib. */
2932
/* Returns a pointer to a string containing a simple type name. */
3033
const char *ECPGtype_name(enum ECPGttype);
34+
bool get_data(PGresult *, int, int, int, enum ECPGttype type,
35+
enum ECPGttype, void *, void *, long, long);
36+
char *ecpg_alloc(long, int);
37+
char *ecpg_strdup(const char *, int);
3138

32-
/* A generic varchar type. */
33-
struct ECPGgeneric_varchar
34-
{
35-
int len;
36-
char arr[1];
37-
};
38-
39-
/* print an error message */
40-
void sqlprint(void);
41-
42-
struct cursor
43-
{
44-
const char *name;
45-
char *command;
46-
struct cursor *next;
47-
};
39+
/* and some vars */
40+
extern struct auto_mem *auto_allocs;
4841

4942
/* define this for simplicity as well as compatibility */
5043

5144
#define SQLCODE sqlca.sqlcode
5245

5346
/* dynamic SQL */
5447

55-
unsigned int ECPGDynamicType(Oid type);
56-
unsigned int ECPGDynamicType_DDT(Oid type);
57-
PGresult * ECPGresultByDescriptor(int line,const char *name);
5848
bool ECPGdo_descriptor(int line,const char *connection,
5949
const char *descriptor,const char *query);
6050
bool ECPGdeallocate_desc(int line,const char *name);

src/interfaces/ecpg/lib/Makefile.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# Copyright (c) 1994, Regents of the University of California
77
#
88
# IDENTIFICATION
9-
# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.59 2000/02/22 19:57:05 meskes Exp $
9+
# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.60 2000/02/23 19:25:42 meskes Exp $
1010
#
1111
#-------------------------------------------------------------------------
1212

@@ -23,7 +23,7 @@ ifdef KRBVERS
2323
CFLAGS+= $(KRBFLAGS)
2424
endif
2525

26-
OBJS= ecpglib.o typename.o descriptor.o
26+
OBJS= ecpglib.o typename.o descriptor.o data.o error.o prepare.o memory.o
2727

2828
SHLIB_LINK= -L../../libpq -lpq
2929

src/interfaces/ecpg/lib/data.c

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
#include <stdlib.h>
2+
3+
#include <libpq/pqcomm.h>
4+
#include <ecpgtype.h>
5+
#include <ecpglib.h>
6+
#include <sqlca.h>
7+
8+
bool
9+
get_data(PGresult *results, int act_tuple, int act_field, int lineno,
10+
enum ECPGttype type, enum ECPGttype ind_type,
11+
void *var, void *ind, long varcharsize, long offset)
12+
{
13+
char *pval = (char *)PQgetvalue(results, act_tuple, act_field);
14+
15+
ECPGlog("get_data line %d: RESULT: %s\n", lineno, pval ? pval : "");
16+
17+
/* Now the pval is a pointer to the value. */
18+
/* We will have to decode the value */
19+
20+
/*
21+
* check for null value and set indicator
22+
* accordingly
23+
*/
24+
switch (ind_type)
25+
{
26+
case ECPGt_short:
27+
case ECPGt_unsigned_short:
28+
((short *) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
29+
break;
30+
case ECPGt_int:
31+
case ECPGt_unsigned_int:
32+
((int *) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
33+
break;
34+
case ECPGt_long:
35+
case ECPGt_unsigned_long:
36+
((long *) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
37+
break;
38+
case ECPGt_NO_INDICATOR:
39+
if (PQgetisnull(results, act_tuple, act_field))
40+
{
41+
ECPGraise(lineno, ECPG_MISSING_INDICATOR, NULL);
42+
return (false);
43+
}
44+
break;
45+
default:
46+
ECPGraise(lineno, ECPG_UNSUPPORTED, ECPGtype_name(ind_type));
47+
return (false);
48+
break;
49+
}
50+
51+
switch (type)
52+
{
53+
long res;
54+
unsigned long ures;
55+
double dres;
56+
char *scan_length;
57+
58+
case ECPGt_short:
59+
case ECPGt_int:
60+
case ECPGt_long:
61+
if (pval)
62+
{
63+
res = strtol(pval, &scan_length, 10);
64+
if (*scan_length != '\0') /* Garbage left */
65+
{
66+
ECPGraise(lineno, ECPG_INT_FORMAT, pval);
67+
return (false);
68+
res = 0L;
69+
}
70+
}
71+
else
72+
res = 0L;
73+
74+
switch (type)
75+
{
76+
case ECPGt_short:
77+
((short *) var)[act_tuple] = (short) res;
78+
break;
79+
case ECPGt_int:
80+
((int *) var)[act_tuple] = (int) res;
81+
break;
82+
case ECPGt_long:
83+
((long *) var)[act_tuple] = res;
84+
break;
85+
default:
86+
/* Cannot happen */
87+
break;
88+
}
89+
break;
90+
91+
case ECPGt_unsigned_short:
92+
case ECPGt_unsigned_int:
93+
case ECPGt_unsigned_long:
94+
if (pval)
95+
{
96+
ures = strtoul(pval, &scan_length, 10);
97+
if (*scan_length != '\0') /* Garbage left */
98+
{
99+
ECPGraise(lineno, ECPG_UINT_FORMAT, pval);
100+
return (false);
101+
ures = 0L;
102+
}
103+
}
104+
else
105+
ures = 0L;
106+
107+
switch (type)
108+
{
109+
case ECPGt_unsigned_short:
110+
((unsigned short *) var)[act_tuple] = (unsigned short) ures;
111+
break;
112+
case ECPGt_unsigned_int:
113+
((unsigned int *) var)[act_tuple] = (unsigned int) ures;
114+
break;
115+
case ECPGt_unsigned_long:
116+
((unsigned long *) var)[act_tuple] = ures;
117+
break;
118+
default:
119+
/* Cannot happen */
120+
break;
121+
}
122+
break;
123+
124+
125+
case ECPGt_float:
126+
case ECPGt_double:
127+
if (pval)
128+
{
129+
dres = strtod(pval, &scan_length);
130+
if (*scan_length != '\0') /* Garbage left */
131+
{
132+
ECPGraise(lineno, ECPG_FLOAT_FORMAT, pval);
133+
return (false);
134+
dres = 0.0;
135+
}
136+
}
137+
else
138+
dres = 0.0;
139+
140+
switch (type)
141+
{
142+
case ECPGt_float:
143+
((float *) var)[act_tuple] = dres;
144+
break;
145+
case ECPGt_double:
146+
((double *) var)[act_tuple] = dres;
147+
break;
148+
default:
149+
/* Cannot happen */
150+
break;
151+
}
152+
break;
153+
154+
case ECPGt_bool:
155+
if (pval)
156+
{
157+
if (pval[0] == 'f' && pval[1] == '\0')
158+
{
159+
((char *) var)[act_tuple] = false;
160+
break;
161+
}
162+
else if (pval[0] == 't' && pval[1] == '\0')
163+
{
164+
((char *) var)[act_tuple] = true;
165+
break;
166+
}
167+
else if (pval[0] == '\0' && PQgetisnull(results, act_tuple, act_field))
168+
{
169+
// NULL is valid
170+
break;
171+
}
172+
}
173+
174+
ECPGraise(lineno, ECPG_CONVERT_BOOL, pval);
175+
return (false);
176+
break;
177+
178+
case ECPGt_char:
179+
case ECPGt_unsigned_char:
180+
{
181+
strncpy((char *) ((long) var + offset * act_tuple), pval, varcharsize);
182+
if (varcharsize && varcharsize < strlen(pval))
183+
{
184+
/* truncation */
185+
switch (ind_type)
186+
{
187+
case ECPGt_short:
188+
case ECPGt_unsigned_short:
189+
((short *) ind)[act_tuple] = varcharsize;
190+
break;
191+
case ECPGt_int:
192+
case ECPGt_unsigned_int:
193+
((int *) ind)[act_tuple] = varcharsize;
194+
break;
195+
case ECPGt_long:
196+
case ECPGt_unsigned_long:
197+
((long *) ind)[act_tuple] = varcharsize;
198+
break;
199+
default:
200+
break;
201+
}
202+
sqlca.sqlwarn[0] = sqlca.sqlwarn[1] = 'W';
203+
}
204+
}
205+
break;
206+
207+
case ECPGt_varchar:
208+
{
209+
struct ECPGgeneric_varchar *variable =
210+
(struct ECPGgeneric_varchar *) ((long) var + offset * act_tuple);
211+
212+
if (varcharsize == 0)
213+
strncpy(variable->arr, pval, strlen(pval));
214+
else
215+
strncpy(variable->arr, pval, varcharsize);
216+
217+
variable->len = strlen(pval);
218+
if (varcharsize > 0 && variable->len > varcharsize)
219+
{
220+
/* truncation */
221+
switch (ind_type)
222+
{
223+
case ECPGt_short:
224+
case ECPGt_unsigned_short:
225+
((short *) ind)[act_tuple] = varcharsize;
226+
break;
227+
case ECPGt_int:
228+
case ECPGt_unsigned_int:
229+
((int *) ind)[act_tuple] = varcharsize;
230+
break;
231+
case ECPGt_long:
232+
case ECPGt_unsigned_long:
233+
((long *) ind)[act_tuple] = varcharsize;
234+
break;
235+
default:
236+
break;
237+
}
238+
sqlca.sqlwarn[0] = sqlca.sqlwarn[1] = 'W';
239+
240+
variable->len = varcharsize;
241+
}
242+
}
243+
break;
244+
245+
default:
246+
ECPGraise(lineno, ECPG_UNSUPPORTED, ECPGtype_name(type));
247+
return (false);
248+
break;
249+
}
250+
251+
return (true);
252+
}

0 commit comments

Comments
 (0)