PostgreSQL Source Code git master
ecpg_informix.h File Reference
#include <ecpglib.h>
#include <pgtypes_date.h>
#include <pgtypes_interval.h>
#include <pgtypes_numeric.h>
#include <pgtypes_timestamp.h>
Include dependency graph for ecpg_informix.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define SQLNOTFOUND   100
 
#define ECPG_INFORMIX_NUM_OVERFLOW   -1200
 
#define ECPG_INFORMIX_NUM_UNDERFLOW   -1201
 
#define ECPG_INFORMIX_DIVIDE_ZERO   -1202
 
#define ECPG_INFORMIX_BAD_YEAR   -1204
 
#define ECPG_INFORMIX_BAD_MONTH   -1205
 
#define ECPG_INFORMIX_BAD_DAY   -1206
 
#define ECPG_INFORMIX_ENOSHORTDATE   -1209
 
#define ECPG_INFORMIX_DATE_CONVERT   -1210
 
#define ECPG_INFORMIX_OUT_OF_MEMORY   -1211
 
#define ECPG_INFORMIX_ENOTDMY   -1212
 
#define ECPG_INFORMIX_BAD_NUMERIC   -1213
 
#define ECPG_INFORMIX_BAD_EXPONENT   -1216
 
#define ECPG_INFORMIX_BAD_DATE   -1218
 
#define ECPG_INFORMIX_EXTRA_CHARS   -1264
 

Functions

int rdatestr (date d, char *str)
 
void rtoday (date *d)
 
int rjulmdy (date d, short *mdy)
 
int rdefmtdate (date *d, const char *fmt, const char *str)
 
int rfmtdate (date d, const char *fmt, char *str)
 
int rmdyjul (short *mdy, date *d)
 
int rstrdate (const char *str, date *d)
 
int rdayofweek (date d)
 
int rfmtlong (long lng_val, const char *fmt, char *outbuf)
 
int rgetmsg (int msgnum, char *s, int maxsize)
 
int risnull (int t, const char *ptr)
 
int rsetnull (int t, char *ptr)
 
int rtypalign (int offset, int type)
 
int rtypmsize (int type, int len)
 
int rtypwidth (int sqltype, int sqllen)
 
void rupshift (char *str)
 
int byleng (char *str, int len)
 
void ldchar (char *src, int len, char *dest)
 
void ECPG_informix_set_var (int number, void *pointer, int lineno)
 
void * ECPG_informix_get_var (int number)
 
void ECPG_informix_reset_sqlca (void)
 
int decadd (decimal *arg1, decimal *arg2, decimal *sum)
 
int deccmp (decimal *arg1, decimal *arg2)
 
void deccopy (decimal *src, decimal *target)
 
int deccvasc (const char *cp, int len, decimal *np)
 
int deccvdbl (double dbl, decimal *np)
 
int deccvint (int in, decimal *np)
 
int deccvlong (long lng, decimal *np)
 
int decdiv (decimal *n1, decimal *n2, decimal *result)
 
int decmul (decimal *n1, decimal *n2, decimal *result)
 
int decsub (decimal *n1, decimal *n2, decimal *result)
 
int dectoasc (decimal *np, char *cp, int len, int right)
 
int dectodbl (decimal *np, double *dblp)
 
int dectoint (decimal *np, int *ip)
 
int dectolong (decimal *np, long *lngp)
 
void dtcurrent (timestamp *ts)
 
int dtcvasc (char *str, timestamp *ts)
 
int dtsub (timestamp *ts1, timestamp *ts2, interval *iv)
 
int dttoasc (timestamp *ts, char *output)
 
int dttofmtasc (timestamp *ts, char *output, int str_len, char *fmtstr)
 
int intoasc (interval *i, char *str)
 
int dtcvfmtasc (char *inbuf, char *fmtstr, timestamp *dtvalue)
 

Macro Definition Documentation

◆ ECPG_INFORMIX_BAD_DATE

#define ECPG_INFORMIX_BAD_DATE   -1218

Definition at line 28 of file ecpg_informix.h.

◆ ECPG_INFORMIX_BAD_DAY

#define ECPG_INFORMIX_BAD_DAY   -1206

Definition at line 21 of file ecpg_informix.h.

◆ ECPG_INFORMIX_BAD_EXPONENT

#define ECPG_INFORMIX_BAD_EXPONENT   -1216

Definition at line 27 of file ecpg_informix.h.

◆ ECPG_INFORMIX_BAD_MONTH

#define ECPG_INFORMIX_BAD_MONTH   -1205

Definition at line 20 of file ecpg_informix.h.

◆ ECPG_INFORMIX_BAD_NUMERIC

#define ECPG_INFORMIX_BAD_NUMERIC   -1213

Definition at line 26 of file ecpg_informix.h.

◆ ECPG_INFORMIX_BAD_YEAR

#define ECPG_INFORMIX_BAD_YEAR   -1204

Definition at line 19 of file ecpg_informix.h.

◆ ECPG_INFORMIX_DATE_CONVERT

#define ECPG_INFORMIX_DATE_CONVERT   -1210

Definition at line 23 of file ecpg_informix.h.

◆ ECPG_INFORMIX_DIVIDE_ZERO

#define ECPG_INFORMIX_DIVIDE_ZERO   -1202

