4 * Proxy ODBC driver manager. This manager delegates all ODBC calls to a real ODBC driver manager which is either:
5 * 1) its name is defined in the environment variable LIB_ODBC_DRIVER_MANAGER
6 * 2) if LIB_ODBC_DRIVER_MANAGER is not defined, a default library libodbc.so will be used.
8 * Xiang Li, Corel Corporation, Nov. 12, 1999
13 #include "wine/port.h"
21 #include "debugtools.h"
27 #include "proxyodbc.h"
29 static BOOL ODBC_LoadDriverManager(void);
30 static BOOL ODBC_LoadDMFunctions(void);
32 DEFAULT_DEBUG_CHANNEL(odbc);
34 static const DM_FUNC template_func[] =
36 /* 00 */ { SQL_API_SQLALLOCCONNECT, "SQLAllocConnect", SQLAllocConnect, NULL },
37 /* 01 */ { SQL_API_SQLALLOCENV, "SQLAllocEnv", SQLAllocEnv, NULL },
38 /* 02 */ { SQL_API_SQLALLOCHANDLE, "SQLAllocHandle", SQLAllocHandle, NULL },
39 /* 03 */ { SQL_API_SQLALLOCSTMT, "SQLAllocStmt", SQLAllocStmt, NULL },
40 /* 04 */ { SQL_API_SQLALLOCHANDLESTD, "SQLAllocHandleStd", SQLAllocHandleStd, NULL },
41 /* 05 */ { SQL_API_SQLBINDCOL, "SQLBindCol", SQLBindCol, NULL },
42 /* 06 */ { SQL_API_SQLBINDPARAM, "SQLBindParam", SQLBindParam, NULL },
43 /* 07 */ { SQL_API_SQLBINDPARAMETER, "SQLBindParameter", SQLBindParameter, NULL },
44 /* 08 */ { SQL_API_SQLBROWSECONNECT, "SQLBrowseConnect", SQLBrowseConnect, NULL },
45 /* 09 */ { SQL_API_SQLBULKOPERATIONS, "SQLBulkOperations", SQLBulkOperations, NULL },
46 /* 10 */ { SQL_API_SQLCANCEL, "SQLCancel", SQLCancel, NULL },
47 /* 11 */ { SQL_API_SQLCLOSECURSOR, "SQLCloseCursor", SQLCloseCursor, NULL },
48 /* 12 */ { SQL_API_SQLCOLATTRIBUTE, "SQLColAttribute", SQLColAttribute, NULL },
49 /* 13 */ { SQL_API_SQLCOLATTRIBUTES, "SQLColAttributes", SQLColAttributes, NULL },
50 /* 14 */ { SQL_API_SQLCOLUMNPRIVILEGES, "SQLColumnPrivileges", SQLColumnPrivileges, NULL },
51 /* 15 */ { SQL_API_SQLCOLUMNS, "SQLColumns", SQLColumns, NULL },
52 /* 16 */ { SQL_API_SQLCONNECT, "SQLConnect", SQLConnect, NULL },
53 /* 17 */ { SQL_API_SQLCOPYDESC, "SQLCopyDesc", SQLCopyDesc, NULL },
54 /* 18 */ { SQL_API_SQLDATASOURCES, "SQLDataSources", SQLDataSources, NULL },
55 /* 19 */ { SQL_API_SQLDESCRIBECOL, "SQLDescribeCol", SQLDescribeCol, NULL },
56 /* 20 */ { SQL_API_SQLDESCRIBEPARAM, "SQLDescribeParam", SQLDescribeParam, NULL },
57 /* 21 */ { SQL_API_SQLDISCONNECT, "SQLDisconnect", SQLDisconnect, NULL },
58 /* 22 */ { SQL_API_SQLDRIVERCONNECT, "SQLDriverConnect", SQLDriverConnect, NULL },
59 /* 23 */ { SQL_API_SQLDRIVERS, "SQLDrivers", SQLDrivers, NULL },
60 /* 24 */ { SQL_API_SQLENDTRAN, "SQLEndTran", SQLEndTran, NULL },
61 /* 25 */ { SQL_API_SQLERROR, "SQLError", SQLError, NULL },
62 /* 26 */ { SQL_API_SQLEXECDIRECT, "SQLExecDirect", SQLExecDirect, NULL },
63 /* 27 */ { SQL_API_SQLEXECUTE, "SQLExecute", SQLExecute, NULL },
64 /* 28 */ { SQL_API_SQLEXTENDEDFETCH, "SQLExtendedFetch", SQLExtendedFetch, NULL },
65 /* 29 */ { SQL_API_SQLFETCH, "SQLFetch", SQLFetch, NULL },
66 /* 30 */ { SQL_API_SQLFETCHSCROLL, "SQLFetchScroll", SQLFetchScroll, NULL },
67 /* 31 */ { SQL_API_SQLFOREIGNKEYS, "SQLForeignKeys", SQLForeignKeys, NULL },
68 /* 32 */ { SQL_API_SQLFREEENV, "SQLFreeEnv", SQLFreeEnv, NULL },
69 /* 33 */ { SQL_API_SQLFREEHANDLE, "SQLFreeHandle", SQLFreeHandle, NULL },
70 /* 34 */ { SQL_API_SQLFREESTMT, "SQLFreeStmt", SQLFreeStmt, NULL },
71 /* 35 */ { SQL_API_SQLFREECONNECT, "SQLFreeConnect", SQLFreeConnect, NULL },
72 /* 36 */ { SQL_API_SQLGETCONNECTATTR, "SQLGetConnectAttr", SQLGetConnectAttr, NULL },
73 /* 37 */ { SQL_API_SQLGETCONNECTOPTION, "SQLGetConnectOption", SQLGetConnectOption, NULL },
74 /* 38 */ { SQL_API_SQLGETCURSORNAME, "SQLGetCursorName", SQLGetCursorName, NULL },
75 /* 39 */ { SQL_API_SQLGETDATA, "SQLGetData", SQLGetData, NULL },
76 /* 40 */ { SQL_API_SQLGETDESCFIELD, "SQLGetDescField", SQLGetDescField, NULL },
77 /* 41 */ { SQL_API_SQLGETDESCREC, "SQLGetDescRec", SQLGetDescRec, NULL },
78 /* 42 */ { SQL_API_SQLGETDIAGFIELD, "SQLGetDiagField", SQLGetDiagField, NULL },
79 /* 43 */ { SQL_API_SQLGETENVATTR, "SQLGetEnvAttr", SQLGetEnvAttr, NULL },
80 /* 44 */ { SQL_API_SQLGETFUNCTIONS, "SQLGetFunctions", SQLGetFunctions, NULL },
81 /* 45 */ { SQL_API_SQLGETINFO, "SQLGetInfo", SQLGetInfo, NULL },
82 /* 46 */ { SQL_API_SQLGETSTMTATTR, "SQLGetStmtAttr", SQLGetStmtAttr, NULL },
83 /* 47 */ { SQL_API_SQLGETSTMTOPTION, "SQLGetStmtOption", SQLGetStmtOption, NULL },
84 /* 48 */ { SQL_API_SQLGETTYPEINFO, "SQLGetTypeInfo", SQLGetTypeInfo, NULL },
85 /* 49 */ { SQL_API_SQLMORERESULTS, "SQLMoreResults", SQLMoreResults, NULL },
86 /* 50 */ { SQL_API_SQLNATIVESQL, "SQLNativeSql", SQLNativeSql, NULL },
87 /* 51 */ { SQL_API_SQLNUMPARAMS, "SQLNumParams", SQLNumParams, NULL },
88 /* 52 */ { SQL_API_SQLNUMRESULTCOLS, "SQLNumResultCols", SQLNumResultCols, NULL },
89 /* 53 */ { SQL_API_SQLPARAMDATA, "SQLParamData", SQLParamData, NULL },
90 /* 54 */ { SQL_API_SQLPARAMOPTIONS, "SQLParamOptions", SQLParamOptions, NULL },
91 /* 55 */ { SQL_API_SQLPREPARE, "SQLPrepare", SQLPrepare, NULL },
92 /* 56 */ { SQL_API_SQLPRIMARYKEYS, "SQLPrimaryKeys", SQLPrimaryKeys, NULL },
93 /* 57 */ { SQL_API_SQLPROCEDURECOLUMNS, "SQLProcedureColumns", SQLProcedureColumns, NULL },
94 /* 58 */ { SQL_API_SQLPROCEDURES, "SQLProcedures", SQLProcedures, NULL },
95 /* 59 */ { SQL_API_SQLPUTDATA, "SQLPutData", SQLPutData, NULL },
96 /* 60 */ { SQL_API_SQLROWCOUNT, "SQLRowCount", SQLRowCount, NULL },
97 /* 61 */ { SQL_API_SQLSETCONNECTATTR, "SQLSetConnectAttr", SQLSetConnectAttr, NULL },
98 /* 62 */ { SQL_API_SQLSETCONNECTOPTION, "SQLSetConnectOption", SQLSetConnectOption, NULL },
99 /* 63 */ { SQL_API_SQLSETCURSORNAME, "SQLSetCursorName", SQLSetCursorName, NULL },
100 /* 64 */ { SQL_API_SQLSETDESCFIELD, "SQLSetDescField", SQLSetDescField, NULL },
101 /* 65 */ { SQL_API_SQLSETDESCREC, "SQLSetDescRec", SQLSetDescRec, NULL },
102 /* 66 */ { SQL_API_SQLSETENVATTR, "SQLSetEnvAttr", SQLSetEnvAttr, NULL },
103 /* 67 */ { SQL_API_SQLSETPARAM, "SQLSetParam", SQLSetParam, NULL },
104 /* 68 */ { SQL_API_SQLSETPOS, "SQLSetPos", SQLSetPos, NULL },
105 /* 69 */ { SQL_API_SQLSETSCROLLOPTIONS, "SQLSetScrollOptions", SQLSetScrollOptions, NULL },
106 /* 70 */ { SQL_API_SQLSETSTMTATTR, "SQLSetStmtAttr", SQLSetStmtAttr, NULL },
107 /* 71 */ { SQL_API_SQLSETSTMTOPTION, "SQLSetStmtOption", SQLSetStmtOption, NULL },
108 /* 72 */ { SQL_API_SQLSPECIALCOLUMNS, "SQLSpecialColumns", SQLSpecialColumns, NULL },
109 /* 73 */ { SQL_API_SQLSTATISTICS, "SQLStatistics", SQLStatistics, NULL },
110 /* 74 */ { SQL_API_SQLTABLEPRIVILEGES, "SQLTablePrivileges", SQLTablePrivileges, NULL },
111 /* 75 */ { SQL_API_SQLTABLES, "SQLTables", SQLTables, NULL },
112 /* 76 */ { SQL_API_SQLTRANSACT, "SQLTransact", SQLTransact, NULL },
113 /* 77 */ { SQL_API_SQLGETDIAGREC, "SQLGetDiagRec", SQLGetDiagRec, NULL },
116 static PROXYHANDLE gProxyHandle = {
121 ERROR_LIBRARY_NOT_FOUND,
129 /* What is the difference between these two (dmHandle cf READY_AND_dmHandle)? When does one use one and when the other? */
131 #define CHECK_dmHandle() \
133 if (gProxyHandle.dmHandle == NULL) \
135 TRACE ("Not ready\n"); \
140 #define CHECK_READY_AND_dmHandle() \
142 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL) \
144 TRACE ("Not ready\n"); \
149 SQLRETURN SQLDummyFunc()
151 TRACE("SQLDummyFunc: \n");
155 /***********************************************************************
156 * MAIN_OdbcInit [Internal] Initializes the internal 'ODBC32.DLL'.
159 * hinstDLL [I] handle to the DLL's instance
161 * lpvReserved [I] reserved, must be NULL
169 MAIN_OdbcInit(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
172 TRACE("Initializing or Finalizing proxy ODBC: %x,%lx,%p\n", hinstDLL, fdwReason, lpvReserved);
174 if (fdwReason == DLL_PROCESS_ATTACH)
176 TRACE("Loading ODBC...\n");
177 if (ODBC_LoadDriverManager())
178 ODBC_LoadDMFunctions();
180 else if (fdwReason == DLL_PROCESS_DETACH)
182 TRACE("Unloading ODBC...\n");
183 if (gProxyHandle.bFunctionReady)
185 for ( i = 0; i < NUM_SQLFUNC; i ++ )
187 gProxyHandle.functions[i].func = SQLDummyFunc;
191 if (gProxyHandle.dmHandle)
193 wine_dlclose(gProxyHandle.dmHandle,NULL,0);
194 gProxyHandle.dmHandle = NULL;
202 /***********************************************************************
203 * ODBC_LoadDriverManager [Internal] Load ODBC library.
212 static BOOL ODBC_LoadDriverManager(void)
214 const char *s = getenv("LIB_ODBC_DRIVER_MANAGER");
219 gProxyHandle.bFunctionReady = FALSE;
221 if (s!= NULL && strlen (s) >= sizeof(gProxyHandle.dmLibName))
223 ERR("Driver name too long (%s)\n",s);
226 if (s == NULL || strlen(s) == 0)
228 strcpy(gProxyHandle.dmLibName, s);
230 gProxyHandle.dmHandle = wine_dlopen(gProxyHandle.dmLibName, RTLD_LAZY, error, sizeof(error));
232 if (gProxyHandle.dmHandle == NULL) /* fail to load unixODBC driver manager */
234 WARN("failed to open library %s: %s\n", gProxyHandle.dmLibName, error);
235 gProxyHandle.dmLibName[0] = '\0';
236 gProxyHandle.nErrorType = ERROR_LIBRARY_NOT_FOUND;
241 gProxyHandle.nErrorType = ERROR_FREE;
247 /***********************************************************************
248 * ODBC_LoadDMFunctions [Internal] Populate function table.
257 static BOOL ODBC_LoadDMFunctions(void)
262 if (gProxyHandle.dmHandle == NULL)
265 for ( i = 0; i < NUM_SQLFUNC; i ++ )
267 gProxyHandle.functions[i] = template_func[i];
268 gProxyHandle.functions[i].func = wine_dlsym(gProxyHandle.dmHandle,
269 gProxyHandle.functions[i].name, error, sizeof(error));
273 ERR("Failed to load function %s\n",gProxyHandle.functions[i].name);
274 gProxyHandle.functions[i].func = SQLDummyFunc;
278 gProxyHandle.bFunctionReady = TRUE;
284 /*************************************************************************
285 * SQLAllocConnect [ODBC32.001]
287 SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle)
290 TRACE("Env=%lx\n",EnvironmentHandle);
292 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
294 *ConnectionHandle = SQL_NULL_HDBC;
295 TRACE("Not ready\n");
299 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCCONNECT].func);
300 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCCONNECT].func)
301 (EnvironmentHandle, ConnectionHandle);
302 TRACE("Returns ret=%d, Handle %lx\n",ret, *ConnectionHandle);
307 /*************************************************************************
308 * SQLAllocEnv [ODBC32.002]
310 SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle)
315 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
317 *EnvironmentHandle = SQL_NULL_HENV;
318 TRACE("Not ready\n");
322 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCENV].func);
323 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCENV].func) (EnvironmentHandle);
324 TRACE("Returns ret=%d, Env=%lx\n",ret, *EnvironmentHandle);
329 /*************************************************************************
330 * SQLAllocHandle [ODBC32.024]
332 SQLRETURN WINAPI SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
335 TRACE("(Type=%d, Handle=%lx)\n",HandleType,InputHandle);
337 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
339 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
340 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
342 if (HandleType == SQL_HANDLE_ENV)
343 *OutputHandle = SQL_NULL_HENV;
344 else if (HandleType == SQL_HANDLE_DBC)
345 *OutputHandle = SQL_NULL_HDBC;
346 else if (HandleType == SQL_HANDLE_STMT)
347 *OutputHandle = SQL_NULL_HSTMT;
348 else if (HandleType == SQL_HANDLE_DESC)
349 *OutputHandle = SQL_NULL_HDESC;
351 TRACE ("Not ready\n");
355 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLE].func);
356 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLE].func)
357 (HandleType, InputHandle, OutputHandle);
358 TRACE("Returns ret=%d, Handle=%lx\n",ret, *OutputHandle);
363 /*************************************************************************
364 * SQLAllocStmt [ODBC32.003]
366 SQLRETURN WINAPI SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle)
370 TRACE("(Connection=%lx)\n",ConnectionHandle);
372 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
374 *StatementHandle = SQL_NULL_HSTMT;
375 TRACE ("Not ready\n");
379 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCSTMT].func);
380 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCSTMT].func)
381 (ConnectionHandle, StatementHandle);
382 TRACE ("Returns ret=%d, Handle=%lx\n", ret, *StatementHandle);
387 /*************************************************************************
388 * SQLAllocHandleStd [ODBC32.077]
390 SQLRETURN WINAPI SQLAllocHandleStd( SQLSMALLINT HandleType,
391 SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
393 TRACE("ProxyODBC: SQLAllocHandelStd.\n");
395 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
397 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
398 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
400 if (HandleType == SQL_HANDLE_ENV)
401 *OutputHandle = SQL_NULL_HENV;
402 else if (HandleType == SQL_HANDLE_DBC)
403 *OutputHandle = SQL_NULL_HDBC;
404 else if (HandleType == SQL_HANDLE_STMT)
405 *OutputHandle = SQL_NULL_HSTMT;
406 else if (HandleType == SQL_HANDLE_DESC)
407 *OutputHandle = SQL_NULL_HDESC;
412 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLESTD].func);
413 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLESTD].func)
414 (HandleType, InputHandle, OutputHandle);
418 /*************************************************************************
419 * SQLBindCol [ODBC32.004]
421 SQLRETURN WINAPI SQLBindCol(SQLHSTMT StatementHandle,
422 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
423 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
424 SQLINTEGER *StrLen_or_Ind)
428 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
430 TRACE ("Not ready\n");
434 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDCOL].func);
435 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDCOL].func)
436 (StatementHandle, ColumnNumber, TargetType,
437 TargetValue, BufferLength, StrLen_or_Ind);
441 /*************************************************************************
442 * SQLBindParam [ODBC32.025]
444 SQLRETURN WINAPI SQLBindParam(SQLHSTMT StatementHandle,
445 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
446 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
447 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
448 SQLINTEGER *StrLen_or_Ind)
452 CHECK_READY_AND_dmHandle();
454 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAM].func);
455 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAM].func)
456 (StatementHandle, ParameterNumber, ValueType,
457 ParameterScale, ParameterValue, StrLen_or_Ind);
461 /*************************************************************************
462 * SQLCancel [ODBC32.005]
464 SQLRETURN WINAPI SQLCancel(SQLHSTMT StatementHandle)
468 CHECK_READY_AND_dmHandle();
470 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCANCEL].func);
471 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCANCEL].func) (StatementHandle);
475 /*************************************************************************
476 * SQLCloseCursor [ODBC32.026]
478 SQLRETURN WINAPI SQLCloseCursor(SQLHSTMT StatementHandle)
481 TRACE("(Handle=%lx)\n",StatementHandle);
483 CHECK_READY_AND_dmHandle();
485 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLCLOSECURSOR].func);
486 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLCLOSECURSOR].func) (StatementHandle);
487 TRACE("returns %d\n",ret);
492 /*************************************************************************
493 * SQLColAttribute [ODBC32.027]
495 SQLRETURN WINAPI SQLColAttribute (SQLHSTMT StatementHandle,
496 SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier,
497 SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength,
498 SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute)
502 CHECK_READY_AND_dmHandle();
504 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTE].func);
505 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTE].func)
506 (StatementHandle, ColumnNumber, FieldIdentifier,
507 CharacterAttribute, BufferLength, StringLength, NumericAttribute);
511 /*************************************************************************
512 * SQLColumns [ODBC32.040]
514 SQLRETURN WINAPI SQLColumns(SQLHSTMT StatementHandle,
515 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
516 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
517 SQLCHAR *TableName, SQLSMALLINT NameLength3,
518 SQLCHAR *ColumnName, SQLSMALLINT NameLength4)
522 CHECK_READY_AND_dmHandle();
524 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNS].func);
525 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNS].func)
526 (StatementHandle, CatalogName, NameLength1,
527 SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4);
531 /*************************************************************************
532 * SQLConnect [ODBC32.007]
534 SQLRETURN WINAPI SQLConnect(SQLHDBC ConnectionHandle,
535 SQLCHAR *ServerName, SQLSMALLINT NameLength1,
536 SQLCHAR *UserName, SQLSMALLINT NameLength2,
537 SQLCHAR *Authentication, SQLSMALLINT NameLength3)
540 TRACE("(Server=%.*s)\n",NameLength1, ServerName);
542 CHECK_READY_AND_dmHandle();
544 strcpy(gProxyHandle.ServerName, ServerName);
545 strcpy(gProxyHandle.UserName, UserName);
547 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLCONNECT].func);
548 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLCONNECT].func)
549 (ConnectionHandle, ServerName, NameLength1,
550 UserName, NameLength2, Authentication, NameLength3);
552 TRACE("returns %d\n",ret);
557 /*************************************************************************
558 * SQLCopyDesc [ODBC32.028]
560 SQLRETURN WINAPI SQLCopyDesc(SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle)
564 CHECK_READY_AND_dmHandle();
566 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOPYDESC].func);
567 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOPYDESC].func)
568 (SourceDescHandle, TargetDescHandle);
572 /*************************************************************************
573 * SQLDataSources [ODBC32.057]
575 SQLRETURN WINAPI SQLDataSources(SQLHENV EnvironmentHandle,
576 SQLUSMALLINT Direction, SQLCHAR *ServerName,
577 SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1,
578 SQLCHAR *Description, SQLSMALLINT BufferLength2,
579 SQLSMALLINT *NameLength2)
583 TRACE("EnvironmentHandle = %p\n", (LPVOID)EnvironmentHandle);
585 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
587 ERR("Error: empty dm handle (gProxyHandle.dmHandle == NULL)\n");
591 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLDATASOURCES].func);
592 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLDATASOURCES].func)
593 (EnvironmentHandle, Direction, ServerName,
594 BufferLength1, NameLength1, Description, BufferLength2, NameLength2);
598 TRACE("returns: %d \t", ret);
599 if (*NameLength1 > 0)
600 DPRINTF("DataSource = %s,", ServerName);
601 if (*NameLength2 > 0)
602 DPRINTF(" Description = %s", Description);
610 /*************************************************************************
611 * SQLDescribeCol [ODBC32.008]
613 SQLRETURN WINAPI SQLDescribeCol(SQLHSTMT StatementHandle,
614 SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName,
615 SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,
616 SQLSMALLINT *DataType, SQLUINTEGER *ColumnSize,
617 SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable)
621 CHECK_READY_AND_dmHandle();
623 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBECOL].func);
624 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBECOL].func)
625 (StatementHandle, ColumnNumber, ColumnName,
626 BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable);
630 /*************************************************************************
631 * SQLDisconnect [ODBC32.009]
633 SQLRETURN WINAPI SQLDisconnect(SQLHDBC ConnectionHandle)
636 TRACE("(Handle=%lx)\n", ConnectionHandle);
638 CHECK_READY_AND_dmHandle();
640 gProxyHandle.ServerName[0] = '\0';
641 gProxyHandle.UserName[0] = '\0';
643 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLDISCONNECT].func);
644 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLDISCONNECT].func) (ConnectionHandle);
645 TRACE("returns %d\n",ret);
650 /*************************************************************************
651 * SQLEndTran [ODBC32.029]
653 SQLRETURN WINAPI SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType)
657 CHECK_READY_AND_dmHandle();
659 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLENDTRAN].func);
660 return (gProxyHandle.functions[SQLAPI_INDEX_SQLENDTRAN].func) (HandleType, Handle, CompletionType);
664 /*************************************************************************
665 * SQLError [ODBC32.010]
667 SQLRETURN WINAPI SQLError(SQLHENV EnvironmentHandle,
668 SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle,
669 SQLCHAR *Sqlstate, SQLINTEGER *NativeError,
670 SQLCHAR *MessageText, SQLSMALLINT BufferLength,
671 SQLSMALLINT *TextLength)
675 CHECK_READY_AND_dmHandle();
677 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLERROR].func);
678 return (gProxyHandle.functions[SQLAPI_INDEX_SQLERROR].func)
679 (EnvironmentHandle, ConnectionHandle, StatementHandle,
680 Sqlstate, NativeError, MessageText, BufferLength, TextLength);
684 /*************************************************************************
685 * SQLExecDirect [ODBC32.011]
687 SQLRETURN WINAPI SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
691 CHECK_READY_AND_dmHandle();
693 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECDIRECT].func);
694 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECDIRECT].func)
695 (StatementHandle, StatementText, TextLength);
699 /*************************************************************************
700 * SQLExecute [ODBC32.012]
702 SQLRETURN WINAPI SQLExecute(SQLHSTMT StatementHandle)
706 CHECK_READY_AND_dmHandle();
708 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECUTE].func);
709 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECUTE].func) (StatementHandle);
713 /*************************************************************************
714 * SQLFetch [ODBC32.013]
716 SQLRETURN WINAPI SQLFetch(SQLHSTMT StatementHandle)
720 CHECK_READY_AND_dmHandle();
722 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCH].func);
723 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCH].func) (StatementHandle);
727 /*************************************************************************
728 * SQLFetchScroll [ODBC32.030]
730 SQLRETURN WINAPI SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset)
736 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCHSCROLL].func);
737 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCHSCROLL].func)
738 (StatementHandle, FetchOrientation, FetchOffset);
742 /*************************************************************************
743 * SQLFreeConnect [ODBC32.014]
745 SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle)
748 TRACE("(Handle=%lx)\n",ConnectionHandle);
752 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREECONNECT].func);
753 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLFREECONNECT].func) (ConnectionHandle);
754 TRACE("Returns %d\n",ret);
759 /*************************************************************************
760 * SQLFreeEnv [ODBC32.015]
762 SQLRETURN WINAPI SQLFreeEnv(SQLHENV EnvironmentHandle)
765 TRACE("(Env=%lx)\n",EnvironmentHandle);
769 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEENV].func);
770 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEENV].func) (EnvironmentHandle);
771 TRACE("Returns %d\n",ret);
776 /*************************************************************************
777 * SQLFreeHandle [ODBC32.031]
779 SQLRETURN WINAPI SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle)
782 TRACE("(Type=%d, Handle=%lx)\n",HandleType,Handle);
786 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEHANDLE].func);
787 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEHANDLE].func)
788 (HandleType, Handle);
789 TRACE ("Returns %d\n",ret);
794 /*************************************************************************
795 * SQLFreeStmt [ODBC32.016]
797 SQLRETURN WINAPI SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option)
800 TRACE("(Handle %lx, Option=%d)\n",StatementHandle, Option);
804 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREESTMT].func);
805 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLFREESTMT].func)
806 (StatementHandle, Option);
807 TRACE("Returns %d\n",ret);
812 /*************************************************************************
813 * SQLGetConnectAttr [ODBC32.032]
815 SQLRETURN WINAPI SQLGetConnectAttr(SQLHDBC ConnectionHandle,
816 SQLINTEGER Attribute, SQLPOINTER Value,
817 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
823 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTATTR].func);
824 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTATTR].func)
825 (ConnectionHandle, Attribute, Value,
826 BufferLength, StringLength);
830 /*************************************************************************
831 * SQLGetConnectOption [ODBC32.042]
833 SQLRETURN WINAPI SQLGetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value)
839 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTOPTION].func);
840 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTOPTION].func)
841 (ConnectionHandle, Option, Value);
845 /*************************************************************************
846 * SQLGetCursorName [ODBC32.017]
848 SQLRETURN WINAPI SQLGetCursorName(SQLHSTMT StatementHandle,
849 SQLCHAR *CursorName, SQLSMALLINT BufferLength,
850 SQLSMALLINT *NameLength)
856 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCURSORNAME].func);
857 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCURSORNAME].func)
858 (StatementHandle, CursorName, BufferLength, NameLength);
862 /*************************************************************************
863 * SQLGetData [ODBC32.043]
865 SQLRETURN WINAPI SQLGetData(SQLHSTMT StatementHandle,
866 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
867 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
868 SQLINTEGER *StrLen_or_Ind)
874 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDATA].func);
875 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDATA].func)
876 (StatementHandle, ColumnNumber, TargetType,
877 TargetValue, BufferLength, StrLen_or_Ind);
881 /*************************************************************************
882 * SQLGetDescField [ODBC32.033]
884 SQLRETURN WINAPI SQLGetDescField(SQLHDESC DescriptorHandle,
885 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
886 SQLPOINTER Value, SQLINTEGER BufferLength,
887 SQLINTEGER *StringLength)
893 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCFIELD].func);
894 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCFIELD].func)
895 (DescriptorHandle, RecNumber, FieldIdentifier,
896 Value, BufferLength, StringLength);
900 /*************************************************************************
901 * SQLGetDescRec [ODBC32.034]
903 SQLRETURN WINAPI SQLGetDescRec(SQLHDESC DescriptorHandle,
904 SQLSMALLINT RecNumber, SQLCHAR *Name,
905 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength,
906 SQLSMALLINT *Type, SQLSMALLINT *SubType,
907 SQLINTEGER *Length, SQLSMALLINT *Precision,
908 SQLSMALLINT *Scale, SQLSMALLINT *Nullable)
914 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCREC].func);
915 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCREC].func)
916 (DescriptorHandle, RecNumber, Name, BufferLength,
917 StringLength, Type, SubType, Length, Precision, Scale, Nullable);
921 /*************************************************************************
922 * SQLGetDiagField [ODBC32.035]
924 SQLRETURN WINAPI SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle,
925 SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier,
926 SQLPOINTER DiagInfo, SQLSMALLINT BufferLength,
927 SQLSMALLINT *StringLength)
933 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGFIELD].func);
934 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGFIELD].func)
935 (HandleType, Handle, RecNumber, DiagIdentifier,
936 DiagInfo, BufferLength, StringLength);
940 /*************************************************************************
941 * SQLGetDiagRec [ODBC32.036]
943 SQLRETURN WINAPI SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle,
944 SQLSMALLINT RecNumber, SQLCHAR *Sqlstate,
945 SQLINTEGER *NativeError, SQLCHAR *MessageText,
946 SQLSMALLINT BufferLength, SQLSMALLINT *TextLength)
952 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGREC].func);
953 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGREC].func)
954 (HandleType, Handle, RecNumber, Sqlstate, NativeError,
955 MessageText, BufferLength, TextLength);
959 /*************************************************************************
960 * SQLGetEnvAttr [ODBC32.037]
962 SQLRETURN WINAPI SQLGetEnvAttr(SQLHENV EnvironmentHandle,
963 SQLINTEGER Attribute, SQLPOINTER Value,
964 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
970 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETENVATTR].func);
971 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETENVATTR].func)
972 (EnvironmentHandle, Attribute, Value, BufferLength, StringLength);
976 /*************************************************************************
977 * SQLGetFunctions [ODBC32.044]
979 SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported)
985 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETFUNCTIONS].func);
986 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETFUNCTIONS].func)
987 (ConnectionHandle, FunctionId, Supported);
991 /*************************************************************************
992 * SQLGetInfo [ODBC32.045]
994 SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle,
995 SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
996 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength)
1002 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETINFO].func);
1003 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETINFO].func)
1004 (ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength);
1008 /*************************************************************************
1009 * SQLGetStmtAttr [ODBC32.038]
1011 SQLRETURN WINAPI SQLGetStmtAttr(SQLHSTMT StatementHandle,
1012 SQLINTEGER Attribute, SQLPOINTER Value,
1013 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
1019 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTATTR].func);
1020 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTATTR].func)
1021 (StatementHandle, Attribute, Value, BufferLength, StringLength);
1025 /*************************************************************************
1026 * SQLGetStmtOption [ODBC32.046]
1028 SQLRETURN WINAPI SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value)
1034 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTOPTION].func);
1035 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTOPTION].func)
1036 (StatementHandle, Option, Value);
1040 /*************************************************************************
1041 * SQLGetTypeInfo [ODBC32.047]
1043 SQLRETURN WINAPI SQLGetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType)
1049 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETTYPEINFO].func);
1050 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETTYPEINFO].func)
1051 (StatementHandle, DataType);
1055 /*************************************************************************
1056 * SQLNumResultCols [ODBC32.018]
1058 SQLRETURN WINAPI SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnCount)
1064 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMRESULTCOLS].func);
1065 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMRESULTCOLS].func)
1066 (StatementHandle, ColumnCount);
1070 /*************************************************************************
1071 * SQLParamData [ODBC32.048]
1073 SQLRETURN WINAPI SQLParamData(SQLHSTMT StatementHandle, SQLPOINTER *Value)
1079 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMDATA].func);
1080 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMDATA].func)
1081 (StatementHandle, Value);
1085 /*************************************************************************
1086 * SQLPrepare [ODBC32.019]
1088 SQLRETURN WINAPI SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
1094 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPREPARE].func);
1095 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPREPARE].func)
1096 (StatementHandle, StatementText, TextLength);
1100 /*************************************************************************
1101 * SQLPutData [ODBC32.049]
1103 SQLRETURN WINAPI SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLINTEGER StrLen_or_Ind)
1109 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPUTDATA].func);
1110 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPUTDATA].func)
1111 (StatementHandle, Data, StrLen_or_Ind);
1115 /*************************************************************************
1116 * SQLRowCount [ODBC32.020]
1118 SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle, SQLINTEGER *RowCount)
1124 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLROWCOUNT].func);
1125 return (gProxyHandle.functions[SQLAPI_INDEX_SQLROWCOUNT].func)
1126 (StatementHandle, RowCount);
1130 /*************************************************************************
1131 * SQLSetConnectAttr [ODBC32.039]
1133 SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute,
1134 SQLPOINTER Value, SQLINTEGER StringLength)
1140 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTATTR].func);
1141 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTATTR].func)
1142 (ConnectionHandle, Attribute, Value, StringLength);
1146 /*************************************************************************
1147 * SQLSetConnectOption [ODBC32.050]
1149 SQLRETURN WINAPI SQLSetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1155 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTOPTION].func);
1156 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTOPTION].func)
1157 (ConnectionHandle, Option, Value);
1161 /*************************************************************************
1162 * SQLSetCursorName [ODBC32.021]
1164 SQLRETURN WINAPI SQLSetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, SQLSMALLINT NameLength)
1170 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCURSORNAME].func);
1171 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCURSORNAME].func)
1172 (StatementHandle, CursorName, NameLength);
1176 /*************************************************************************
1177 * SQLSetDescField [ODBC32.073]
1179 SQLRETURN WINAPI SQLSetDescField(SQLHDESC DescriptorHandle,
1180 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
1181 SQLPOINTER Value, SQLINTEGER BufferLength)
1187 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCFIELD].func);
1188 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCFIELD].func)
1189 (DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength);
1193 /*************************************************************************
1194 * SQLSetDescRec [ODBC32.074]
1196 SQLRETURN WINAPI SQLSetDescRec(SQLHDESC DescriptorHandle,
1197 SQLSMALLINT RecNumber, SQLSMALLINT Type,
1198 SQLSMALLINT SubType, SQLINTEGER Length,
1199 SQLSMALLINT Precision, SQLSMALLINT Scale,
1200 SQLPOINTER Data, SQLINTEGER *StringLength,
1201 SQLINTEGER *Indicator)
1207 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCREC].func);
1208 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCREC].func)
1209 (DescriptorHandle, RecNumber, Type, SubType, Length,
1210 Precision, Scale, Data, StringLength, Indicator);
1214 /*************************************************************************
1215 * SQLSetEnvAttr [ODBC32.075]
1217 SQLRETURN WINAPI SQLSetEnvAttr(SQLHENV EnvironmentHandle,
1218 SQLINTEGER Attribute, SQLPOINTER Value,
1219 SQLINTEGER StringLength)
1225 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETENVATTR].func);
1226 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETENVATTR].func)
1227 (EnvironmentHandle, Attribute, Value, StringLength);
1231 /*************************************************************************
1232 * SQLSetParam [ODBC32.022]
1234 SQLRETURN WINAPI SQLSetParam(SQLHSTMT StatementHandle,
1235 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
1236 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
1237 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
1238 SQLINTEGER *StrLen_or_Ind)
1244 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPARAM].func);
1245 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPARAM].func)
1246 (StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision,
1247 ParameterScale, ParameterValue, StrLen_or_Ind);
1251 /*************************************************************************
1252 * SQLSetStmtAttr [ODBC32.076]
1254 SQLRETURN WINAPI SQLSetStmtAttr(SQLHSTMT StatementHandle,
1255 SQLINTEGER Attribute, SQLPOINTER Value,
1256 SQLINTEGER StringLength)
1262 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTATTR].func);
1263 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTATTR].func)
1264 (StatementHandle, Attribute, Value, StringLength);
1268 /*************************************************************************
1269 * SQLSetStmtOption [ODBC32.051]
1271 SQLRETURN WINAPI SQLSetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1277 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTOPTION].func);
1278 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTOPTION].func)
1279 (StatementHandle, Option, Value);
1283 /*************************************************************************
1284 * SQLSpecialColumns [ODBC32.052]
1286 SQLRETURN WINAPI SQLSpecialColumns(SQLHSTMT StatementHandle,
1287 SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName,
1288 SQLSMALLINT NameLength1, SQLCHAR *SchemaName,
1289 SQLSMALLINT NameLength2, SQLCHAR *TableName,
1290 SQLSMALLINT NameLength3, SQLUSMALLINT Scope,
1291 SQLUSMALLINT Nullable)
1296 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSPECIALCOLUMNS].func);
1297 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSPECIALCOLUMNS].func)
1298 (StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName,
1299 NameLength2, TableName, NameLength3, Scope, Nullable);
1303 /*************************************************************************
1304 * SQLStatistics [ODBC32.053]
1306 SQLRETURN WINAPI SQLStatistics(SQLHSTMT StatementHandle,
1307 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1308 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1309 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1310 SQLUSMALLINT Unique, SQLUSMALLINT Reserved)
1316 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSTATISTICS].func);
1317 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSTATISTICS].func)
1318 (StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2,
1319 TableName, NameLength3, Unique, Reserved);
1323 /*************************************************************************
1324 * SQLTables [ODBC32.054]
1326 SQLRETURN WINAPI SQLTables(SQLHSTMT StatementHandle,
1327 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1328 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1329 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1330 SQLCHAR *TableType, SQLSMALLINT NameLength4)
1336 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLES].func);
1337 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLES].func)
1338 (StatementHandle, CatalogName, NameLength1,
1339 SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4);
1343 /*************************************************************************
1344 * SQLTransact [ODBC32.023]
1346 SQLRETURN WINAPI SQLTransact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle,
1347 SQLUSMALLINT CompletionType)
1353 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLTRANSACT].func);
1354 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTRANSACT].func)
1355 (EnvironmentHandle, ConnectionHandle, CompletionType);
1359 /*************************************************************************
1360 * SQLBrowseConnect [ODBC32.055]
1362 SQLRETURN WINAPI SQLBrowseConnect(
1364 SQLCHAR *szConnStrIn,
1365 SQLSMALLINT cbConnStrIn,
1366 SQLCHAR *szConnStrOut,
1367 SQLSMALLINT cbConnStrOutMax,
1368 SQLSMALLINT *pcbConnStrOut)
1374 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBROWSECONNECT].func);
1375 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBROWSECONNECT].func)
1376 (hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut);
1380 /*************************************************************************
1381 * SQLBulkOperations [ODBC32.078]
1383 SQLRETURN WINAPI SQLBulkOperations(
1384 SQLHSTMT StatementHandle,
1385 SQLSMALLINT Operation)
1391 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBULKOPERATIONS].func);
1392 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBULKOPERATIONS].func)
1393 (StatementHandle, Operation);
1397 /*************************************************************************
1398 * SQLColAttributes [ODBC32.006]
1400 SQLRETURN WINAPI SQLColAttributes(
1403 SQLUSMALLINT fDescType,
1405 SQLSMALLINT cbDescMax,
1406 SQLSMALLINT *pcbDesc,
1413 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTES].func);
1414 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTES].func)
1415 (hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc);
1419 /*************************************************************************
1420 * SQLColumnPrivileges [ODBC32.056]
1422 SQLRETURN WINAPI SQLColumnPrivileges(
1424 SQLCHAR *szCatalogName,
1425 SQLSMALLINT cbCatalogName,
1426 SQLCHAR *szSchemaName,
1427 SQLSMALLINT cbSchemaName,
1428 SQLCHAR *szTableName,
1429 SQLSMALLINT cbTableName,
1430 SQLCHAR *szColumnName,
1431 SQLSMALLINT cbColumnName)
1437 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES].func);
1438 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES].func)
1439 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1440 szTableName, cbTableName, szColumnName, cbColumnName);
1444 /*************************************************************************
1445 * SQLDescribeParam [ODBC32.058]
1447 SQLRETURN WINAPI SQLDescribeParam(
1450 SQLSMALLINT *pfSqlType,
1451 SQLUINTEGER *pcbParamDef,
1452 SQLSMALLINT *pibScale,
1453 SQLSMALLINT *pfNullable)
1459 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBEPARAM].func);
1460 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBEPARAM].func)
1461 (hstmt, ipar, pfSqlType, pcbParamDef, pibScale, pfNullable);
1465 /*************************************************************************
1466 * SQLExtendedFetch [ODBC32.059]
1468 SQLRETURN WINAPI SQLExtendedFetch(
1470 SQLUSMALLINT fFetchType,
1473 SQLUSMALLINT *rgfRowStatus)
1479 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLEXTENDEDFETCH].func);
1480 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXTENDEDFETCH].func)
1481 (hstmt, fFetchType, irow, pcrow, rgfRowStatus);
1485 /*************************************************************************
1486 * SQLForeignKeys [ODBC32.060]
1488 SQLRETURN WINAPI SQLForeignKeys(
1490 SQLCHAR *szPkCatalogName,
1491 SQLSMALLINT cbPkCatalogName,
1492 SQLCHAR *szPkSchemaName,
1493 SQLSMALLINT cbPkSchemaName,
1494 SQLCHAR *szPkTableName,
1495 SQLSMALLINT cbPkTableName,
1496 SQLCHAR *szFkCatalogName,
1497 SQLSMALLINT cbFkCatalogName,
1498 SQLCHAR *szFkSchemaName,
1499 SQLSMALLINT cbFkSchemaName,
1500 SQLCHAR *szFkTableName,
1501 SQLSMALLINT cbFkTableName)
1507 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFOREIGNKEYS].func);
1508 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFOREIGNKEYS].func)
1509 (hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName,
1510 szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName,
1511 cbFkSchemaName, szFkTableName, cbFkTableName);
1515 /*************************************************************************
1516 * SQLMoreResults [ODBC32.061]
1518 SQLRETURN WINAPI SQLMoreResults(SQLHSTMT hstmt)
1524 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLMORERESULTS].func);
1525 return (gProxyHandle.functions[SQLAPI_INDEX_SQLMORERESULTS].func) (hstmt);
1529 /*************************************************************************
1530 * SQLNativeSql [ODBC32.062]
1532 SQLRETURN WINAPI SQLNativeSql(
1534 SQLCHAR *szSqlStrIn,
1535 SQLINTEGER cbSqlStrIn,
1537 SQLINTEGER cbSqlStrMax,
1538 SQLINTEGER *pcbSqlStr)
1544 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLNATIVESQL].func);
1545 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNATIVESQL].func)
1546 (hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr);
1550 /*************************************************************************
1551 * SQLNumParams [ODBC32.063]
1553 SQLRETURN WINAPI SQLNumParams(
1561 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMPARAMS].func);
1562 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMPARAMS].func) (hstmt, pcpar);
1566 /*************************************************************************
1567 * SQLParamOptions [ODBC32.064]
1569 SQLRETURN WINAPI SQLParamOptions(
1578 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMOPTIONS].func);
1579 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMOPTIONS].func) (hstmt, crow, pirow);
1583 /*************************************************************************
1584 * SQLPrimaryKeys [ODBC32.065]
1586 SQLRETURN WINAPI SQLPrimaryKeys(
1588 SQLCHAR *szCatalogName,
1589 SQLSMALLINT cbCatalogName,
1590 SQLCHAR *szSchemaName,
1591 SQLSMALLINT cbSchemaName,
1592 SQLCHAR *szTableName,
1593 SQLSMALLINT cbTableName)
1599 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPRIMARYKEYS].func);
1600 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPRIMARYKEYS].func)
1601 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1602 szTableName, cbTableName);
1606 /*************************************************************************
1607 * SQLProcedureColumns [ODBC32.066]
1609 SQLRETURN WINAPI SQLProcedureColumns(
1611 SQLCHAR *szCatalogName,
1612 SQLSMALLINT cbCatalogName,
1613 SQLCHAR *szSchemaName,
1614 SQLSMALLINT cbSchemaName,
1615 SQLCHAR *szProcName,
1616 SQLSMALLINT cbProcName,
1617 SQLCHAR *szColumnName,
1618 SQLSMALLINT cbColumnName)
1624 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURECOLUMNS].func);
1625 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURECOLUMNS].func)
1626 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1627 szProcName, cbProcName, szColumnName, cbColumnName);
1631 /*************************************************************************
1632 * SQLProcedures [ODBC32.067]
1634 SQLRETURN WINAPI SQLProcedures(
1636 SQLCHAR *szCatalogName,
1637 SQLSMALLINT cbCatalogName,
1638 SQLCHAR *szSchemaName,
1639 SQLSMALLINT cbSchemaName,
1640 SQLCHAR *szProcName,
1641 SQLSMALLINT cbProcName)
1647 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURES].func);
1648 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURES].func)
1649 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1650 szProcName, cbProcName);
1654 /*************************************************************************
1655 * SQLSetPos [ODBC32.068]
1657 SQLRETURN WINAPI SQLSetPos(
1660 SQLUSMALLINT fOption,
1667 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPOS].func);
1668 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPOS].func)
1669 (hstmt, irow, fOption, fLock);
1673 /*************************************************************************
1674 * SQLTablePrivileges [ODBC32.070]
1676 SQLRETURN WINAPI SQLTablePrivileges(
1678 SQLCHAR *szCatalogName,
1679 SQLSMALLINT cbCatalogName,
1680 SQLCHAR *szSchemaName,
1681 SQLSMALLINT cbSchemaName,
1682 SQLCHAR *szTableName,
1683 SQLSMALLINT cbTableName)
1689 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLEPRIVILEGES].func);
1690 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLEPRIVILEGES].func)
1691 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1692 szTableName, cbTableName);
1696 /*************************************************************************
1697 * SQLDrivers [ODBC32.071]
1699 SQLRETURN WINAPI SQLDrivers(
1701 SQLUSMALLINT fDirection,
1702 SQLCHAR *szDriverDesc,
1703 SQLSMALLINT cbDriverDescMax,
1704 SQLSMALLINT *pcbDriverDesc,
1705 SQLCHAR *szDriverAttributes,
1706 SQLSMALLINT cbDriverAttrMax,
1707 SQLSMALLINT *pcbDriverAttr)
1713 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERS].func);
1714 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERS].func)
1715 (henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc,
1716 szDriverAttributes, cbDriverAttrMax, pcbDriverAttr);
1720 /*************************************************************************
1721 * SQLBindParameter [ODBC32.072]
1723 SQLRETURN WINAPI SQLBindParameter(
1726 SQLSMALLINT fParamType,
1728 SQLSMALLINT fSqlType,
1729 SQLUINTEGER cbColDef,
1730 SQLSMALLINT ibScale,
1731 SQLPOINTER rgbValue,
1732 SQLINTEGER cbValueMax,
1733 SQLINTEGER *pcbValue)
1739 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAMETER].func);
1740 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAMETER].func)
1741 (hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale,
1742 rgbValue, cbValueMax, pcbValue);
1746 /*************************************************************************
1747 * SQLDriverConnect [ODBC32.041]
1749 SQLRETURN WINAPI SQLDriverConnect(
1752 SQLCHAR *conn_str_in,
1753 SQLSMALLINT len_conn_str_in,
1754 SQLCHAR *conn_str_out,
1755 SQLSMALLINT conn_str_out_max,
1756 SQLSMALLINT *ptr_conn_str_out,
1757 SQLUSMALLINT driver_completion )
1763 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERCONNECT].func);
1764 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERCONNECT].func)
1765 (hdbc, hwnd, conn_str_in, len_conn_str_in, conn_str_out,
1766 conn_str_out_max, ptr_conn_str_out, driver_completion);
1770 /*************************************************************************
1771 * SQLSetScrollOptions [ODBC32.069]
1773 SQLRETURN WINAPI SQLSetScrollOptions(
1774 SQLHSTMT statement_handle,
1775 SQLUSMALLINT f_concurrency,
1776 SQLINTEGER crow_keyset,
1777 SQLUSMALLINT crow_rowset )
1783 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSCROLLOPTIONS].func);
1784 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSCROLLOPTIONS].func)
1785 (statement_handle, f_concurrency, crow_keyset, crow_rowset);