jpayne@69
|
1 /*
|
jpayne@69
|
2 * fakesql.h --
|
jpayne@69
|
3 *
|
jpayne@69
|
4 * Include file that defines the subset of SQL/CLI that TDBC
|
jpayne@69
|
5 * uses, so that tdbc::odbc can build without an explicit ODBC
|
jpayne@69
|
6 * dependency. It comprises only data type, constant and
|
jpayne@69
|
7 * function declarations.
|
jpayne@69
|
8 *
|
jpayne@69
|
9 * The programmers of this file believe that it contains material not
|
jpayne@69
|
10 * subject to copyright under the doctrines of scenes a faire and
|
jpayne@69
|
11 * of merger of idea and expression. Accordingly, this file is in the
|
jpayne@69
|
12 * public domain.
|
jpayne@69
|
13 *
|
jpayne@69
|
14 *-----------------------------------------------------------------------------
|
jpayne@69
|
15 */
|
jpayne@69
|
16
|
jpayne@69
|
17 #ifndef FAKESQL_H_INCLUDED
|
jpayne@69
|
18 #define FAKESQL_H_INCLUDED
|
jpayne@69
|
19
|
jpayne@69
|
20 #include <stddef.h>
|
jpayne@69
|
21
|
jpayne@69
|
22 #ifndef MODULE_SCOPE
|
jpayne@69
|
23 #define MODULE_SCOPE extern
|
jpayne@69
|
24 #endif
|
jpayne@69
|
25
|
jpayne@69
|
26 /* Limits */
|
jpayne@69
|
27
|
jpayne@69
|
28 #define SQL_MAX_DSN_LENGTH 32
|
jpayne@69
|
29 #define SQL_MAX_MESSAGE_LENGTH 512
|
jpayne@69
|
30
|
jpayne@69
|
31 /* Fundamental data types */
|
jpayne@69
|
32
|
jpayne@69
|
33 #ifndef _WIN32
|
jpayne@69
|
34 typedef int BOOL;
|
jpayne@69
|
35 typedef unsigned int DWORD;
|
jpayne@69
|
36 typedef void* HANDLE;
|
jpayne@69
|
37 typedef HANDLE HWND;
|
jpayne@69
|
38 typedef unsigned short WCHAR;
|
jpayne@69
|
39 typedef char* LPSTR;
|
jpayne@69
|
40 typedef WCHAR* LPWSTR;
|
jpayne@69
|
41 typedef const char* LPCSTR;
|
jpayne@69
|
42 typedef const WCHAR* LPCWSTR;
|
jpayne@69
|
43 typedef unsigned short WORD;
|
jpayne@69
|
44 #endif
|
jpayne@69
|
45 typedef void* PVOID;
|
jpayne@69
|
46 typedef short RETCODE;
|
jpayne@69
|
47 typedef long SDWORD;
|
jpayne@69
|
48 typedef short SWORD;
|
jpayne@69
|
49 typedef unsigned short USHORT;
|
jpayne@69
|
50 typedef USHORT UWORD;
|
jpayne@69
|
51
|
jpayne@69
|
52 /* ODBC data types */
|
jpayne@69
|
53
|
jpayne@69
|
54 typedef Tcl_WideInt SQLBIGINT;
|
jpayne@69
|
55 typedef unsigned char SQLCHAR;
|
jpayne@69
|
56 typedef double SQLDOUBLE;
|
jpayne@69
|
57 typedef void* SQLHANDLE;
|
jpayne@69
|
58 typedef SDWORD SQLINTEGER;
|
jpayne@69
|
59 typedef PVOID SQLPOINTER;
|
jpayne@69
|
60 typedef SWORD SQLSMALLINT;
|
jpayne@69
|
61 typedef Tcl_WideUInt SQLUBIGINT;
|
jpayne@69
|
62 typedef unsigned char SQLUCHAR;
|
jpayne@69
|
63 typedef unsigned int SQLUINTEGER;
|
jpayne@69
|
64 typedef UWORD SQLUSMALLINT;
|
jpayne@69
|
65 typedef WCHAR SQLWCHAR;
|
jpayne@69
|
66
|
jpayne@69
|
67 typedef SQLSMALLINT SQLRETURN;
|
jpayne@69
|
68
|
jpayne@69
|
69 /* TODO - Check how the SQLLEN and SQLULEN types are handled on
|
jpayne@69
|
70 * 64-bit Unix. */
|
jpayne@69
|
71
|
jpayne@69
|
72 #if defined(_WIN64)
|
jpayne@69
|
73 typedef Tcl_WideInt SQLLEN;
|
jpayne@69
|
74 typedef Tcl_WideUInt SQLULEN;
|
jpayne@69
|
75 #else
|
jpayne@69
|
76 typedef SQLINTEGER SQLLEN;
|
jpayne@69
|
77 typedef SQLUINTEGER SQLULEN;
|
jpayne@69
|
78 #endif
|
jpayne@69
|
79
|
jpayne@69
|
80 /* Handle types */
|
jpayne@69
|
81
|
jpayne@69
|
82 typedef SQLHANDLE SQLHENV;
|
jpayne@69
|
83 typedef SQLHANDLE SQLHDBC;
|
jpayne@69
|
84 typedef SQLHANDLE SQLHSTMT;
|
jpayne@69
|
85 typedef HWND SQLHWND;
|
jpayne@69
|
86
|
jpayne@69
|
87 #define SQL_HANDLE_DBC 2
|
jpayne@69
|
88 #define SQL_HANDLE_ENV 1
|
jpayne@69
|
89 #define SQL_HANDLE_STMT 3
|
jpayne@69
|
90
|
jpayne@69
|
91 /* Null handles */
|
jpayne@69
|
92
|
jpayne@69
|
93 #define SQL_NULL_HANDLE ((SQLHANDLE) 0)
|
jpayne@69
|
94 #define SQL_NULL_HENV ((SQLHENV) 0)
|
jpayne@69
|
95 #define SQL_NULL_HDBC ((SQLHDBC) 0)
|
jpayne@69
|
96 #define SQL_NULL_HSTMT ((SQLHSTMT) 0)
|
jpayne@69
|
97
|
jpayne@69
|
98 /* SQL data types */
|
jpayne@69
|
99
|
jpayne@69
|
100 enum _SQL_DATATYPE {
|
jpayne@69
|
101 SQL_BIGINT = -5,
|
jpayne@69
|
102 SQL_BINARY = -2,
|
jpayne@69
|
103 SQL_BIT = -7,
|
jpayne@69
|
104 SQL_CHAR = 1,
|
jpayne@69
|
105 SQL_DATE = 9,
|
jpayne@69
|
106 SQL_DECIMAL = 3,
|
jpayne@69
|
107 SQL_DOUBLE = 8,
|
jpayne@69
|
108 SQL_FLOAT = 6,
|
jpayne@69
|
109 SQL_INTEGER = 4,
|
jpayne@69
|
110 SQL_LONGVARBINARY = -4,
|
jpayne@69
|
111 SQL_LONGVARCHAR = -1,
|
jpayne@69
|
112 SQL_NUMERIC = 2,
|
jpayne@69
|
113 SQL_REAL = 7,
|
jpayne@69
|
114 SQL_SMALLINT = 5,
|
jpayne@69
|
115 SQL_TIME = 10,
|
jpayne@69
|
116 SQL_TIMESTAMP = 11,
|
jpayne@69
|
117 SQL_TINYINT = -6,
|
jpayne@69
|
118 SQL_VARBINARY = -3,
|
jpayne@69
|
119 SQL_VARCHAR = 12,
|
jpayne@69
|
120 SQL_WCHAR = -8,
|
jpayne@69
|
121 SQL_WVARCHAR = -9,
|
jpayne@69
|
122 SQL_WLONGVARCHAR = -10,
|
jpayne@69
|
123 };
|
jpayne@69
|
124
|
jpayne@69
|
125 /* C data types */
|
jpayne@69
|
126
|
jpayne@69
|
127 #define SQL_SIGNED_OFFSET (-20)
|
jpayne@69
|
128
|
jpayne@69
|
129 #define SQL_C_BINARY SQL_BINARY
|
jpayne@69
|
130 #define SQL_C_CHAR SQL_CHAR
|
jpayne@69
|
131 #define SQL_C_DOUBLE SQL_DOUBLE
|
jpayne@69
|
132 #define SQL_C_LONG SQL_INTEGER
|
jpayne@69
|
133 #define SQL_C_SBIGINT SQL_BIGINT + SQL_SIGNED_OFFSET
|
jpayne@69
|
134 #define SQL_C_SLONG SQL_INTEGER + SQL_SIGNED_OFFSET
|
jpayne@69
|
135 #define SQL_C_WCHAR SQL_WCHAR
|
jpayne@69
|
136
|
jpayne@69
|
137 /* Parameter transmission diretions */
|
jpayne@69
|
138
|
jpayne@69
|
139 #define SQL_PARAM_INPUT 1
|
jpayne@69
|
140
|
jpayne@69
|
141 /* Status returns */
|
jpayne@69
|
142
|
jpayne@69
|
143 #define SQL_ERROR (-1)
|
jpayne@69
|
144 #define SQL_NO_DATA 100
|
jpayne@69
|
145 #define SQL_NO_TOTAL (-4)
|
jpayne@69
|
146 #define SQL_SUCCESS 0
|
jpayne@69
|
147 #define SQL_SUCCESS_WITH_INFO 1
|
jpayne@69
|
148 #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
|
jpayne@69
|
149
|
jpayne@69
|
150 /* Diagnostic fields */
|
jpayne@69
|
151
|
jpayne@69
|
152 enum _SQL_DIAG {
|
jpayne@69
|
153 SQL_DIAG_NUMBER = 2,
|
jpayne@69
|
154 SQL_DIAG_SQLSTATE = 4
|
jpayne@69
|
155 };
|
jpayne@69
|
156
|
jpayne@69
|
157 /* Transaction isolation levels */
|
jpayne@69
|
158
|
jpayne@69
|
159 #define SQL_TXN_READ_COMMITTED 2
|
jpayne@69
|
160 #define SQL_TXN_READ_UNCOMMITTED 1
|
jpayne@69
|
161 #define SQL_TXN_REPEATABLE_READ 4
|
jpayne@69
|
162 #define SQL_TXN_SERIALIZABLE 8
|
jpayne@69
|
163
|
jpayne@69
|
164 /* Access modes */
|
jpayne@69
|
165
|
jpayne@69
|
166 #define SQL_MODE_READ_ONLY 1UL
|
jpayne@69
|
167 #define SQL_MODE_READ_WRITE 0UL
|
jpayne@69
|
168
|
jpayne@69
|
169 /* ODBC properties */
|
jpayne@69
|
170
|
jpayne@69
|
171 #define SQL_ACCESS_MODE 101
|
jpayne@69
|
172 #define SQL_AUTOCOMMIT 102
|
jpayne@69
|
173 #define SQL_TXN_ISOLATION 108
|
jpayne@69
|
174
|
jpayne@69
|
175 /* ODBC attributes */
|
jpayne@69
|
176
|
jpayne@69
|
177 #define SQL_ATTR_ACCESS_MODE SQL_ACCESS_MODE
|
jpayne@69
|
178 #define SQL_ATTR_CONNECTION_TIMEOUT 113
|
jpayne@69
|
179 #define SQL_ATTR_ODBC_VERSION 200
|
jpayne@69
|
180 #define SQL_ATTR_TXN_ISOLATION SQL_TXN_ISOLATION
|
jpayne@69
|
181 #define SQL_ATTR_AUTOCOMMIT SQL_AUTOCOMMIT
|
jpayne@69
|
182
|
jpayne@69
|
183 /* Nullable? */
|
jpayne@69
|
184
|
jpayne@69
|
185 #define SQL_NULLABLE_UNKNOWN 2
|
jpayne@69
|
186
|
jpayne@69
|
187 /* Placeholder for length of missing data */
|
jpayne@69
|
188
|
jpayne@69
|
189 #define SQL_NULL_DATA (-1)
|
jpayne@69
|
190
|
jpayne@69
|
191 /* ODBC versions */
|
jpayne@69
|
192
|
jpayne@69
|
193 #define SQL_OV_ODBC3 3UL
|
jpayne@69
|
194 #define SQL_ODBC_VER 10
|
jpayne@69
|
195
|
jpayne@69
|
196 /* SQLDriverConnect flags */
|
jpayne@69
|
197
|
jpayne@69
|
198 #define SQL_DRIVER_COMPLETE_REQUIRED 3
|
jpayne@69
|
199 #define SQL_DRIVER_NOPROMPT 0
|
jpayne@69
|
200
|
jpayne@69
|
201 /* SQLGetTypeInfo flags */
|
jpayne@69
|
202
|
jpayne@69
|
203 #define SQL_ALL_TYPES 0
|
jpayne@69
|
204
|
jpayne@69
|
205 /* Transaction actions */
|
jpayne@69
|
206
|
jpayne@69
|
207 #define SQL_COMMIT 0
|
jpayne@69
|
208 #define SQL_ROLLBACK 1
|
jpayne@69
|
209
|
jpayne@69
|
210 /* Data source fetch flags */
|
jpayne@69
|
211
|
jpayne@69
|
212 #define SQL_FETCH_FIRST 2
|
jpayne@69
|
213 #define SQL_FETCH_FIRST_SYSTEM 32
|
jpayne@69
|
214 #define SQL_FETCH_FIRST_USER 31
|
jpayne@69
|
215 #define SQL_FETCH_NEXT 1
|
jpayne@69
|
216
|
jpayne@69
|
217 /* ODBCINST actions */
|
jpayne@69
|
218
|
jpayne@69
|
219 #define ODBC_ADD_DSN 1
|
jpayne@69
|
220 #define ODBC_CONFIG_DSN 2
|
jpayne@69
|
221 #define ODBC_REMOVE_DSN 3
|
jpayne@69
|
222 #define ODBC_ADD_SYS_DSN 4
|
jpayne@69
|
223 #define ODBC_CONFIG_SYS_DSN 5
|
jpayne@69
|
224 #define ODBC_REMOVE_SYS_DSN 6
|
jpayne@69
|
225
|
jpayne@69
|
226 /* ODBCINST errors */
|
jpayne@69
|
227
|
jpayne@69
|
228 #define ODBC_ERROR_GENERAL_ERR 1
|
jpayne@69
|
229 #define ODBC_ERROR_INVALID_BUFF_LEN 2
|
jpayne@69
|
230 #define ODBC_ERROR_INVALID_HWND 3
|
jpayne@69
|
231 #define ODBC_ERROR_INVALID_STR 4
|
jpayne@69
|
232 #define ODBC_ERROR_INVALID_REQUEST_TYPE 5
|
jpayne@69
|
233 #define ODBC_ERROR_COMPONENT_NOT_FOUND 6
|
jpayne@69
|
234 #define ODBC_ERROR_INVALID_NAME 7
|
jpayne@69
|
235 #define ODBC_ERROR_INVALID_KEYWORD_VALUE 8
|
jpayne@69
|
236 #define ODBC_ERROR_INVALID_DSN 9
|
jpayne@69
|
237 #define ODBC_ERROR_INVALID_INF 10
|
jpayne@69
|
238 #define ODBC_ERROR_REQUEST_FAILED 11
|
jpayne@69
|
239 #define ODBC_ERROR_INVALID_PATH 12
|
jpayne@69
|
240 #define ODBC_ERROR_LOAD_LIB_FAILED 13
|
jpayne@69
|
241 #define ODBC_ERROR_INVALID_PARAM_SEQUENCE 14
|
jpayne@69
|
242 #define ODBC_ERROR_INVALID_LOG_FILE 15
|
jpayne@69
|
243 #define ODBC_ERROR_USER_CANCELED 16
|
jpayne@69
|
244 #define ODBC_ERROR_USAGE_UPDATE_FAILED 17
|
jpayne@69
|
245 #define ODBC_ERROR_CREATE_DSN_FAILED 18
|
jpayne@69
|
246 #define ODBC_ERROR_WRITING_SYSINFO_FAILED 19
|
jpayne@69
|
247 #define ODBC_ERROR_REMOVE_DSN_FAILED 20
|
jpayne@69
|
248 #define ODBC_ERROR_OUT_OF_MEM 21
|
jpayne@69
|
249 #define ODBC_ERROR_OUTPUT_STRING_TRUNCATED 22
|
jpayne@69
|
250
|
jpayne@69
|
251 /* ODBC client library entry points */
|
jpayne@69
|
252
|
jpayne@69
|
253 #ifdef _WIN32
|
jpayne@69
|
254 #define SQL_API __stdcall
|
jpayne@69
|
255 #define INSTAPI __stdcall
|
jpayne@69
|
256 #else
|
jpayne@69
|
257 #define SQL_API /* nothing */
|
jpayne@69
|
258 #define INSTAPI /* nothing */
|
jpayne@69
|
259 #endif
|
jpayne@69
|
260
|
jpayne@69
|
261 #include "odbcStubs.h"
|
jpayne@69
|
262 MODULE_SCOPE const odbcStubDefs* odbcStubs;
|
jpayne@69
|
263
|
jpayne@69
|
264 /*
|
jpayne@69
|
265 * Additional entry points in ODBCINST - all of these are optional
|
jpayne@69
|
266 * and resolved with Tcl_FindSymbol, not directly in Tcl_LoadLibrary.
|
jpayne@69
|
267 */
|
jpayne@69
|
268
|
jpayne@69
|
269 MODULE_SCOPE BOOL (INSTAPI* SQLConfigDataSourceW)(HWND, WORD, LPCWSTR,
|
jpayne@69
|
270 LPCWSTR);
|
jpayne@69
|
271 MODULE_SCOPE BOOL (INSTAPI* SQLConfigDataSource)(HWND, WORD, LPCSTR, LPCSTR);
|
jpayne@69
|
272 MODULE_SCOPE BOOL (INSTAPI* SQLInstallerErrorW)(WORD, DWORD*, LPWSTR, WORD,
|
jpayne@69
|
273 WORD*);
|
jpayne@69
|
274 MODULE_SCOPE BOOL (INSTAPI* SQLInstallerError)(WORD, DWORD*, LPSTR, WORD,
|
jpayne@69
|
275 WORD*);
|
jpayne@69
|
276
|
jpayne@69
|
277 /*
|
jpayne@69
|
278 * Function that initialises the stubs
|
jpayne@69
|
279 */
|
jpayne@69
|
280
|
jpayne@69
|
281 MODULE_SCOPE Tcl_LoadHandle OdbcInitStubs(Tcl_Interp*, Tcl_LoadHandle*);
|
jpayne@69
|
282
|
jpayne@69
|
283 #endif
|