Definition at line 18 of file ecpg_informix.h.

◆ ECPG_INFORMIX_ENOSHORTDATE

#define ECPG_INFORMIX_ENOSHORTDATE   -1209

Definition at line 22 of file ecpg_informix.h.

◆ ECPG_INFORMIX_ENOTDMY

#define ECPG_INFORMIX_ENOTDMY   -1212

Definition at line 25 of file ecpg_informix.h.

◆ ECPG_INFORMIX_EXTRA_CHARS

#define ECPG_INFORMIX_EXTRA_CHARS   -1264

Definition at line 29 of file ecpg_informix.h.

◆ ECPG_INFORMIX_NUM_OVERFLOW

#define ECPG_INFORMIX_NUM_OVERFLOW   -1200

Definition at line 16 of file ecpg_informix.h.

◆ ECPG_INFORMIX_NUM_UNDERFLOW

#define ECPG_INFORMIX_NUM_UNDERFLOW   -1201

Definition at line 17 of file ecpg_informix.h.

◆ ECPG_INFORMIX_OUT_OF_MEMORY

#define ECPG_INFORMIX_OUT_OF_MEMORY   -1211

Definition at line 24 of file ecpg_informix.h.

◆ SQLNOTFOUND

#define SQLNOTFOUND   100

Definition at line 14 of file ecpg_informix.h.

Function Documentation

◆ byleng()

int byleng ( char *  str,
int  len 
)

Definition at line 970 of file informix.c.

971{
972 for (len--; str[len] && str[len] == ' '; len--);
973 return (len + 1);
974}
const char * str
const void size_t len

References len, and str.

Referenced by ldchar(), and main().

◆ decadd()

int decadd ( decimal arg1,
decimal arg2,
decimal sum 
)

Definition at line 151 of file informix.c.

152{
153 errno = 0;
154 deccall3(arg1, arg2, sum, PGTYPESnumeric_add);
155
156 if (errno == PGTYPES_NUM_OVERFLOW)
158 else if (errno == PGTYPES_NUM_UNDERFLOW)
160 else if (errno != 0)
161 return -1;
162 else
163 return 0;
164}
#define ECPG_INFORMIX_NUM_OVERFLOW
Definition: ecpg_informix.h:16
#define ECPG_INFORMIX_NUM_UNDERFLOW
Definition: ecpg_informix.h:17
static int deccall3(decimal *arg1, decimal *arg2, decimal *result, int(*ptr)(numeric *, numeric *, numeric *))
Definition: informix.c:86
#define PGTYPES_NUM_OVERFLOW
Definition: pgtypes_error.h:3
#define PGTYPES_NUM_UNDERFLOW
Definition: pgtypes_error.h:6
int PGTYPESnumeric_add(numeric *var1, numeric *var2, numeric *result)
Definition: numeric.c:637

References deccall3(), ECPG_INFORMIX_NUM_OVERFLOW, ECPG_INFORMIX_NUM_UNDERFLOW, PGTYPES_NUM_OVERFLOW, PGTYPES_NUM_UNDERFLOW, and PGTYPESnumeric_add().

Referenced by main().

◆ deccmp()

int deccmp ( decimal arg1,
decimal arg2 
)

Definition at line 167 of file informix.c.

168{
169 return deccall2(arg1, arg2, PGTYPESnumeric_cmp);
170}
static int deccall2(decimal *arg1, decimal *arg2, int(*ptr)(numeric *, numeric *))
Definition: informix.c:48
int PGTYPESnumeric_cmp(numeric *var1, numeric *var2)
Definition: numeric.c:1281

References deccall2(), and PGTYPESnumeric_cmp().

Referenced by main().

◆ deccopy()

void deccopy ( decimal src,
decimal target 
)

Definition at line 173 of file informix.c.

174{
175 memcpy(target, src, sizeof(decimal));
176}

◆ deccvasc()

int deccvasc ( const char *  cp,
int  len,
decimal np 
)

Definition at line 198 of file informix.c.

199{
200 char *str;
201 int ret = 0;
202 numeric *result;
203
204 rsetnull(CDECIMALTYPE, (char *) np);
205 if (risnull(CSTRINGTYPE, cp))
206 return 0;
207
208 str = ecpg_strndup(cp, len); /* decimal_in always converts the complete
209 * string */
210 if (!str)
212 else
213 {
214 errno = 0;
215 result = PGTYPESnumeric_from_asc(str, NULL);
216 if (!result)
217 {
218 switch (errno)
219 {
222 break;
225 break;
226 default:
228 break;
229 }
230 }
231 else
232 {
233 int i = PGTYPESnumeric_to_decimal(result, np);
234
235 PGTYPESnumeric_free(result);
236 if (i != 0)
238 }
239 }
240
241 free(str);
242 return ret;
243}
#define ECPG_INFORMIX_BAD_NUMERIC
Definition: ecpg_informix.h:26
#define ECPG_INFORMIX_BAD_EXPONENT
Definition: ecpg_informix.h:27
#define free(a)
Definition: header.h:65
static char * ecpg_strndup(const char *str, size_t len)
Definition: informix.c:179
int risnull(int t, const char *ptr)
Definition: informix.c:1049
int rsetnull(int t, char *ptr)
Definition: informix.c:1042
int i
Definition: isn.c:72
#define PGTYPES_NUM_BAD_NUMERIC
Definition: pgtypes_error.h:4
int PGTYPESnumeric_to_decimal(numeric *src, decimal *dst)
Definition: numeric.c:1547
void PGTYPESnumeric_free(numeric *var)
Definition: numeric.c:385
numeric * PGTYPESnumeric_from_asc(char *str, char **endptr)
Definition: numeric.c:321
#define CDECIMALTYPE
Definition: sqltypes.h:12
#define CSTRINGTYPE
Definition: sqltypes.h:14

References CDECIMALTYPE, CSTRINGTYPE, ECPG_INFORMIX_BAD_EXPONENT, ECPG_INFORMIX_BAD_NUMERIC, ECPG_INFORMIX_NUM_OVERFLOW, ECPG_INFORMIX_NUM_UNDERFLOW, ecpg_strndup(), free, i, len, PGTYPES_NUM_BAD_NUMERIC, PGTYPES_NUM_OVERFLOW, PGTYPESnumeric_free(), PGTYPESnumeric_from_asc(), PGTYPESnumeric_to_decimal(), risnull(), rsetnull(), and str.

Referenced by main().

◆ deccvdbl()

int deccvdbl ( double  dbl,
decimal np 
)

Definition at line 246 of file informix.c.

247{
248 numeric *nres;
249 int result = 1;
250
251 rsetnull(CDECIMALTYPE, (char *) np);
252 if (risnull(CDOUBLETYPE, (char *) &dbl))
253 return 0;
254
255 nres = PGTYPESnumeric_new();
256 if (nres == NULL)
258
259 result = PGTYPESnumeric_from_double(dbl, nres);
260 if (result == 0)
261 result = PGTYPESnumeric_to_decimal(nres, np);
262
264 return result;
265}
#define ECPG_INFORMIX_OUT_OF_MEMORY
Definition: ecpg_informix.h:24
int PGTYPESnumeric_from_double(double d, numeric *dst)
Definition: numeric.c:1411
numeric * PGTYPESnumeric_new(void)
Definition: numeric.c:42
#define CDOUBLETYPE
Definition: sqltypes.h:11

References CDECIMALTYPE, CDOUBLETYPE, ECPG_INFORMIX_OUT_OF_MEMORY, PGTYPESnumeric_free(), PGTYPESnumeric_from_double(), PGTYPESnumeric_new(), PGTYPESnumeric_to_decimal(), risnull(), and rsetnull().

◆ deccvint()

int deccvint ( int  in,
decimal np 
)

Definition at line 268 of file informix.c.

269{
270 numeric *nres;
271 int result = 1;
272
273 rsetnull(CDECIMALTYPE, (char *) np);
274 if (risnull(CINTTYPE, (char *) &in))
275 return 0;
276
277 nres = PGTYPESnumeric_new();
278 if (nres == NULL)
280
281 result = PGTYPESnumeric_from_int(in, nres);
282 if (result == 0)
283 result = PGTYPESnumeric_to_decimal(nres, np);
284
286 return result;
287}
int PGTYPESnumeric_from_int(signed int int_val, numeric *var)
Definition: numeric.c:1309
#define CINTTYPE
Definition: sqltypes.h:8

References CDECIMALTYPE, CINTTYPE, ECPG_INFORMIX_OUT_OF_MEMORY, PGTYPESnumeric_free(), PGTYPESnumeric_from_int(), PGTYPESnumeric_new(), PGTYPESnumeric_to_decimal(), risnull(), and rsetnull().

Referenced by main().

◆ deccvlong()

int deccvlong ( long  lng,
decimal np 
)

Definition at line 290 of file informix.c.

291{
292 numeric *nres;
293 int result = 1;
294
295 rsetnull(CDECIMALTYPE, (char *) np);
296 if (risnull(CLONGTYPE, (char *) &lng))
297 return 0;
298
299 nres = PGTYPESnumeric_new();
300 if (nres == NULL)
302
303 result = PGTYPESnumeric_from_long(lng, nres);
304 if (result == 0)
305 result = PGTYPESnumeric_to_decimal(nres, np);
306
308 return result;
309}
int PGTYPESnumeric_from_long(signed long int long_val, numeric *var)
Definition: numeric.c:1318
#define CLONGTYPE
Definition: sqltypes.h:9

References CDECIMALTYPE, CLONGTYPE, ECPG_INFORMIX_OUT_OF_MEMORY, PGTYPESnumeric_free(), PGTYPESnumeric_from_long(), PGTYPESnumeric_new(), PGTYPESnumeric_to_decimal(), risnull(), and rsetnull().

Referenced by main().

◆ decdiv()

int decdiv ( decimal n1,
decimal n2,
decimal result 
)

Definition at line 312 of file informix.c.

313{
314 int i;
315
316 errno = 0;
317 i = deccall3(n1, n2, result, PGTYPESnumeric_div);
318
319 if (i != 0)
320 switch (errno)
321 {
324 break;
327 break;
328 default:
330 break;
331 }
332
333 return 0;
334}
#define ECPG_INFORMIX_DIVIDE_ZERO
Definition: ecpg_informix.h:18
#define PGTYPES_NUM_DIVIDE_ZERO
Definition: pgtypes_error.h:5
int PGTYPESnumeric_div(numeric *var1, numeric *var2, numeric *result)
Definition: numeric.c:1053

References deccall3(), ECPG_INFORMIX_DIVIDE_ZERO, ECPG_INFORMIX_NUM_OVERFLOW, ECPG_INFORMIX_NUM_UNDERFLOW, i, PGTYPES_NUM_DIVIDE_ZERO, PGTYPES_NUM_OVERFLOW, and PGTYPESnumeric_div().

Referenced by main().

◆ decmul()

int decmul ( decimal n1,
decimal n2,
decimal result 
)

Definition at line 337 of file informix.c.

338{
339 int i;
340
341 errno = 0;
342 i = deccall3(n1, n2, result, PGTYPESnumeric_mul);
343
344 if (i != 0)
345 switch (errno)
346 {
349 break;
350 default:
352 break;
353 }
354
355 return 0;
356}
int PGTYPESnumeric_mul(numeric *var1, numeric *var2, numeric *result)
Definition: numeric.c:896

References deccall3(), ECPG_INFORMIX_NUM_OVERFLOW, ECPG_INFORMIX_NUM_UNDERFLOW, i, PGTYPES_NUM_OVERFLOW, and PGTYPESnumeric_mul().

Referenced by main().

◆ decsub()

int decsub ( decimal n1,
decimal n2,
decimal result 
)

Definition at line 359 of file informix.c.

360{
361 int i;
362
363 errno = 0;
364 i = deccall3(n1, n2, result, PGTYPESnumeric_sub);
365
366 if (i != 0)
367 switch (errno)
368 {
371 break;
372 default:
374 break;
375 }
376
377 return 0;
378}
int PGTYPESnumeric_sub(numeric *var1, numeric *var2, numeric *result)
Definition: numeric.c:765

References deccall3(), ECPG_INFORMIX_NUM_OVERFLOW, ECPG_INFORMIX_NUM_UNDERFLOW, i, PGTYPES_NUM_OVERFLOW, and PGTYPESnumeric_sub().

Referenced by main().

◆ dectoasc()

int dectoasc ( decimal np,
char *  cp,
int  len,
int  right 
)

Definition at line 381 of file informix.c.

382{
383 char *str;
384 numeric *nres;
385
386 rsetnull(CSTRINGTYPE, (char *) cp);
387 if (risnull(CDECIMALTYPE, (char *) np))
388 return 0;
389
390 nres = PGTYPESnumeric_new();
391 if (nres == NULL)
393
394 if (PGTYPESnumeric_from_decimal(np, nres) != 0)
395 {
398 }
399
400 if (right >= 0)
401 str = PGTYPESnumeric_to_asc(nres, right);
402 else
403 str = PGTYPESnumeric_to_asc(nres, nres->dscale);
404
406 if (!str)
407 return -1;
408
409 /*
410 * TODO: have to take care of len here and create exponential notation if
411 * necessary
412 */
413 if ((int) (strlen(str) + 1) > len)
414 {
415 if (len > 1)
416 {
417 cp[0] = '*';
418 cp[1] = '\0';
419 }
420 free(str);
421 return -1;
422 }
423 else
424 {
425 strcpy(cp, str);
426 free(str);
427 return 0;
428 }
429}
int PGTYPESnumeric_from_decimal(decimal *src, numeric *dst)
Definition: numeric.c:1570
char * PGTYPESnumeric_to_asc(numeric *num, int dscale)
Definition: numeric.c:343

References CDECIMALTYPE, CSTRINGTYPE, numeric::dscale, ECPG_INFORMIX_OUT_OF_MEMORY, free, len, PGTYPESnumeric_free(), PGTYPESnumeric_from_decimal(), PGTYPESnumeric_new(), PGTYPESnumeric_to_asc(), risnull(), rsetnull(), and str.

Referenced by dump_sqlda(), and main().

◆ dectodbl()

int dectodbl ( decimal np,
double *  dblp 
)

Definition at line 432 of file informix.c.

433{
434 int i;
435 numeric *nres = PGTYPESnumeric_new();
436
437 if (nres == NULL)
439
440 if (PGTYPESnumeric_from_decimal(np, nres) != 0)
441 {
444 }
445
446 i = PGTYPESnumeric_to_double(nres, dblp);
448
449 return i;
450}
int PGTYPESnumeric_to_double(numeric *nv, double *dp)
Definition: numeric.c:1483

References ECPG_INFORMIX_OUT_OF_MEMORY, i, PGTYPESnumeric_free(), PGTYPESnumeric_from_decimal(), PGTYPESnumeric_new(), and PGTYPESnumeric_to_double().

Referenced by main().

◆ dectoint()

int dectoint ( decimal np,
int *  ip 
)

Definition at line 453 of file informix.c.

454{
455 int ret;
456 numeric *nres = PGTYPESnumeric_new();
457 int errnum;
458
459 if (nres == NULL)
461
462 if (PGTYPESnumeric_from_decimal(np, nres) != 0)
463 {
466 }
467
468 errno = 0;
469 ret = PGTYPESnumeric_to_int(nres, ip);
470 errnum = errno;
472
473 if (ret == -1 && errnum == PGTYPES_NUM_OVERFLOW)
475
476 return ret;
477}
int PGTYPESnumeric_to_int(numeric *nv, int *ip)
Definition: numeric.c:1494

References ECPG_INFORMIX_NUM_OVERFLOW, ECPG_INFORMIX_OUT_OF_MEMORY, PGTYPES_NUM_OVERFLOW, PGTYPESnumeric_free(), PGTYPESnumeric_from_decimal(), PGTYPESnumeric_new(), and PGTYPESnumeric_to_int().

Referenced by main().

◆ dectolong()

int dectolong ( decimal np,
long *  lngp 
)

Definition at line 480 of file informix.c.

481{
482 int ret;
483 numeric *nres = PGTYPESnumeric_new();
484 int errnum;
485
486 if (nres == NULL)
488
489 if (PGTYPESnumeric_from_decimal(np, nres) != 0)
490 {
493 }
494
495 errno = 0;
496 ret = PGTYPESnumeric_to_long(nres, lngp);
497 errnum = errno;
499
500 if (ret == -1 && errnum == PGTYPES_NUM_OVERFLOW)
502
503 return ret;
504}
int PGTYPESnumeric_to_long(numeric *nv, long *lp)
Definition: numeric.c:1518

References ECPG_INFORMIX_NUM_OVERFLOW, ECPG_INFORMIX_OUT_OF_MEMORY, PGTYPES_NUM_OVERFLOW, PGTYPESnumeric_free(), PGTYPESnumeric_from_decimal(), PGTYPESnumeric_new(), and PGTYPESnumeric_to_long().

Referenced by main().

◆ dtcurrent()

void dtcurrent ( timestamp ts)

Definition at line 612 of file informix.c.

613{
615}
void PGTYPEStimestamp_current(timestamp *ts)
Definition: timestamp.c:290

References PGTYPEStimestamp_current().

◆ dtcvasc()

int dtcvasc ( char *  str,
timestamp ts 
)

Definition at line 618 of file informix.c.

619{
620 timestamp ts_tmp;
621 int i;
622 char **endptr = &str;
623
624 errno = 0;
625 ts_tmp = PGTYPEStimestamp_from_asc(str, endptr);
626 i = errno;
627 if (i)
628 /* TODO: rewrite to Informix error codes */
629 return i;
630 if (**endptr)
631 {
632 /* extra characters exist at the end */
634 }
635 /* TODO: other Informix error codes missing */
636
637 /* everything went fine */
638 *ts = ts_tmp;
639
640 return 0;
641}
#define ECPG_INFORMIX_EXTRA_CHARS
Definition: ecpg_informix.h:29
timestamp PGTYPEStimestamp_from_asc(char *str, char **endptr)
Definition: timestamp.c:202
int64 timestamp

References ECPG_INFORMIX_EXTRA_CHARS, i, PGTYPEStimestamp_from_asc(), and str.

◆ dtcvfmtasc()

int dtcvfmtasc ( char *  inbuf,
char *  fmtstr,
timestamp dtvalue 
)

Definition at line 644 of file informix.c.

645{
646 return PGTYPEStimestamp_defmt_asc(inbuf, fmtstr, dtvalue);
647}
int PGTYPEStimestamp_defmt_asc(const char *str, const char *fmt, timestamp *d)
Definition: timestamp.c:806
static void fmtstr(const char *value, int leftjust, int minlen, int maxwidth, int pointflag, PrintfTarget *target)
Definition: snprintf.c:1003

References fmtstr(), and PGTYPEStimestamp_defmt_asc().

◆ dtsub()

int dtsub ( timestamp ts1,
timestamp ts2,
interval iv 
)

Definition at line 650 of file informix.c.

651{
652 return PGTYPEStimestamp_sub(ts1, ts2, iv);
653}
int PGTYPEStimestamp_sub(timestamp *ts1, timestamp *ts2, interval *iv)
Definition: timestamp.c:793

References PGTYPEStimestamp_sub().

◆ dttoasc()

int dttoasc ( timestamp ts,
char *  output 
)

Definition at line 656 of file informix.c.

657{
658 char *asctime = PGTYPEStimestamp_to_asc(*ts);
659
660 strcpy(output, asctime);
661 free(asctime);
662 return 0;
663}
FILE * output
char * PGTYPEStimestamp_to_asc(timestamp tstamp)
Definition: timestamp.c:268

References free, output, and PGTYPEStimestamp_to_asc().

◆ dttofmtasc()

int dttofmtasc ( timestamp ts,
char *  output,
int  str_len,
char *  fmtstr 
)

Definition at line 666 of file informix.c.

667{
668 return PGTYPEStimestamp_fmt_asc(ts, output, str_len, fmtstr);
669}
int PGTYPEStimestamp_fmt_asc(timestamp *ts, char *output, int str_len, const char *fmtstr)
Definition: timestamp.c:778

References fmtstr(), output, and PGTYPEStimestamp_fmt_asc().

◆ ECPG_informix_get_var()

void * ECPG_informix_get_var ( int  number)

Definition at line 1025 of file informix.c.

1026{
1027 return ECPGget_var(number);
1028}
void * ECPGget_var(int number)
Definition: misc.c:593

References ECPGget_var().

◆ ECPG_informix_reset_sqlca()

