summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/include')
-rw-r--r--src/interfaces/ecpg/include/datetime.h3
-rw-r--r--src/interfaces/ecpg/include/decimal.h14
-rw-r--r--src/interfaces/ecpg/include/ecpgerrno.h16
-rw-r--r--src/interfaces/ecpg/include/ecpgtype.h3
-rw-r--r--src/interfaces/ecpg/include/pgtypes_interval.h20
-rw-r--r--src/interfaces/ecpg/include/pgtypes_numeric.h43
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 */