~vcs-imports/mammoth-replicator/trunk

« back to all changes in this revision

Viewing changes to src/interfaces/ecpg/ecpglib/extern.h

  • Committer: alvherre
  • Date: 2005-12-16 21:24:52 UTC
  • Revision ID: svn-v4:db760fc0-0f08-0410-9d63-cc6633f64896:trunk:1
Initial import of the REL8_0_3 sources from the Pgsql CVS repository.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef _ECPG_LIB_EXTERN_H
 
2
#define _ECPG_LIB_EXTERN_H
 
3
 
 
4
#include "postgres_fe.h"
 
5
#include "libpq-fe.h"
 
6
#include "sqlca.h"
 
7
 
 
8
enum COMPAT_MODE
 
9
{
 
10
        ECPG_COMPAT_PGSQL = 0, ECPG_COMPAT_INFORMIX, ECPG_COMPAT_INFORMIX_SE
 
11
};
 
12
 
 
13
#define INFORMIX_MODE(X) ((X) == ECPG_COMPAT_INFORMIX || (X) == ECPG_COMPAT_INFORMIX_SE)
 
14
 
 
15
enum ARRAY_TYPE
 
16
{
 
17
        ECPG_ARRAY_NOT_SET, ECPG_ARRAY_ARRAY, ECPG_ARRAY_VECTOR, ECPG_ARRAY_NONE
 
18
};
 
19
 
 
20
/* Here are some methods used by the lib. */
 
21
 
 
22
/* Returns a pointer to a string containing a simple type name. */
 
23
void            ECPGadd_mem(void *ptr, int lineno);
 
24
 
 
25
bool ECPGget_data(const PGresult *, int, int, int, enum ECPGttype type,
 
26
                         enum ECPGttype, char *, char *, long, long, long,
 
27
                         enum ARRAY_TYPE, enum COMPAT_MODE, bool);
 
28
struct connection *ECPGget_connection(const char *);
 
29
char       *ECPGalloc(long, int);
 
30
char       *ECPGrealloc(void *, long, int);
 
31
void            ECPGfree(void *);
 
32
bool            ECPGinit(const struct connection *, const char *, const int);
 
33
char       *ECPGstrdup(const char *, int);
 
34
const char *ECPGtype_name(enum ECPGttype);
 
35
unsigned int ECPGDynamicType(Oid);
 
36
void            ECPGfree_auto_mem(void);
 
37
void            ECPGclear_auto_mem(void);
 
38
 
 
39
struct descriptor *ecpggetdescp(int, char *);
 
40
 
 
41
/* A generic varchar type. */
 
42
struct ECPGgeneric_varchar
 
43
{
 
44
        int                     len;
 
45
        char            arr[1];
 
46
};
 
47
 
 
48
/*
 
49
 * type information cache
 
50
 */
 
51
 
 
52
struct ECPGtype_information_cache
 
53
{
 
54
        struct ECPGtype_information_cache *next;
 
55
        int                     oid;
 
56
        bool            isarray;
 
57
};
 
58
 
 
59
/* structure to store one statement */
 
60
struct statement
 
61
{
 
62
        int                     lineno;
 
63
        char       *command;
 
64
        struct connection *connection;
 
65
        enum COMPAT_MODE compat;
 
66
        bool            force_indicator;
 
67
        struct variable *inlist;
 
68
        struct variable *outlist;
 
69
};
 
70
 
 
71
/* structure to store connections */
 
72
struct connection
 
73
{
 
74
        char       *name;
 
75
        PGconn     *connection;
 
76
        bool            committed;
 
77
        int                     autocommit;
 
78
        struct ECPGtype_information_cache *cache_head;
 
79
        struct connection *next;
 
80
};
 
81
 
 
82
/* structure to store descriptors */
 
83
struct descriptor
 
84
{
 
85
        char       *name;
 
86
        PGresult   *result;
 
87
        struct descriptor *next;
 
88
        int                     count;
 
89
        struct descriptor_item *items;
 
90
};
 
91
 
 
92
extern struct descriptor *all_descriptors;
 
93
 
 
94
struct descriptor_item
 