void ECPG_informix_reset_sqlca ( void  )

Definition at line 1031 of file informix.c.

1032{
1033 struct sqlca_t *sqlca = ECPGget_sqlca();
1034
1035 if (sqlca == NULL)
1036 return;
1037
1038 memcpy(sqlca, &sqlca_init, sizeof(struct sqlca_t));
1039}
static struct sqlca_t sqlca_init
Definition: informix.c:21
struct sqlca_t * ECPGget_sqlca(void)
Definition: misc.c:108
#define sqlca
Definition: sqlca.h:59
Definition: sqlca.h:20

References ECPGget_sqlca(), sqlca, and sqlca_init.

◆ ECPG_informix_set_var()

void ECPG_informix_set_var ( int  number,
void *  pointer,
int  lineno 
)

Definition at line 1019 of file informix.c.

1020{
1021 ECPGset_var(number, pointer, lineno);
1022}
void ECPGset_var(int number, void *pointer, int lineno)
Definition: misc.c:538

References ECPGset_var().

◆ intoasc()

int intoasc ( interval i,
char *  str 
)

Definition at line 672 of file informix.c.

673{
674 char *tmp;
675
676 errno = 0;
678
679 if (!tmp)
680 return -errno;
681
682 strcpy(str, tmp);
683 free(tmp);
684 return 0;
685}
char * PGTYPESinterval_to_asc(interval *span)
Definition: interval.c:1062

References free, i, PGTYPESinterval_to_asc(), and str.

Referenced by main().

◆ ldchar()

void ldchar ( char *  src,
int  len,
char *  dest 
)

Definition at line 977 of file informix.c.

978{
979 int dlen = byleng(src, len);
980
981 memmove(dest, src, dlen);
982 dest[dlen] = '\0';
983}
int byleng(char *str, int len)
Definition: informix.c:970

References byleng(), generate_unaccent_rules::dest, and len.

Referenced by main().

◆ rdatestr()

int rdatestr ( date  d,
char *  str 
)

Definition at line 508 of file informix.c.

509{
510 char *tmp = PGTYPESdate_to_asc(d);
511
512 if (!tmp)
514
515 /* move to user allocated buffer */
516 strcpy(str, tmp);
517 free(tmp);
518
519 return 0;
520}
#define ECPG_INFORMIX_DATE_CONVERT
Definition: ecpg_informix.h:23
char * PGTYPESdate_to_asc(date dDate)
Definition: datetime.c:101

References ECPG_INFORMIX_DATE_CONVERT, free, PGTYPESdate_to_asc(), and str.

Referenced by date_test_defmt(), date_test_strdate(), and main().

◆ rdayofweek()

int rdayofweek ( date  d)

Definition at line 604 of file informix.c.

605{
606 return PGTYPESdate_dayofweek(d);
607}
int PGTYPESdate_dayofweek(date dDate)
Definition: datetime.c:138

References PGTYPESdate_dayofweek().

◆ rdefmtdate()

int rdefmtdate ( date d,
const char *  fmt,
const char *  str 
)

Definition at line 553 of file informix.c.

554{
555 /* TODO: take care of DBCENTURY environment variable */
556 /* PGSQL functions allow all centuries */
557
558 errno = 0;
559 if (PGTYPESdate_defmt_asc(d, fmt, str) == 0)
560 return 0;
561
562 switch (errno)
563 {
573 default:
575 }
576}
#define ECPG_INFORMIX_ENOTDMY
Definition: ecpg_informix.h:25
#define ECPG_INFORMIX_BAD_DAY
Definition: ecpg_informix.h:21
#define ECPG_INFORMIX_BAD_MONTH
Definition: ecpg_informix.h:20
#define ECPG_INFORMIX_ENOSHORTDATE
Definition: ecpg_informix.h:22
#define ECPG_INFORMIX_BAD_YEAR
Definition: ecpg_informix.h:19
static void const char * fmt
int PGTYPESdate_defmt_asc(date *d, const char *fmt, const char *str)
Definition: datetime.c:329
#define PGTYPES_DATE_ERR_ENOTDMY
Definition: pgtypes_error.h:11
#define PGTYPES_DATE_BAD_DAY
Definition: pgtypes_error.h:12
#define PGTYPES_DATE_ERR_ENOSHORTDATE
Definition: pgtypes_error.h:10
#define PGTYPES_DATE_ERR_EARGS
Definition: pgtypes_error.h:9
#define PGTYPES_DATE_BAD_MONTH
Definition: pgtypes_error.h:13

References ECPG_INFORMIX_BAD_DAY, ECPG_INFORMIX_BAD_MONTH, ECPG_INFORMIX_BAD_YEAR, ECPG_INFORMIX_ENOSHORTDATE, ECPG_INFORMIX_ENOTDMY, fmt, PGTYPES_DATE_BAD_DAY, PGTYPES_DATE_BAD_MONTH, PGTYPES_DATE_ERR_EARGS, PGTYPES_DATE_ERR_ENOSHORTDATE, PGTYPES_DATE_ERR_ENOTDMY, PGTYPESdate_defmt_asc(), and str.

Referenced by date_test_defmt(), and rstrdate().

◆ rfmtdate()

int rfmtdate ( date  d,
const char *  fmt,
char *  str 
)

