xref: /PHP-5.5/ext/pdo_odbc/php_pdo_odbc_int.h (revision 73c1be26)
1 /*
2   +----------------------------------------------------------------------+
3   | PHP Version 5                                                        |
4   +----------------------------------------------------------------------+
5   | Copyright (c) 1997-2015 The PHP Group                                |
6   +----------------------------------------------------------------------+
7   | This source file is subject to version 3.0 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_0.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   | Author: Wez Furlong <wez@php.net>                                    |
16   +----------------------------------------------------------------------+
17 */
18 
19 /* $Id$ */
20 
21 #ifdef PHP_WIN32
22 # define PDO_ODBC_TYPE	"Win32"
23 #endif
24 
25 #ifndef PDO_ODBC_TYPE
26 # warning Please fix configure to give your ODBC libraries a name
27 # define PDO_ODBC_TYPE	"Unknown"
28 #endif
29 
30 /* {{{ Roll a dice, pick a header at random... */
31 #if HAVE_SQLCLI1_H
32 # include <sqlcli1.h>
33 # if defined(DB268K) && HAVE_LIBRARYMANAGER_H
34 #  include <LibraryManager.h>
35 # endif
36 #endif
37 
38 #if HAVE_ODBC_H
39 # include <odbc.h>
40 #endif
41 
42 #if HAVE_IODBC_H
43 # include <iodbc.h>
44 #endif
45 
46 #if HAVE_SQLUNIX_H && !defined(PHP_WIN32)
47 # include <sqlunix.h>
48 #endif
49 
50 #if HAVE_SQLTYPES_H
51 # include <sqltypes.h>
52 #endif
53 
54 #if HAVE_SQLUCODE_H
55 # include <sqlucode.h>
56 #endif
57 
58 #if HAVE_SQL_H
59 # include <sql.h>
60 #endif
61 
62 #if HAVE_ISQL_H
63 # include <isql.h>
64 #endif
65 
66 #if HAVE_SQLEXT_H
67 # include <sqlext.h>
68 #endif
69 
70 #if HAVE_ISQLEXT_H
71 # include <isqlext.h>
72 #endif
73 
74 #if HAVE_UDBCEXT_H
75 # include <udbcext.h>
76 #endif
77 
78 #if HAVE_CLI0CORE_H
79 # include <cli0core.h>
80 #endif
81 
82 #if HAVE_CLI0EXT1_H
83 # include <cli0ext.h>
84 #endif
85 
86 #if HAVE_CLI0CLI_H
87 # include <cli0cli.h>
88 #endif
89 
90 #if HAVE_CLI0DEFS_H
91 # include <cli0defs.h>
92 #endif
93 
94 #if HAVE_CLI0ENV_H
95 # include <cli0env.h>
96 #endif
97 
98 #if HAVE_ODBCSDK_H
99 # include <odbcsdk.h>
100 #endif
101 
102 /* }}} */
103 
104 /* {{{ Figure out the type for handles */
105 #if !defined(HENV) && !defined(SQLHENV) && defined(SQLHANDLE)
106 # define PDO_ODBC_HENV		SQLHANDLE
107 # define PDO_ODBC_HDBC		SQLHANDLE
108 # define PDO_ODBC_HSTMT		SQLHANDLE
109 #elif !defined(HENV) && (defined(SQLHENV) || defined(DB2CLI_VER))
110 # define PDO_ODBC_HENV		SQLHENV
111 # define PDO_ODBC_HDBC		SQLHDBC
112 # define PDO_ODBC_HSTMT		SQLHSTMT
113 #else
114 # define PDO_ODBC_HENV		HENV
115 # define PDO_ODBC_HDBC		HDBC
116 # define PDO_ODBC_HSTMT		HSTMT
117 #endif
118 /* }}} */
119 
120 typedef struct {
121 	char last_state[6];
122 	char last_err_msg[SQL_MAX_MESSAGE_LENGTH];
123 	SDWORD last_error;
124 	const char *file, *what;
125 	int line;
126 } pdo_odbc_errinfo;
127 
128 typedef struct {
129 	PDO_ODBC_HENV	env;
130 	PDO_ODBC_HDBC	dbc;
131 	pdo_odbc_errinfo einfo;
132 	unsigned assume_utf8:1;
133 	unsigned _spare:31;
134 } pdo_odbc_db_handle;
135 
136 typedef struct {
137 	char *data;
138 	unsigned long datalen;
139 	SQLLEN fetched_len;
140 	SWORD	coltype;
141 	char colname[128];
142 	unsigned is_long;
143 	unsigned is_unicode:1;
144 	unsigned _spare:31;
145 } pdo_odbc_column;
146 
147 typedef struct {
148 	PDO_ODBC_HSTMT	stmt;
149 	pdo_odbc_column *cols;
150 	pdo_odbc_db_handle *H;
151 	pdo_odbc_errinfo einfo;
152 	char *convbuf;
153 	unsigned long convbufsize;
154 	unsigned going_long:1;
155 	unsigned assume_utf8:1;
156 	unsigned _spare:30;
157 } pdo_odbc_stmt;
158 
159 typedef struct {
160 	SQLLEN len;
161 	SQLSMALLINT paramtype;
162 	char *outbuf;
163 	unsigned is_unicode:1;
164 	unsigned _spare:31;
165 } pdo_odbc_param;
166 
167 extern pdo_driver_t pdo_odbc_driver;
168 extern struct pdo_stmt_methods odbc_stmt_methods;
169 
170 void pdo_odbc_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, PDO_ODBC_HSTMT statement, char *what, const char *file, int line TSRMLS_DC);
171 #define pdo_odbc_drv_error(what)	pdo_odbc_error(dbh, NULL, SQL_NULL_HSTMT, what, __FILE__, __LINE__ TSRMLS_CC)
172 #define pdo_odbc_stmt_error(what)	pdo_odbc_error(stmt->dbh, stmt, SQL_NULL_HSTMT, what, __FILE__, __LINE__ TSRMLS_CC)
173 #define pdo_odbc_doer_error(what)	pdo_odbc_error(dbh, NULL, stmt, what, __FILE__, __LINE__ TSRMLS_CC)
174 
175 void pdo_odbc_init_error_table(void);
176 void pdo_odbc_fini_error_table(void);
177 
178 #ifdef SQL_ATTR_CONNECTION_POOLING
179 extern SQLUINTEGER pdo_odbc_pool_on;
180 extern SQLUINTEGER pdo_odbc_pool_mode;
181 #endif
182 
183 enum {
184 	PDO_ODBC_ATTR_USE_CURSOR_LIBRARY = PDO_ATTR_DRIVER_SPECIFIC,
185 	PDO_ODBC_ATTR_ASSUME_UTF8 /* assume that input strings are UTF-8 when feeding data to unicode columns */
186 };
187 
188 /*
189  * Local variables:
190  * tab-width: 4
191  * c-basic-offset: 4
192  * End:
193  * vim600: noet sw=4 ts=4 fdm=marker
194  * vim<600: noet sw=4 ts=4
195  */
196