95
{
 
96
        int                     num;
 
97
        char       *data;
 
98
        int                     indicator;
 
99
        int                     length;
 
100
        int                     precision;
 
101
        int                     scale;
 
102
        int                     type;
 
103
        struct descriptor_item *next;
 
104
};
 
105
 
 
106
struct variable
 
107
{
 
108
        enum ECPGttype type;
 
109
        void       *value;
 
110
        void       *pointer;
 
111
        long            varcharsize;
 
112
        long            arrsize;
 
113
        long            offset;
 
114
        enum ECPGttype ind_type;
 
115
        void       *ind_value;
 
116
        void       *ind_pointer;
 
117
        long            ind_varcharsize;
 
118
        long            ind_arrsize;
 
119
        long            ind_offset;
 
120
        struct variable *next;
 
121
};
 
122
 
 
123
PGresult  **ECPGdescriptor_lvalue(int line, const char *descriptor);
 
124
 
 
125
bool ECPGstore_result(const PGresult *results, int act_field,
 
126
                                 const struct statement * stmt, struct variable * var);
 
127
bool            ECPGstore_input(const int, const bool, const struct variable *, const char **, bool *);
 
128
#if defined(__GNUC__) && (defined (__powerpc__) || defined(__AMD64__))
 
129
  // work around a gcc/ABI bug with va_lists on ppc+amd64
 
130
void            ECPGget_variable(va_list, enum ECPGttype, struct variable *, bool);
 
131
#else
 
132
void            ECPGget_variable(va_list *, enum ECPGttype, struct variable *, bool);
 
133
#endif
 
134
 
 
135
/* SQLSTATE values generated or processed by ecpglib (intentionally
 
136
 * not exported -- users should refer to the codes directly) */
 
137
 
 
138
#define ECPG_SQLSTATE_NO_DATA                           "02000"
 
139
#define ECPG_SQLSTATE_USING_CLAUSE_DOES_NOT_MATCH_PARAMETERS    "07001"
 
140
#define ECPG_SQLSTATE_USING_CLAUSE_DOES_NOT_MATCH_TARGETS               "07002"
 
141
#define ECPG_SQLSTATE_RESTRICTED_DATA_TYPE_ATTRIBUTE_VIOLATION  "07006"
 
142
#define ECPG_SQLSTATE_INVALID_DESCRIPTOR_INDEX          "07009"
 
143
#define ECPG_SQLSTATE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION       "08001"
 
144
#define ECPG_SQLSTATE_CONNECTION_DOES_NOT_EXIST         "08003"
 
145
#define ECPG_SQLSTATE_TRANSACTION_RESOLUTION_UNKNOWN    "08007"
 
146
#define ECPG_SQLSTATE_CARDINALITY_VIOLATION "21000"
 
147
#define ECPG_SQLSTATE_NULL_VALUE_NO_INDICATOR_PARAMETER "22002"
 
148
#define ECPG_SQLSTATE_ACTIVE_SQL_TRANSACTION            "25001"
 
149
#define ECPG_SQLSTATE_NO_ACTIVE_SQL_TRANSACTION         "25P01"
 
150
#define ECPG_SQLSTATE_INVALID_SQL_STATEMENT_NAME        "26000"
 
151
#define ECPG_SQLSTATE_INVALID_SQL_DESCRIPTOR_NAME       "33000"
 
152
#define ECPG_SQLSTATE_INVALID_CURSOR_NAME       "34000"
 
153
#define ECPG_SQLSTATE_SYNTAX_ERROR                      "42601"
 
154
#define ECPG_SQLSTATE_DATATYPE_MISMATCH         "42804"
 
155
#define ECPG_SQLSTATE_DUPLICATE_CURSOR          "42P03"
 
156
 
 
157
/* implementation-defined internal errors of ecpg */
 
158
#define ECPG_SQLSTATE_ECPG_INTERNAL_ERROR       "YE000"
 
159
#define ECPG_SQLSTATE_ECPG_OUT_OF_MEMORY        "YE001"
 
160
 
 
161
#endif   /* _ECPG_LIB_EXTERN_H */