Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9f74608

Browse files
author
Michael Meskes
committed
*** empty log message ***
1 parentc969e26 commit9f74608

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
#defineECPG_INVALID_DESCRIPTOR_INDEX-241
3535
#defineECPG_UNKNOWN_DESCRIPTOR_ITEM-242
3636
#defineECPG_VAR_NOT_NUMERIC-243
37+
#defineECPG_VAR_NOT_CHAR-244
3738

3839
/* finally the backend error messages, they start at 400 */
3940
#defineECPG_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
boolECPGdisconnect(int,constchar*);
1717
boolECPGprepare(int,char*,char*);
1818
boolECPGdeallocate(int,char*);
19+
boolECPGdeallocate_all(int);
1920
char*ECPGprepared_statement(char*);
2021

2122
voidECPGlog(constchar*format,...);
22-
23+
24+
/* print an error message */
25+
voidsqlprint(void);
26+
2327
#ifdefLIBPQ_FE_H
2428
boolECPGsetdb(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
constchar*ECPGtype_name(enumECPGttype);
34+
boolget_data(PGresult*,int,int,int,enumECPGttypetype,
35+
enumECPGttype,void*,void*,long,long);
36+
char*ecpg_alloc(long,int);
37+
char*ecpg_strdup(constchar*,int);
3138

32-
/* A generic varchar type. */
33-
structECPGgeneric_varchar
34-
{
35-
intlen;
36-
chararr[1];
37-
};
38-
39-
/* print an error message */
40-
voidsqlprint(void);
41-
42-
structcursor
43-
{
44-
constchar*name;
45-
char*command;
46-
structcursor*next;
47-
};
39+
/* and some vars */
40+
externstructauto_mem*auto_allocs;
4841

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

5144
#defineSQLCODE sqlca.sqlcode
5245

5346
/* dynamic SQL */
5447

55-
unsignedintECPGDynamicType(Oidtype);
56-
unsignedintECPGDynamicType_DDT(Oidtype);
57-
PGresult*ECPGresultByDescriptor(intline,constchar*name);
5848
boolECPGdo_descriptor(intline,constchar*connection,
5949
constchar*descriptor,constchar*query);
6050
boolECPGdeallocate_desc(intline,constchar*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,intact_tuple,intact_field,intlineno,
10+
enumECPGttypetype,enumECPGttypeind_type,
11+
void*var,void*ind,longvarcharsize,longoffset)
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+
caseECPGt_short:
27+
caseECPGt_unsigned_short:
28+
((short*)ind)[act_tuple]=-PQgetisnull(results,act_tuple,act_field);
29+
break;
30+
caseECPGt_int:
31+
caseECPGt_unsigned_int:
32+
((int*)ind)[act_tuple]=-PQgetisnull(results,act_tuple,act_field);
33+
break;
34+
caseECPGt_long:
35+
caseECPGt_unsigned_long:
36+
((long*)ind)[act_tuple]=-PQgetisnull(results,act_tuple,act_field);
37+
break;
38+
caseECPGt_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+
longres;
54+
unsigned longures;
55+
doubledres;
56+
char*scan_length;
57+
58+
caseECPGt_short:
59+
caseECPGt_int:
60+
caseECPGt_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+
caseECPGt_short:
77+
((short*)var)[act_tuple]= (short)res;
78+
break;
79+
caseECPGt_int:
80+
((int*)var)[act_tuple]= (int)res;
81+
break;
82+
caseECPGt_long:
83+
((long*)var)[act_tuple]=res;
84+
break;
85+
default:
86+
/* Cannot happen */
87+
break;
88+
}
89+
break;
90+
91+
caseECPGt_unsigned_short:
92+
caseECPGt_unsigned_int:
93+
caseECPGt_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+
caseECPGt_unsigned_short:
110+
((unsigned short*)var)[act_tuple]= (unsigned short)ures;
111+
break;
112+
caseECPGt_unsigned_int:
113+
((unsignedint*)var)[act_tuple]= (unsignedint)ures;
114+
break;
115+
caseECPGt_unsigned_long:
116+
((unsigned long*)var)[act_tuple]=ures;
117+
break;
118+
default:
119+
/* Cannot happen */
120+
break;
121+
}
122+
break;
123+
124+
125+
caseECPGt_float:
126+
caseECPGt_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+
caseECPGt_float:
143+
((float*)var)[act_tuple]=dres;
144+
break;
145+
caseECPGt_double:
146+
((double*)var)[act_tuple]=dres;
147+
break;
148+
default:
149+
/* Cannot happen */
150+
break;
151+
}
152+
break;
153+
154+
caseECPGt_bool:
155+
if (pval)
156+
{
157+
if (pval[0]=='f'&&pval[1]=='\0')
158+
{
159+
((char*)var)[act_tuple]= false;
160+
break;
161+
}
162+
elseif (pval[0]=='t'&&pval[1]=='\0')
163+
{
164+
((char*)var)[act_tuple]= true;
165+
break;
166+
}
167+
elseif (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+
caseECPGt_char:
179+
caseECPGt_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+
caseECPGt_short:
188+
caseECPGt_unsigned_short:
189+
((short*)ind)[act_tuple]=varcharsize;
190+
break;
191+
caseECPGt_int:
192+
caseECPGt_unsigned_int:
193+
((int*)ind)[act_tuple]=varcharsize;
194+
break;
195+
caseECPGt_long:
196+
caseECPGt_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+
caseECPGt_varchar:
208+
{
209+
structECPGgeneric_varchar*variable=
210+
(structECPGgeneric_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+
caseECPGt_short:
224+
caseECPGt_unsigned_short:
225+
((short*)ind)[act_tuple]=varcharsize;
226+
break;
227+
caseECPGt_int:
228+
caseECPGt_unsigned_int:
229+
((int*)ind)[act_tuple]=varcharsize;
230+
break;
231+
caseECPGt_long:
232+
caseECPGt_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)

[8]ページ先頭

©2009-2025 Movatter.jp