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

Commitfcdf0e2

Browse files
author
Michael Meskes
committed
- Added Dave patch for Informix handling of numeric/int conversion.
- Changed all new datatypes to lowercase.- Fixed rounding bug in numerical types.
1 parentfd65be4 commitfcdf0e2

File tree

22 files changed

+239
-241
lines changed

22 files changed

+239
-241
lines changed

‎src/interfaces/ecpg/compatlib/informix.c

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
char*ECPGalloc(long,int);
1414

1515
staticint
16-
deccall2(Decimal*arg1,Decimal*arg2,int (*ptr) (Numeric*,Numeric*))
16+
deccall2(decimal*arg1,decimal*arg2,int (*ptr) (numeric*,numeric*))
1717
{
18-
Numeric*a1,
18+
numeric*a1,
1919
*a2;
2020
inti;
2121

@@ -51,9 +51,9 @@ deccall2(Decimal * arg1, Decimal * arg2, int (*ptr) (Numeric *, Numeric *))
5151
}
5252

5353
staticint
54-
deccall3(Decimal*arg1,Decimal*arg2,Decimal*result,int (*ptr) (Numeric*,Numeric*,Numeric*))
54+
deccall3(decimal*arg1,decimal*arg2,decimal*result,int (*ptr) (numeric*,numeric*,numeric*))
5555
{
56-
Numeric*a1,
56+
numeric*a1,
5757
*a2,
5858
*nres;
5959
inti;
@@ -110,7 +110,7 @@ deccall3(Decimal * arg1, Decimal * arg2, Decimal * result, int (*ptr) (Numeric *
110110

111111
/* we start with the numeric functions */
112112
int
113-
decadd(Decimal*arg1,Decimal*arg2,Decimal*sum)
113+
decadd(decimal*arg1,decimal*arg2,decimal*sum)
114114
{
115115
deccall3(arg1,arg2,sum,PGTYPESnumeric_add);
116116

@@ -123,15 +123,15 @@ decadd(Decimal * arg1, Decimal * arg2, Decimal * sum)
123123
}
124124

125125
int
126-
deccmp(Decimal*arg1,Decimal*arg2)
126+
deccmp(decimal*arg1,decimal*arg2)
127127
{
128128
return (deccall2(arg1,arg2,PGTYPESnumeric_cmp));
129129
}
130130

131131
void
132-
deccopy(Decimal*src,Decimal*target)
132+
deccopy(decimal*src,decimal*target)
133133
{
134-
memcpy(target,src,sizeof(Decimal));
134+
memcpy(target,src,sizeof(decimal));
135135
}
136136

137137
staticchar*
@@ -154,12 +154,12 @@ strndup(const char *str, size_t len)
154154
}
155155

156156
int
157-
deccvasc(char*cp,intlen,Decimal*np)
157+
deccvasc(char*cp,intlen,decimal*np)
158158
{
159-
char*str=strndup(cp,len);/*Decimal_in always converts the
159+
char*str=strndup(cp,len);/*decimal_in always converts the
160160
* complete string */
161161
intret=0;
162-
Numeric*result;
162+
numeric*result;
163163

164164
if (risnull(CSTRINGTYPE,cp))
165165
{
@@ -201,9 +201,9 @@ deccvasc(char *cp, int len, Decimal * np)
201201
}
202202

203203
int
204-
deccvdbl(doubledbl,Decimal*np)
204+
deccvdbl(doubledbl,decimal*np)
205205
{
206-
Numeric*nres=PGTYPESnumeric_new();
206+
numeric*nres=PGTYPESnumeric_new();
207207
intresult=1;
208208

209209
if (risnull(CDOUBLETYPE, (char*)&dbl))
@@ -224,9 +224,9 @@ deccvdbl(double dbl, Decimal * np)
224224
}
225225

226226
int
227-
deccvint(intin,Decimal*np)
227+
deccvint(intin,decimal*np)
228228
{
229-
Numeric*nres=PGTYPESnumeric_new();
229+
numeric*nres=PGTYPESnumeric_new();
230230
intresult=1;
231231

232232
if (risnull(CINTTYPE, (char*)&in))
@@ -247,9 +247,9 @@ deccvint(int in, Decimal * np)
247247
}
248248

249249
int
250-
deccvlong(longlng,Decimal*np)
250+
deccvlong(longlng,decimal*np)
251251
{
252-
Numeric*nres=PGTYPESnumeric_new();
252+
numeric*nres=PGTYPESnumeric_new();
253253
intresult=1;
254254

255255
if (risnull(CLONGTYPE, (char*)&lng))
@@ -270,7 +270,7 @@ deccvlong(long lng, Decimal * np)
270270
}
271271

272272
int
273-
decdiv(Decimal*n1,Decimal*n2,Decimal*n3)
273+
decdiv(decimal*n1,decimal*n2,decimal*n3)
274274
{
275275
inti=deccall3(n1,n2,n3,PGTYPESnumeric_div);
276276

@@ -292,7 +292,7 @@ decdiv(Decimal * n1, Decimal * n2, Decimal * n3)
292292
}
293293

294294
int
295-
decmul(Decimal*n1,Decimal*n2,Decimal*n3)
295+
decmul(decimal*n1,decimal*n2,decimal*n3)
296296
{
297297
inti=deccall3(n1,n2,n3,PGTYPESnumeric_mul);
298298

@@ -311,7 +311,7 @@ decmul(Decimal * n1, Decimal * n2, Decimal * n3)
311311
}
312312

313313
int
314-
decsub(Decimal*n1,Decimal*n2,Decimal*n3)
314+
decsub(decimal*n1,decimal*n2,decimal*n3)
315315
{
316316
inti=deccall3(n1,n2,n3,PGTYPESnumeric_sub);
317317

@@ -330,10 +330,10 @@ decsub(Decimal * n1, Decimal * n2, Decimal * n3)
330330
}
331331

332332
int
333-
dectoasc(Decimal*np,char*cp,intlen,intright)
333+
dectoasc(decimal*np,char*cp,intlen,intright)
334334
{
335335
char*str;
336-
Numeric*nres=PGTYPESnumeric_new();
336+
numeric*nres=PGTYPESnumeric_new();
337337

338338
if (nres==NULL)
339339
return-1211;
@@ -367,9 +367,9 @@ dectoasc(Decimal * np, char *cp, int len, int right)
367367
}
368368

369369
int
370-
dectodbl(Decimal*np,double*dblp)
370+
dectodbl(decimal*np,double*dblp)
371371
{
372-
Numeric*nres=PGTYPESnumeric_new();
372+
numeric*nres=PGTYPESnumeric_new();
373373
inti;
374374

375375
if (nres==NULL)
@@ -385,10 +385,10 @@ dectodbl(Decimal * np, double *dblp)
385385
}
386386

387387
int
388-
dectoint(Decimal*np,int*ip)
388+
dectoint(decimal*np,int*ip)
389389
{
390390
intret;
391-
Numeric*nres=PGTYPESnumeric_new();
391+
numeric*nres=PGTYPESnumeric_new();
392392

393393
if (nres==NULL)
394394
return-1211;
@@ -405,10 +405,10 @@ dectoint(Decimal * np, int *ip)
405405
}
406406

407407
int
408-
dectolong(Decimal*np,long*lngp)
408+
dectolong(decimal*np,long*lngp)
409409
{
410410
intret;
411-
Numeric*nres=PGTYPESnumeric_new();;
411+
numeric*nres=PGTYPESnumeric_new();;
412412

413413
if (nres==NULL)
414414
return-1211;
@@ -529,15 +529,15 @@ rdayofweek(Date d)
529529
/* And the datetime stuff */
530530

531531
void
532-
dtcurrent(Timestamp*ts)
532+
dtcurrent(timestamp*ts)
533533
{
534534
PGTYPEStimestamp_current(ts);
535535
}
536536

537537
int
538-
dtcvasc(char*str,Timestamp*ts)
538+
dtcvasc(char*str,timestamp*ts)
539539
{
540-
Timestampts_tmp;
540+
timestampts_tmp;
541541
inti;
542542
char**endptr=&str;
543543

@@ -558,13 +558,13 @@ dtcvasc(char *str, Timestamp *ts)
558558
}
559559

560560
int
561-
dtsub(Timestamp*ts1,Timestamp*ts2,Interval*iv)
561+
dtsub(timestamp*ts1,timestamp*ts2,interval*iv)
562562
{
563563
returnPGTYPEStimestamp_sub(ts1,ts2,iv);
564564
}
565565

566566
int
567-
dttoasc(Timestamp*ts,char*output)
567+
dttoasc(timestamp*ts,char*output)
568568
{
569569
char*asctime=PGTYPEStimestamp_to_asc(*ts);
570570

@@ -574,13 +574,13 @@ dttoasc(Timestamp *ts, char *output)
574574
}
575575

576576
int
577-
dttofmtasc(Timestamp*ts,char*output,intstr_len,char*fmtstr)
577+
dttofmtasc(timestamp*ts,char*output,intstr_len,char*fmtstr)
578578
{
579579
returnPGTYPEStimestamp_fmt_asc(ts,output,str_len,fmtstr);
580580
}
581581

582582
int
583-
intoasc(Interval*i,char*str)
583+
intoasc(interval*i,char*str)
584584
{
585585
str=PGTYPESinterval_to_asc(i);
586586

‎src/interfaces/ecpg/ecpglib/data.c

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.16 2003/08/04 00:43:32 momjian Exp $ */
1+
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.17 2003/09/09 10:46:37 meskes Exp $ */
22

33
#definePOSTGRES_ECPG_INTERNAL
44
#include"postgres_fe.h"
@@ -115,19 +115,20 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
115115
unsigned longures;
116116
doubledres;
117117
char*scan_length;
118-
Numeric*nres;
119-
Dateddres;
120-
Timestamptres;
121-
Interval*ires;
118+
numeric*nres;
119+
dateddres;
120+
timestamptres;
121+
interval*ires;
122122

123123
caseECPGt_short:
124124
caseECPGt_int:
125125
caseECPGt_long:
126126
if (pval)
127127
{
128128
res=strtol(pval,&scan_length,10);
129+
/* INFORMIX allows for selecting a numeric into an int, the result is truncated */
129130
if ((isarray&&*scan_length!=','&&*scan_length!='}')
130-
|| (!isarray&&*scan_length!='\0'&&*scan_length!=' '))/* Garbage left */
131+
|| (!isarray&&!(INFORMIX_MODE(compat)&&*scan_length=='.')&&*scan_length!='\0'&&*scan_length!=' '))/* Garbage left */
131132
{
132133
ECPGraise(lineno,ECPG_INT_FORMAT,ECPG_SQLSTATE_DATATYPE_MISMATCH,pval);
133134
return (false);
@@ -160,7 +161,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
160161
{
161162
ures=strtoul(pval,&scan_length,10);
162163
if ((isarray&&*scan_length!=','&&*scan_length!='}')
163-
|| (!isarray&&*scan_length!='\0'&&*scan_length!=' '))/* Garbage left */
164+
|| (!isarray&&!(INFORMIX_MODE(compat)&&*scan_length=='.')&&*scan_length!='\0'&&*scan_length!=' '))/* Garbage left */
164165
{
165166
ECPGraise(lineno,ECPG_UINT_FORMAT,ECPG_SQLSTATE_DATATYPE_MISMATCH,pval);
166167
return (false);
@@ -193,7 +194,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
193194
{
194195
*((long longint*) (var+offset*act_tuple))=strtoll(pval,&scan_length,10);
195196
if ((isarray&&*scan_length!=','&&*scan_length!='}')
196-
|| (!isarray&&*scan_length!='\0'&&*scan_length!=' '))/* Garbage left */
197+
|| (!isarray&&!(INFORMIX_MODE(compat)&&*scan_length=='.')&&*scan_length!='\0'&&*scan_length!=' '))/* Garbage left */
197198
{
198199
ECPGraise(lineno,ECPG_INT_FORMAT,ECPG_SQLSTATE_DATATYPE_MISMATCH,pval);
199200
return (false);
@@ -210,7 +211,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
210211
{
211212
*((unsigned long longint*) (var+offset*act_tuple))=strtoull(pval,&scan_length,10);
212213
if ((isarray&&*scan_length!=','&&*scan_length!='}')
213-
|| (!isarray&&*scan_length!='\0'&&*scan_length!=' '))/* Garbage left */
214+
|| (!isarray&&!(INFORMIX_MODE(compat)&&*scan_length=='.')&&*scan_length!='\0'&&*scan_length!=' '))/* Garbage left */
214215
{
215216
ECPGraise(lineno,ECPG_UINT_FORMAT,ECPG_SQLSTATE_DATATYPE_MISMATCH,pval);
216217
return (false);
@@ -403,9 +404,9 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
403404
nres=PGTYPESnumeric_from_asc("0.0",&scan_length);
404405

405406
if (type==ECPGt_numeric)
406-
PGTYPESnumeric_copy(nres, (Numeric*) (var+offset*act_tuple));
407+
PGTYPESnumeric_copy(nres, (numeric*) (var+offset*act_tuple));
407408
else
408-
PGTYPESnumeric_to_decimal(nres, (Decimal*) (var+offset*act_tuple));
409+
PGTYPESnumeric_to_decimal(nres, (decimal*) (var+offset*act_tuple));
409410
break;
410411

411412
caseECPGt_interval:
@@ -429,7 +430,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
429430
else
430431
ires=PGTYPESinterval_from_asc("0 seconds",NULL);
431432

432-
PGTYPESinterval_copy(ires, (Interval*) (var+offset*act_tuple));
433+
PGTYPESinterval_copy(ires, (interval*) (var+offset*act_tuple));
433434
break;
434435
caseECPGt_date:
435436
if (pval)
@@ -449,7 +450,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
449450
return (false);
450451
}
451452

452-
*((Date*) (var+offset*act_tuple))=ddres;
453+
*((date*) (var+offset*act_tuple))=ddres;
453454
}
454455
break;
455456

@@ -471,7 +472,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
471472
return (false);
472473
}
473474

474-
*((Timestamp*) (var+offset*act_tuple))=tres;
475+
*((timestamp*) (var+offset*act_tuple))=tres;
475476
}
476477
break;
477478

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp