diff options
Diffstat (limited to 'src/interfaces/ecpg/include')
-rw-r--r-- | src/interfaces/ecpg/include/datetime.h | 3 | ||||
-rw-r--r-- | src/interfaces/ecpg/include/decimal.h | 14 | ||||
-rw-r--r-- | src/interfaces/ecpg/include/ecpgerrno.h | 16 | ||||
-rw-r--r-- | src/interfaces/ecpg/include/ecpgtype.h | 3 | ||||
-rw-r--r-- | src/interfaces/ecpg/include/pgtypes_interval.h | 20 | ||||
-rw-r--r-- | src/interfaces/ecpg/include/pgtypes_numeric.h | 43 |
6 files changed, 66 insertions, 33 deletions
diff --git a/src/interfaces/ecpg/include/datetime.h b/src/interfaces/ecpg/include/datetime.h index dc029e038e4..94ef5d28ad4 100644 --- a/src/interfaces/ecpg/include/datetime.h +++ b/src/interfaces/ecpg/include/datetime.h @@ -1,11 +1,12 @@ #include <pgtypes_timestamp.h> +#include <pgtypes_interval.h> #ifndef dtime_t #define dtime_t Timestamp #endif /* dtime_t */ #ifndef intrvl_t -#define intrvl_t Timestamp +#define intrvl_t Interval #endif /* intrvl_t */ extern void dtcurrent (dtime_t *); diff --git a/src/interfaces/ecpg/include/decimal.h b/src/interfaces/ecpg/include/decimal.h index ce0eedc3d95..10c8f3b179a 100644 --- a/src/interfaces/ecpg/include/decimal.h +++ b/src/interfaces/ecpg/include/decimal.h @@ -1,19 +1,19 @@ #include <pgtypes_numeric.h> #ifndef dec_t -#define dec_t NumericVar +#define dec_t Numeric #endif /* dec_t */ -int decadd(dec_t *, NumericVar *, NumericVar *); -int deccmp(dec_t *, NumericVar *); -void deccopy(dec_t *, NumericVar *); +int decadd(dec_t *, Numeric *, Numeric *); +int deccmp(dec_t *, Numeric *); +void deccopy(dec_t *, Numeric *); int deccvasc(char *, int, dec_t *); int deccvdbl(double, dec_t *); int deccvint(int, dec_t *); int deccvlong(long, dec_t *); -int decdiv(dec_t *, NumericVar *, NumericVar *); -int decmul(dec_t *, NumericVar *, NumericVar *); -int decsub(dec_t *, NumericVar *, NumericVar *); +int decdiv(dec_t *, Numeric *, Numeric *); +int decmul(dec_t *, Numeric *, Numeric *); +int decsub(dec_t *, Numeric *, Numeric *); int dectoasc(dec_t *, char *, int, int); int dectodbl(dec_t *, double *); int dectoint(dec_t *, int *); diff --git a/src/interfaces/ecpg/include/ecpgerrno.h b/src/interfaces/ecpg/include/ecpgerrno.h index 2106e3dd54d..05a1a592eb4 100644 --- a/src/interfaces/ecpg/include/ecpgerrno.h +++ b/src/interfaces/ecpg/include/ecpgerrno.h @@ -20,12 +20,16 @@ #define ECPG_INT_FORMAT -204 #define ECPG_UINT_FORMAT -205 #define ECPG_FLOAT_FORMAT -206 -#define ECPG_CONVERT_BOOL -207 -#define ECPG_EMPTY -208 -#define ECPG_MISSING_INDICATOR -209 -#define ECPG_NO_ARRAY -210 -#define ECPG_DATA_NOT_ARRAY -211 -#define ECPG_ARRAY_INSERT -212 +#define ECPG_NUMERIC_FORMAT -207 +#define ECPG_INTERVAL_FORMAT -208 +#define ECPG_DATE_FORMAT -209 +#define ECPG_TIMESTAMP_FORMAT -210 +#define ECPG_CONVERT_BOOL -211 +#define ECPG_EMPTY -212 +#define ECPG_MISSING_INDICATOR -213 +#define ECPG_NO_ARRAY -214 +#define ECPG_DATA_NOT_ARRAY -215 +#define ECPG_ARRAY_INSERT -216 #define ECPG_NO_CONN -220 #define ECPG_NOT_CONN -221 diff --git a/src/interfaces/ecpg/include/ecpgtype.h b/src/interfaces/ecpg/include/ecpgtype.h index 31738d421f1..32dd84aafc0 100644 --- a/src/interfaces/ecpg/include/ecpgtype.h +++ b/src/interfaces/ecpg/include/ecpgtype.h @@ -54,7 +54,8 @@ enum ECPGttype ECPGt_descriptor, /* sql descriptor, no C variable */ ECPGt_numeric, ECPGt_date, - ECPGt_timestamp + ECPGt_timestamp, + ECPGt_interval }; /* descriptor items */ diff --git a/src/interfaces/ecpg/include/pgtypes_interval.h b/src/interfaces/ecpg/include/pgtypes_interval.h new file mode 100644 index 00000000000..b3c71b05970 --- /dev/null +++ b/src/interfaces/ecpg/include/pgtypes_interval.h @@ -0,0 +1,20 @@ +#ifndef PGTYPES_INTERVAL +#define PGTYPES_INTERVAL + +#include <pgtypes_timestamp.h> + +typedef struct +{ +#ifdef HAVE_INT64_TIMESTAMP + int64 time; /* all time units other than months and years */ +#else + double time; /* all time units other than months and years */ +#endif + long month; /* months and years, after time for alignment */ +} Interval; + +extern Interval *PGTYPESinterval_atoi(char *, char **); +extern char *PGTYPESinterval_itoa(Interval *); +extern int PGTYPESinterval_copy(Interval *, Interval *); + +#endif /* PGTYPES_INTERVAL */ diff --git a/src/interfaces/ecpg/include/pgtypes_numeric.h b/src/interfaces/ecpg/include/pgtypes_numeric.h index 7ac4c1cb065..3fe849a3ad9 100644 --- a/src/interfaces/ecpg/include/pgtypes_numeric.h +++ b/src/interfaces/ecpg/include/pgtypes_numeric.h @@ -1,8 +1,15 @@ #ifndef PGTYPES_NUMERIC #define PGTYPES_NUMERIC +#define NUMERIC_POS 0x0000 +#define NUMERIC_NEG 0x4000 +#define NUMERIC_MAX_PRECISION 1000 +#define NUMERIC_MAX_DISPLAY_SCALE NUMERIC_MAX_PRECISION +#define NUMERIC_MIN_DISPLAY_SCALE 0 +#define NUMERIC_MIN_SIG_DIGITS 16 + typedef unsigned char NumericDigit; -typedef struct NumericVar +typedef struct { int ndigits; /* number of digits in digits[] - can be 0! */ int weight; /* weight of first digit */ @@ -11,23 +18,23 @@ typedef struct NumericVar int sign; /* NUMERIC_POS, NUMERIC_NEG, or NUMERIC_NAN */ NumericDigit *buf; /* start of alloc'd space for digits[] */ NumericDigit *digits; /* decimal digits */ -} NumericVar; +} Numeric; -NumericVar *PGTYPESnew(void); -void PGTYPESnumeric_free(NumericVar *); -NumericVar *PGTYPESnumeric_aton(char *, char **); -char *PGTYPESnumeric_ntoa(NumericVar *); -int PGTYPESnumeric_add(NumericVar *, NumericVar *, NumericVar *); -int PGTYPESnumeric_sub(NumericVar *, NumericVar *, NumericVar *); -int PGTYPESnumeric_mul(NumericVar *, NumericVar *, NumericVar *); -int PGTYPESnumeric_div(NumericVar *, NumericVar *, NumericVar *); -int PGTYPESnumeric_cmp(NumericVar *, NumericVar *); -int PGTYPESnumeric_iton(signed int, NumericVar *); -int PGTYPESnumeric_lton(signed long int, NumericVar *); -int PGTYPESnumeric_copy(NumericVar *, NumericVar *); -int PGTYPESnumeric_dton(double, NumericVar *); -int PGTYPESnumeric_ntod(NumericVar *, double *); -int PGTYPESnumeric_ntoi(NumericVar *, int *); -int PGTYPESnumeric_ntol(NumericVar *, long *); +Numeric *PGTYPESnew(void); +void PGTYPESnumeric_free(Numeric *); +Numeric *PGTYPESnumeric_aton(char *, char **); +char *PGTYPESnumeric_ntoa(Numeric *); +int PGTYPESnumeric_add(Numeric *, Numeric *, Numeric *); +int PGTYPESnumeric_sub(Numeric *, Numeric *, Numeric *); +int PGTYPESnumeric_mul(Numeric *, Numeric *, Numeric *); +int PGTYPESnumeric_div(Numeric *, Numeric *, Numeric *); +int PGTYPESnumeric_cmp(Numeric *, Numeric *); +int PGTYPESnumeric_iton(signed int, Numeric *); +int PGTYPESnumeric_lton(signed long int, Numeric *); +int PGTYPESnumeric_copy(Numeric *, Numeric *); +int PGTYPESnumeric_dton(double, Numeric *); +int PGTYPESnumeric_ntod(Numeric *, double *); +int PGTYPESnumeric_ntoi(Numeric *, int *); +int PGTYPESnumeric_ntol(Numeric *, long *); #endif /* PGTYPES_NUMERIC */ |