4 * Copyright 1999 Xiang Li, Corel Corporation
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 * Proxy ODBC driver manager. This manager delegates all ODBC
22 * calls to a real ODBC driver manager named by the environment
23 * variable LIB_ODBC_DRIVER_MANAGER, or to libodbc.so if the
24 * variable is not set.
29 #include "wine/port.h"
40 #include "wine/debug.h"
41 #include "wine/library.h"
47 #include "proxyodbc.h"
49 static BOOL ODBC_LoadDriverManager(void);
50 static BOOL ODBC_LoadDMFunctions(void);
52 WINE_DEFAULT_DEBUG_CHANNEL(odbc);
54 static const DM_FUNC template_func[] =
56 /* 00 */ { SQL_API_SQLALLOCCONNECT, "SQLAllocConnect", SQLAllocConnect, NULL },
57 /* 01 */ { SQL_API_SQLALLOCENV, "SQLAllocEnv", SQLAllocEnv, NULL },
58 /* 02 */ { SQL_API_SQLALLOCHANDLE, "SQLAllocHandle", SQLAllocHandle, NULL },
59 /* 03 */ { SQL_API_SQLALLOCSTMT, "SQLAllocStmt", SQLAllocStmt, NULL },
60 /* 04 */ { SQL_API_SQLALLOCHANDLESTD, "SQLAllocHandleStd", SQLAllocHandleStd, NULL },
61 /* 05 */ { SQL_API_SQLBINDCOL, "SQLBindCol", SQLBindCol, NULL },
62 /* 06 */ { SQL_API_SQLBINDPARAM, "SQLBindParam", SQLBindParam, NULL },
63 /* 07 */ { SQL_API_SQLBINDPARAMETER, "SQLBindParameter", SQLBindParameter, NULL },
64 /* 08 */ { SQL_API_SQLBROWSECONNECT, "SQLBrowseConnect", SQLBrowseConnect, NULL },
65 /* 09 */ { SQL_API_SQLBULKOPERATIONS, "SQLBulkOperations", SQLBulkOperations, NULL },
66 /* 10 */ { SQL_API_SQLCANCEL, "SQLCancel", SQLCancel, NULL },
67 /* 11 */ { SQL_API_SQLCLOSECURSOR, "SQLCloseCursor", SQLCloseCursor, NULL },
68 /* 12 */ { SQL_API_SQLCOLATTRIBUTE, "SQLColAttribute", SQLColAttribute, NULL },
69 /* 13 */ { SQL_API_SQLCOLATTRIBUTES, "SQLColAttributes", SQLColAttributes, NULL },
70 /* 14 */ { SQL_API_SQLCOLUMNPRIVILEGES, "SQLColumnPrivileges", SQLColumnPrivileges, NULL },
71 /* 15 */ { SQL_API_SQLCOLUMNS, "SQLColumns", SQLColumns, NULL },
72 /* 16 */ { SQL_API_SQLCONNECT, "SQLConnect", SQLConnect, NULL },
73 /* 17 */ { SQL_API_SQLCOPYDESC, "SQLCopyDesc", SQLCopyDesc, NULL },
74 /* 18 */ { SQL_API_SQLDATASOURCES, "SQLDataSources", SQLDataSources, NULL },
75 /* 19 */ { SQL_API_SQLDESCRIBECOL, "SQLDescribeCol", SQLDescribeCol, NULL },
76 /* 20 */ { SQL_API_SQLDESCRIBEPARAM, "SQLDescribeParam", SQLDescribeParam, NULL },
77 /* 21 */ { SQL_API_SQLDISCONNECT, "SQLDisconnect", SQLDisconnect, NULL },
78 /* 22 */ { SQL_API_SQLDRIVERCONNECT, "SQLDriverConnect", SQLDriverConnect, NULL },
79 /* 23 */ { SQL_API_SQLDRIVERS, "SQLDrivers", SQLDrivers, NULL },
80 /* 24 */ { SQL_API_SQLENDTRAN, "SQLEndTran", SQLEndTran, NULL },
81 /* 25 */ { SQL_API_SQLERROR, "SQLError", SQLError, NULL },
82 /* 26 */ { SQL_API_SQLEXECDIRECT, "SQLExecDirect", SQLExecDirect, NULL },
83 /* 27 */ { SQL_API_SQLEXECUTE, "SQLExecute", SQLExecute, NULL },
84 /* 28 */ { SQL_API_SQLEXTENDEDFETCH, "SQLExtendedFetch", SQLExtendedFetch, NULL },
85 /* 29 */ { SQL_API_SQLFETCH, "SQLFetch", SQLFetch, NULL },
86 /* 30 */ { SQL_API_SQLFETCHSCROLL, "SQLFetchScroll", SQLFetchScroll, NULL },
87 /* 31 */ { SQL_API_SQLFOREIGNKEYS, "SQLForeignKeys", SQLForeignKeys, NULL },
88 /* 32 */ { SQL_API_SQLFREEENV, "SQLFreeEnv", SQLFreeEnv, NULL },
89 /* 33 */ { SQL_API_SQLFREEHANDLE, "SQLFreeHandle", SQLFreeHandle, NULL },
90 /* 34 */ { SQL_API_SQLFREESTMT, "SQLFreeStmt", SQLFreeStmt, NULL },
91 /* 35 */ { SQL_API_SQLFREECONNECT, "SQLFreeConnect", SQLFreeConnect, NULL },
92 /* 36 */ { SQL_API_SQLGETCONNECTATTR, "SQLGetConnectAttr", SQLGetConnectAttr, NULL },
93 /* 37 */ { SQL_API_SQLGETCONNECTOPTION, "SQLGetConnectOption", SQLGetConnectOption, NULL },
94 /* 38 */ { SQL_API_SQLGETCURSORNAME, "SQLGetCursorName", SQLGetCursorName, NULL },
95 /* 39 */ { SQL_API_SQLGETDATA, "SQLGetData", SQLGetData, NULL },
96 /* 40 */ { SQL_API_SQLGETDESCFIELD, "SQLGetDescField", SQLGetDescField, NULL },
97 /* 41 */ { SQL_API_SQLGETDESCREC, "SQLGetDescRec", SQLGetDescRec, NULL },
98 /* 42 */ { SQL_API_SQLGETDIAGFIELD, "SQLGetDiagField", SQLGetDiagField, NULL },
99 /* 43 */ { SQL_API_SQLGETENVATTR, "SQLGetEnvAttr", SQLGetEnvAttr, NULL },
100 /* 44 */ { SQL_API_SQLGETFUNCTIONS, "SQLGetFunctions", SQLGetFunctions, NULL },
101 /* 45 */ { SQL_API_SQLGETINFO, "SQLGetInfo", SQLGetInfo, NULL },
102 /* 46 */ { SQL_API_SQLGETSTMTATTR, "SQLGetStmtAttr", SQLGetStmtAttr, NULL },
103 /* 47 */ { SQL_API_SQLGETSTMTOPTION, "SQLGetStmtOption", SQLGetStmtOption, NULL },
104 /* 48 */ { SQL_API_SQLGETTYPEINFO, "SQLGetTypeInfo", SQLGetTypeInfo, NULL },
105 /* 49 */ { SQL_API_SQLMORERESULTS, "SQLMoreResults", SQLMoreResults, NULL },
106 /* 50 */ { SQL_API_SQLNATIVESQL, "SQLNativeSql", SQLNativeSql, NULL },
107 /* 51 */ { SQL_API_SQLNUMPARAMS, "SQLNumParams", SQLNumParams, NULL },
108 /* 52 */ { SQL_API_SQLNUMRESULTCOLS, "SQLNumResultCols", SQLNumResultCols, NULL },
109 /* 53 */ { SQL_API_SQLPARAMDATA, "SQLParamData", SQLParamData, NULL },
110 /* 54 */ { SQL_API_SQLPARAMOPTIONS, "SQLParamOptions", SQLParamOptions, NULL },
111 /* 55 */ { SQL_API_SQLPREPARE, "SQLPrepare", SQLPrepare, NULL },
112 /* 56 */ { SQL_API_SQLPRIMARYKEYS, "SQLPrimaryKeys", SQLPrimaryKeys, NULL },
113 /* 57 */ { SQL_API_SQLPROCEDURECOLUMNS, "SQLProcedureColumns", SQLProcedureColumns, NULL },
114 /* 58 */ { SQL_API_SQLPROCEDURES, "SQLProcedures", SQLProcedures, NULL },
115 /* 59 */ { SQL_API_SQLPUTDATA, "SQLPutData", SQLPutData, NULL },
116 /* 60 */ { SQL_API_SQLROWCOUNT, "SQLRowCount", SQLRowCount, NULL },
117 /* 61 */ { SQL_API_SQLSETCONNECTATTR, "SQLSetConnectAttr", SQLSetConnectAttr, NULL },
118 /* 62 */ { SQL_API_SQLSETCONNECTOPTION, "SQLSetConnectOption", SQLSetConnectOption, NULL },
119 /* 63 */ { SQL_API_SQLSETCURSORNAME, "SQLSetCursorName", SQLSetCursorName, NULL },
120 /* 64 */ { SQL_API_SQLSETDESCFIELD, "SQLSetDescField", SQLSetDescField, NULL },
121 /* 65 */ { SQL_API_SQLSETDESCREC, "SQLSetDescRec", SQLSetDescRec, NULL },
122 /* 66 */ { SQL_API_SQLSETENVATTR, "SQLSetEnvAttr", SQLSetEnvAttr, NULL },
123 /* 67 */ { SQL_API_SQLSETPARAM, "SQLSetParam", SQLSetParam, NULL },
124 /* 68 */ { SQL_API_SQLSETPOS, "SQLSetPos", SQLSetPos, NULL },
125 /* 69 */ { SQL_API_SQLSETSCROLLOPTIONS, "SQLSetScrollOptions", SQLSetScrollOptions, NULL },
126 /* 70 */ { SQL_API_SQLSETSTMTATTR, "SQLSetStmtAttr", SQLSetStmtAttr, NULL },
127 /* 71 */ { SQL_API_SQLSETSTMTOPTION, "SQLSetStmtOption", SQLSetStmtOption, NULL },
128 /* 72 */ { SQL_API_SQLSPECIALCOLUMNS, "SQLSpecialColumns", SQLSpecialColumns, NULL },
129 /* 73 */ { SQL_API_SQLSTATISTICS, "SQLStatistics", SQLStatistics, NULL },
130 /* 74 */ { SQL_API_SQLTABLEPRIVILEGES, "SQLTablePrivileges", SQLTablePrivileges, NULL },
131 /* 75 */ { SQL_API_SQLTABLES, "SQLTables", SQLTables, NULL },
132 /* 76 */ { SQL_API_SQLTRANSACT, "SQLTransact", SQLTransact, NULL },
133 /* 77 */ { SQL_API_SQLGETDIAGREC, "SQLGetDiagRec", SQLGetDiagRec, NULL },
136 static PROXYHANDLE gProxyHandle;
138 /* What is the difference between these two (dmHandle cf READY_AND_dmHandle)? When does one use one and when the other? */
140 #define CHECK_dmHandle() \
142 if (gProxyHandle.dmHandle == NULL) \
144 TRACE ("Not ready\n"); \
149 #define CHECK_READY_AND_dmHandle() \
151 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL) \
153 TRACE ("Not ready\n"); \
158 SQLRETURN SQLDummyFunc()
160 TRACE("SQLDummyFunc: \n");
164 /***********************************************************************
165 * ODBC_ReplicateODBCInstToRegistry
171 * Utility to ODBC_ReplicateToRegistry to replicate the drivers of the
172 * ODBCINST.INI settings
174 * The driver settings are not replicated to the registry. If we were to
175 * replicate them we would need to decide whether to replicate all settings
176 * or to do some translation; whether to remove any entries present only in
177 * the windows registry, etc.
180 static void ODBC_ReplicateODBCInstToRegistry (SQLHENV hEnv)
187 TRACE ("Driver settings are not currently replicated to the registry\n");
188 if ((reg_ret = RegCreateKeyExA (HKEY_LOCAL_MACHINE,
189 "Software\\ODBC\\ODBCINST.INI", 0, NULL,
190 REG_OPTION_NON_VOLATILE,
191 KEY_ALL_ACCESS /* a couple more than we need */, NULL,
192 &hODBCInst, NULL)) == ERROR_SUCCESS)
195 if ((reg_ret = RegCreateKeyExA (hODBCInst, "ODBC Drivers", 0,
196 NULL, REG_OPTION_NON_VOLATILE,
197 KEY_ALL_ACCESS /* overkill */, NULL, &hDrivers, NULL))
203 SQLSMALLINT sizedesc;
206 dirn = SQL_FETCH_FIRST;
207 while ((sql_ret = SQLDrivers (hEnv, dirn, desc, sizeof(desc),
208 &sizedesc, NULL, 0, NULL)) == SQL_SUCCESS ||
209 sql_ret == SQL_SUCCESS_WITH_INFO)
211 /* FIXME Do some proper handling of the SUCCESS_WITH_INFO */
212 dirn = SQL_FETCH_NEXT;
213 if (sizedesc == strlen(desc))
216 if ((reg_ret = RegQueryValueExA (hDrivers, desc, NULL,
217 NULL, NULL, NULL)) == ERROR_FILE_NOT_FOUND)
219 if ((reg_ret = RegSetValueExA (hDrivers, desc, 0,
220 REG_SZ, "Installed", 10)) != ERROR_SUCCESS)
222 TRACE ("Error %ld replicating driver %s\n",
227 else if (reg_ret != ERROR_SUCCESS)
229 TRACE ("Error %ld checking for %s in drivers\n",
233 if ((reg_ret = RegCreateKeyExA (hODBCInst, desc, 0,
234 NULL, REG_OPTION_NON_VOLATILE,
235 KEY_ALL_ACCESS, NULL, &hThis, NULL))
238 /* FIXME This is where the settings go.
239 * I suggest that if the disposition says it
240 * exists then we leave it alone. Alternatively
241 * include an extra value to flag that it is
242 * a replication of the unixODBC/iODBC/...
244 if ((reg_ret = RegCloseKey (hThis)) !=
246 TRACE ("Error %ld closing %s key\n", reg_ret,
251 TRACE ("Error %ld ensuring driver key %s\n",
258 WARN ("Unusually long driver name %s not replicated\n",
263 if (sql_ret != SQL_NO_DATA)
265 TRACE ("Error %d enumerating drivers\n", (int)sql_ret);
268 if ((reg_ret = RegCloseKey (hDrivers)) != ERROR_SUCCESS)
270 TRACE ("Error %ld closing hDrivers\n", reg_ret);
275 TRACE ("Error %ld opening HKLM\\S\\O\\OI\\Drivers\n", reg_ret);
277 if ((reg_ret = RegCloseKey (hODBCInst)) != ERROR_SUCCESS)
279 TRACE ("Error %ld closing HKLM\\S\\O\\ODBCINST.INI\n", reg_ret);
284 TRACE ("Error %ld opening HKLM\\S\\O\\ODBCINST.INI\n", reg_ret);
288 WARN ("May not have replicated all ODBC drivers to the registry\n");
292 /***********************************************************************
293 * ODBC_ReplicateODBCToRegistry
299 * Utility to ODBC_ReplicateToRegistry to replicate either the USER or
302 * For now simply place the "Driver description" (as returned by SQLDataSources)
303 * into the registry as the driver. This is enough to satisfy Crystal's
304 * requirement that there be a driver entry. (It doesn't seem to care what
306 * A slightly more accurate setting would be to access the registry to find
307 * the actual driver library for the given description (which appears to map
308 * to one of the HKLM/Software/ODBC/ODBCINST.INI keys). (If you do this note
309 * that this will add a requirement that this function be called after
310 * ODBC_ReplicateODBCInstToRegistry)
312 static void ODBC_ReplicateODBCToRegistry (int is_user, SQLHENV hEnv)
318 SQLCHAR dsn [SQL_MAX_DSN_LENGTH + 1];
321 SQLSMALLINT sizedesc;
323 const char *which = is_user ? "user" : "system";
326 if ((reg_ret = RegCreateKeyExA (
327 is_user ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE,
328 "Software\\ODBC\\ODBC.INI", 0, NULL, REG_OPTION_NON_VOLATILE,
329 KEY_ALL_ACCESS /* a couple more than we need */, NULL, &hODBC,
330 NULL)) == ERROR_SUCCESS)
333 dirn = is_user ? SQL_FETCH_FIRST_USER : SQL_FETCH_FIRST_SYSTEM;
334 while ((sql_ret = SQLDataSources (hEnv, dirn,
335 dsn, sizeof(dsn), &sizedsn,
336 desc, sizeof(desc), &sizedesc)) == SQL_SUCCESS
337 || sql_ret == SQL_SUCCESS_WITH_INFO)
339 /* FIXME Do some proper handling of the SUCCESS_WITH_INFO */
340 dirn = SQL_FETCH_NEXT;
341 if (sizedsn == strlen(dsn) && sizedesc == strlen(desc))
344 if ((reg_ret = RegCreateKeyExA (hODBC, dsn, 0,
345 NULL, REG_OPTION_NON_VOLATILE,
346 KEY_ALL_ACCESS, NULL, &hDSN, NULL))
349 static const char *DRIVERKEY = "Driver";
350 if ((reg_ret = RegQueryValueExA (hDSN, DRIVERKEY,
351 NULL, NULL, NULL, NULL))
352 == ERROR_FILE_NOT_FOUND)
354 if ((reg_ret = RegSetValueExA (hDSN, DRIVERKEY, 0,
355 REG_SZ, desc, sizedesc)) != ERROR_SUCCESS)
357 TRACE ("Error %ld replicating description of "
358 "%s(%s)\n", reg_ret, dsn, desc);
362 else if (reg_ret != ERROR_SUCCESS)
364 TRACE ("Error %ld checking for description of %s\n",
368 if ((reg_ret = RegCloseKey (hDSN)) != ERROR_SUCCESS)
370 TRACE ("Error %ld closing %s DSN key %s\n",
371 reg_ret, which, dsn);
376 TRACE ("Error %ld opening %s DSN key %s\n",
377 reg_ret, which, dsn);
383 WARN ("Unusually long %s data source name %s (%s) not "
384 "replicated\n", which, dsn, desc);
388 if (sql_ret != SQL_NO_DATA)
390 TRACE ("Error %d enumerating %s datasources\n",
391 (int)sql_ret, which);
394 if ((reg_ret = RegCloseKey (hODBC)) != ERROR_SUCCESS)
396 TRACE ("Error %ld closing %s ODBC.INI registry key\n", reg_ret,
402 TRACE ("Error %ld creating/opening %s ODBC.INI registry key\n",
407 WARN ("May not have replicated all %s ODBC DSNs to the registry\n",
412 /***********************************************************************
413 * ODBC_ReplicateToRegistry
419 * Unfortunately some of the functions that Windows documents as being part
420 * of the ODBC API it implements directly during compilation or something
421 * in terms of registry access functions.
422 * e.g. SQLGetInstalledDrivers queries the list at
423 * HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers
425 * This function is called when the driver manager is loaded and is used
426 * to replicate the appropriate details into the Wine registry
429 static void ODBC_ReplicateToRegistry (void)
434 if ((sql_ret = SQLAllocEnv (&hEnv)) == SQL_SUCCESS)
436 ODBC_ReplicateODBCInstToRegistry (hEnv);
437 ODBC_ReplicateODBCToRegistry (0 /* system dsns */, hEnv);
438 ODBC_ReplicateODBCToRegistry (1 /* user dsns */, hEnv);
440 if ((sql_ret = SQLFreeEnv (hEnv)) != SQL_SUCCESS)
442 TRACE ("Error %d freeing the SQL environment.\n", (int)sql_ret);
447 TRACE ("Error %d opening an SQL environment.\n", (int)sql_ret);
448 WARN ("The external ODBC settings have not been replicated to the"
453 /***********************************************************************
454 * DllMain [Internal] Initializes the internal 'ODBC32.DLL'.
457 * hinstDLL [I] handle to the DLL's instance
459 * lpvReserved [I] reserved, must be NULL
466 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
469 TRACE("Initializing or Finalizing proxy ODBC: %p,%lx,%p\n", hinstDLL, fdwReason, lpvReserved);
471 if (fdwReason == DLL_PROCESS_ATTACH)
473 TRACE("Loading ODBC...\n");
474 DisableThreadLibraryCalls(hinstDLL);
475 if (ODBC_LoadDriverManager())
477 ODBC_LoadDMFunctions();
478 ODBC_ReplicateToRegistry();
481 else if (fdwReason == DLL_PROCESS_DETACH)
483 TRACE("Unloading ODBC...\n");
484 if (gProxyHandle.bFunctionReady)
486 for ( i = 0; i < NUM_SQLFUNC; i ++ )
488 gProxyHandle.functions[i].func = SQLDummyFunc;
492 if (gProxyHandle.dmHandle)
494 wine_dlclose(gProxyHandle.dmHandle,NULL,0);
495 gProxyHandle.dmHandle = NULL;
502 /***********************************************************************
503 * ODBC_LoadDriverManager [Internal] Load ODBC library.
512 static BOOL ODBC_LoadDriverManager(void)
514 const char *s = getenv("LIB_ODBC_DRIVER_MANAGER");
519 gProxyHandle.bFunctionReady = FALSE;
520 gProxyHandle.nErrorType = ERROR_LIBRARY_NOT_FOUND;
522 if (s!= NULL && strlen (s) >= sizeof(gProxyHandle.dmLibName))
524 ERR("Driver name too long (%s)\n",s);
527 if (s == NULL || strlen(s) == 0)
529 strcpy(gProxyHandle.dmLibName, s);
531 gProxyHandle.dmHandle = wine_dlopen(gProxyHandle.dmLibName, RTLD_LAZY | RTLD_GLOBAL, error, sizeof(error));
533 if (gProxyHandle.dmHandle == NULL) /* fail to load unixODBC driver manager */
535 WARN("failed to open library %s: %s\n", gProxyHandle.dmLibName, error);
536 gProxyHandle.dmLibName[0] = '\0';
537 gProxyHandle.nErrorType = ERROR_LIBRARY_NOT_FOUND;
542 gProxyHandle.nErrorType = ERROR_FREE;
548 /***********************************************************************
549 * ODBC_LoadDMFunctions [Internal] Populate function table.
558 static BOOL ODBC_LoadDMFunctions(void)
563 if (gProxyHandle.dmHandle == NULL)
566 for ( i = 0; i < NUM_SQLFUNC; i ++ )
568 gProxyHandle.functions[i] = template_func[i];
569 gProxyHandle.functions[i].func = wine_dlsym(gProxyHandle.dmHandle,
570 gProxyHandle.functions[i].name, error, sizeof(error));
574 ERR("Failed to load function %s\n",gProxyHandle.functions[i].name);
575 gProxyHandle.functions[i].func = SQLDummyFunc;
579 gProxyHandle.bFunctionReady = TRUE;
585 /*************************************************************************
586 * SQLAllocConnect [ODBC32.001]
588 SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle)
591 TRACE("Env=%lx\n",EnvironmentHandle);
593 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
595 *ConnectionHandle = SQL_NULL_HDBC;
596 TRACE("Not ready\n");
600 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCCONNECT].func);
601 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCCONNECT].func)
602 (EnvironmentHandle, ConnectionHandle);
603 TRACE("Returns ret=%d, Handle %lx\n",ret, *ConnectionHandle);
608 /*************************************************************************
609 * SQLAllocEnv [ODBC32.002]
611 SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle)
616 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
618 *EnvironmentHandle = SQL_NULL_HENV;
619 TRACE("Not ready\n");
623 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCENV].func);
624 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCENV].func) (EnvironmentHandle);
625 TRACE("Returns ret=%d, Env=%lx\n",ret, *EnvironmentHandle);
630 /*************************************************************************
631 * SQLAllocHandle [ODBC32.024]
633 SQLRETURN WINAPI SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
636 TRACE("(Type=%d, Handle=%lx)\n",HandleType,InputHandle);
638 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
640 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
641 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
643 if (HandleType == SQL_HANDLE_ENV)
644 *OutputHandle = SQL_NULL_HENV;
645 else if (HandleType == SQL_HANDLE_DBC)
646 *OutputHandle = SQL_NULL_HDBC;
647 else if (HandleType == SQL_HANDLE_STMT)
648 *OutputHandle = SQL_NULL_HSTMT;
649 else if (HandleType == SQL_HANDLE_DESC)
650 *OutputHandle = SQL_NULL_HDESC;
652 TRACE ("Not ready\n");
656 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLE].func);
657 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLE].func)
658 (HandleType, InputHandle, OutputHandle);
659 TRACE("Returns ret=%d, Handle=%lx\n",ret, *OutputHandle);
664 /*************************************************************************
665 * SQLAllocStmt [ODBC32.003]
667 SQLRETURN WINAPI SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle)
671 TRACE("(Connection=%lx)\n",ConnectionHandle);
673 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
675 *StatementHandle = SQL_NULL_HSTMT;
676 TRACE ("Not ready\n");
680 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCSTMT].func);
681 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCSTMT].func)
682 (ConnectionHandle, StatementHandle);
683 TRACE ("Returns ret=%d, Handle=%lx\n", ret, *StatementHandle);
688 /*************************************************************************
689 * SQLAllocHandleStd [ODBC32.077]
691 SQLRETURN WINAPI SQLAllocHandleStd( SQLSMALLINT HandleType,
692 SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
694 TRACE("ProxyODBC: SQLAllocHandelStd.\n");
696 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
698 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
699 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
701 if (HandleType == SQL_HANDLE_ENV)
702 *OutputHandle = SQL_NULL_HENV;
703 else if (HandleType == SQL_HANDLE_DBC)
704 *OutputHandle = SQL_NULL_HDBC;
705 else if (HandleType == SQL_HANDLE_STMT)
706 *OutputHandle = SQL_NULL_HSTMT;
707 else if (HandleType == SQL_HANDLE_DESC)
708 *OutputHandle = SQL_NULL_HDESC;
713 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLESTD].func);
714 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLESTD].func)
715 (HandleType, InputHandle, OutputHandle);
719 /*************************************************************************
720 * SQLBindCol [ODBC32.004]
722 SQLRETURN WINAPI SQLBindCol(SQLHSTMT StatementHandle,
723 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
724 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
725 SQLINTEGER *StrLen_or_Ind)
729 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
731 TRACE ("Not ready\n");
735 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDCOL].func);
736 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDCOL].func)
737 (StatementHandle, ColumnNumber, TargetType,
738 TargetValue, BufferLength, StrLen_or_Ind);
742 /*************************************************************************
743 * SQLBindParam [ODBC32.025]
745 SQLRETURN WINAPI SQLBindParam(SQLHSTMT StatementHandle,
746 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
747 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
748 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
749 SQLINTEGER *StrLen_or_Ind)
753 CHECK_READY_AND_dmHandle();
755 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAM].func);
756 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAM].func)
757 (StatementHandle, ParameterNumber, ValueType,
758 ParameterScale, ParameterValue, StrLen_or_Ind);
762 /*************************************************************************
763 * SQLCancel [ODBC32.005]
765 SQLRETURN WINAPI SQLCancel(SQLHSTMT StatementHandle)
769 CHECK_READY_AND_dmHandle();
771 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCANCEL].func);
772 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCANCEL].func) (StatementHandle);
776 /*************************************************************************
777 * SQLCloseCursor [ODBC32.026]
779 SQLRETURN WINAPI SQLCloseCursor(SQLHSTMT StatementHandle)
782 TRACE("(Handle=%lx)\n",StatementHandle);
784 CHECK_READY_AND_dmHandle();
786 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLCLOSECURSOR].func);
787 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLCLOSECURSOR].func) (StatementHandle);
788 TRACE("returns %d\n",ret);
793 /*************************************************************************
794 * SQLColAttribute [ODBC32.027]
796 SQLRETURN WINAPI SQLColAttribute (SQLHSTMT StatementHandle,
797 SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier,
798 SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength,
799 SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute)
803 CHECK_READY_AND_dmHandle();
805 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTE].func);
806 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTE].func)
807 (StatementHandle, ColumnNumber, FieldIdentifier,
808 CharacterAttribute, BufferLength, StringLength, NumericAttribute);
812 /*************************************************************************
813 * SQLColumns [ODBC32.040]
815 SQLRETURN WINAPI SQLColumns(SQLHSTMT StatementHandle,
816 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
817 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
818 SQLCHAR *TableName, SQLSMALLINT NameLength3,
819 SQLCHAR *ColumnName, SQLSMALLINT NameLength4)
823 CHECK_READY_AND_dmHandle();
825 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNS].func);
826 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNS].func)
827 (StatementHandle, CatalogName, NameLength1,
828 SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4);
832 /*************************************************************************
833 * SQLConnect [ODBC32.007]
835 SQLRETURN WINAPI SQLConnect(SQLHDBC ConnectionHandle,
836 SQLCHAR *ServerName, SQLSMALLINT NameLength1,
837 SQLCHAR *UserName, SQLSMALLINT NameLength2,
838 SQLCHAR *Authentication, SQLSMALLINT NameLength3)
841 TRACE("(Server=%.*s)\n",NameLength1, ServerName);
843 CHECK_READY_AND_dmHandle();
845 strcpy(gProxyHandle.ServerName, ServerName);
846 strcpy(gProxyHandle.UserName, UserName);
848 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLCONNECT].func);
849 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLCONNECT].func)
850 (ConnectionHandle, ServerName, NameLength1,
851 UserName, NameLength2, Authentication, NameLength3);
853 TRACE("returns %d\n",ret);
858 /*************************************************************************
859 * SQLCopyDesc [ODBC32.028]
861 SQLRETURN WINAPI SQLCopyDesc(SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle)
865 CHECK_READY_AND_dmHandle();
867 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOPYDESC].func);
868 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOPYDESC].func)
869 (SourceDescHandle, TargetDescHandle);
873 /*************************************************************************
874 * SQLDataSources [ODBC32.057]
876 SQLRETURN WINAPI SQLDataSources(SQLHENV EnvironmentHandle,
877 SQLUSMALLINT Direction, SQLCHAR *ServerName,
878 SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1,
879 SQLCHAR *Description, SQLSMALLINT BufferLength2,
880 SQLSMALLINT *NameLength2)
884 TRACE("EnvironmentHandle = %p\n", (LPVOID)EnvironmentHandle);
886 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
888 ERR("Error: empty dm handle (gProxyHandle.dmHandle == NULL)\n");
892 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLDATASOURCES].func);
893 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLDATASOURCES].func)
894 (EnvironmentHandle, Direction, ServerName,
895 BufferLength1, NameLength1, Description, BufferLength2, NameLength2);
899 TRACE("returns: %d \t", ret);
900 if (*NameLength1 > 0)
901 TRACE("DataSource = %s,", ServerName);
902 if (*NameLength2 > 0)
903 TRACE(" Description = %s", Description);
911 /*************************************************************************
912 * SQLDescribeCol [ODBC32.008]
914 SQLRETURN WINAPI SQLDescribeCol(SQLHSTMT StatementHandle,
915 SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName,
916 SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,
917 SQLSMALLINT *DataType, SQLUINTEGER *ColumnSize,
918 SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable)
922 CHECK_READY_AND_dmHandle();
924 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBECOL].func);
925 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBECOL].func)
926 (StatementHandle, ColumnNumber, ColumnName,
927 BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable);
931 /*************************************************************************
932 * SQLDisconnect [ODBC32.009]
934 SQLRETURN WINAPI SQLDisconnect(SQLHDBC ConnectionHandle)
937 TRACE("(Handle=%lx)\n", ConnectionHandle);
939 CHECK_READY_AND_dmHandle();
941 gProxyHandle.ServerName[0] = '\0';
942 gProxyHandle.UserName[0] = '\0';
944 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLDISCONNECT].func);
945 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLDISCONNECT].func) (ConnectionHandle);
946 TRACE("returns %d\n",ret);
951 /*************************************************************************
952 * SQLEndTran [ODBC32.029]
954 SQLRETURN WINAPI SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType)
958 CHECK_READY_AND_dmHandle();
960 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLENDTRAN].func);
961 return (gProxyHandle.functions[SQLAPI_INDEX_SQLENDTRAN].func) (HandleType, Handle, CompletionType);
965 /*************************************************************************
966 * SQLError [ODBC32.010]
968 SQLRETURN WINAPI SQLError(SQLHENV EnvironmentHandle,
969 SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle,
970 SQLCHAR *Sqlstate, SQLINTEGER *NativeError,
971 SQLCHAR *MessageText, SQLSMALLINT BufferLength,
972 SQLSMALLINT *TextLength)
976 CHECK_READY_AND_dmHandle();
978 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLERROR].func);
979 return (gProxyHandle.functions[SQLAPI_INDEX_SQLERROR].func)
980 (EnvironmentHandle, ConnectionHandle, StatementHandle,
981 Sqlstate, NativeError, MessageText, BufferLength, TextLength);
985 /*************************************************************************
986 * SQLExecDirect [ODBC32.011]
988 SQLRETURN WINAPI SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
992 CHECK_READY_AND_dmHandle();
994 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECDIRECT].func);
995 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECDIRECT].func)
996 (StatementHandle, StatementText, TextLength);
1000 /*************************************************************************
1001 * SQLExecute [ODBC32.012]
1003 SQLRETURN WINAPI SQLExecute(SQLHSTMT StatementHandle)
1007 CHECK_READY_AND_dmHandle();
1009 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECUTE].func);
1010 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECUTE].func) (StatementHandle);
1014 /*************************************************************************
1015 * SQLFetch [ODBC32.013]
1017 SQLRETURN WINAPI SQLFetch(SQLHSTMT StatementHandle)
1021 CHECK_READY_AND_dmHandle();
1023 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCH].func);
1024 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCH].func) (StatementHandle);
1028 /*************************************************************************
1029 * SQLFetchScroll [ODBC32.030]
1031 SQLRETURN WINAPI SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset)
1037 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCHSCROLL].func);
1038 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCHSCROLL].func)
1039 (StatementHandle, FetchOrientation, FetchOffset);
1043 /*************************************************************************
1044 * SQLFreeConnect [ODBC32.014]
1046 SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle)
1049 TRACE("(Handle=%lx)\n",ConnectionHandle);
1053 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREECONNECT].func);
1054 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLFREECONNECT].func) (ConnectionHandle);
1055 TRACE("Returns %d\n",ret);
1060 /*************************************************************************
1061 * SQLFreeEnv [ODBC32.015]
1063 SQLRETURN WINAPI SQLFreeEnv(SQLHENV EnvironmentHandle)
1066 TRACE("(Env=%lx)\n",EnvironmentHandle);
1070 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEENV].func);
1071 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEENV].func) (EnvironmentHandle);
1072 TRACE("Returns %d\n",ret);
1077 /*************************************************************************
1078 * SQLFreeHandle [ODBC32.031]
1080 SQLRETURN WINAPI SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle)
1083 TRACE("(Type=%d, Handle=%lx)\n",HandleType,Handle);
1087 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEHANDLE].func);
1088 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEHANDLE].func)
1089 (HandleType, Handle);
1090 TRACE ("Returns %d\n",ret);
1095 /*************************************************************************
1096 * SQLFreeStmt [ODBC32.016]
1098 SQLRETURN WINAPI SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option)
1101 TRACE("(Handle %lx, Option=%d)\n",StatementHandle, Option);
1105 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREESTMT].func);
1106 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLFREESTMT].func)
1107 (StatementHandle, Option);
1108 TRACE("Returns %d\n",ret);
1113 /*************************************************************************
1114 * SQLGetConnectAttr [ODBC32.032]
1116 SQLRETURN WINAPI SQLGetConnectAttr(SQLHDBC ConnectionHandle,
1117 SQLINTEGER Attribute, SQLPOINTER Value,
1118 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
1124 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTATTR].func);
1125 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTATTR].func)
1126 (ConnectionHandle, Attribute, Value,
1127 BufferLength, StringLength);
1131 /*************************************************************************
1132 * SQLGetConnectOption [ODBC32.042]
1134 SQLRETURN WINAPI SQLGetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value)
1140 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTOPTION].func);
1141 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTOPTION].func)
1142 (ConnectionHandle, Option, Value);
1146 /*************************************************************************
1147 * SQLGetCursorName [ODBC32.017]
1149 SQLRETURN WINAPI SQLGetCursorName(SQLHSTMT StatementHandle,
1150 SQLCHAR *CursorName, SQLSMALLINT BufferLength,
1151 SQLSMALLINT *NameLength)
1157 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCURSORNAME].func);
1158 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCURSORNAME].func)
1159 (StatementHandle, CursorName, BufferLength, NameLength);
1163 /*************************************************************************
1164 * SQLGetData [ODBC32.043]
1166 SQLRETURN WINAPI SQLGetData(SQLHSTMT StatementHandle,
1167 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
1168 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
1169 SQLINTEGER *StrLen_or_Ind)
1175 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDATA].func);
1176 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDATA].func)
1177 (StatementHandle, ColumnNumber, TargetType,
1178 TargetValue, BufferLength, StrLen_or_Ind);
1182 /*************************************************************************
1183 * SQLGetDescField [ODBC32.033]
1185 SQLRETURN WINAPI SQLGetDescField(SQLHDESC DescriptorHandle,
1186 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
1187 SQLPOINTER Value, SQLINTEGER BufferLength,
1188 SQLINTEGER *StringLength)
1194 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCFIELD].func);
1195 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCFIELD].func)
1196 (DescriptorHandle, RecNumber, FieldIdentifier,
1197 Value, BufferLength, StringLength);
1201 /*************************************************************************
1202 * SQLGetDescRec [ODBC32.034]
1204 SQLRETURN WINAPI SQLGetDescRec(SQLHDESC DescriptorHandle,
1205 SQLSMALLINT RecNumber, SQLCHAR *Name,
1206 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength,
1207 SQLSMALLINT *Type, SQLSMALLINT *SubType,
1208 SQLINTEGER *Length, SQLSMALLINT *Precision,
1209 SQLSMALLINT *Scale, SQLSMALLINT *Nullable)
1215 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCREC].func);
1216 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCREC].func)
1217 (DescriptorHandle, RecNumber, Name, BufferLength,
1218 StringLength, Type, SubType, Length, Precision, Scale, Nullable);
1222 /*************************************************************************
1223 * SQLGetDiagField [ODBC32.035]
1225 SQLRETURN WINAPI SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle,
1226 SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier,
1227 SQLPOINTER DiagInfo, SQLSMALLINT BufferLength,
1228 SQLSMALLINT *StringLength)
1234 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGFIELD].func);
1235 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGFIELD].func)
1236 (HandleType, Handle, RecNumber, DiagIdentifier,
1237 DiagInfo, BufferLength, StringLength);
1241 /*************************************************************************
1242 * SQLGetDiagRec [ODBC32.036]
1244 SQLRETURN WINAPI SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle,
1245 SQLSMALLINT RecNumber, SQLCHAR *Sqlstate,
1246 SQLINTEGER *NativeError, SQLCHAR *MessageText,
1247 SQLSMALLINT BufferLength, SQLSMALLINT *TextLength)
1253 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGREC].func);
1254 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGREC].func)
1255 (HandleType, Handle, RecNumber, Sqlstate, NativeError,
1256 MessageText, BufferLength, TextLength);
1260 /*************************************************************************
1261 * SQLGetEnvAttr [ODBC32.037]
1263 SQLRETURN WINAPI SQLGetEnvAttr(SQLHENV EnvironmentHandle,
1264 SQLINTEGER Attribute, SQLPOINTER Value,
1265 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
1271 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETENVATTR].func);
1272 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETENVATTR].func)
1273 (EnvironmentHandle, Attribute, Value, BufferLength, StringLength);
1277 /*************************************************************************
1278 * SQLGetFunctions [ODBC32.044]
1280 SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported)
1286 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETFUNCTIONS].func);
1287 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETFUNCTIONS].func)
1288 (ConnectionHandle, FunctionId, Supported);
1292 /*************************************************************************
1293 * SQLGetInfo [ODBC32.045]
1295 SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle,
1296 SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
1297 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength)
1303 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETINFO].func);
1304 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETINFO].func)
1305 (ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength);
1309 /*************************************************************************
1310 * SQLGetStmtAttr [ODBC32.038]
1312 SQLRETURN WINAPI SQLGetStmtAttr(SQLHSTMT StatementHandle,
1313 SQLINTEGER Attribute, SQLPOINTER Value,
1314 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
1320 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTATTR].func);
1321 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTATTR].func)
1322 (StatementHandle, Attribute, Value, BufferLength, StringLength);
1326 /*************************************************************************
1327 * SQLGetStmtOption [ODBC32.046]
1329 SQLRETURN WINAPI SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value)
1335 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTOPTION].func);
1336 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTOPTION].func)
1337 (StatementHandle, Option, Value);
1341 /*************************************************************************
1342 * SQLGetTypeInfo [ODBC32.047]
1344 SQLRETURN WINAPI SQLGetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType)
1350 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETTYPEINFO].func);
1351 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETTYPEINFO].func)
1352 (StatementHandle, DataType);
1356 /*************************************************************************
1357 * SQLNumResultCols [ODBC32.018]
1359 SQLRETURN WINAPI SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnCount)
1365 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMRESULTCOLS].func);
1366 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMRESULTCOLS].func)
1367 (StatementHandle, ColumnCount);
1371 /*************************************************************************
1372 * SQLParamData [ODBC32.048]
1374 SQLRETURN WINAPI SQLParamData(SQLHSTMT StatementHandle, SQLPOINTER *Value)
1380 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMDATA].func);
1381 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMDATA].func)
1382 (StatementHandle, Value);
1386 /*************************************************************************
1387 * SQLPrepare [ODBC32.019]
1389 SQLRETURN WINAPI SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
1395 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPREPARE].func);
1396 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPREPARE].func)
1397 (StatementHandle, StatementText, TextLength);
1401 /*************************************************************************
1402 * SQLPutData [ODBC32.049]
1404 SQLRETURN WINAPI SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLINTEGER StrLen_or_Ind)
1410 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPUTDATA].func);
1411 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPUTDATA].func)
1412 (StatementHandle, Data, StrLen_or_Ind);
1416 /*************************************************************************
1417 * SQLRowCount [ODBC32.020]
1419 SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle, SQLINTEGER *RowCount)
1425 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLROWCOUNT].func);
1426 return (gProxyHandle.functions[SQLAPI_INDEX_SQLROWCOUNT].func)
1427 (StatementHandle, RowCount);
1431 /*************************************************************************
1432 * SQLSetConnectAttr [ODBC32.039]
1434 SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute,
1435 SQLPOINTER Value, SQLINTEGER StringLength)
1441 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTATTR].func);
1442 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTATTR].func)
1443 (ConnectionHandle, Attribute, Value, StringLength);
1447 /*************************************************************************
1448 * SQLSetConnectOption [ODBC32.050]
1450 SQLRETURN WINAPI SQLSetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1456 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTOPTION].func);
1457 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTOPTION].func)
1458 (ConnectionHandle, Option, Value);
1462 /*************************************************************************
1463 * SQLSetCursorName [ODBC32.021]
1465 SQLRETURN WINAPI SQLSetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, SQLSMALLINT NameLength)
1471 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCURSORNAME].func);
1472 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCURSORNAME].func)
1473 (StatementHandle, CursorName, NameLength);
1477 /*************************************************************************
1478 * SQLSetDescField [ODBC32.073]
1480 SQLRETURN WINAPI SQLSetDescField(SQLHDESC DescriptorHandle,
1481 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
1482 SQLPOINTER Value, SQLINTEGER BufferLength)
1488 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCFIELD].func);
1489 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCFIELD].func)
1490 (DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength);
1494 /*************************************************************************
1495 * SQLSetDescRec [ODBC32.074]
1497 SQLRETURN WINAPI SQLSetDescRec(SQLHDESC DescriptorHandle,
1498 SQLSMALLINT RecNumber, SQLSMALLINT Type,
1499 SQLSMALLINT SubType, SQLINTEGER Length,
1500 SQLSMALLINT Precision, SQLSMALLINT Scale,
1501 SQLPOINTER Data, SQLINTEGER *StringLength,
1502 SQLINTEGER *Indicator)
1508 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCREC].func);
1509 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCREC].func)
1510 (DescriptorHandle, RecNumber, Type, SubType, Length,
1511 Precision, Scale, Data, StringLength, Indicator);
1515 /*************************************************************************
1516 * SQLSetEnvAttr [ODBC32.075]
1518 SQLRETURN WINAPI SQLSetEnvAttr(SQLHENV EnvironmentHandle,
1519 SQLINTEGER Attribute, SQLPOINTER Value,
1520 SQLINTEGER StringLength)
1526 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETENVATTR].func);
1527 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETENVATTR].func)
1528 (EnvironmentHandle, Attribute, Value, StringLength);
1532 /*************************************************************************
1533 * SQLSetParam [ODBC32.022]
1535 SQLRETURN WINAPI SQLSetParam(SQLHSTMT StatementHandle,
1536 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
1537 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
1538 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
1539 SQLINTEGER *StrLen_or_Ind)
1545 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPARAM].func);
1546 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPARAM].func)
1547 (StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision,
1548 ParameterScale, ParameterValue, StrLen_or_Ind);
1552 /*************************************************************************
1553 * SQLSetStmtAttr [ODBC32.076]
1555 SQLRETURN WINAPI SQLSetStmtAttr(SQLHSTMT StatementHandle,
1556 SQLINTEGER Attribute, SQLPOINTER Value,
1557 SQLINTEGER StringLength)
1563 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTATTR].func);
1564 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTATTR].func)
1565 (StatementHandle, Attribute, Value, StringLength);
1569 /*************************************************************************
1570 * SQLSetStmtOption [ODBC32.051]
1572 SQLRETURN WINAPI SQLSetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1578 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTOPTION].func);
1579 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTOPTION].func)
1580 (StatementHandle, Option, Value);
1584 /*************************************************************************
1585 * SQLSpecialColumns [ODBC32.052]
1587 SQLRETURN WINAPI SQLSpecialColumns(SQLHSTMT StatementHandle,
1588 SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName,
1589 SQLSMALLINT NameLength1, SQLCHAR *SchemaName,
1590 SQLSMALLINT NameLength2, SQLCHAR *TableName,
1591 SQLSMALLINT NameLength3, SQLUSMALLINT Scope,
1592 SQLUSMALLINT Nullable)
1597 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSPECIALCOLUMNS].func);
1598 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSPECIALCOLUMNS].func)
1599 (StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName,
1600 NameLength2, TableName, NameLength3, Scope, Nullable);
1604 /*************************************************************************
1605 * SQLStatistics [ODBC32.053]
1607 SQLRETURN WINAPI SQLStatistics(SQLHSTMT StatementHandle,
1608 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1609 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1610 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1611 SQLUSMALLINT Unique, SQLUSMALLINT Reserved)
1617 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSTATISTICS].func);
1618 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSTATISTICS].func)
1619 (StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2,
1620 TableName, NameLength3, Unique, Reserved);
1624 /*************************************************************************
1625 * SQLTables [ODBC32.054]
1627 SQLRETURN WINAPI SQLTables(SQLHSTMT StatementHandle,
1628 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1629 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1630 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1631 SQLCHAR *TableType, SQLSMALLINT NameLength4)
1637 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLES].func);
1638 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLES].func)
1639 (StatementHandle, CatalogName, NameLength1,
1640 SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4);
1644 /*************************************************************************
1645 * SQLTransact [ODBC32.023]
1647 SQLRETURN WINAPI SQLTransact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle,
1648 SQLUSMALLINT CompletionType)
1654 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLTRANSACT].func);
1655 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTRANSACT].func)
1656 (EnvironmentHandle, ConnectionHandle, CompletionType);
1660 /*************************************************************************
1661 * SQLBrowseConnect [ODBC32.055]
1663 SQLRETURN WINAPI SQLBrowseConnect(
1665 SQLCHAR *szConnStrIn,
1666 SQLSMALLINT cbConnStrIn,
1667 SQLCHAR *szConnStrOut,
1668 SQLSMALLINT cbConnStrOutMax,
1669 SQLSMALLINT *pcbConnStrOut)
1675 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBROWSECONNECT].func);
1676 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBROWSECONNECT].func)
1677 (hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut);
1681 /*************************************************************************
1682 * SQLBulkOperations [ODBC32.078]
1684 SQLRETURN WINAPI SQLBulkOperations(
1685 SQLHSTMT StatementHandle,
1686 SQLSMALLINT Operation)
1692 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBULKOPERATIONS].func);
1693 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBULKOPERATIONS].func)
1694 (StatementHandle, Operation);
1698 /*************************************************************************
1699 * SQLColAttributes [ODBC32.006]
1701 SQLRETURN WINAPI SQLColAttributes(
1704 SQLUSMALLINT fDescType,
1706 SQLSMALLINT cbDescMax,
1707 SQLSMALLINT *pcbDesc,
1714 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTES].func);
1715 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTES].func)
1716 (hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc);
1720 /*************************************************************************
1721 * SQLColumnPrivileges [ODBC32.056]
1723 SQLRETURN WINAPI SQLColumnPrivileges(
1725 SQLCHAR *szCatalogName,
1726 SQLSMALLINT cbCatalogName,
1727 SQLCHAR *szSchemaName,
1728 SQLSMALLINT cbSchemaName,
1729 SQLCHAR *szTableName,
1730 SQLSMALLINT cbTableName,
1731 SQLCHAR *szColumnName,
1732 SQLSMALLINT cbColumnName)
1738 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES].func);
1739 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES].func)
1740 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1741 szTableName, cbTableName, szColumnName, cbColumnName);
1745 /*************************************************************************
1746 * SQLDescribeParam [ODBC32.058]
1748 SQLRETURN WINAPI SQLDescribeParam(
1751 SQLSMALLINT *pfSqlType,
1752 SQLUINTEGER *pcbParamDef,
1753 SQLSMALLINT *pibScale,
1754 SQLSMALLINT *pfNullable)
1760 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBEPARAM].func);
1761 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBEPARAM].func)
1762 (hstmt, ipar, pfSqlType, pcbParamDef, pibScale, pfNullable);
1766 /*************************************************************************
1767 * SQLExtendedFetch [ODBC32.059]
1769 SQLRETURN WINAPI SQLExtendedFetch(
1771 SQLUSMALLINT fFetchType,
1774 SQLUSMALLINT *rgfRowStatus)
1780 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLEXTENDEDFETCH].func);
1781 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXTENDEDFETCH].func)
1782 (hstmt, fFetchType, irow, pcrow, rgfRowStatus);
1786 /*************************************************************************
1787 * SQLForeignKeys [ODBC32.060]
1789 SQLRETURN WINAPI SQLForeignKeys(
1791 SQLCHAR *szPkCatalogName,
1792 SQLSMALLINT cbPkCatalogName,
1793 SQLCHAR *szPkSchemaName,
1794 SQLSMALLINT cbPkSchemaName,
1795 SQLCHAR *szPkTableName,
1796 SQLSMALLINT cbPkTableName,
1797 SQLCHAR *szFkCatalogName,
1798 SQLSMALLINT cbFkCatalogName,
1799 SQLCHAR *szFkSchemaName,
1800 SQLSMALLINT cbFkSchemaName,
1801 SQLCHAR *szFkTableName,
1802 SQLSMALLINT cbFkTableName)
1808 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFOREIGNKEYS].func);
1809 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFOREIGNKEYS].func)
1810 (hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName,
1811 szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName,
1812 cbFkSchemaName, szFkTableName, cbFkTableName);
1816 /*************************************************************************
1817 * SQLMoreResults [ODBC32.061]
1819 SQLRETURN WINAPI SQLMoreResults(SQLHSTMT hstmt)
1825 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLMORERESULTS].func);
1826 return (gProxyHandle.functions[SQLAPI_INDEX_SQLMORERESULTS].func) (hstmt);
1830 /*************************************************************************
1831 * SQLNativeSql [ODBC32.062]
1833 SQLRETURN WINAPI SQLNativeSql(
1835 SQLCHAR *szSqlStrIn,
1836 SQLINTEGER cbSqlStrIn,
1838 SQLINTEGER cbSqlStrMax,
1839 SQLINTEGER *pcbSqlStr)
1845 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLNATIVESQL].func);
1846 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNATIVESQL].func)
1847 (hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr);
1851 /*************************************************************************
1852 * SQLNumParams [ODBC32.063]
1854 SQLRETURN WINAPI SQLNumParams(
1862 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMPARAMS].func);
1863 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMPARAMS].func) (hstmt, pcpar);
1867 /*************************************************************************
1868 * SQLParamOptions [ODBC32.064]
1870 SQLRETURN WINAPI SQLParamOptions(
1879 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMOPTIONS].func);
1880 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMOPTIONS].func) (hstmt, crow, pirow);
1884 /*************************************************************************
1885 * SQLPrimaryKeys [ODBC32.065]
1887 SQLRETURN WINAPI SQLPrimaryKeys(
1889 SQLCHAR *szCatalogName,
1890 SQLSMALLINT cbCatalogName,
1891 SQLCHAR *szSchemaName,
1892 SQLSMALLINT cbSchemaName,
1893 SQLCHAR *szTableName,
1894 SQLSMALLINT cbTableName)
1900 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPRIMARYKEYS].func);
1901 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPRIMARYKEYS].func)
1902 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1903 szTableName, cbTableName);
1907 /*************************************************************************
1908 * SQLProcedureColumns [ODBC32.066]
1910 SQLRETURN WINAPI SQLProcedureColumns(
1912 SQLCHAR *szCatalogName,
1913 SQLSMALLINT cbCatalogName,
1914 SQLCHAR *szSchemaName,
1915 SQLSMALLINT cbSchemaName,
1916 SQLCHAR *szProcName,
1917 SQLSMALLINT cbProcName,
1918 SQLCHAR *szColumnName,
1919 SQLSMALLINT cbColumnName)
1925 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURECOLUMNS].func);
1926 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURECOLUMNS].func)
1927 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1928 szProcName, cbProcName, szColumnName, cbColumnName);
1932 /*************************************************************************
1933 * SQLProcedures [ODBC32.067]
1935 SQLRETURN WINAPI SQLProcedures(
1937 SQLCHAR *szCatalogName,
1938 SQLSMALLINT cbCatalogName,
1939 SQLCHAR *szSchemaName,
1940 SQLSMALLINT cbSchemaName,
1941 SQLCHAR *szProcName,
1942 SQLSMALLINT cbProcName)
1948 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURES].func);
1949 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURES].func)
1950 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1951 szProcName, cbProcName);
1955 /*************************************************************************
1956 * SQLSetPos [ODBC32.068]
1958 SQLRETURN WINAPI SQLSetPos(
1961 SQLUSMALLINT fOption,
1968 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPOS].func);
1969 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPOS].func)
1970 (hstmt, irow, fOption, fLock);
1974 /*************************************************************************
1975 * SQLTablePrivileges [ODBC32.070]
1977 SQLRETURN WINAPI SQLTablePrivileges(
1979 SQLCHAR *szCatalogName,
1980 SQLSMALLINT cbCatalogName,
1981 SQLCHAR *szSchemaName,
1982 SQLSMALLINT cbSchemaName,
1983 SQLCHAR *szTableName,
1984 SQLSMALLINT cbTableName)
1990 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLEPRIVILEGES].func);
1991 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLEPRIVILEGES].func)
1992 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1993 szTableName, cbTableName);
1997 /*************************************************************************
1998 * SQLDrivers [ODBC32.071]
2000 SQLRETURN WINAPI SQLDrivers(
2002 SQLUSMALLINT fDirection,
2003 SQLCHAR *szDriverDesc,
2004 SQLSMALLINT cbDriverDescMax,
2005 SQLSMALLINT *pcbDriverDesc,
2006 SQLCHAR *szDriverAttributes,
2007 SQLSMALLINT cbDriverAttrMax,
2008 SQLSMALLINT *pcbDriverAttr)
2014 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERS].func);
2015 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERS].func)
2016 (henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc,
2017 szDriverAttributes, cbDriverAttrMax, pcbDriverAttr);
2021 /*************************************************************************
2022 * SQLBindParameter [ODBC32.072]
2024 SQLRETURN WINAPI SQLBindParameter(
2027 SQLSMALLINT fParamType,
2029 SQLSMALLINT fSqlType,
2030 SQLUINTEGER cbColDef,
2031 SQLSMALLINT ibScale,
2032 SQLPOINTER rgbValue,
2033 SQLINTEGER cbValueMax,
2034 SQLINTEGER *pcbValue)
2040 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAMETER].func);
2041 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAMETER].func)
2042 (hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale,
2043 rgbValue, cbValueMax, pcbValue);
2047 /*************************************************************************
2048 * SQLDriverConnect [ODBC32.041]
2050 SQLRETURN WINAPI SQLDriverConnect(
2053 SQLCHAR *conn_str_in,
2054 SQLSMALLINT len_conn_str_in,
2055 SQLCHAR *conn_str_out,
2056 SQLSMALLINT conn_str_out_max,
2057 SQLSMALLINT *ptr_conn_str_out,
2058 SQLUSMALLINT driver_completion )
2064 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERCONNECT].func);
2065 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERCONNECT].func)
2066 (hdbc, hwnd, conn_str_in, len_conn_str_in, conn_str_out,
2067 conn_str_out_max, ptr_conn_str_out, driver_completion);
2071 /*************************************************************************
2072 * SQLSetScrollOptions [ODBC32.069]
2074 SQLRETURN WINAPI SQLSetScrollOptions(
2075 SQLHSTMT statement_handle,
2076 SQLUSMALLINT f_concurrency,
2077 SQLINTEGER crow_keyset,
2078 SQLUSMALLINT crow_rowset )
2084 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSCROLLOPTIONS].func);
2085 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSCROLLOPTIONS].func)
2086 (statement_handle, f_concurrency, crow_keyset, crow_rowset);