Skip to content

Commit 524e9d6

Browse files
author
Michael Meskes
committed
Changes to the parser to accept new datatypes.
1 parent 9a9719e commit 524e9d6

File tree

12 files changed

+275
-50
lines changed

12 files changed

+275
-50
lines changed

src/interfaces/ecpg/ChangeLog

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1361,9 +1361,13 @@ Sun Mar 16 11:28:01 CET 2003
13611361
- Renamed lib directory to ecpglib.
13621362
- Added numerical functions to library and preprocessor.
13631363

1364-
Don Mar 20 16:53:40 CET 2003
1364+
Thu Mar 20 16:53:40 CET 2003
13651365

13661366
- Added date/timestamp to library and preprocessor.
1367+
1368+
Fri Mar 21 15:13:42 CET 2003
1369+
1370+
- Made sure preprocessor accepts new datatypes.
13671371
- Set ecpg version to 2.12.0.
13681372
- Set ecpg library to 3.4.2.
13691373
- Set pgtypes library to 1.0.0
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#include <pgtypes_timestamp.h>
2+
3+
#ifndef dtime_t
4+
#define dtime_t Timestamp
5+
#endif /* dtime_t */
6+
7+
#ifndef intrvl_t
8+
#warning needs interval here
9+
#define intrvl_t Timestamp
10+
#endif /* intrvl_t */
11+
12+
extern void dtcurrent (dtime_t *);
13+
extern int dtcvasc (char *, dtime_t *);
14+
extern int dtsub (dtime_t *, dtime_t *, intrvl_t *);
15+
extern int dttoasc (dtime_t *, char *);
16+
extern int dttofmtasc (dtime_t *, char *, int, char *);
17+
extern int intoasc(intrvl_t *, char *);
18+

src/interfaces/ecpg/include/decimal.h

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,20 @@
22

33
#ifndef dec_t
44
#define dec_t NumericVar
5+
#endif /* dec_t */
56

6-
#define CSHORTTYPE 0
7-
#define CMONEYTYPE 0
8-
#define CCHARTYPE 0
9-
#define CDECIMALTYPE 0
10-
#define CINTTYPE 0
11-
#define CDATETYPE 0
12-
#define CDOUBLETYPE 0
13-
#define CLONGTYPE 0
7+
int decadd(dec_t *, NumericVar *, NumericVar *);
8+
int deccmp(dec_t *, NumericVar *);
9+
void deccopy(dec_t *, NumericVar *);
10+
int deccvasc(char *, int, dec_t *);
11+
int deccvdbl(double, dec_t *);
12+
int deccvint(int, dec_t *);
13+
int deccvlong(long, dec_t *);
14+
int decdiv(dec_t *, NumericVar *, NumericVar *);
15+
int decmul(dec_t *, NumericVar *, NumericVar *);
16+
int decsub(dec_t *, NumericVar *, NumericVar *);
17+
int dectoasc(dec_t *, char *, int, int);
18+
int dectodbl(dec_t *, double *);
19+
int dectoint(dec_t *, int *);
20+
int dectolong(dec_t *, long *);
1421

15-
#endif /* dec_t */

src/interfaces/ecpg/include/ecpg_informix.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,25 @@
44

55
#define SQLNOTFOUND 100
66

7+
#ifndef Date
8+
#define Date long
9+
#endif /* ! Date */
10+
11+
extern int rdatestr (Date, char *);
12+
extern void rtoday (Date *);
13+
extern int rjulmdy (Date, short *);
14+
extern int rdefmtdate (Date *, char *, char *);
15+
extern int rfmtdate (Date, char *, char *);
16+
extern int rmdyjul (short *, Date *);
17+
extern int rstrdate (char *, Date *);
18+
extern int rdayofweek(Date);
19+
20+
extern int rfmtlong(long, char *, char *);
21+
extern int rgetmsg(int, char *, int);
22+
extern int risnull(int, char *);
23+
extern int rsetnull(int, char *);
24+
extern int rtypalign(int, int);
25+
extern int rtypmsize(int, int);
26+
extern void rupshift(char *);
27+
28+

src/interfaces/ecpg/include/pgtypes_numeric.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,4 @@ int PGTYPESnumeric_ntod(NumericVar *, double *);
3030
int PGTYPESnumeric_ntoi(NumericVar *, int *);
3131
int PGTYPESnumeric_ntol(NumericVar *, long *);
3232

33-
int decadd(NumericVar *, NumericVar *, NumericVar *);
34-
int deccmp(NumericVar *, NumericVar *);
35-
void deccopy(NumericVar *, NumericVar *);
36-
int deccvasc(char *, int, NumericVar *);
37-
int deccvdbl(double, NumericVar *);
38-
int deccvint(int, NumericVar *);
39-
int deccvlong(long, NumericVar *);
40-
int decdiv(NumericVar *, NumericVar *, NumericVar *);
41-
int decmul(NumericVar *, NumericVar *, NumericVar *);
42-
int decsub(NumericVar *, NumericVar *, NumericVar *);
43-
int dectoasc(NumericVar *, char *, int, int);
44-
int dectodbl(NumericVar *, double *);
45-
int dectoint(NumericVar *, int *);
46-
int dectolong(NumericVar *, long *);
47-
4833
#endif /* PGTYPES_NUMERIC */

