1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #ifndef PHP_ODBC_INCLUDES_H
24 #define PHP_ODBC_INCLUDES_H
25
26 #if HAVE_UODBC
27
28
29
30 #if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_SOLID_35)
31
32 #define ODBC_TYPE "Solid"
33 #if defined(HAVE_SOLID)
34 # include <cli0core.h>
35 # include <cli0ext1.h>
36 # include <cli0env.h>
37 #elif defined(HAVE_SOLID_30)
38 # include <cli0cli.h>
39 # include <cli0defs.h>
40 # include <cli0env.h>
41 #elif defined(HAVE_SOLID_35)
42 # if !defined(PHP_WIN32)
43 # include <sqlunix.h>
44 # endif
45 # include <sqltypes.h>
46 # include <sqlucode.h>
47 # include <sqlext.h>
48 # include <sql.h>
49 #endif
50 #undef HAVE_SQL_EXTENDED_FETCH
51 PHP_FUNCTION(solid_fetch_prev);
52 #define SQLSMALLINT SWORD
53 #define SQLUSMALLINT UWORD
54 #ifndef SQL_SUCCEEDED
55 #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
56 #endif
57
58 #elif defined(HAVE_EMPRESS)
59
60 #define ODBC_TYPE "Empress"
61 #include <sql.h>
62 #include <sqlext.h>
63 #undef HAVE_SQL_EXTENDED_FETCH
64
65 #elif defined(HAVE_ADABAS)
66
67 #define ODBC_TYPE "Adabas D"
68 #include <WINDOWS.H>
69 #include <sql.h>
70 #include <sqlext.h>
71 #define HAVE_SQL_EXTENDED_FETCH 1
72 #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
73 #define SQLINTEGER ULONG
74 #define SQLUSMALLINT USHORT
75
76 #elif defined(HAVE_SAPDB)
77
78 #define ODBC_TYPE "SAP DB"
79 #include <WINDOWS.H>
80 #include <sql.h>
81 #include <sqlext.h>
82 #define HAVE_SQL_EXTENDED_FETCH 1
83 #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
84
85 #elif defined(HAVE_IODBC)
86
87 #ifdef CHAR
88 #undef CHAR
89 #endif
90
91 #ifdef SQLCHAR
92 #undef SQLCHAR
93 #endif
94
95 #define ODBC_TYPE "iODBC"
96 #include <sql.h>
97 #include <sqlext.h>
98 #include <iodbcext.h>
99 #define HAVE_SQL_EXTENDED_FETCH 1
100
101 #elif defined(HAVE_UNIXODBC)
102
103 #ifdef CHAR
104 #undef CHAR
105 #endif
106
107 #ifdef SQLCHAR
108 #undef SQLCHAR
109 #endif
110
111 #define ODBC_TYPE "unixODBC"
112 #undef ODBCVER
113 #include <sql.h>
114 #include <sqlext.h>
115 #define HAVE_SQL_EXTENDED_FETCH 1
116
117 #elif defined(HAVE_ESOOB)
118
119 #define ODBC_TYPE "ESOOB"
120 #include <sql.h>
121 #include <sqlext.h>
122 #define HAVE_SQL_EXTENDED_FETCH 1
123
124 #elif defined(HAVE_ODBC_ROUTER)
125
126 #ifdef CHAR
127 #undef CHAR
128 #endif
129
130 #ifdef SQLCHAR
131 #undef SQLCHAR
132 #endif
133
134 #define ODBC_TYPE "ODBCRouter"
135 #include <odbcsdk.h>
136 #undef HAVE_SQL_EXTENDED_FETCH
137
138 #elif defined(HAVE_OPENLINK)
139
140 #define ODBC_TYPE "Openlink"
141 #include <iodbc.h>
142 #include <isql.h>
143 #include <isqlext.h>
144 #include <udbcext.h>
145 #define HAVE_SQL_EXTENDED_FETCH 1
146 #ifndef SQLSMALLINT
147 #define SQLSMALLINT SWORD
148 #endif
149 #ifndef SQLUSMALLINT
150 #define SQLUSMALLINT UWORD
151 #endif
152
153 #elif defined(HAVE_BIRDSTEP)
154
155 #define ODBC_TYPE "Birdstep"
156 #define UNIX
157
158
159
160
161
162
163 #include <sql.h>
164 #include <sqlext.h>
165 #define SQLINTEGER SDWORD
166 #define SQLSMALLINT SWORD
167 #define SQLUSMALLINT UWORD
168
169
170 #elif defined(HAVE_DBMAKER)
171
172 #define ODBC_TYPE "DBMaker"
173 #undef ODBCVER
174 #define ODBCVER 0x0300
175 #define HAVE_SQL_EXTENDED_FETCH 1
176 #include <odbc.h>
177
178
179 #elif defined(HAVE_CODBC)
180
181 #define ODBC_TYPE "Custom ODBC"
182 #define HAVE_SQL_EXTENDED_FETCH 1
183 #include <odbc.h>
184
185 #elif defined(HAVE_IBMDB2)
186
187 #define ODBC_TYPE "IBM DB2 CLI"
188 #define HAVE_SQL_EXTENDED_FETCH 1
189 #include <sqlcli1.h>
190 #ifdef DB268K
191
192 #include <LibraryManager.h>
193 #endif
194
195 #else
196
197 #define HAVE_SQL_EXTENDED_FETCH 1
198 #include <WINDOWS.H>
199 #include <sql.h>
200 #include <sqlext.h>
201 #endif
202
203
204
205
206 #if defined( HAVE_IBMDB2 ) || defined( HAVE_UNIXODBC ) || defined (HAVE_IODBC)
207 #define ODBC_SQL_ENV_T SQLHANDLE
208 #define ODBC_SQL_CONN_T SQLHANDLE
209 #define ODBC_SQL_STMT_T SQLHANDLE
210 #elif defined( HAVE_SOLID_35 ) || defined( HAVE_SAPDB ) || defined ( HAVE_EMPRESS )
211 #define ODBC_SQL_ENV_T SQLHENV
212 #define ODBC_SQL_CONN_T SQLHDBC
213 #define ODBC_SQL_STMT_T SQLHSTMT
214 #else
215 #define ODBC_SQL_ENV_T HENV
216 #define ODBC_SQL_CONN_T HDBC
217 #define ODBC_SQL_STMT_T HSTMT
218 #endif
219
220 typedef struct odbc_connection {
221 ODBC_SQL_ENV_T henv;
222 ODBC_SQL_CONN_T hdbc;
223 char laststate[6];
224 char lasterrormsg[SQL_MAX_MESSAGE_LENGTH];
225 zend_resource *res;
226 int persistent;
227 } odbc_connection;
228
229 typedef struct odbc_result_value {
230 char name[256];
231 char *value;
232 SQLLEN vallen;
233 SQLLEN coltype;
234 } odbc_result_value;
235
236 typedef struct odbc_param_info {
237 SQLSMALLINT sqltype;
238 SQLSMALLINT scale;
239 SQLSMALLINT nullable;
240 SQLULEN precision;
241 } odbc_param_info;
242
243 typedef struct odbc_result {
244 ODBC_SQL_STMT_T stmt;
245 odbc_result_value *values;
246 SQLSMALLINT numcols;
247 SQLSMALLINT numparams;
248 # if HAVE_SQL_EXTENDED_FETCH
249 int fetch_abs;
250 # endif
251 zend_long longreadlen;
252 int binmode;
253 int fetched;
254 odbc_param_info * param_info;
255 odbc_connection *conn_ptr;
256 } odbc_result;
257
258 ZEND_BEGIN_MODULE_GLOBALS(odbc)
259 char *defDB;
260 char *defUser;
261 char *defPW;
262 zend_long allow_persistent;
263 zend_long check_persistent;
264 zend_long max_persistent;
265 zend_long max_links;
266 zend_long num_persistent;
267 zend_long num_links;
268 int defConn;
269 zend_long defaultlrl;
270 zend_long defaultbinmode;
271 zend_long default_cursortype;
272 char laststate[6];
273 char lasterrormsg[SQL_MAX_MESSAGE_LENGTH];
274 HashTable *resource_list;
275 HashTable *resource_plist;
276 ZEND_END_MODULE_GLOBALS(odbc)
277
278 int odbc_add_result(HashTable *list, odbc_result *result);
279 odbc_result *odbc_get_result(HashTable *list, int count);
280 void odbc_del_result(HashTable *list, int count);
281 int odbc_add_conn(HashTable *list, HDBC conn);
282 odbc_connection *odbc_get_conn(HashTable *list, int count);
283 void odbc_del_conn(HashTable *list, int ind);
284 int odbc_bindcols(odbc_result *result);
285
286 #define ODBC_SQL_ERROR_PARAMS odbc_connection *conn_resource, ODBC_SQL_STMT_T stmt, char *func
287
288 void odbc_sql_error(ODBC_SQL_ERROR_PARAMS);
289
290 #if defined(ODBCVER) && (ODBCVER >= 0x0300)
291 #define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR || x == SQL_WLONGVARCHAR)
292
293 #define PHP_ODBC_SQLCOLATTRIBUTE SQLColAttribute
294 #define PHP_ODBC_SQLALLOCSTMT(hdbc, phstmt) SQLAllocHandle(SQL_HANDLE_STMT, hdbc, phstmt)
295
296 #define PHP_ODBC_SQL_DESC_NAME SQL_DESC_NAME
297 #else
298 #define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR)
299
300 #define PHP_ODBC_SQLCOLATTRIBUTE SQLColAttributes
301 #define PHP_ODBC_SQLALLOCSTMT SQLAllocStmt
302
303 #define PHP_ODBC_SQL_DESC_NAME SQL_COLUMN_NAME
304 #endif
305 #define IS_SQL_BINARY(x) (x == SQL_BINARY || x == SQL_VARBINARY || x == SQL_LONGVARBINARY)
306
307 PHP_ODBC_API ZEND_EXTERN_MODULE_GLOBALS(odbc)
308 #define ODBCG(v) ZEND_MODULE_GLOBALS_ACCESSOR(odbc, v)
309
310 #if defined(ZTS) && defined(COMPILE_DL_ODBC)
311 ZEND_TSRMLS_CACHE_EXTERN()
312 #endif
313
314 #endif
315 #endif
316
317
318
319
320
321
322