1 #undef tdsdump_log
2 #define tdsdump_log tdsdump_do_log
3 
4 #ifdef ENABLE_ODBC_WIDE
5 static SQLRETURN _SQLDriverConnect(SQLHDBC hdbc,
6     SQLHWND hwnd,
7     ODBC_CHAR * szConnStrIn, SQLSMALLINT cbConnStrIn,
8     ODBC_CHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT FAR* pcbConnStrOut,
9     SQLUSMALLINT fDriverCompletion, int wide);
10 
SQLDriverConnectW(SQLHDBC hdbc,SQLHWND hwnd,SQLWCHAR * szConnStrIn,SQLSMALLINT cbConnStrIn,SQLWCHAR * szConnStrOut,SQLSMALLINT cbConnStrOutMax,SQLSMALLINT FAR * pcbConnStrOut,SQLUSMALLINT fDriverCompletion)11 SQLRETURN ODBC_PUBLIC ODBC_API SQLDriverConnectW(
12     SQLHDBC hdbc,
13     SQLHWND hwnd,
14     SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn,
15     SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT FAR* pcbConnStrOut,
16     SQLUSMALLINT fDriverCompletion)
17 {
18 	if (TDS_UNLIKELY(tds_write_dump)) {
19 		SQLWSTR_BUFS(1);
20 		tdsdump_log(TDS_DBG_FUNC, "SQLDriverConnectW(%p, %p, %ls, %d, %p, %d, %p, %u)\n",
21 			hdbc,
22 			hwnd,
23 			SQLWSTR(szConnStrIn), (int) cbConnStrIn,
24 			szConnStrOut, (int) cbConnStrOutMax, pcbConnStrOut,
25 			(unsigned int) fDriverCompletion);
26 		SQLWSTR_FREE();
27 	}
28 	return _SQLDriverConnect(hdbc,
29 		hwnd,
30 		(ODBC_CHAR*) szConnStrIn, cbConnStrIn,
31 		(ODBC_CHAR*) szConnStrOut, cbConnStrOutMax, pcbConnStrOut,
32 		fDriverCompletion, 1);
33 }
34 #endif
35 
SQLDriverConnect(SQLHDBC hdbc,SQLHWND hwnd,SQLCHAR * szConnStrIn,SQLSMALLINT cbConnStrIn,SQLCHAR * szConnStrOut,SQLSMALLINT cbConnStrOutMax,SQLSMALLINT FAR * pcbConnStrOut,SQLUSMALLINT fDriverCompletion)36 SQLRETURN ODBC_PUBLIC ODBC_API SQLDriverConnect(
37     SQLHDBC hdbc,
38     SQLHWND hwnd,
39     SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn,
40     SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT FAR* pcbConnStrOut,
41     SQLUSMALLINT fDriverCompletion)
42 {
43 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLDriverConnect(%p, %p, %s, %d, %p, %d, %p, %u)\n",
44 			hdbc,
45 			hwnd,
46 			(const char*) szConnStrIn, (int) cbConnStrIn,
47 			szConnStrOut, (int) cbConnStrOutMax, pcbConnStrOut,
48 			(unsigned int) fDriverCompletion);
49 #ifdef ENABLE_ODBC_WIDE
50 	return _SQLDriverConnect(hdbc,
51 		hwnd,
52 		(ODBC_CHAR*) szConnStrIn, cbConnStrIn,
53 		(ODBC_CHAR*) szConnStrOut, cbConnStrOutMax, pcbConnStrOut,
54 		fDriverCompletion, 0);
55 #else
56 	return _SQLDriverConnect(hdbc,
57 		hwnd,
58 		szConnStrIn, cbConnStrIn,
59 		szConnStrOut, cbConnStrOutMax, pcbConnStrOut,
60 		fDriverCompletion);
61 #endif
62 }
63 
64 #ifdef ENABLE_ODBC_WIDE
65 static SQLRETURN _SQLColumnPrivileges(SQLHSTMT hstmt,
66     ODBC_CHAR * szCatalogName, SQLSMALLINT cbCatalogName,
67     ODBC_CHAR * szSchemaName, SQLSMALLINT cbSchemaName,
68     ODBC_CHAR * szTableName, SQLSMALLINT cbTableName,
69     ODBC_CHAR * szColumnName, SQLSMALLINT cbColumnName, int wide);
70 
SQLColumnPrivilegesW(SQLHSTMT hstmt,SQLWCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLWCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLWCHAR * szTableName,SQLSMALLINT cbTableName,SQLWCHAR * szColumnName,SQLSMALLINT cbColumnName)71 SQLRETURN ODBC_PUBLIC ODBC_API SQLColumnPrivilegesW(
72     SQLHSTMT hstmt,
73     SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
74     SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
75     SQLWCHAR * szTableName, SQLSMALLINT cbTableName,
76     SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName)
77 {
78 	if (TDS_UNLIKELY(tds_write_dump)) {
79 		SQLWSTR_BUFS(4);
80 		tdsdump_log(TDS_DBG_FUNC, "SQLColumnPrivilegesW(%p, %ls, %d, %ls, %d, %ls, %d, %ls, %d)\n",
81 			hstmt,
82 			SQLWSTR(szCatalogName), (int) cbCatalogName,
83 			SQLWSTR(szSchemaName), (int) cbSchemaName,
84 			SQLWSTR(szTableName), (int) cbTableName,
85 			SQLWSTR(szColumnName), (int) cbColumnName);
86 		SQLWSTR_FREE();
87 	}
88 	return _SQLColumnPrivileges(hstmt,
89 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
90 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
91 		(ODBC_CHAR*) szTableName, cbTableName,
92 		(ODBC_CHAR*) szColumnName, cbColumnName, 1);
93 }
94 #endif
95 
SQLColumnPrivileges(SQLHSTMT hstmt,SQLCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLCHAR * szTableName,SQLSMALLINT cbTableName,SQLCHAR * szColumnName,SQLSMALLINT cbColumnName)96 SQLRETURN ODBC_PUBLIC ODBC_API SQLColumnPrivileges(
97     SQLHSTMT hstmt,
98     SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
99     SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
100     SQLCHAR * szTableName, SQLSMALLINT cbTableName,
101     SQLCHAR * szColumnName, SQLSMALLINT cbColumnName)
102 {
103 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLColumnPrivileges(%p, %s, %d, %s, %d, %s, %d, %s, %d)\n",
104 			hstmt,
105 			(const char*) szCatalogName, (int) cbCatalogName,
106 			(const char*) szSchemaName, (int) cbSchemaName,
107 			(const char*) szTableName, (int) cbTableName,
108 			(const char*) szColumnName, (int) cbColumnName);
109 #ifdef ENABLE_ODBC_WIDE
110 	return _SQLColumnPrivileges(hstmt,
111 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
112 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
113 		(ODBC_CHAR*) szTableName, cbTableName,
114 		(ODBC_CHAR*) szColumnName, cbColumnName, 0);
115 #else
116 	return _SQLColumnPrivileges(hstmt,
117 		szCatalogName, cbCatalogName,
118 		szSchemaName, cbSchemaName,
119 		szTableName, cbTableName,
120 		szColumnName, cbColumnName);
121 #endif
122 }
123 
124 #ifdef ENABLE_ODBC_WIDE
125 static SQLRETURN _SQLForeignKeys(SQLHSTMT hstmt,
126     ODBC_CHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName,
127     ODBC_CHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName,
128     ODBC_CHAR * szPkTableName, SQLSMALLINT cbPkTableName,
129     ODBC_CHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName,
130     ODBC_CHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName,
131     ODBC_CHAR * szFkTableName, SQLSMALLINT cbFkTableName, int wide);
132 
SQLForeignKeysW(SQLHSTMT hstmt,SQLWCHAR * szPkCatalogName,SQLSMALLINT cbPkCatalogName,SQLWCHAR * szPkSchemaName,SQLSMALLINT cbPkSchemaName,SQLWCHAR * szPkTableName,SQLSMALLINT cbPkTableName,SQLWCHAR * szFkCatalogName,SQLSMALLINT cbFkCatalogName,SQLWCHAR * szFkSchemaName,SQLSMALLINT cbFkSchemaName,SQLWCHAR * szFkTableName,SQLSMALLINT cbFkTableName)133 SQLRETURN ODBC_PUBLIC ODBC_API SQLForeignKeysW(
134     SQLHSTMT hstmt,
135     SQLWCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName,
136     SQLWCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName,
137     SQLWCHAR * szPkTableName, SQLSMALLINT cbPkTableName,
138     SQLWCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName,
139     SQLWCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName,
140     SQLWCHAR * szFkTableName, SQLSMALLINT cbFkTableName)
141 {
142 	if (TDS_UNLIKELY(tds_write_dump)) {
143 		SQLWSTR_BUFS(6);
144 		tdsdump_log(TDS_DBG_FUNC, "SQLForeignKeysW(%p, %ls, %d, %ls, %d, %ls, %d, %ls, %d, %ls, %d, %ls, %d)\n",
145 			hstmt,
146 			SQLWSTR(szPkCatalogName), (int) cbPkCatalogName,
147 			SQLWSTR(szPkSchemaName), (int) cbPkSchemaName,
148 			SQLWSTR(szPkTableName), (int) cbPkTableName,
149 			SQLWSTR(szFkCatalogName), (int) cbFkCatalogName,
150 			SQLWSTR(szFkSchemaName), (int) cbFkSchemaName,
151 			SQLWSTR(szFkTableName), (int) cbFkTableName);
152 		SQLWSTR_FREE();
153 	}
154 	return _SQLForeignKeys(hstmt,
155 		(ODBC_CHAR*) szPkCatalogName, cbPkCatalogName,
156 		(ODBC_CHAR*) szPkSchemaName, cbPkSchemaName,
157 		(ODBC_CHAR*) szPkTableName, cbPkTableName,
158 		(ODBC_CHAR*) szFkCatalogName, cbFkCatalogName,
159 		(ODBC_CHAR*) szFkSchemaName, cbFkSchemaName,
160 		(ODBC_CHAR*) szFkTableName, cbFkTableName, 1);
161 }
162 #endif
163 
SQLForeignKeys(SQLHSTMT hstmt,SQLCHAR * szPkCatalogName,SQLSMALLINT cbPkCatalogName,SQLCHAR * szPkSchemaName,SQLSMALLINT cbPkSchemaName,SQLCHAR * szPkTableName,SQLSMALLINT cbPkTableName,SQLCHAR * szFkCatalogName,SQLSMALLINT cbFkCatalogName,SQLCHAR * szFkSchemaName,SQLSMALLINT cbFkSchemaName,SQLCHAR * szFkTableName,SQLSMALLINT cbFkTableName)164 SQLRETURN ODBC_PUBLIC ODBC_API SQLForeignKeys(
165     SQLHSTMT hstmt,
166     SQLCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName,
167     SQLCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName,
168     SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName,
169     SQLCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName,
170     SQLCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName,
171     SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName)
172 {
173 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLForeignKeys(%p, %s, %d, %s, %d, %s, %d, %s, %d, %s, %d, %s, %d)\n",
174 			hstmt,
175 			(const char*) szPkCatalogName, (int) cbPkCatalogName,
176 			(const char*) szPkSchemaName, (int) cbPkSchemaName,
177 			(const char*) szPkTableName, (int) cbPkTableName,
178 			(const char*) szFkCatalogName, (int) cbFkCatalogName,
179 			(const char*) szFkSchemaName, (int) cbFkSchemaName,
180 			(const char*) szFkTableName, (int) cbFkTableName);
181 #ifdef ENABLE_ODBC_WIDE
182 	return _SQLForeignKeys(hstmt,
183 		(ODBC_CHAR*) szPkCatalogName, cbPkCatalogName,
184 		(ODBC_CHAR*) szPkSchemaName, cbPkSchemaName,
185 		(ODBC_CHAR*) szPkTableName, cbPkTableName,
186 		(ODBC_CHAR*) szFkCatalogName, cbFkCatalogName,
187 		(ODBC_CHAR*) szFkSchemaName, cbFkSchemaName,
188 		(ODBC_CHAR*) szFkTableName, cbFkTableName, 0);
189 #else
190 	return _SQLForeignKeys(hstmt,
191 		szPkCatalogName, cbPkCatalogName,
192 		szPkSchemaName, cbPkSchemaName,
193 		szPkTableName, cbPkTableName,
194 		szFkCatalogName, cbFkCatalogName,
195 		szFkSchemaName, cbFkSchemaName,
196 		szFkTableName, cbFkTableName);
197 #endif
198 }
199 
200 #ifdef ENABLE_ODBC_WIDE
201 static SQLRETURN _SQLNativeSql(SQLHDBC hdbc,
202     ODBC_CHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn,
203     ODBC_CHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER FAR* pcbSqlStr, int wide);
204 
SQLNativeSqlW(SQLHDBC hdbc,SQLWCHAR * szSqlStrIn,SQLINTEGER cbSqlStrIn,SQLWCHAR * szSqlStr,SQLINTEGER cbSqlStrMax,SQLINTEGER FAR * pcbSqlStr)205 SQLRETURN ODBC_PUBLIC ODBC_API SQLNativeSqlW(
206     SQLHDBC hdbc,
207     SQLWCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn,
208     SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER FAR* pcbSqlStr)
209 {
210 	if (TDS_UNLIKELY(tds_write_dump)) {
211 		SQLWSTR_BUFS(1);
212 		tdsdump_log(TDS_DBG_FUNC, "SQLNativeSqlW(%p, %ls, %d, %p, %d, %p)\n",
213 			hdbc,
214 			SQLWSTR(szSqlStrIn), (int) cbSqlStrIn,
215 			szSqlStr, (int) cbSqlStrMax, pcbSqlStr);
216 		SQLWSTR_FREE();
217 	}
218 	return _SQLNativeSql(hdbc,
219 		(ODBC_CHAR*) szSqlStrIn, cbSqlStrIn,
220 		(ODBC_CHAR*) szSqlStr, cbSqlStrMax, pcbSqlStr, 1);
221 }
222 #endif
223 
SQLNativeSql(SQLHDBC hdbc,SQLCHAR * szSqlStrIn,SQLINTEGER cbSqlStrIn,SQLCHAR * szSqlStr,SQLINTEGER cbSqlStrMax,SQLINTEGER FAR * pcbSqlStr)224 SQLRETURN ODBC_PUBLIC ODBC_API SQLNativeSql(
225     SQLHDBC hdbc,
226     SQLCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn,
227     SQLCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER FAR* pcbSqlStr)
228 {
229 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLNativeSql(%p, %s, %d, %p, %d, %p)\n",
230 			hdbc,
231 			(const char*) szSqlStrIn, (int) cbSqlStrIn,
232 			szSqlStr, (int) cbSqlStrMax, pcbSqlStr);
233 #ifdef ENABLE_ODBC_WIDE
234 	return _SQLNativeSql(hdbc,
235 		(ODBC_CHAR*) szSqlStrIn, cbSqlStrIn,
236 		(ODBC_CHAR*) szSqlStr, cbSqlStrMax, pcbSqlStr, 0);
237 #else
238 	return _SQLNativeSql(hdbc,
239 		szSqlStrIn, cbSqlStrIn,
240 		szSqlStr, cbSqlStrMax, pcbSqlStr);
241 #endif
242 }
243 
244 #ifdef ENABLE_ODBC_WIDE
245 static SQLRETURN _SQLPrimaryKeys(SQLHSTMT hstmt,
246     ODBC_CHAR * szCatalogName, SQLSMALLINT cbCatalogName,
247     ODBC_CHAR * szSchemaName, SQLSMALLINT cbSchemaName,
248     ODBC_CHAR * szTableName, SQLSMALLINT cbTableName, int wide);
249 
SQLPrimaryKeysW(SQLHSTMT hstmt,SQLWCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLWCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLWCHAR * szTableName,SQLSMALLINT cbTableName)250 SQLRETURN ODBC_PUBLIC ODBC_API SQLPrimaryKeysW(
251     SQLHSTMT hstmt,
252     SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
253     SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
254     SQLWCHAR * szTableName, SQLSMALLINT cbTableName)
255 {
256 	if (TDS_UNLIKELY(tds_write_dump)) {
257 		SQLWSTR_BUFS(3);
258 		tdsdump_log(TDS_DBG_FUNC, "SQLPrimaryKeysW(%p, %ls, %d, %ls, %d, %ls, %d)\n",
259 			hstmt,
260 			SQLWSTR(szCatalogName), (int) cbCatalogName,
261 			SQLWSTR(szSchemaName), (int) cbSchemaName,
262 			SQLWSTR(szTableName), (int) cbTableName);
263 		SQLWSTR_FREE();
264 	}
265 	return _SQLPrimaryKeys(hstmt,
266 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
267 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
268 		(ODBC_CHAR*) szTableName, cbTableName, 1);
269 }
270 #endif
271 
SQLPrimaryKeys(SQLHSTMT hstmt,SQLCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLCHAR * szTableName,SQLSMALLINT cbTableName)272 SQLRETURN ODBC_PUBLIC ODBC_API SQLPrimaryKeys(
273     SQLHSTMT hstmt,
274     SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
275     SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
276     SQLCHAR * szTableName, SQLSMALLINT cbTableName)
277 {
278 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLPrimaryKeys(%p, %s, %d, %s, %d, %s, %d)\n",
279 			hstmt,
280 			(const char*) szCatalogName, (int) cbCatalogName,
281 			(const char*) szSchemaName, (int) cbSchemaName,
282 			(const char*) szTableName, (int) cbTableName);
283 #ifdef ENABLE_ODBC_WIDE
284 	return _SQLPrimaryKeys(hstmt,
285 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
286 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
287 		(ODBC_CHAR*) szTableName, cbTableName, 0);
288 #else
289 	return _SQLPrimaryKeys(hstmt,
290 		szCatalogName, cbCatalogName,
291 		szSchemaName, cbSchemaName,
292 		szTableName, cbTableName);
293 #endif
294 }
295 
296 #ifdef ENABLE_ODBC_WIDE
297 static SQLRETURN _SQLProcedureColumns(SQLHSTMT hstmt,
298     ODBC_CHAR * szCatalogName, SQLSMALLINT cbCatalogName,
299     ODBC_CHAR * szSchemaName, SQLSMALLINT cbSchemaName,
300     ODBC_CHAR * szProcName, SQLSMALLINT cbProcName,
301     ODBC_CHAR * szColumnName, SQLSMALLINT cbColumnName, int wide);
302 
SQLProcedureColumnsW(SQLHSTMT hstmt,SQLWCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLWCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLWCHAR * szProcName,SQLSMALLINT cbProcName,SQLWCHAR * szColumnName,SQLSMALLINT cbColumnName)303 SQLRETURN ODBC_PUBLIC ODBC_API SQLProcedureColumnsW(
304     SQLHSTMT hstmt,
305     SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
306     SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
307     SQLWCHAR * szProcName, SQLSMALLINT cbProcName,
308     SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName)
309 {
310 	if (TDS_UNLIKELY(tds_write_dump)) {
311 		SQLWSTR_BUFS(4);
312 		tdsdump_log(TDS_DBG_FUNC, "SQLProcedureColumnsW(%p, %ls, %d, %ls, %d, %ls, %d, %ls, %d)\n",
313 			hstmt,
314 			SQLWSTR(szCatalogName), (int) cbCatalogName,
315 			SQLWSTR(szSchemaName), (int) cbSchemaName,
316 			SQLWSTR(szProcName), (int) cbProcName,
317 			SQLWSTR(szColumnName), (int) cbColumnName);
318 		SQLWSTR_FREE();
319 	}
320 	return _SQLProcedureColumns(hstmt,
321 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
322 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
323 		(ODBC_CHAR*) szProcName, cbProcName,
324 		(ODBC_CHAR*) szColumnName, cbColumnName, 1);
325 }
326 #endif
327 
SQLProcedureColumns(SQLHSTMT hstmt,SQLCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLCHAR * szProcName,SQLSMALLINT cbProcName,SQLCHAR * szColumnName,SQLSMALLINT cbColumnName)328 SQLRETURN ODBC_PUBLIC ODBC_API SQLProcedureColumns(
329     SQLHSTMT hstmt,
330     SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
331     SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
332     SQLCHAR * szProcName, SQLSMALLINT cbProcName,
333     SQLCHAR * szColumnName, SQLSMALLINT cbColumnName)
334 {
335 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLProcedureColumns(%p, %s, %d, %s, %d, %s, %d, %s, %d)\n",
336 			hstmt,
337 			(const char*) szCatalogName, (int) cbCatalogName,
338 			(const char*) szSchemaName, (int) cbSchemaName,
339 			(const char*) szProcName, (int) cbProcName,
340 			(const char*) szColumnName, (int) cbColumnName);
341 #ifdef ENABLE_ODBC_WIDE
342 	return _SQLProcedureColumns(hstmt,
343 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
344 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
345 		(ODBC_CHAR*) szProcName, cbProcName,
346 		(ODBC_CHAR*) szColumnName, cbColumnName, 0);
347 #else
348 	return _SQLProcedureColumns(hstmt,
349 		szCatalogName, cbCatalogName,
350 		szSchemaName, cbSchemaName,
351 		szProcName, cbProcName,
352 		szColumnName, cbColumnName);
353 #endif
354 }
355 
356 #ifdef ENABLE_ODBC_WIDE
357 static SQLRETURN _SQLProcedures(SQLHSTMT hstmt,
358     ODBC_CHAR * szCatalogName, SQLSMALLINT cbCatalogName,
359     ODBC_CHAR * szSchemaName, SQLSMALLINT cbSchemaName,
360     ODBC_CHAR * szProcName, SQLSMALLINT cbProcName, int wide);
361 
SQLProceduresW(SQLHSTMT hstmt,SQLWCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLWCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLWCHAR * szProcName,SQLSMALLINT cbProcName)362 SQLRETURN ODBC_PUBLIC ODBC_API SQLProceduresW(
363     SQLHSTMT hstmt,
364     SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
365     SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
366     SQLWCHAR * szProcName, SQLSMALLINT cbProcName)
367 {
368 	if (TDS_UNLIKELY(tds_write_dump)) {
369 		SQLWSTR_BUFS(3);
370 		tdsdump_log(TDS_DBG_FUNC, "SQLProceduresW(%p, %ls, %d, %ls, %d, %ls, %d)\n",
371 			hstmt,
372 			SQLWSTR(szCatalogName), (int) cbCatalogName,
373 			SQLWSTR(szSchemaName), (int) cbSchemaName,
374 			SQLWSTR(szProcName), (int) cbProcName);
375 		SQLWSTR_FREE();
376 	}
377 	return _SQLProcedures(hstmt,
378 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
379 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
380 		(ODBC_CHAR*) szProcName, cbProcName, 1);
381 }
382 #endif
383 
SQLProcedures(SQLHSTMT hstmt,SQLCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLCHAR * szProcName,SQLSMALLINT cbProcName)384 SQLRETURN ODBC_PUBLIC ODBC_API SQLProcedures(
385     SQLHSTMT hstmt,
386     SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
387     SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
388     SQLCHAR * szProcName, SQLSMALLINT cbProcName)
389 {
390 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLProcedures(%p, %s, %d, %s, %d, %s, %d)\n",
391 			hstmt,
392 			(const char*) szCatalogName, (int) cbCatalogName,
393 			(const char*) szSchemaName, (int) cbSchemaName,
394 			(const char*) szProcName, (int) cbProcName);
395 #ifdef ENABLE_ODBC_WIDE
396 	return _SQLProcedures(hstmt,
397 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
398 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
399 		(ODBC_CHAR*) szProcName, cbProcName, 0);
400 #else
401 	return _SQLProcedures(hstmt,
402 		szCatalogName, cbCatalogName,
403 		szSchemaName, cbSchemaName,
404 		szProcName, cbProcName);
405 #endif
406 }
407 
408 #ifdef ENABLE_ODBC_WIDE
409 static SQLRETURN _SQLTablePrivileges(SQLHSTMT hstmt,
410     ODBC_CHAR * szCatalogName, SQLSMALLINT cbCatalogName,
411     ODBC_CHAR * szSchemaName, SQLSMALLINT cbSchemaName,
412     ODBC_CHAR * szTableName, SQLSMALLINT cbTableName, int wide);
413 
SQLTablePrivilegesW(SQLHSTMT hstmt,SQLWCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLWCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLWCHAR * szTableName,SQLSMALLINT cbTableName)414 SQLRETURN ODBC_PUBLIC ODBC_API SQLTablePrivilegesW(
415     SQLHSTMT hstmt,
416     SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
417     SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
418     SQLWCHAR * szTableName, SQLSMALLINT cbTableName)
419 {
420 	if (TDS_UNLIKELY(tds_write_dump)) {
421 		SQLWSTR_BUFS(3);
422 		tdsdump_log(TDS_DBG_FUNC, "SQLTablePrivilegesW(%p, %ls, %d, %ls, %d, %ls, %d)\n",
423 			hstmt,
424 			SQLWSTR(szCatalogName), (int) cbCatalogName,
425 			SQLWSTR(szSchemaName), (int) cbSchemaName,
426 			SQLWSTR(szTableName), (int) cbTableName);
427 		SQLWSTR_FREE();
428 	}
429 	return _SQLTablePrivileges(hstmt,
430 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
431 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
432 		(ODBC_CHAR*) szTableName, cbTableName, 1);
433 }
434 #endif
435 
SQLTablePrivileges(SQLHSTMT hstmt,SQLCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLCHAR * szTableName,SQLSMALLINT cbTableName)436 SQLRETURN ODBC_PUBLIC ODBC_API SQLTablePrivileges(
437     SQLHSTMT hstmt,
438     SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
439     SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
440     SQLCHAR * szTableName, SQLSMALLINT cbTableName)
441 {
442 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLTablePrivileges(%p, %s, %d, %s, %d, %s, %d)\n",
443 			hstmt,
444 			(const char*) szCatalogName, (int) cbCatalogName,
445 			(const char*) szSchemaName, (int) cbSchemaName,
446 			(const char*) szTableName, (int) cbTableName);
447 #ifdef ENABLE_ODBC_WIDE
448 	return _SQLTablePrivileges(hstmt,
449 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
450 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
451 		(ODBC_CHAR*) szTableName, cbTableName, 0);
452 #else
453 	return _SQLTablePrivileges(hstmt,
454 		szCatalogName, cbCatalogName,
455 		szSchemaName, cbSchemaName,
456 		szTableName, cbTableName);
457 #endif
458 }
459 
460 #ifdef ENABLE_ODBC_WIDE
461 static SQLRETURN _SQLConnect(SQLHDBC hdbc,
462     ODBC_CHAR * szDSN, SQLSMALLINT cbDSN,
463     ODBC_CHAR * szUID, SQLSMALLINT cbUID,
464     ODBC_CHAR * szAuthStr, SQLSMALLINT cbAuthStr, int wide);
465 
SQLConnectW(SQLHDBC hdbc,SQLWCHAR * szDSN,SQLSMALLINT cbDSN,SQLWCHAR * szUID,SQLSMALLINT cbUID,SQLWCHAR * szAuthStr,SQLSMALLINT cbAuthStr)466 SQLRETURN ODBC_PUBLIC ODBC_API SQLConnectW(
467     SQLHDBC hdbc,
468     SQLWCHAR * szDSN, SQLSMALLINT cbDSN,
469     SQLWCHAR * szUID, SQLSMALLINT cbUID,
470     SQLWCHAR * szAuthStr, SQLSMALLINT cbAuthStr)
471 {
472 	if (TDS_UNLIKELY(tds_write_dump)) {
473 		SQLWSTR_BUFS(3);
474 		tdsdump_log(TDS_DBG_FUNC, "SQLConnectW(%p, %ls, %d, %ls, %d, %ls, %d)\n",
475 			hdbc,
476 			SQLWSTR(szDSN), (int) cbDSN,
477 			SQLWSTR(szUID), (int) cbUID,
478 			SQLWSTR(szAuthStr), (int) cbAuthStr);
479 		SQLWSTR_FREE();
480 	}
481 	return _SQLConnect(hdbc,
482 		(ODBC_CHAR*) szDSN, cbDSN,
483 		(ODBC_CHAR*) szUID, cbUID,
484 		(ODBC_CHAR*) szAuthStr, cbAuthStr, 1);
485 }
486 #endif
487 
SQLConnect(SQLHDBC hdbc,SQLCHAR * szDSN,SQLSMALLINT cbDSN,SQLCHAR * szUID,SQLSMALLINT cbUID,SQLCHAR * szAuthStr,SQLSMALLINT cbAuthStr)488 SQLRETURN ODBC_PUBLIC ODBC_API SQLConnect(
489     SQLHDBC hdbc,
490     SQLCHAR * szDSN, SQLSMALLINT cbDSN,
491     SQLCHAR * szUID, SQLSMALLINT cbUID,
492     SQLCHAR * szAuthStr, SQLSMALLINT cbAuthStr)
493 {
494 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLConnect(%p, %s, %d, %s, %d, %s, %d)\n",
495 			hdbc,
496 			(const char*) szDSN, (int) cbDSN,
497 			(const char*) szUID, (int) cbUID,
498 			(const char*) szAuthStr, (int) cbAuthStr);
499 #ifdef ENABLE_ODBC_WIDE
500 	return _SQLConnect(hdbc,
501 		(ODBC_CHAR*) szDSN, cbDSN,
502 		(ODBC_CHAR*) szUID, cbUID,
503 		(ODBC_CHAR*) szAuthStr, cbAuthStr, 0);
504 #else
505 	return _SQLConnect(hdbc,
506 		szDSN, cbDSN,
507 		szUID, cbUID,
508 		szAuthStr, cbAuthStr);
509 #endif
510 }
511 
512 #ifdef ENABLE_ODBC_WIDE
513 static SQLRETURN _SQLDescribeCol(SQLHSTMT hstmt,
514     SQLUSMALLINT icol,
515     ODBC_CHAR * szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT FAR* pcbColName,
516     SQLSMALLINT * pfSqlType,
517     SQLULEN * pcbColDef,
518     SQLSMALLINT * pibScale,
519     SQLSMALLINT * pfNullable, int wide);
520 
SQLDescribeColW(SQLHSTMT hstmt,SQLUSMALLINT icol,SQLWCHAR * szColName,SQLSMALLINT cbColNameMax,SQLSMALLINT FAR * pcbColName,SQLSMALLINT * pfSqlType,SQLULEN * pcbColDef,SQLSMALLINT * pibScale,SQLSMALLINT * pfNullable)521 SQLRETURN ODBC_PUBLIC ODBC_API SQLDescribeColW(
522     SQLHSTMT hstmt,
523     SQLUSMALLINT icol,
524     SQLWCHAR * szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT FAR* pcbColName,
525     SQLSMALLINT * pfSqlType,
526     SQLULEN * pcbColDef,
527     SQLSMALLINT * pibScale,
528     SQLSMALLINT * pfNullable)
529 {
530 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLDescribeColW(%p, %u, %p, %d, %p, %p, %p, %p, %p)\n",
531 			hstmt,
532 			(unsigned int) icol,
533 			szColName, (int) cbColNameMax, pcbColName,
534 			pfSqlType,
535 			pcbColDef,
536 			pibScale,
537 			pfNullable);
538 	return _SQLDescribeCol(hstmt,
539 		icol,
540 		(ODBC_CHAR*) szColName, cbColNameMax, pcbColName,
541 		pfSqlType,
542 		pcbColDef,
543 		pibScale,
544 		pfNullable, 1);
545 }
546 #endif
547 
SQLDescribeCol(SQLHSTMT hstmt,SQLUSMALLINT icol,SQLCHAR * szColName,SQLSMALLINT cbColNameMax,SQLSMALLINT FAR * pcbColName,SQLSMALLINT * pfSqlType,SQLULEN * pcbColDef,SQLSMALLINT * pibScale,SQLSMALLINT * pfNullable)548 SQLRETURN ODBC_PUBLIC ODBC_API SQLDescribeCol(
549     SQLHSTMT hstmt,
550     SQLUSMALLINT icol,
551     SQLCHAR * szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT FAR* pcbColName,
552     SQLSMALLINT * pfSqlType,
553     SQLULEN * pcbColDef,
554     SQLSMALLINT * pibScale,
555     SQLSMALLINT * pfNullable)
556 {
557 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLDescribeCol(%p, %u, %p, %d, %p, %p, %p, %p, %p)\n",
558 			hstmt,
559 			(unsigned int) icol,
560 			szColName, (int) cbColNameMax, pcbColName,
561 			pfSqlType,
562 			pcbColDef,
563 			pibScale,
564 			pfNullable);
565 #ifdef ENABLE_ODBC_WIDE
566 	return _SQLDescribeCol(hstmt,
567 		icol,
568 		(ODBC_CHAR*) szColName, cbColNameMax, pcbColName,
569 		pfSqlType,
570 		pcbColDef,
571 		pibScale,
572 		pfNullable, 0);
573 #else
574 	return _SQLDescribeCol(hstmt,
575 		icol,
576 		szColName, cbColNameMax, pcbColName,
577 		pfSqlType,
578 		pcbColDef,
579 		pibScale,
580 		pfNullable);
581 #endif
582 }
583 
584 #ifdef ENABLE_ODBC_WIDE
585 static SQLRETURN _SQLGetDescRec(SQLHDESC hdesc,
586     SQLSMALLINT RecordNumber,
587     ODBC_CHAR * szName, SQLSMALLINT cbNameMax, SQLSMALLINT FAR* pcbName,
588     SQLSMALLINT * Type,
589     SQLSMALLINT * SubType,
590     SQLLEN * Length,
591     SQLSMALLINT * Precision,
592     SQLSMALLINT * Scale,
593     SQLSMALLINT * Nullable, int wide);
594 
SQLGetDescRecW(SQLHDESC hdesc,SQLSMALLINT RecordNumber,SQLWCHAR * szName,SQLSMALLINT cbNameMax,SQLSMALLINT FAR * pcbName,SQLSMALLINT * Type,SQLSMALLINT * SubType,SQLLEN * Length,SQLSMALLINT * Precision,SQLSMALLINT * Scale,SQLSMALLINT * Nullable)595 SQLRETURN ODBC_PUBLIC ODBC_API SQLGetDescRecW(
596     SQLHDESC hdesc,
597     SQLSMALLINT RecordNumber,
598     SQLWCHAR * szName, SQLSMALLINT cbNameMax, SQLSMALLINT FAR* pcbName,
599     SQLSMALLINT * Type,
600     SQLSMALLINT * SubType,
601     SQLLEN * Length,
602     SQLSMALLINT * Precision,
603     SQLSMALLINT * Scale,
604     SQLSMALLINT * Nullable)
605 {
606 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLGetDescRecW(%p, %d, %p, %d, %p, %p, %p, %p, %p, %p, %p)\n",
607 			hdesc,
608 			(int) RecordNumber,
609 			szName, (int) cbNameMax, pcbName,
610 			Type,
611 			SubType,
612 			Length,
613 			Precision,
614 			Scale,
615 			Nullable);
616 	return _SQLGetDescRec(hdesc,
617 		RecordNumber,
618 		(ODBC_CHAR*) szName, cbNameMax, pcbName,
619 		Type,
620 		SubType,
621 		Length,
622 		Precision,
623 		Scale,
624 		Nullable, 1);
625 }
626 #endif
627 
SQLGetDescRec(SQLHDESC hdesc,SQLSMALLINT RecordNumber,SQLCHAR * szName,SQLSMALLINT cbNameMax,SQLSMALLINT FAR * pcbName,SQLSMALLINT * Type,SQLSMALLINT * SubType,SQLLEN * Length,SQLSMALLINT * Precision,SQLSMALLINT * Scale,SQLSMALLINT * Nullable)628 SQLRETURN ODBC_PUBLIC ODBC_API SQLGetDescRec(
629     SQLHDESC hdesc,
630     SQLSMALLINT RecordNumber,
631     SQLCHAR * szName, SQLSMALLINT cbNameMax, SQLSMALLINT FAR* pcbName,
632     SQLSMALLINT * Type,
633     SQLSMALLINT * SubType,
634     SQLLEN * Length,
635     SQLSMALLINT * Precision,
636     SQLSMALLINT * Scale,
637     SQLSMALLINT * Nullable)
638 {
639 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLGetDescRec(%p, %d, %p, %d, %p, %p, %p, %p, %p, %p, %p)\n",
640 			hdesc,
641 			(int) RecordNumber,
642 			szName, (int) cbNameMax, pcbName,
643 			Type,
644 			SubType,
645 			Length,
646 			Precision,
647 			Scale,
648 			Nullable);
649 #ifdef ENABLE_ODBC_WIDE
650 	return _SQLGetDescRec(hdesc,
651 		RecordNumber,
652 		(ODBC_CHAR*) szName, cbNameMax, pcbName,
653 		Type,
654 		SubType,
655 		Length,
656 		Precision,
657 		Scale,
658 		Nullable, 0);
659 #else
660 	return _SQLGetDescRec(hdesc,
661 		RecordNumber,
662 		szName, cbNameMax, pcbName,
663 		Type,
664 		SubType,
665 		Length,
666 		Precision,
667 		Scale,
668 		Nullable);
669 #endif
670 }
671 
672 #ifdef ENABLE_ODBC_WIDE
673 static SQLRETURN _SQLGetDescField(SQLHDESC hdesc,
674     SQLSMALLINT icol,
675     SQLSMALLINT fDescType,
676     SQLPOINTER Value,
677     SQLINTEGER BufferLength,
678     SQLINTEGER * StringLength, int wide);
679 
SQLGetDescFieldW(SQLHDESC hdesc,SQLSMALLINT icol,SQLSMALLINT fDescType,SQLPOINTER Value,SQLINTEGER BufferLength,SQLINTEGER * StringLength)680 SQLRETURN ODBC_PUBLIC ODBC_API SQLGetDescFieldW(
681     SQLHDESC hdesc,
682     SQLSMALLINT icol,
683     SQLSMALLINT fDescType,
684     SQLPOINTER Value,
685     SQLINTEGER BufferLength,
686     SQLINTEGER * StringLength)
687 {
688 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLGetDescFieldW(%p, %d, %d, %p, %d, %p)\n",
689 			hdesc,
690 			(int) icol,
691 			(int) fDescType,
692 			Value,
693 			(int) BufferLength,
694 			StringLength);
695 	return _SQLGetDescField(hdesc,
696 		icol,
697 		fDescType,
698 		Value,
699 		BufferLength,
700 		StringLength, 1);
701 }
702 #endif
703 
SQLGetDescField(SQLHDESC hdesc,SQLSMALLINT icol,SQLSMALLINT fDescType,SQLPOINTER Value,SQLINTEGER BufferLength,SQLINTEGER * StringLength)704 SQLRETURN ODBC_PUBLIC ODBC_API SQLGetDescField(
705     SQLHDESC hdesc,
706     SQLSMALLINT icol,
707     SQLSMALLINT fDescType,
708     SQLPOINTER Value,
709     SQLINTEGER BufferLength,
710     SQLINTEGER * StringLength)
711 {
712 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLGetDescField(%p, %d, %d, %p, %d, %p)\n",
713 			hdesc,
714 			(int) icol,
715 			(int) fDescType,
716 			Value,
717 			(int) BufferLength,
718 			StringLength);
719 #ifdef ENABLE_ODBC_WIDE
720 	return _SQLGetDescField(hdesc,
721 		icol,
722 		fDescType,
723 		Value,
724 		BufferLength,
725 		StringLength, 0);
726 #else
727 	return _SQLGetDescField(hdesc,
728 		icol,
729 		fDescType,
730 		Value,
731 		BufferLength,
732 		StringLength);
733 #endif
734 }
735 
736 #ifdef ENABLE_ODBC_WIDE
737 static SQLRETURN _SQLSetDescField(SQLHDESC hdesc,
738     SQLSMALLINT icol,
739     SQLSMALLINT fDescType,
740     SQLPOINTER Value,
741     SQLINTEGER BufferLength, int wide);
742 
SQLSetDescFieldW(SQLHDESC hdesc,SQLSMALLINT icol,SQLSMALLINT fDescType,SQLPOINTER Value,SQLINTEGER BufferLength)743 SQLRETURN ODBC_PUBLIC ODBC_API SQLSetDescFieldW(
744     SQLHDESC hdesc,
745     SQLSMALLINT icol,
746     SQLSMALLINT fDescType,
747     SQLPOINTER Value,
748     SQLINTEGER BufferLength)
749 {
750 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLSetDescFieldW(%p, %d, %d, %p, %d)\n",
751 			hdesc,
752 			(int) icol,
753 			(int) fDescType,
754 			Value,
755 			(int) BufferLength);
756 	return _SQLSetDescField(hdesc,
757 		icol,
758 		fDescType,
759 		Value,
760 		BufferLength, 1);
761 }
762 #endif
763 
SQLSetDescField(SQLHDESC hdesc,SQLSMALLINT icol,SQLSMALLINT fDescType,SQLPOINTER Value,SQLINTEGER BufferLength)764 SQLRETURN ODBC_PUBLIC ODBC_API SQLSetDescField(
765     SQLHDESC hdesc,
766     SQLSMALLINT icol,
767     SQLSMALLINT fDescType,
768     SQLPOINTER Value,
769     SQLINTEGER BufferLength)
770 {
771 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLSetDescField(%p, %d, %d, %p, %d)\n",
772 			hdesc,
773 			(int) icol,
774 			(int) fDescType,
775 			Value,
776 			(int) BufferLength);
777 #ifdef ENABLE_ODBC_WIDE
778 	return _SQLSetDescField(hdesc,
779 		icol,
780 		fDescType,
781 		Value,
782 		BufferLength, 0);
783 #else
784 	return _SQLSetDescField(hdesc,
785 		icol,
786 		fDescType,
787 		Value,
788 		BufferLength);
789 #endif
790 }
791 
792 #ifdef ENABLE_ODBC_WIDE
793 static SQLRETURN _SQLExecDirect(SQLHSTMT hstmt,
794     ODBC_CHAR * szSqlStr, SQLINTEGER cbSqlStr, int wide);
795 
SQLExecDirectW(SQLHSTMT hstmt,SQLWCHAR * szSqlStr,SQLINTEGER cbSqlStr)796 SQLRETURN ODBC_PUBLIC ODBC_API SQLExecDirectW(
797     SQLHSTMT hstmt,
798     SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStr)
799 {
800 	if (TDS_UNLIKELY(tds_write_dump)) {
801 		SQLWSTR_BUFS(1);
802 		tdsdump_log(TDS_DBG_FUNC, "SQLExecDirectW(%p, %ls, %d)\n",
803 			hstmt,
804 			SQLWSTR(szSqlStr), (int) cbSqlStr);
805 		SQLWSTR_FREE();
806 	}
807 	return _SQLExecDirect(hstmt,
808 		(ODBC_CHAR*) szSqlStr, cbSqlStr, 1);
809 }
810 #endif
811 
SQLExecDirect(SQLHSTMT hstmt,SQLCHAR * szSqlStr,SQLINTEGER cbSqlStr)812 SQLRETURN ODBC_PUBLIC ODBC_API SQLExecDirect(
813     SQLHSTMT hstmt,
814     SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr)
815 {
816 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLExecDirect(%p, %s, %d)\n",
817 			hstmt,
818 			(const char*) szSqlStr, (int) cbSqlStr);
819 #ifdef ENABLE_ODBC_WIDE
820 	return _SQLExecDirect(hstmt,
821 		(ODBC_CHAR*) szSqlStr, cbSqlStr, 0);
822 #else
823 	return _SQLExecDirect(hstmt,
824 		szSqlStr, cbSqlStr);
825 #endif
826 }
827 
828 #ifdef ENABLE_ODBC_WIDE
829 static SQLRETURN _SQLPrepare(SQLHSTMT hstmt,
830     ODBC_CHAR * szSqlStr, SQLINTEGER cbSqlStr, int wide);
831 
SQLPrepareW(SQLHSTMT hstmt,SQLWCHAR * szSqlStr,SQLINTEGER cbSqlStr)832 SQLRETURN ODBC_PUBLIC ODBC_API SQLPrepareW(
833     SQLHSTMT hstmt,
834     SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStr)
835 {
836 	if (TDS_UNLIKELY(tds_write_dump)) {
837 		SQLWSTR_BUFS(1);
838 		tdsdump_log(TDS_DBG_FUNC, "SQLPrepareW(%p, %ls, %d)\n",
839 			hstmt,
840 			SQLWSTR(szSqlStr), (int) cbSqlStr);
841 		SQLWSTR_FREE();
842 	}
843 	return _SQLPrepare(hstmt,
844 		(ODBC_CHAR*) szSqlStr, cbSqlStr, 1);
845 }
846 #endif
847 
SQLPrepare(SQLHSTMT hstmt,SQLCHAR * szSqlStr,SQLINTEGER cbSqlStr)848 SQLRETURN ODBC_PUBLIC ODBC_API SQLPrepare(
849     SQLHSTMT hstmt,
850     SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr)
851 {
852 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLPrepare(%p, %s, %d)\n",
853 			hstmt,
854 			(const char*) szSqlStr, (int) cbSqlStr);
855 #ifdef ENABLE_ODBC_WIDE
856 	return _SQLPrepare(hstmt,
857 		(ODBC_CHAR*) szSqlStr, cbSqlStr, 0);
858 #else
859 	return _SQLPrepare(hstmt,
860 		szSqlStr, cbSqlStr);
861 #endif
862 }
863 
864 #ifdef ENABLE_ODBC_WIDE
865 static SQLRETURN _SQLSetCursorName(SQLHSTMT hstmt,
866     ODBC_CHAR * szCursor, SQLSMALLINT cbCursor, int wide);
867 
SQLSetCursorNameW(SQLHSTMT hstmt,SQLWCHAR * szCursor,SQLSMALLINT cbCursor)868 SQLRETURN ODBC_PUBLIC ODBC_API SQLSetCursorNameW(
869     SQLHSTMT hstmt,
870     SQLWCHAR * szCursor, SQLSMALLINT cbCursor)
871 {
872 	if (TDS_UNLIKELY(tds_write_dump)) {
873 		SQLWSTR_BUFS(1);
874 		tdsdump_log(TDS_DBG_FUNC, "SQLSetCursorNameW(%p, %ls, %d)\n",
875 			hstmt,
876 			SQLWSTR(szCursor), (int) cbCursor);
877 		SQLWSTR_FREE();
878 	}
879 	return _SQLSetCursorName(hstmt,
880 		(ODBC_CHAR*) szCursor, cbCursor, 1);
881 }
882 #endif
883 
SQLSetCursorName(SQLHSTMT hstmt,SQLCHAR * szCursor,SQLSMALLINT cbCursor)884 SQLRETURN ODBC_PUBLIC ODBC_API SQLSetCursorName(
885     SQLHSTMT hstmt,
886     SQLCHAR * szCursor, SQLSMALLINT cbCursor)
887 {
888 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLSetCursorName(%p, %s, %d)\n",
889 			hstmt,
890 			(const char*) szCursor, (int) cbCursor);
891 #ifdef ENABLE_ODBC_WIDE
892 	return _SQLSetCursorName(hstmt,
893 		(ODBC_CHAR*) szCursor, cbCursor, 0);
894 #else
895 	return _SQLSetCursorName(hstmt,
896 		szCursor, cbCursor);
897 #endif
898 }
899 
900 #ifdef ENABLE_ODBC_WIDE
901 static SQLRETURN _SQLGetCursorName(SQLHSTMT hstmt,
902     ODBC_CHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT FAR* pcbCursor, int wide);
903 
SQLGetCursorNameW(SQLHSTMT hstmt,SQLWCHAR * szCursor,SQLSMALLINT cbCursorMax,SQLSMALLINT FAR * pcbCursor)904 SQLRETURN ODBC_PUBLIC ODBC_API SQLGetCursorNameW(
905     SQLHSTMT hstmt,
906     SQLWCHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT FAR* pcbCursor)
907 {
908 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLGetCursorNameW(%p, %p, %d, %p)\n",
909 			hstmt,
910 			szCursor, (int) cbCursorMax, pcbCursor);
911 	return _SQLGetCursorName(hstmt,
912 		(ODBC_CHAR*) szCursor, cbCursorMax, pcbCursor, 1);
913 }
914 #endif
915 
SQLGetCursorName(SQLHSTMT hstmt,SQLCHAR * szCursor,SQLSMALLINT cbCursorMax,SQLSMALLINT FAR * pcbCursor)916 SQLRETURN ODBC_PUBLIC ODBC_API SQLGetCursorName(
917     SQLHSTMT hstmt,
918     SQLCHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT FAR* pcbCursor)
919 {
920 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLGetCursorName(%p, %p, %d, %p)\n",
921 			hstmt,
922 			szCursor, (int) cbCursorMax, pcbCursor);
923 #ifdef ENABLE_ODBC_WIDE
924 	return _SQLGetCursorName(hstmt,
925 		(ODBC_CHAR*) szCursor, cbCursorMax, pcbCursor, 0);
926 #else
927 	return _SQLGetCursorName(hstmt,
928 		szCursor, cbCursorMax, pcbCursor);
929 #endif
930 }
931 
932 #ifdef ENABLE_ODBC_WIDE
933 static SQLRETURN _SQLColumns(SQLHSTMT hstmt,
934     ODBC_CHAR * szCatalogName, SQLSMALLINT cbCatalogName,
935     ODBC_CHAR * szSchemaName, SQLSMALLINT cbSchemaName,
936     ODBC_CHAR * szTableName, SQLSMALLINT cbTableName,
937     ODBC_CHAR * szColumnName, SQLSMALLINT cbColumnName, int wide);
938 
SQLColumnsW(SQLHSTMT hstmt,SQLWCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLWCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLWCHAR * szTableName,SQLSMALLINT cbTableName,SQLWCHAR * szColumnName,SQLSMALLINT cbColumnName)939 SQLRETURN ODBC_PUBLIC ODBC_API SQLColumnsW(
940     SQLHSTMT hstmt,
941     SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
942     SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
943     SQLWCHAR * szTableName, SQLSMALLINT cbTableName,
944     SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName)
945 {
946 	if (TDS_UNLIKELY(tds_write_dump)) {
947 		SQLWSTR_BUFS(4);
948 		tdsdump_log(TDS_DBG_FUNC, "SQLColumnsW(%p, %ls, %d, %ls, %d, %ls, %d, %ls, %d)\n",
949 			hstmt,
950 			SQLWSTR(szCatalogName), (int) cbCatalogName,
951 			SQLWSTR(szSchemaName), (int) cbSchemaName,
952 			SQLWSTR(szTableName), (int) cbTableName,
953 			SQLWSTR(szColumnName), (int) cbColumnName);
954 		SQLWSTR_FREE();
955 	}
956 	return _SQLColumns(hstmt,
957 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
958 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
959 		(ODBC_CHAR*) szTableName, cbTableName,
960 		(ODBC_CHAR*) szColumnName, cbColumnName, 1);
961 }
962 #endif
963 
SQLColumns(SQLHSTMT hstmt,SQLCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLCHAR * szTableName,SQLSMALLINT cbTableName,SQLCHAR * szColumnName,SQLSMALLINT cbColumnName)964 SQLRETURN ODBC_PUBLIC ODBC_API SQLColumns(
965     SQLHSTMT hstmt,
966     SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
967     SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
968     SQLCHAR * szTableName, SQLSMALLINT cbTableName,
969     SQLCHAR * szColumnName, SQLSMALLINT cbColumnName)
970 {
971 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLColumns(%p, %s, %d, %s, %d, %s, %d, %s, %d)\n",
972 			hstmt,
973 			(const char*) szCatalogName, (int) cbCatalogName,
974 			(const char*) szSchemaName, (int) cbSchemaName,
975 			(const char*) szTableName, (int) cbTableName,
976 			(const char*) szColumnName, (int) cbColumnName);
977 #ifdef ENABLE_ODBC_WIDE
978 	return _SQLColumns(hstmt,
979 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
980 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
981 		(ODBC_CHAR*) szTableName, cbTableName,
982 		(ODBC_CHAR*) szColumnName, cbColumnName, 0);
983 #else
984 	return _SQLColumns(hstmt,
985 		szCatalogName, cbCatalogName,
986 		szSchemaName, cbSchemaName,
987 		szTableName, cbTableName,
988 		szColumnName, cbColumnName);
989 #endif
990 }
991 
992 #ifdef ENABLE_ODBC_WIDE
993 static SQLRETURN _SQLGetConnectAttr(SQLHDBC hdbc,
994     SQLINTEGER Attribute,
995     SQLPOINTER Value,
996     SQLINTEGER BufferLength,
997     SQLINTEGER * StringLength, int wide);
998 
SQLGetConnectAttrW(SQLHDBC hdbc,SQLINTEGER Attribute,SQLPOINTER Value,SQLINTEGER BufferLength,SQLINTEGER * StringLength)999 SQLRETURN ODBC_PUBLIC ODBC_API SQLGetConnectAttrW(
1000     SQLHDBC hdbc,
1001     SQLINTEGER Attribute,
1002     SQLPOINTER Value,
1003     SQLINTEGER BufferLength,
1004     SQLINTEGER * StringLength)
1005 {
1006 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLGetConnectAttrW(%p, %d, %p, %d, %p)\n",
1007 			hdbc,
1008 			(int) Attribute,
1009 			Value,
1010 			(int) BufferLength,
1011 			StringLength);
1012 	return _SQLGetConnectAttr(hdbc,
1013 		Attribute,
1014 		Value,
1015 		BufferLength,
1016 		StringLength, 1);
1017 }
1018 #endif
1019 
SQLGetConnectAttr(SQLHDBC hdbc,SQLINTEGER Attribute,SQLPOINTER Value,SQLINTEGER BufferLength,SQLINTEGER * StringLength)1020 SQLRETURN ODBC_PUBLIC ODBC_API SQLGetConnectAttr(
1021     SQLHDBC hdbc,
1022     SQLINTEGER Attribute,
1023     SQLPOINTER Value,
1024     SQLINTEGER BufferLength,
1025     SQLINTEGER * StringLength)
1026 {
1027 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLGetConnectAttr(%p, %d, %p, %d, %p)\n",
1028 			hdbc,
1029 			(int) Attribute,
1030 			Value,
1031 			(int) BufferLength,
1032 			StringLength);
1033 #ifdef ENABLE_ODBC_WIDE
1034 	return _SQLGetConnectAttr(hdbc,
1035 		Attribute,
1036 		Value,
1037 		BufferLength,
1038 		StringLength, 0);
1039 #else
1040 	return _SQLGetConnectAttr(hdbc,
1041 		Attribute,
1042 		Value,
1043 		BufferLength,
1044 		StringLength);
1045 #endif
1046 }
1047 
1048 #ifdef ENABLE_ODBC_WIDE
1049 static SQLRETURN _SQLSetConnectAttr(SQLHDBC hdbc,
1050     SQLINTEGER Attribute,
1051     SQLPOINTER ValuePtr,
1052     SQLINTEGER StringLength, int wide);
1053 
SQLSetConnectAttrW(SQLHDBC hdbc,SQLINTEGER Attribute,SQLPOINTER ValuePtr,SQLINTEGER StringLength)1054 SQLRETURN ODBC_PUBLIC ODBC_API SQLSetConnectAttrW(
1055     SQLHDBC hdbc,
1056     SQLINTEGER Attribute,
1057     SQLPOINTER ValuePtr,
1058     SQLINTEGER StringLength)
1059 {
1060 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLSetConnectAttrW(%p, %d, %p, %d)\n",
1061 			hdbc,
1062 			(int) Attribute,
1063 			ValuePtr,
1064 			(int) StringLength);
1065 	return _SQLSetConnectAttr(hdbc,
1066 		Attribute,
1067 		ValuePtr,
1068 		StringLength, 1);
1069 }
1070 #endif
1071 
SQLSetConnectAttr(SQLHDBC hdbc,SQLINTEGER Attribute,SQLPOINTER ValuePtr,SQLINTEGER StringLength)1072 SQLRETURN ODBC_PUBLIC ODBC_API SQLSetConnectAttr(
1073     SQLHDBC hdbc,
1074     SQLINTEGER Attribute,
1075     SQLPOINTER ValuePtr,
1076     SQLINTEGER StringLength)
1077 {
1078 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLSetConnectAttr(%p, %d, %p, %d)\n",
1079 			hdbc,
1080 			(int) Attribute,
1081 			ValuePtr,
1082 			(int) StringLength);
1083 #ifdef ENABLE_ODBC_WIDE
1084 	return _SQLSetConnectAttr(hdbc,
1085 		Attribute,
1086 		ValuePtr,
1087 		StringLength, 0);
1088 #else
1089 	return _SQLSetConnectAttr(hdbc,
1090 		Attribute,
1091 		ValuePtr,
1092 		StringLength);
1093 #endif
1094 }
1095 
1096 #ifdef ENABLE_ODBC_WIDE
1097 static SQLRETURN _SQLSpecialColumns(SQLHSTMT hstmt,
1098     SQLUSMALLINT fColType,
1099     ODBC_CHAR * szCatalogName, SQLSMALLINT cbCatalogName,
1100     ODBC_CHAR * szSchemaName, SQLSMALLINT cbSchemaName,
1101     ODBC_CHAR * szTableName, SQLSMALLINT cbTableName,
1102     SQLUSMALLINT fScope,
1103     SQLUSMALLINT fNullable, int wide);
1104 
SQLSpecialColumnsW(SQLHSTMT hstmt,SQLUSMALLINT fColType,SQLWCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLWCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLWCHAR * szTableName,SQLSMALLINT cbTableName,SQLUSMALLINT fScope,SQLUSMALLINT fNullable)1105 SQLRETURN ODBC_PUBLIC ODBC_API SQLSpecialColumnsW(
1106     SQLHSTMT hstmt,
1107     SQLUSMALLINT fColType,
1108     SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
1109     SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
1110     SQLWCHAR * szTableName, SQLSMALLINT cbTableName,
1111     SQLUSMALLINT fScope,
1112     SQLUSMALLINT fNullable)
1113 {
1114 	if (TDS_UNLIKELY(tds_write_dump)) {
1115 		SQLWSTR_BUFS(3);
1116 		tdsdump_log(TDS_DBG_FUNC, "SQLSpecialColumnsW(%p, %u, %ls, %d, %ls, %d, %ls, %d, %u, %u)\n",
1117 			hstmt,
1118 			(unsigned int) fColType,
1119 			SQLWSTR(szCatalogName), (int) cbCatalogName,
1120 			SQLWSTR(szSchemaName), (int) cbSchemaName,
1121 			SQLWSTR(szTableName), (int) cbTableName,
1122 			(unsigned int) fScope,
1123 			(unsigned int) fNullable);
1124 		SQLWSTR_FREE();
1125 	}
1126 	return _SQLSpecialColumns(hstmt,
1127 		fColType,
1128 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
1129 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
1130 		(ODBC_CHAR*) szTableName, cbTableName,
1131 		fScope,
1132 		fNullable, 1);
1133 }
1134 #endif
1135 
SQLSpecialColumns(SQLHSTMT hstmt,SQLUSMALLINT fColType,SQLCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLCHAR * szTableName,SQLSMALLINT cbTableName,SQLUSMALLINT fScope,SQLUSMALLINT fNullable)1136 SQLRETURN ODBC_PUBLIC ODBC_API SQLSpecialColumns(
1137     SQLHSTMT hstmt,
1138     SQLUSMALLINT fColType,
1139     SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
1140     SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
1141     SQLCHAR * szTableName, SQLSMALLINT cbTableName,
1142     SQLUSMALLINT fScope,
1143     SQLUSMALLINT fNullable)
1144 {
1145 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLSpecialColumns(%p, %u, %s, %d, %s, %d, %s, %d, %u, %u)\n",
1146 			hstmt,
1147 			(unsigned int) fColType,
1148 			(const char*) szCatalogName, (int) cbCatalogName,
1149 			(const char*) szSchemaName, (int) cbSchemaName,
1150 			(const char*) szTableName, (int) cbTableName,
1151 			(unsigned int) fScope,
1152 			(unsigned int) fNullable);
1153 #ifdef ENABLE_ODBC_WIDE
1154 	return _SQLSpecialColumns(hstmt,
1155 		fColType,
1156 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
1157 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
1158 		(ODBC_CHAR*) szTableName, cbTableName,
1159 		fScope,
1160 		fNullable, 0);
1161 #else
1162 	return _SQLSpecialColumns(hstmt,
1163 		fColType,
1164 		szCatalogName, cbCatalogName,
1165 		szSchemaName, cbSchemaName,
1166 		szTableName, cbTableName,
1167 		fScope,
1168 		fNullable);
1169 #endif
1170 }
1171 
1172 #ifdef ENABLE_ODBC_WIDE
1173 static SQLRETURN _SQLStatistics(SQLHSTMT hstmt,
1174     ODBC_CHAR * szCatalogName, SQLSMALLINT cbCatalogName,
1175     ODBC_CHAR * szSchemaName, SQLSMALLINT cbSchemaName,
1176     ODBC_CHAR * szTableName, SQLSMALLINT cbTableName,
1177     SQLUSMALLINT fUnique,
1178     SQLUSMALLINT fAccuracy, int wide);
1179 
SQLStatisticsW(SQLHSTMT hstmt,SQLWCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLWCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLWCHAR * szTableName,SQLSMALLINT cbTableName,SQLUSMALLINT fUnique,SQLUSMALLINT fAccuracy)1180 SQLRETURN ODBC_PUBLIC ODBC_API SQLStatisticsW(
1181     SQLHSTMT hstmt,
1182     SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
1183     SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
1184     SQLWCHAR * szTableName, SQLSMALLINT cbTableName,
1185     SQLUSMALLINT fUnique,
1186     SQLUSMALLINT fAccuracy)
1187 {
1188 	if (TDS_UNLIKELY(tds_write_dump)) {
1189 		SQLWSTR_BUFS(3);
1190 		tdsdump_log(TDS_DBG_FUNC, "SQLStatisticsW(%p, %ls, %d, %ls, %d, %ls, %d, %u, %u)\n",
1191 			hstmt,
1192 			SQLWSTR(szCatalogName), (int) cbCatalogName,
1193 			SQLWSTR(szSchemaName), (int) cbSchemaName,
1194 			SQLWSTR(szTableName), (int) cbTableName,
1195 			(unsigned int) fUnique,
1196 			(unsigned int) fAccuracy);
1197 		SQLWSTR_FREE();
1198 	}
1199 	return _SQLStatistics(hstmt,
1200 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
1201 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
1202 		(ODBC_CHAR*) szTableName, cbTableName,
1203 		fUnique,
1204 		fAccuracy, 1);
1205 }
1206 #endif
1207 
SQLStatistics(SQLHSTMT hstmt,SQLCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLCHAR * szTableName,SQLSMALLINT cbTableName,SQLUSMALLINT fUnique,SQLUSMALLINT fAccuracy)1208 SQLRETURN ODBC_PUBLIC ODBC_API SQLStatistics(
1209     SQLHSTMT hstmt,
1210     SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
1211     SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
1212     SQLCHAR * szTableName, SQLSMALLINT cbTableName,
1213     SQLUSMALLINT fUnique,
1214     SQLUSMALLINT fAccuracy)
1215 {
1216 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLStatistics(%p, %s, %d, %s, %d, %s, %d, %u, %u)\n",
1217 			hstmt,
1218 			(const char*) szCatalogName, (int) cbCatalogName,
1219 			(const char*) szSchemaName, (int) cbSchemaName,
1220 			(const char*) szTableName, (int) cbTableName,
1221 			(unsigned int) fUnique,
1222 			(unsigned int) fAccuracy);
1223 #ifdef ENABLE_ODBC_WIDE
1224 	return _SQLStatistics(hstmt,
1225 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
1226 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
1227 		(ODBC_CHAR*) szTableName, cbTableName,
1228 		fUnique,
1229 		fAccuracy, 0);
1230 #else
1231 	return _SQLStatistics(hstmt,
1232 		szCatalogName, cbCatalogName,
1233 		szSchemaName, cbSchemaName,
1234 		szTableName, cbTableName,
1235 		fUnique,
1236 		fAccuracy);
1237 #endif
1238 }
1239 
1240 #ifdef ENABLE_ODBC_WIDE
1241 static SQLRETURN _SQLTables(SQLHSTMT hstmt,
1242     ODBC_CHAR * szCatalogName, SQLSMALLINT cbCatalogName,
1243     ODBC_CHAR * szSchemaName, SQLSMALLINT cbSchemaName,
1244     ODBC_CHAR * szTableName, SQLSMALLINT cbTableName,
1245     ODBC_CHAR * szTableType, SQLSMALLINT cbTableType, int wide);
1246 
SQLTablesW(SQLHSTMT hstmt,SQLWCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLWCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLWCHAR * szTableName,SQLSMALLINT cbTableName,SQLWCHAR * szTableType,SQLSMALLINT cbTableType)1247 SQLRETURN ODBC_PUBLIC ODBC_API SQLTablesW(
1248     SQLHSTMT hstmt,
1249     SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
1250     SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
1251     SQLWCHAR * szTableName, SQLSMALLINT cbTableName,
1252     SQLWCHAR * szTableType, SQLSMALLINT cbTableType)
1253 {
1254 	if (TDS_UNLIKELY(tds_write_dump)) {
1255 		SQLWSTR_BUFS(4);
1256 		tdsdump_log(TDS_DBG_FUNC, "SQLTablesW(%p, %ls, %d, %ls, %d, %ls, %d, %ls, %d)\n",
1257 			hstmt,
1258 			SQLWSTR(szCatalogName), (int) cbCatalogName,
1259 			SQLWSTR(szSchemaName), (int) cbSchemaName,
1260 			SQLWSTR(szTableName), (int) cbTableName,
1261 			SQLWSTR(szTableType), (int) cbTableType);
1262 		SQLWSTR_FREE();
1263 	}
1264 	return _SQLTables(hstmt,
1265 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
1266 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
1267 		(ODBC_CHAR*) szTableName, cbTableName,
1268 		(ODBC_CHAR*) szTableType, cbTableType, 1);
1269 }
1270 #endif
1271 
SQLTables(SQLHSTMT hstmt,SQLCHAR * szCatalogName,SQLSMALLINT cbCatalogName,SQLCHAR * szSchemaName,SQLSMALLINT cbSchemaName,SQLCHAR * szTableName,SQLSMALLINT cbTableName,SQLCHAR * szTableType,SQLSMALLINT cbTableType)1272 SQLRETURN ODBC_PUBLIC ODBC_API SQLTables(
1273     SQLHSTMT hstmt,
1274     SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName,
1275     SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName,
1276     SQLCHAR * szTableName, SQLSMALLINT cbTableName,
1277     SQLCHAR * szTableType, SQLSMALLINT cbTableType)
1278 {
1279 	TDSDUMP_LOG_FAST(TDS_DBG_FUNC, "SQLTables(%p, %s, %d, %s, %d, %s, %d, %s, %d)\n",
1280 			hstmt,
1281 			(const char*) szCatalogName, (int) cbCatalogName,
1282 			(const char*) szSchemaName, (int) cbSchemaName,
1283 			(const char*) szTableName, (int) cbTableName,
1284 			(const char*) szTableType, (int) cbTableType);
1285 #ifdef ENABLE_ODBC_WIDE
1286 	return _SQLTables(hstmt,
1287 		(ODBC_CHAR*) szCatalogName, cbCatalogName,
1288 		(ODBC_CHAR*) szSchemaName, cbSchemaName,
1289 		(ODBC_CHAR*) szTableName, cbTableName,
1290 		(ODBC_CHAR*) szTableType, cbTableType, 0);
1291 #else
1292 	return _SQLTables(hstmt,
1293 		szCatalogName, cbCatalogName,
1294 		szSchemaName, cbSchemaName,
1295 		szTableName, cbTableName,
1296 		szTableType, cbTableType);
1297 #endif
1298 }
1299 
1300 #undef tdsdump_log
1301 #define tdsdump_log TDSDUMP_LOG_FAST
1302