1 /* 2 +----------------------------------------------------------------------+ 3 | PHP Version 5 | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) 1997-2013 The PHP Group | 6 +----------------------------------------------------------------------+ 7 | This source file is subject to version 3.01 of the PHP license, | 8 | that is bundled with this package in the file LICENSE, and is | 9 | available through the world-wide-web at the following url: | 10 | http://www.php.net/license/3_01.txt | 11 | If you did not receive a copy of the PHP license and are unable to | 12 | obtain it through the world-wide-web, please send a note to | 13 | license@php.net so we can mail you a copy immediately. | 14 +----------------------------------------------------------------------+ 15 | Authors: Stig S�ther Bakken <ssb@php.net> | 16 | Andreas Karajannis <Andreas.Karajannis@gmd.de> | 17 | Kevin N. Shallow <kshallow@tampabay.rr.com> (Birdstep) | 18 +----------------------------------------------------------------------+ 19 */ 20 21 /* $Id$ */ 22 23 #ifndef PHP_ODBC_INCLUDES_H 24 #define PHP_ODBC_INCLUDES_H 25 26 #if HAVE_UODBC 27 28 #define ODBCVER 0x0250 29 /*#ifndef MSVC5 30 #define FAR 31 #endif 32 */ 33 34 /* checking in the same order as in configure.in */ 35 36 #if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_SOLID_35) /* Solid Server */ 37 38 #define ODBC_TYPE "Solid" 39 #if defined(HAVE_SOLID) 40 # include <cli0core.h> 41 # include <cli0ext1.h> 42 # include <cli0env.h> 43 #elif defined(HAVE_SOLID_30) 44 # include <cli0cli.h> 45 # include <cli0defs.h> 46 # include <cli0env.h> 47 #elif defined(HAVE_SOLID_35) 48 # if !defined(PHP_WIN32) 49 # include <sqlunix.h> 50 # endif /* end: #if !defined(PHP_WIN32) */ 51 # include <sqltypes.h> 52 # include <sqlucode.h> 53 # include <sqlext.h> 54 # include <sql.h> 55 #endif /* end: #if defined(HAVE_SOLID) */ 56 #undef HAVE_SQL_EXTENDED_FETCH 57 PHP_FUNCTION(solid_fetch_prev); 58 #define SQLSMALLINT SWORD 59 #define SQLUSMALLINT UWORD 60 #ifndef SQL_SUCCEEDED 61 #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0) 62 #endif 63 64 #elif defined(HAVE_EMPRESS) /* Empress */ 65 66 #define ODBC_TYPE "Empress" 67 #include <sql.h> 68 #include <sqlext.h> 69 #undef HAVE_SQL_EXTENDED_FETCH 70 71 #elif defined(HAVE_ADABAS) /* Adabas D */ 72 73 #define ODBC_TYPE "Adabas D" 74 #include <WINDOWS.H> 75 #include <sql.h> 76 #include <sqlext.h> 77 #define HAVE_SQL_EXTENDED_FETCH 1 78 #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0) 79 #define SQLINTEGER ULONG 80 #define SQLUSMALLINT USHORT 81 82 #elif defined(HAVE_SAPDB) /* SAP DB */ 83 84 #define ODBC_TYPE "SAP DB" 85 #include <WINDOWS.H> 86 #include <sql.h> 87 #include <sqlext.h> 88 #define HAVE_SQL_EXTENDED_FETCH 1 89 #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0) 90 91 #elif defined(HAVE_IODBC) /* iODBC library */ 92 93 #ifdef CHAR 94 #undef CHAR 95 #endif 96 97 #ifdef SQLCHAR 98 #undef SQLCHAR 99 #endif 100 101 #define ODBC_TYPE "iODBC" 102 #include <sql.h> 103 #include <sqlext.h> 104 #include <iodbcext.h> 105 #define HAVE_SQL_EXTENDED_FETCH 1 106 107 #elif defined(HAVE_UNIXODBC) /* unixODBC library */ 108 109 #ifdef CHAR 110 #undef CHAR 111 #endif 112 113 #ifdef SQLCHAR 114 #undef SQLCHAR 115 #endif 116 117 #define ODBC_TYPE "unixODBC" 118 #include <sql.h> 119 #include <sqlext.h> 120 #define HAVE_SQL_EXTENDED_FETCH 1 121 122 #elif defined(HAVE_ESOOB) /* Easysoft ODBC-ODBC Bridge library */ 123 124 #define ODBC_TYPE "ESOOB" 125 #include <sql.h> 126 #include <sqlext.h> 127 #define HAVE_SQL_EXTENDED_FETCH 1 128 129 #elif defined(HAVE_ODBC_ROUTER) /* ODBCRouter.com */ 130 131 #ifdef CHAR 132 #undef CHAR 133 #endif 134 135 #ifdef SQLCHAR 136 #undef SQLCHAR 137 #endif 138 139 #define ODBC_TYPE "ODBCRouter" 140 #include <odbcsdk.h> 141 #undef HAVE_SQL_EXTENDED_FETCH 142 143 #elif defined(HAVE_OPENLINK) /* OpenLink ODBC drivers */ 144 145 #define ODBC_TYPE "Openlink" 146 #include <iodbc.h> 147 #include <isql.h> 148 #include <isqlext.h> 149 #include <udbcext.h> 150 #define HAVE_SQL_EXTENDED_FETCH 1 151 #ifndef SQLSMALLINT 152 #define SQLSMALLINT SWORD 153 #endif 154 #ifndef SQLUSMALLINT 155 #define SQLUSMALLINT UWORD 156 #endif 157 158 #elif defined(HAVE_BIRDSTEP) /* Raima Birdstep */ 159 160 #define ODBC_TYPE "Birdstep" 161 #define UNIX 162 /* 163 * Extended Fetch in the Birdstep ODBC API is incapable of returning long varchar (memo) fields. 164 * So the following line has been commented-out to accomadate. - KNS 165 * 166 * #define HAVE_SQL_EXTENDED_FETCH 1 167 */ 168 #include <sql.h> 169 #include <sqlext.h> 170 #define SQLINTEGER SDWORD 171 #define SQLSMALLINT SWORD 172 #define SQLUSMALLINT UWORD 173 174 175 #elif defined(HAVE_DBMAKER) /* DBMaker */ 176 177 #define ODBC_TYPE "DBMaker" 178 #undef ODBCVER 179 #define ODBCVER 0x0300 180 #define HAVE_SQL_EXTENDED_FETCH 1 181 #include <odbc.h> 182 183 184 #elif defined(HAVE_CODBC) /* Custom ODBC */ 185 186 #define ODBC_TYPE "Custom ODBC" 187 #define HAVE_SQL_EXTENDED_FETCH 1 188 #include <odbc.h> 189 190 #elif defined(HAVE_IBMDB2) /* DB2 CLI */ 191 192 #define ODBC_TYPE "IBM DB2 CLI" 193 #define HAVE_SQL_EXTENDED_FETCH 1 194 #include <sqlcli1.h> 195 #ifdef DB268K 196 /* Need to include ASLM for 68K applications */ 197 #include <LibraryManager.h> 198 #endif 199 200 #else /* MS ODBC */ 201 202 #define HAVE_SQL_EXTENDED_FETCH 1 203 #include <WINDOWS.H> 204 #include <sql.h> 205 #include <sqlext.h> 206 #endif 207 208 209 /* Common defines */ 210 211 #if defined( HAVE_IBMDB2 ) || defined( HAVE_UNIXODBC ) || defined (HAVE_IODBC) 212 #define ODBC_SQL_ENV_T SQLHANDLE 213 #define ODBC_SQL_CONN_T SQLHANDLE 214 #define ODBC_SQL_STMT_T SQLHANDLE 215 #elif defined( HAVE_SOLID_35 ) || defined( HAVE_SAPDB ) || defined ( HAVE_EMPRESS ) 216 #define ODBC_SQL_ENV_T SQLHENV 217 #define ODBC_SQL_CONN_T SQLHDBC 218 #define ODBC_SQL_STMT_T SQLHSTMT 219 #else 220 #define ODBC_SQL_ENV_T HENV 221 #define ODBC_SQL_CONN_T HDBC 222 #define ODBC_SQL_STMT_T HSTMT 223 #endif 224 225 typedef struct odbc_connection { 226 ODBC_SQL_ENV_T henv; 227 ODBC_SQL_CONN_T hdbc; 228 char laststate[6]; 229 char lasterrormsg[SQL_MAX_MESSAGE_LENGTH]; 230 int id; 231 int persistent; 232 } odbc_connection; 233 234 typedef struct odbc_result_value { 235 char name[32]; 236 char *value; 237 SQLLEN vallen; 238 SQLLEN coltype; 239 } odbc_result_value; 240 241 typedef struct odbc_result { 242 ODBC_SQL_STMT_T stmt; 243 odbc_result_value *values; 244 SQLSMALLINT numcols; 245 SQLSMALLINT numparams; 246 # if HAVE_SQL_EXTENDED_FETCH 247 int fetch_abs; 248 # endif 249 long longreadlen; 250 int binmode; 251 int fetched; 252 odbc_connection *conn_ptr; 253 } odbc_result; 254 255 ZEND_BEGIN_MODULE_GLOBALS(odbc) 256 char *defDB; 257 char *defUser; 258 char *defPW; 259 long allow_persistent; 260 long check_persistent; 261 long max_persistent; 262 long max_links; 263 long num_persistent; 264 long num_links; 265 int defConn; 266 long defaultlrl; 267 long defaultbinmode; 268 long default_cursortype; 269 char laststate[6]; 270 char lasterrormsg[SQL_MAX_MESSAGE_LENGTH]; 271 HashTable *resource_list; 272 HashTable *resource_plist; 273 ZEND_END_MODULE_GLOBALS(odbc) 274 275 int odbc_add_result(HashTable *list, odbc_result *result); 276 odbc_result *odbc_get_result(HashTable *list, int count); 277 void odbc_del_result(HashTable *list, int count); 278 int odbc_add_conn(HashTable *list, HDBC conn); 279 odbc_connection *odbc_get_conn(HashTable *list, int count); 280 void odbc_del_conn(HashTable *list, int ind); 281 int odbc_bindcols(odbc_result *result TSRMLS_DC); 282 283 #define ODBC_SQL_ERROR_PARAMS odbc_connection *conn_resource, ODBC_SQL_STMT_T stmt, char *func 284 285 void odbc_sql_error(ODBC_SQL_ERROR_PARAMS); 286 287 #define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR) 288 #define IS_SQL_BINARY(x) (x == SQL_BINARY || x == SQL_VARBINARY || x == SQL_LONGVARBINARY) 289 290 #ifdef ZTS 291 # define ODBCG(v) TSRMG(odbc_globals_id, zend_odbc_globals *, v) 292 #else 293 # define ODBCG(v) (odbc_globals.v) 294 extern ZEND_API zend_odbc_globals odbc_globals; 295 #endif 296 297 #endif /* HAVE_UODBC */ 298 #endif /* PHP_ODBC_INCLUDES_H */ 299 300 /* 301 * Local variables: 302 * tab-width: 4 303 * c-basic-offset: 4 304 * End: 305 */ 306