Definition at line 579 of file informix.c.

580{
581 errno = 0;
582 if (PGTYPESdate_fmt_asc(d, fmt, str) == 0)
583 return 0;
584
585 if (errno == ENOMEM)
587
589}
int PGTYPESdate_fmt_asc(date dDate, const char *fmtstring, char *outbuf)
Definition: datetime.c:167

References ECPG_INFORMIX_DATE_CONVERT, ECPG_INFORMIX_OUT_OF_MEMORY, fmt, PGTYPESdate_fmt_asc(), and str.

Referenced by date_test_fmt().

◆ rfmtlong()

int rfmtlong ( long  lng_val,
const char *  fmt,
char *  outbuf 
)

Definition at line 768 of file informix.c.

769{
770 size_t fmt_len = strlen(fmt);
771 size_t temp_len;
772 int i,
773 j, /* position in temp */
774 k,
775 dotpos;
776 int leftalign = 0,
777 blank = 0,
778 sign = 0,
779 entitydone = 0,
780 signdone = 0,
781 brackets_ok = 0;
782 char *temp;
783 char tmp[2] = " ";
784 char lastfmt = ' ',
785 fmtchar = ' ';
786
787 temp = (char *) malloc(fmt_len + 1);
788 if (!temp)
789 {
790 errno = ENOMEM;
791 return -1;
792 }
793
794 /* put all info about the long in a struct */
795 if (initValue(lng_val) == -1)
796 {
797 free(temp);
798 errno = ENOMEM;
799 return -1;
800 }
801
802 /* '<' is the only format, where we have to align left */
803 if (strchr(fmt, (int) '<'))
804 leftalign = 1;
805
806 /* '(' requires ')' */
807 if (strchr(fmt, (int) '(') && strchr(fmt, (int) ')'))
808 brackets_ok = 1;
809
810 /* get position of the right-most dot in the format-string */
811 /* and fill the temp-string wit '0's up to there. */
812 dotpos = getRightMostDot(fmt);
813
814 /* start to parse the format-string */
815 temp[0] = '\0';
816 k = value.digits - 1; /* position in the value_string */
817 for (i = fmt_len - 1, j = 0; i >= 0; i--, j++)
818 {
819 /* qualify, where we are in the value_string */
820 if (k < 0)
821 {
822 blank = 1;
823 if (k == -1)
824 sign = 1;
825 if (leftalign)
826 {
827 /* can't use strncat(,,0) here, Solaris would freak out */
828 if (sign)
829 if (signdone)
830 {
831 temp[j] = '\0';
832 break;
833 }
834 }
835 }
836 /* if we're right side of the right-most dot, print '0' */
837 if (dotpos >= 0 && dotpos <= i)
838 {
839 if (dotpos < i)
840 {
841 if (fmt[i] == ')')
842 tmp[0] = value.sign == '-' ? ')' : ' ';
843 else
844 tmp[0] = '0';
845 }
846 else
847 tmp[0] = '.';
848 strcat(temp, tmp);
849 continue;
850 }
851 /* the ',' needs special attention, if it is in the blank area */
852 if (blank && fmt[i] == ',')
853 fmtchar = lastfmt;
854 else
855 fmtchar = fmt[i];
856 /* waiting for the sign */
857 if (k < 0 && leftalign && sign && !signdone && fmtchar != '+' && fmtchar != '-')
858 continue;
859 /* analyse this format-char */
860 switch (fmtchar)
861 {
862 case ',':
863 tmp[0] = ',';
864 k++;
865 break;
866 case '*':
867 if (blank)
868 tmp[0] = '*';
869 else
870 tmp[0] = value.val_string[k];
871 break;
872 case '&':
873 if (blank)
874 tmp[0] = '0';
875 else
876 tmp[0] = value.val_string[k];
877 break;
878 case '#':
879 if (blank)
880 tmp[0] = ' ';
881 else
882 tmp[0] = value.val_string[k];
883 break;
884 case '-':
885 if (sign && value.sign == '-' && !signdone)
886 {
887 tmp[0] = '-';
888 signdone = 1;
889 }
890 else if (blank)
891 tmp[0] = ' ';
892 else
893 tmp[0] = value.val_string[k];
894 break;
895 case '+':
896 if (sign && !signdone)
897 {
898 tmp[0] = value.sign;
899 signdone = 1;
900 }
901 else if (blank)
902 tmp[0] = ' ';
903 else
904 tmp[0] = value.val_string[k];
905 break;
906 case '(':
907 if (sign && brackets_ok && value.sign == '-')
908 tmp[0] = '(';
909 else if (blank)
910 tmp[0] = ' ';
911 else
912 tmp[0] = value.val_string[k];
913 break;
914 case ')':
915 if (brackets_ok && value.sign == '-')
916 tmp[0] = ')';
917 else
918 tmp[0] = ' ';
919 break;
920 case '$':
921 if (blank && !entitydone)
922 {
923 tmp[0] = '$';
924 entitydone = 1;
925 }
926 else if (blank)
927 tmp[0] = ' ';
928 else
929 tmp[0] = value.val_string[k];
930 break;
931 case '<':
932 tmp[0] = value.val_string[k];
933 break;
934 default:
935 tmp[0] = fmt[i];
936 }
937 strcat(temp, tmp);
938 lastfmt = fmt[i];
939 k--;
940 }
941 /* safety-net */
942 temp[fmt_len] = '\0';
943
944 /* reverse the temp-string and put it into the outbuf */
945 temp_len = strlen(temp);
946 outbuf[0] = '\0';
947 for (i = temp_len - 1; i >= 0; i--)
948 {
949 tmp[0] = temp[i];
950 strcat(outbuf, tmp);
951 }
952 outbuf[temp_len] = '\0';
953
954 /* cleaning up */
955 free(temp);
956 free(value.val_string);
957
958 return 0;
959}
#define malloc(a)
Definition: header.h:50
static int getRightMostDot(const char *str)
Definition: informix.c:750
static int initValue(long lng_val)
Definition: informix.c:702
static struct @162 value
char sign
Definition: informix.c:693
int j
Definition: isn.c:73
static void fmtchar(int value, int leftjust, int minlen, PrintfTarget *target)
Definition: snprintf.c:1157