src/interfaces/ecpg/include/sqlda.h

Whitespace-only changes.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#define CCHARTYPE 100
2+
#define CSHORTTYPE 101
3+
#define CINTTYPE 102
4+
#define CLONGTYPE 103
5+
#define CFLOATTYPE 104
6+
#define CDOUBLETYPE 105
7+
#define CDECIMALTYPE 107
8+
#define CFIXCHARTYPE 108
9+
#define CSTRINGTYPE 109
10+
#define CDATETYPE 110
11+
#define CMONEYTYPE 111
12+
#define CDTIMETYPE 112
13+
#define CLOCATORTYPE 113
14+
#define CVCHARTYPE 114
15+
#define CINVTYPE 115
16+
#define CFILETYPE 116
17+
#define CINT8TYPE 117
18+
#define CCOLLTYPE 118
19+
#define CLVCHARTYPE 119
20+
#define CFIXBINTYPE 120
21+
#define CVARBINTYPE 121
22+
#define CBOOLTYPE 122
23+
#define CROWTYPE 123
24+
#define CLVCHARPTRTYPE 124
25+
#define CTYPEMAX 25

src/interfaces/ecpg/pgtypeslib/datetime.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "extern.h"
1010
#include "pgtypes_error.h"
1111
#include "pgtypes_date.h"
12+
#include "ecpg_informix.h"
1213

1314
Date
1415
PGTYPESdate_atod(char *str, char **endptr)
@@ -103,3 +104,45 @@ PGTYPESdate_day(Date dDate)
103104
return j2day(dDate);
104105
}
105106

107+
int
108+
rdatestr (Date d, char *str)
109+
{
110+
return 0;
111+
}
112+
113+
void
114+
rtoday (Date *d)
115+
{
116+
return;
117+
}
118+
119+
int
120+
rjulmdy (Date d, short mdy[3])
121+
{
122+
return 0;
123+
}
124+
125+
int
126+
rdefmtdate (Date *d, char *fmt, char *str)
127+
{
128+
return 0;
129+
}
130+
131+
int
132+
rfmtdate (Date d, char *fmt, char *str)
133+
{
134+
return 0;
135+
}
136+
137+
int
138+
rmdyjul (short mdy[3], Date *d)
139+
{
140+
return 0;
141+
}
142+
143+
int
144+
rstrdate (char *str, Date *d)
145+
{
146+
return 0;
147+
}
148+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
int
2+
rfmtlong(long lvalue, char *format, char *outbuf)
3+
{
4+
return 0;
5+
}
6+
7+
int
8+
rgetmsg(int msgnum, char *s, int maxsize)
9+
{
10+
return 0;
11+
}
12+
13+
int
14+
risnull(int vtype, char *pcvar)
15+
{
16+
return 0;
17+
}
18+
19+
int
20+
rsetnull(int vtype, char *pcvar)
21+
{
22+
return 0;
23+
}
24+
25+
int
26+
rtypalign(int offset, int type)
27+
{
28+
return 0;
29+
}
30+
31+
int
32+
rtypmsize(int type, mint len)
33+
{
34+
return 0;
35+
}
36+
37+
void
38+
rupshift(char *s)
39+
{
40+
return;
41+
}
42+
43+
44+

src/interfaces/ecpg/pgtypeslib/numeric.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "extern.h"
1111
#include "numeric.h"
1212
#include "pgtypes_error.h"
13+
#include "decimal.h"
1314

1415
#define Max(x, y) ((x) > (y) ? (x) : (y))
1516
#define Min(x, y) ((x) < (y) ? (x) : (y))
@@ -1040,9 +1041,6 @@ select_div_scale(NumericVar *var1, NumericVar *var2, int *rscale)
10401041
* NUMERIC_MIN_SIG_DIGITS significant digits, so that numeric gives a
10411042
* result no less accurate than float8; but use a scale not less than
10421043
* either input's display scale.
1043-
*
1044-
* The result scale is NUMERIC_EXTRA_DIGITS more than the display scale,
1045-
* to provide some guard digits in the calculation.
10461044
*/
10471045

10481046
/* Get the actual (normalized) weight and first digit of each input */
@@ -1087,19 +1085,11 @@ select_div_scale(NumericVar *var1, NumericVar *var2, int *rscale)
10871085
res_dscale = Min(res_dscale, NUMERIC_MAX_DISPLAY_SCALE);
10881086

10891087
/* Select result scale */
1090-
*rscale = res_rscale = res_dscale + NUMERIC_EXTRA_DIGITS;
1088+
*rscale = res_rscale = res_dscale + 4;
10911089

10921090
return res_dscale;
10931091
}
10941092

1095-
1096-
/* ----------
1097-
* div_var() -
1098-
*
1099-
* Division on variable level. Accuracy of result is determined by
1100-
* global_rscale.
1101-
* ----------
1102-
*/
11031093
int
11041094
PGTYPESnumeric_div(NumericVar *var1, NumericVar *var2, NumericVar *result)
11051095
{

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