References fmt, fmtchar(), free, getRightMostDot(), i, initValue(), j, malloc, sign, and value.

Referenced by fmtlong().

◆ rgetmsg()

int rgetmsg ( int  msgnum,
char *  s,
int  maxsize 
)

Definition at line 986 of file informix.c.

987{
988 (void) msgnum; /* keep the compiler quiet */
989 (void) s; /* keep the compiler quiet */
990 (void) maxsize; /* keep the compiler quiet */
991 return 0;
992}

◆ risnull()

int risnull ( int  t,
const char *  ptr 
)

Definition at line 1049 of file informix.c.

1050{
1051 return ECPGis_noind_null(t, ptr);
1052}
bool ECPGis_noind_null(enum ECPGttype type, const void *ptr)
Definition: misc.c:361

References ECPGis_noind_null().

Referenced by deccall3(), deccvasc(), deccvdbl(), deccvint(), deccvlong(), dectoasc(), main(), and test_null().

◆ rjulmdy()

int rjulmdy ( date  d,
short *  mdy 
)

Definition at line 541 of file informix.c.

542{
543 int mdy_int[3];
544
545 PGTYPESdate_julmdy(d, mdy_int);
546 mdy[0] = (short) mdy_int[0];
547 mdy[1] = (short) mdy_int[1];
548 mdy[2] = (short) mdy_int[2];
549 return 0;
550}
void PGTYPESdate_julmdy(date jd, int *mdy)
Definition: datetime.c:115

References PGTYPESdate_julmdy().

◆ rmdyjul()

int rmdyjul ( short *  mdy,
date d 
)

Definition at line 592 of file informix.c.

593{
594 int mdy_int[3];
595
596 mdy_int[0] = mdy[0];
597 mdy_int[1] = mdy[1];
598 mdy_int[2] = mdy[2];
599 PGTYPESdate_mdyjul(mdy_int, d);
600 return 0;
601}
void PGTYPESdate_mdyjul(int *mdy, date *jdate)
Definition: datetime.c:128

References PGTYPESdate_mdyjul().

Referenced by main().

◆ rsetnull()

int rsetnull ( int  t,
char *  ptr 
)

Definition at line 1042 of file informix.c.

1043{
1044 ECPGset_noind_null(t, ptr);
1045 return 0;
1046}
void ECPGset_noind_null(enum ECPGttype type, void *ptr)
Definition: misc.c:292

References ECPGset_noind_null().

Referenced by deccall3(), deccvasc(), deccvdbl(), deccvint(), deccvlong(), dectoasc(), and main().

◆ rstrdate()

int rstrdate ( const char *  str,
date d 
)

Definition at line 529 of file informix.c.

530{
531 return rdefmtdate(d, "mm/dd/yyyy", str);
532}
int rdefmtdate(date *d, const char *fmt, const char *str)
Definition: informix.c:553

References rdefmtdate(), and str.

Referenced by date_test_strdate().

◆ rtoday()

void rtoday ( date d)

Definition at line 535 of file informix.c.

536{
538}
void PGTYPESdate_today(date *d)
Definition: datetime.c:148

References PGTYPESdate_today().

◆ rtypalign()

int rtypalign ( int  offset,
int  type 
)

Definition at line 995 of file informix.c.

996{
997 (void) offset; /* keep the compiler quiet */
998 (void) type; /* keep the compiler quiet */
999 return 0;
1000}
const char * type

References type.

◆ rtypmsize()

int rtypmsize ( int  type,
int  len 
)

Definition at line 1003 of file informix.c.

1004{
1005 (void) type; /* keep the compiler quiet */
1006 (void) len; /* keep the compiler quiet */
1007 return 0;
1008}

References len, and type.

◆ rtypwidth()

int rtypwidth ( int  sqltype,
int  sqllen 
)

Definition at line 1011 of file informix.c.

1012{
1013 (void) sqltype; /* keep the compiler quiet */
1014 (void) sqllen; /* keep the compiler quiet */
1015 return 0;
1016}

◆ rupshift()

void rupshift ( char *  str)

Definition at line 962 of file informix.c.

963{
964 for (; *str != '\0'; str++)
965 if (islower((unsigned char) *str))
966 *str = toupper((unsigned char) *str);
967}

References str.

Referenced by main().