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
18 #include "debugtools.h"
19 #include "wine/port.h"
25 #include "proxyodbc.h"
27 static BOOL ODBC_LoadDriverManager(void);
28 static BOOL ODBC_LoadDMFunctions(void);
30 DEFAULT_DEBUG_CHANNEL(odbc);
32 static const DM_FUNC template_func[] =
34 /* 00 */ { SQL_API_SQLALLOCCONNECT, "SQLAllocConnect", SQLAllocConnect, NULL },
35 /* 01 */ { SQL_API_SQLALLOCENV, "SQLAllocEnv", SQLAllocEnv, NULL },
36 /* 02 */ { SQL_API_SQLALLOCHANDLE, "SQLAllocHandle", SQLAllocHandle, NULL },
37 /* 03 */ { SQL_API_SQLALLOCSTMT, "SQLAllocStmt", SQLAllocStmt, NULL },
38 /* 04 */ { SQL_API_SQLALLOCHANDLESTD, "SQLAllocHandleStd", SQLAllocHandleStd, NULL },
39 /* 05 */ { SQL_API_SQLBINDCOL, "SQLBindCol", SQLBindCol, NULL },
40 /* 06 */ { SQL_API_SQLBINDPARAM, "SQLBindParam", SQLBindParam, NULL },
41 /* 07 */ { SQL_API_SQLBINDPARAMETER, "SQLBindParameter", SQLBindParameter, NULL },
42 /* 08 */ { SQL_API_SQLBROWSECONNECT, "SQLBrowseConnect", SQLBrowseConnect, NULL },
43 /* 09 */ { SQL_API_SQLBULKOPERATIONS, "SQLBulkOperations", SQLBulkOperations, NULL },
44 /* 10 */ { SQL_API_SQLCANCEL, "SQLCancel", SQLCancel, NULL },
45 /* 11 */ { SQL_API_SQLCLOSECURSOR, "SQLCloseCursor", SQLCloseCursor, NULL },
46 /* 12 */ { SQL_API_SQLCOLATTRIBUTE, "SQLColAttribute", SQLColAttribute, NULL },
47 /* 13 */ { SQL_API_SQLCOLATTRIBUTES, "SQLColAttributes", SQLColAttributes, NULL },
48 /* 14 */ { SQL_API_SQLCOLUMNPRIVILEGES, "SQLColumnPrivileges", SQLColumnPrivileges, NULL },
49 /* 15 */ { SQL_API_SQLCOLUMNS, "SQLColumns", SQLColumns, NULL },
50 /* 16 */ { SQL_API_SQLCONNECT, "SQLConnect", SQLConnect, NULL },
51 /* 17 */ { SQL_API_SQLCOPYDESC, "SQLCopyDesc", SQLCopyDesc, NULL },
52 /* 18 */ { SQL_API_SQLDATASOURCES, "SQLDataSources", SQLDataSources, NULL },
53 /* 19 */ { SQL_API_SQLDESCRIBECOL, "SQLDescribeCol", SQLDescribeCol, NULL },
54 /* 20 */ { SQL_API_SQLDESCRIBEPARAM, "SQLDescribeParam", SQLDescribeParam, NULL },
55 /* 21 */ { SQL_API_SQLDISCONNECT, "SQLDisconnect", SQLDisconnect, NULL },
56 /* 22 */ { SQL_API_SQLDRIVERCONNECT, "SQLDriverConnect", SQLDriverConnect, NULL },
57 /* 23 */ { SQL_API_SQLDRIVERS, "SQLDrivers", SQLDrivers, NULL },
58 /* 24 */ { SQL_API_SQLENDTRAN, "SQLEndTran", SQLEndTran, NULL },
59 /* 25 */ { SQL_API_SQLERROR, "SQLError", SQLError, NULL },
60 /* 26 */ { SQL_API_SQLEXECDIRECT, "SQLExecDirect", SQLExecDirect, NULL },
61 /* 27 */ { SQL_API_SQLEXECUTE, "SQLExecute", SQLExecute, NULL },
62 /* 28 */ { SQL_API_SQLEXTENDEDFETCH, "SQLExtendedFetch", SQLExtendedFetch, NULL },
63 /* 29 */ { SQL_API_SQLFETCH, "SQLFetch", SQLFetch, NULL },
64 /* 30 */ { SQL_API_SQLFETCHSCROLL, "SQLFetchScroll", SQLFetchScroll, NULL },
65 /* 31 */ { SQL_API_SQLFOREIGNKEYS, "SQLForeignKeys", SQLForeignKeys, NULL },
66 /* 32 */ { SQL_API_SQLFREEENV, "SQLFreeEnv", SQLFreeEnv, NULL },
67 /* 33 */ { SQL_API_SQLFREEHANDLE, "SQLFreeHandle", SQLFreeHandle, NULL },
68 /* 34 */ { SQL_API_SQLFREESTMT, "SQLFreeStmt", SQLFreeStmt, NULL },
69 /* 35 */ { SQL_API_SQLFREECONNECT, "SQLFreeConnect", SQLFreeConnect, NULL },
70 /* 36 */ { SQL_API_SQLGETCONNECTATTR, "SQLGetConnectAttr", SQLGetConnectAttr, NULL },
71 /* 37 */ { SQL_API_SQLGETCONNECTOPTION, "SQLGetConnectOption", SQLGetConnectOption, NULL },
72 /* 38 */ { SQL_API_SQLGETCURSORNAME, "SQLGetCursorName", SQLGetCursorName, NULL },
73 /* 39 */ { SQL_API_SQLGETDATA, "SQLGetData", SQLGetData, NULL },
74 /* 40 */ { SQL_API_SQLGETDESCFIELD, "SQLGetDescField", SQLGetDescField, NULL },
75 /* 41 */ { SQL_API_SQLGETDESCREC, "SQLGetDescRec", SQLGetDescRec, NULL },
76 /* 42 */ { SQL_API_SQLGETDIAGFIELD, "SQLGetDiagField", SQLGetDiagField, NULL },
77 /* 43 */ { SQL_API_SQLGETENVATTR, "SQLGetEnvAttr", SQLGetEnvAttr, NULL },
78 /* 44 */ { SQL_API_SQLGETFUNCTIONS, "SQLGetFunctions", SQLGetFunctions, NULL },
79 /* 45 */ { SQL_API_SQLGETINFO, "SQLGetInfo", SQLGetInfo, NULL },
80 /* 46 */ { SQL_API_SQLGETSTMTATTR, "SQLGetStmtAttr", SQLGetStmtAttr, NULL },
81 /* 47 */ { SQL_API_SQLGETSTMTOPTION, "SQLGetStmtOption", SQLGetStmtOption, NULL },
82 /* 48 */ { SQL_API_SQLGETTYPEINFO, "SQLGetTypeInfo", SQLGetTypeInfo, NULL },
83 /* 49 */ { SQL_API_SQLMORERESULTS, "SQLMoreResults", SQLMoreResults, NULL },
84 /* 50 */ { SQL_API_SQLNATIVESQL, "SQLNativeSql", SQLNativeSql, NULL },
85 /* 51 */ { SQL_API_SQLNUMPARAMS, "SQLNumParams", SQLNumParams, NULL },
86 /* 52 */ { SQL_API_SQLNUMRESULTCOLS, "SQLNumResultCols", SQLNumResultCols, NULL },
87 /* 53 */ { SQL_API_SQLPARAMDATA, "SQLParamData", SQLParamData, NULL },
88 /* 54 */ { SQL_API_SQLPARAMOPTIONS, "SQLParamOptions", SQLParamOptions, NULL },
89 /* 55 */ { SQL_API_SQLPREPARE, "SQLPrepare", SQLPrepare, NULL },
90 /* 56 */ { SQL_API_SQLPRIMARYKEYS, "SQLPrimaryKeys", SQLPrimaryKeys, NULL },
91 /* 57 */ { SQL_API_SQLPROCEDURECOLUMNS, "SQLProcedureColumns", SQLProcedureColumns, NULL },
92 /* 58 */ { SQL_API_SQLPROCEDURES, "SQLProcedures", SQLProcedures, NULL },
93 /* 59 */ { SQL_API_SQLPUTDATA, "SQLPutData", SQLPutData, NULL },
94 /* 60 */ { SQL_API_SQLROWCOUNT, "SQLRowCount", SQLRowCount, NULL },
95 /* 61 */ { SQL_API_SQLSETCONNECTATTR, "SQLSetConnectAttr", SQLSetConnectAttr, NULL },
96 /* 62 */ { SQL_API_SQLSETCONNECTOPTION, "SQLSetConnectOption", SQLSetConnectOption, NULL },
97 /* 63 */ { SQL_API_SQLSETCURSORNAME, "SQLSetCursorName", SQLSetCursorName, NULL },
98 /* 64 */ { SQL_API_SQLSETDESCFIELD, "SQLSetDescField", SQLSetDescField, NULL },
99 /* 65 */ { SQL_API_SQLSETDESCREC, "SQLSetDescRec", SQLSetDescRec, NULL },
100 /* 66 */ { SQL_API_SQLSETENVATTR, "SQLSetEnvAttr", SQLSetEnvAttr, NULL },
101 /* 67 */ { SQL_API_SQLSETPARAM, "SQLSetParam", SQLSetParam, NULL },
102 /* 68 */ { SQL_API_SQLSETPOS, "SQLSetPos", SQLSetPos, NULL },
103 /* 69 */ { SQL_API_SQLSETSCROLLOPTIONS, "SQLSetScrollOptions", SQLSetScrollOptions, NULL },
104 /* 70 */ { SQL_API_SQLSETSTMTATTR, "SQLSetStmtAttr", SQLSetStmtAttr, NULL },
105 /* 71 */ { SQL_API_SQLSETSTMTOPTION, "SQLSetStmtOption", SQLSetStmtOption, NULL },
106 /* 72 */ { SQL_API_SQLSPECIALCOLUMNS, "SQLSpecialColumns", SQLSpecialColumns, NULL },
107 /* 73 */ { SQL_API_SQLSTATISTICS, "SQLStatistics", SQLStatistics, NULL },
108 /* 74 */ { SQL_API_SQLTABLEPRIVILEGES, "SQLTablePrivileges", SQLTablePrivileges, NULL },
109 /* 75 */ { SQL_API_SQLTABLES, "SQLTables", SQLTables, NULL },
110 /* 76 */ { SQL_API_SQLTRANSACT, "SQLTransact", SQLTransact, NULL },
111 /* 77 */ { SQL_API_SQLGETDIAGREC, "SQLGetDiagRec", SQLGetDiagRec, NULL },
114 static PROXYHANDLE gProxyHandle = {
119 ERROR_LIBRARY_NOT_FOUND,
127 /* What is the difference between these two (dmHandle cf READY_AND_dmHandle)? When does one use one and when the other? */
129 #define CHECK_dmHandle() \
131 if (gProxyHandle.dmHandle == NULL) \
133 TRACE ("Not ready\n"); \
138 #define CHECK_READY_AND_dmHandle() \
140 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL) \
142 TRACE ("Not ready\n"); \
147 SQLRETURN SQLDummyFunc()
149 TRACE("SQLDummyFunc: \n");
153 /***********************************************************************
154 * MAIN_OdbcInit [Internal] Initializes the internal 'ODBC32.DLL'.
157 * hinstDLL [I] handle to the DLL's instance
159 * lpvReserved [I] reserved, must be NULL
167 MAIN_OdbcInit(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
170 TRACE("Initializing or Finalizing proxy ODBC: %x,%lx,%p\n", hinstDLL, fdwReason, lpvReserved);
172 if (fdwReason == DLL_PROCESS_ATTACH)
174 TRACE("Loading ODBC...\n");
175 if (ODBC_LoadDriverManager())
176 ODBC_LoadDMFunctions();
178 else if (fdwReason == DLL_PROCESS_DETACH)
180 TRACE("Unloading ODBC...\n");
181 if (gProxyHandle.bFunctionReady)
183 for ( i = 0; i < NUM_SQLFUNC; i ++ )
185 gProxyHandle.functions[i].func = SQLDummyFunc;
189 if (gProxyHandle.dmHandle)
191 wine_dlclose(gProxyHandle.dmHandle,NULL,0);
192 gProxyHandle.dmHandle = NULL;
200 /***********************************************************************
201 * ODBC_LoadDriverManager [Internal] Load ODBC library.
210 static BOOL ODBC_LoadDriverManager(void)
212 const char *s = getenv("LIB_ODBC_DRIVER_MANAGER");
217 gProxyHandle.bFunctionReady = FALSE;
219 if (s!= NULL && strlen (s) >= sizeof(gProxyHandle.dmLibName))
221 ERR("Driver name too long (%s)\n",s);
224 if (s == NULL || strlen(s) == 0)
226 strcpy(gProxyHandle.dmLibName, s);
228 gProxyHandle.dmHandle = wine_dlopen(gProxyHandle.dmLibName, RTLD_LAZY, error, sizeof(error));
230 if (gProxyHandle.dmHandle == NULL) /* fail to load unixODBC driver manager */
232 WARN("failed to open library %s: %s\n", gProxyHandle.dmLibName, error);
233 gProxyHandle.dmLibName[0] = '\0';
234 gProxyHandle.nErrorType = ERROR_LIBRARY_NOT_FOUND;
239 gProxyHandle.nErrorType = ERROR_FREE;
245 /***********************************************************************
246 * ODBC_LoadDMFunctions [Internal] Populate function table.
255 static BOOL ODBC_LoadDMFunctions(void)
260 if (gProxyHandle.dmHandle == NULL)
263 for ( i = 0; i < NUM_SQLFUNC; i ++ )
265 gProxyHandle.functions[i] = template_func[i];
266 gProxyHandle.functions[i].func = wine_dlsym(gProxyHandle.dmHandle,
267 gProxyHandle.functions[i].name, error, sizeof(error));
271 ERR("Failed to load function %s\n",gProxyHandle.functions[i].name);
272 gProxyHandle.functions[i].func = SQLDummyFunc;
276 gProxyHandle.bFunctionReady = TRUE;
282 /*************************************************************************
283 * SQLAllocConnect [ODBC32.001]
285 SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle)
288 TRACE("Env=%lx\n",EnvironmentHandle);
290 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
292 *ConnectionHandle = SQL_NULL_HDBC;
293 TRACE("Not ready\n");
297 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCCONNECT].func);
298 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCCONNECT].func)
299 (EnvironmentHandle, ConnectionHandle);
300 TRACE("Returns ret=%d, Handle %lx\n",ret, *ConnectionHandle);
305 /*************************************************************************
306 * SQLAllocEnv [ODBC32.002]
308 SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle)
313 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
315 *EnvironmentHandle = SQL_NULL_HENV;
316 TRACE("Not ready\n");
320 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCENV].func);
321 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCENV].func) (EnvironmentHandle);
322 TRACE("Returns ret=%d, Env=%lx\n",ret, *EnvironmentHandle);
327 /*************************************************************************
328 * SQLAllocHandle [ODBC32.024]
330 SQLRETURN WINAPI SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
333 TRACE("(Type=%d, Handle=%lx)\n",HandleType,InputHandle);
335 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
337 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
338 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
340 if (HandleType == SQL_HANDLE_ENV)
341 *OutputHandle = SQL_NULL_HENV;
342 else if (HandleType == SQL_HANDLE_DBC)
343 *OutputHandle = SQL_NULL_HDBC;
344 else if (HandleType == SQL_HANDLE_STMT)
345 *OutputHandle = SQL_NULL_HSTMT;
346 else if (HandleType == SQL_HANDLE_DESC)
347 *OutputHandle = SQL_NULL_HDESC;
349 TRACE ("Not ready\n");
353 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLE].func);
354 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLE].func)
355 (HandleType, InputHandle, OutputHandle);
356 TRACE("Returns ret=%d, Handle=%lx\n",ret, *OutputHandle);
361 /*************************************************************************
362 * SQLAllocStmt [ODBC32.003]
364 SQLRETURN WINAPI SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle)
368 TRACE("(Connection=%lx)\n",ConnectionHandle);
370 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
372 *StatementHandle = SQL_NULL_HSTMT;
373 TRACE ("Not ready\n");
377 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCSTMT].func);
378 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCSTMT].func)
379 (ConnectionHandle, StatementHandle);
380 TRACE ("Returns ret=%d, Handle=%lx\n", ret, *StatementHandle);
385 /*************************************************************************
386 * SQLAllocHandleStd [ODBC32.077]
388 SQLRETURN WINAPI SQLAllocHandleStd( SQLSMALLINT HandleType,
389 SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
391 TRACE("ProxyODBC: SQLAllocHandelStd.\n");
393 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
395 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
396 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
398 if (HandleType == SQL_HANDLE_ENV)
399 *OutputHandle = SQL_NULL_HENV;
400 else if (HandleType == SQL_HANDLE_DBC)
401 *OutputHandle = SQL_NULL_HDBC;
402 else if (HandleType == SQL_HANDLE_STMT)
403 *OutputHandle = SQL_NULL_HSTMT;
404 else if (HandleType == SQL_HANDLE_DESC)
405 *OutputHandle = SQL_NULL_HDESC;
410 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLESTD].func);
411 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLESTD].func)
412 (HandleType, InputHandle, OutputHandle);
416 /*************************************************************************
417 * SQLBindCol [ODBC32.004]
419 SQLRETURN WINAPI SQLBindCol(SQLHSTMT StatementHandle,
420 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
421 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
422 SQLINTEGER *StrLen_or_Ind)
426 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
428 TRACE ("Not ready\n");
432 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDCOL].func);
433 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDCOL].func)
434 (StatementHandle, ColumnNumber, TargetType,
435 TargetValue, BufferLength, StrLen_or_Ind);
439 /*************************************************************************
440 * SQLBindParam [ODBC32.025]
442 SQLRETURN WINAPI SQLBindParam(SQLHSTMT StatementHandle,
443 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
444 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
445 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
446 SQLINTEGER *StrLen_or_Ind)
450 CHECK_READY_AND_dmHandle();
452 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAM].func);
453 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAM].func)
454 (StatementHandle, ParameterNumber, ValueType,
455 ParameterScale, ParameterValue, StrLen_or_Ind);
459 /*************************************************************************
460 * SQLCancel [ODBC32.005]
462 SQLRETURN WINAPI SQLCancel(SQLHSTMT StatementHandle)
466 CHECK_READY_AND_dmHandle();
468 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCANCEL].func);
469 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCANCEL].func) (StatementHandle);
473 /*************************************************************************
474 * SQLCloseCursor [ODBC32.026]
476 SQLRETURN WINAPI SQLCloseCursor(SQLHSTMT StatementHandle)
479 TRACE("(Handle=%lx)\n",StatementHandle);
481 CHECK_READY_AND_dmHandle();
483 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLCLOSECURSOR].func);
484 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLCLOSECURSOR].func) (StatementHandle);
485 TRACE("returns %d\n",ret);
490 /*************************************************************************
491 * SQLColAttribute [ODBC32.027]
493 SQLRETURN WINAPI SQLColAttribute (SQLHSTMT StatementHandle,
494 SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier,
495 SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength,
496 SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute)
500 CHECK_READY_AND_dmHandle();
502 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTE].func);
503 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTE].func)
504 (StatementHandle, ColumnNumber, FieldIdentifier,
505 CharacterAttribute, BufferLength, StringLength, NumericAttribute);
509 /*************************************************************************
510 * SQLColumns [ODBC32.040]
512 SQLRETURN WINAPI SQLColumns(SQLHSTMT StatementHandle,
513 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
514 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
515 SQLCHAR *TableName, SQLSMALLINT NameLength3,
516 SQLCHAR *ColumnName, SQLSMALLINT NameLength4)
520 CHECK_READY_AND_dmHandle();
522 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNS].func);
523 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNS].func)
524 (StatementHandle, CatalogName, NameLength1,
525 SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4);
529 /*************************************************************************
530 * SQLConnect [ODBC32.007]
532 SQLRETURN WINAPI SQLConnect(SQLHDBC ConnectionHandle,
533 SQLCHAR *ServerName, SQLSMALLINT NameLength1,
534 SQLCHAR *UserName, SQLSMALLINT NameLength2,
535 SQLCHAR *Authentication, SQLSMALLINT NameLength3)
538 TRACE("(Server=%.*s)\n",NameLength1, ServerName);
540 CHECK_READY_AND_dmHandle();
542 strcpy(gProxyHandle.ServerName, ServerName);
543 strcpy(gProxyHandle.UserName, UserName);
545 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLCONNECT].func);
546 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLCONNECT].func)
547 (ConnectionHandle, ServerName, NameLength1,
548 UserName, NameLength2, Authentication, NameLength3);
550 TRACE("returns %d\n",ret);
555 /*************************************************************************
556 * SQLCopyDesc [ODBC32.028]
558 SQLRETURN WINAPI SQLCopyDesc(SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle)
562 CHECK_READY_AND_dmHandle();
564 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOPYDESC].func);
565 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOPYDESC].func)
566 (SourceDescHandle, TargetDescHandle);
570 /*************************************************************************
571 * SQLDataSources [ODBC32.057]
573 SQLRETURN WINAPI SQLDataSources(SQLHENV EnvironmentHandle,
574 SQLUSMALLINT Direction, SQLCHAR *ServerName,
575 SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1,
576 SQLCHAR *Description, SQLSMALLINT BufferLength2,
577 SQLSMALLINT *NameLength2)
581 TRACE("EnvironmentHandle = %p\n", (LPVOID)EnvironmentHandle);
583 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
585 ERR("Error: empty dm handle (gProxyHandle.dmHandle == NULL)\n");
589 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLDATASOURCES].func);
590 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLDATASOURCES].func)
591 (EnvironmentHandle, Direction, ServerName,
592 BufferLength1, NameLength1, Description, BufferLength2, NameLength2);
596 TRACE("returns: %d \t", ret);
597 if (*NameLength1 > 0)
598 DPRINTF("DataSource = %s,", ServerName);
599 if (*NameLength2 > 0)
600 DPRINTF(" Description = %s", Description);
608 /*************************************************************************
609 * SQLDescribeCol [ODBC32.008]
611 SQLRETURN WINAPI SQLDescribeCol(SQLHSTMT StatementHandle,
612 SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName,
613 SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,
614 SQLSMALLINT *DataType, SQLUINTEGER *ColumnSize,
615 SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable)
619 CHECK_READY_AND_dmHandle();
621 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBECOL].func);
622 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBECOL].func)
623 (StatementHandle, ColumnNumber, ColumnName,
624 BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable);
628 /*************************************************************************
629 * SQLDisconnect [ODBC32.009]
631 SQLRETURN WINAPI SQLDisconnect(SQLHDBC ConnectionHandle)
634 TRACE("(Handle=%lx)\n", ConnectionHandle);
636 CHECK_READY_AND_dmHandle();
638 gProxyHandle.ServerName[0] = '\0';
639 gProxyHandle.UserName[0] = '\0';
641 assert(gProxyHandle.functions[SQLAPI_INDEX_SQLDISCONNECT].func);
642 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLDISCONNECT].func) (ConnectionHandle);
643 TRACE("returns %d\n",ret);
648 /*************************************************************************
649 * SQLEndTran [ODBC32.029]
651 SQLRETURN WINAPI SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType)
655 CHECK_READY_AND_dmHandle();
657 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLENDTRAN].func);
658 return (gProxyHandle.functions[SQLAPI_INDEX_SQLENDTRAN].func) (HandleType, Handle, CompletionType);
662 /*************************************************************************
663 * SQLError [ODBC32.010]
665 SQLRETURN WINAPI SQLError(SQLHENV EnvironmentHandle,
666 SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle,
667 SQLCHAR *Sqlstate, SQLINTEGER *NativeError,
668 SQLCHAR *MessageText, SQLSMALLINT BufferLength,
669 SQLSMALLINT *TextLength)
673 CHECK_READY_AND_dmHandle();
675 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLERROR].func);
676 return (gProxyHandle.functions[SQLAPI_INDEX_SQLERROR].func)
677 (EnvironmentHandle, ConnectionHandle, StatementHandle,
678 Sqlstate, NativeError, MessageText, BufferLength, TextLength);
682 /*************************************************************************
683 * SQLExecDirect [ODBC32.011]
685 SQLRETURN WINAPI SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
689 CHECK_READY_AND_dmHandle();
691 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECDIRECT].func);
692 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECDIRECT].func)
693 (StatementHandle, StatementText, TextLength);
697 /*************************************************************************
698 * SQLExecute [ODBC32.012]
700 SQLRETURN WINAPI SQLExecute(SQLHSTMT StatementHandle)
704 CHECK_READY_AND_dmHandle();
706 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECUTE].func);
707 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECUTE].func) (StatementHandle);
711 /*************************************************************************
712 * SQLFetch [ODBC32.013]
714 SQLRETURN WINAPI SQLFetch(SQLHSTMT StatementHandle)
718 CHECK_READY_AND_dmHandle();
720 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCH].func);
721 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCH].func) (StatementHandle);
725 /*************************************************************************
726 * SQLFetchScroll [ODBC32.030]
728 SQLRETURN WINAPI SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset)
734 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCHSCROLL].func);
735 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCHSCROLL].func)
736 (StatementHandle, FetchOrientation, FetchOffset);
740 /*************************************************************************
741 * SQLFreeConnect [ODBC32.014]
743 SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle)
746 TRACE("(Handle=%lx)\n",ConnectionHandle);
750 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREECONNECT].func);
751 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLFREECONNECT].func) (ConnectionHandle);
752 TRACE("Returns %d\n",ret);
757 /*************************************************************************
758 * SQLFreeEnv [ODBC32.015]
760 SQLRETURN WINAPI SQLFreeEnv(SQLHENV EnvironmentHandle)
763 TRACE("(Env=%lx)\n",EnvironmentHandle);
767 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEENV].func);
768 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEENV].func) (EnvironmentHandle);
769 TRACE("Returns %d\n",ret);
774 /*************************************************************************
775 * SQLFreeHandle [ODBC32.031]
777 SQLRETURN WINAPI SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle)
780 TRACE("(Type=%d, Handle=%lx)\n",HandleType,Handle);
784 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEHANDLE].func);
785 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEHANDLE].func)
786 (HandleType, Handle);
787 TRACE ("Returns %d\n",ret);
792 /*************************************************************************
793 * SQLFreeStmt [ODBC32.016]
795 SQLRETURN WINAPI SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option)
798 TRACE("(Handle %lx, Option=%d)\n",StatementHandle, Option);
802 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFREESTMT].func);
803 ret=(gProxyHandle.functions[SQLAPI_INDEX_SQLFREESTMT].func)
804 (StatementHandle, Option);
805 TRACE("Returns %d\n",ret);
810 /*************************************************************************
811 * SQLGetConnectAttr [ODBC32.032]
813 SQLRETURN WINAPI SQLGetConnectAttr(SQLHDBC ConnectionHandle,
814 SQLINTEGER Attribute, SQLPOINTER Value,
815 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
821 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTATTR].func);
822 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTATTR].func)
823 (ConnectionHandle, Attribute, Value,
824 BufferLength, StringLength);
828 /*************************************************************************
829 * SQLGetConnectOption [ODBC32.042]
831 SQLRETURN WINAPI SQLGetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value)
837 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTOPTION].func);
838 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTOPTION].func)
839 (ConnectionHandle, Option, Value);
843 /*************************************************************************
844 * SQLGetCursorName [ODBC32.017]
846 SQLRETURN WINAPI SQLGetCursorName(SQLHSTMT StatementHandle,
847 SQLCHAR *CursorName, SQLSMALLINT BufferLength,
848 SQLSMALLINT *NameLength)
854 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCURSORNAME].func);
855 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCURSORNAME].func)
856 (StatementHandle, CursorName, BufferLength, NameLength);
860 /*************************************************************************
861 * SQLGetData [ODBC32.043]
863 SQLRETURN WINAPI SQLGetData(SQLHSTMT StatementHandle,
864 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
865 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
866 SQLINTEGER *StrLen_or_Ind)
872 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDATA].func);
873 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDATA].func)
874 (StatementHandle, ColumnNumber, TargetType,
875 TargetValue, BufferLength, StrLen_or_Ind);
879 /*************************************************************************
880 * SQLGetDescField [ODBC32.033]
882 SQLRETURN WINAPI SQLGetDescField(SQLHDESC DescriptorHandle,
883 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
884 SQLPOINTER Value, SQLINTEGER BufferLength,
885 SQLINTEGER *StringLength)
891 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCFIELD].func);
892 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCFIELD].func)
893 (DescriptorHandle, RecNumber, FieldIdentifier,
894 Value, BufferLength, StringLength);
898 /*************************************************************************
899 * SQLGetDescRec [ODBC32.034]
901 SQLRETURN WINAPI SQLGetDescRec(SQLHDESC DescriptorHandle,
902 SQLSMALLINT RecNumber, SQLCHAR *Name,
903 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength,
904 SQLSMALLINT *Type, SQLSMALLINT *SubType,
905 SQLINTEGER *Length, SQLSMALLINT *Precision,
906 SQLSMALLINT *Scale, SQLSMALLINT *Nullable)
912 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCREC].func);
913 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCREC].func)
914 (DescriptorHandle, RecNumber, Name, BufferLength,
915 StringLength, Type, SubType, Length, Precision, Scale, Nullable);
919 /*************************************************************************
920 * SQLGetDiagField [ODBC32.035]
922 SQLRETURN WINAPI SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle,
923 SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier,
924 SQLPOINTER DiagInfo, SQLSMALLINT BufferLength,
925 SQLSMALLINT *StringLength)
931 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGFIELD].func);
932 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGFIELD].func)
933 (HandleType, Handle, RecNumber, DiagIdentifier,
934 DiagInfo, BufferLength, StringLength);
938 /*************************************************************************
939 * SQLGetDiagRec [ODBC32.036]
941 SQLRETURN WINAPI SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle,
942 SQLSMALLINT RecNumber, SQLCHAR *Sqlstate,
943 SQLINTEGER *NativeError, SQLCHAR *MessageText,
944 SQLSMALLINT BufferLength, SQLSMALLINT *TextLength)
950 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGREC].func);
951 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGREC].func)
952 (HandleType, Handle, RecNumber, Sqlstate, NativeError,
953 MessageText, BufferLength, TextLength);
957 /*************************************************************************
958 * SQLGetEnvAttr [ODBC32.037]
960 SQLRETURN WINAPI SQLGetEnvAttr(SQLHENV EnvironmentHandle,
961 SQLINTEGER Attribute, SQLPOINTER Value,
962 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
968 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETENVATTR].func);
969 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETENVATTR].func)
970 (EnvironmentHandle, Attribute, Value, BufferLength, StringLength);
974 /*************************************************************************
975 * SQLGetFunctions [ODBC32.044]
977 SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported)
983 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETFUNCTIONS].func);
984 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETFUNCTIONS].func)
985 (ConnectionHandle, FunctionId, Supported);
989 /*************************************************************************
990 * SQLGetInfo [ODBC32.045]
992 SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle,
993 SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
994 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength)
1000 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETINFO].func);
1001 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETINFO].func)
1002 (ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength);
1006 /*************************************************************************
1007 * SQLGetStmtAttr [ODBC32.038]
1009 SQLRETURN WINAPI SQLGetStmtAttr(SQLHSTMT StatementHandle,
1010 SQLINTEGER Attribute, SQLPOINTER Value,
1011 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
1017 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTATTR].func);
1018 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTATTR].func)
1019 (StatementHandle, Attribute, Value, BufferLength, StringLength);
1023 /*************************************************************************
1024 * SQLGetStmtOption [ODBC32.046]
1026 SQLRETURN WINAPI SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value)
1032 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTOPTION].func);
1033 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTOPTION].func)
1034 (StatementHandle, Option, Value);
1038 /*************************************************************************
1039 * SQLGetTypeInfo [ODBC32.047]
1041 SQLRETURN WINAPI SQLGetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType)
1047 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLGETTYPEINFO].func);
1048 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETTYPEINFO].func)
1049 (StatementHandle, DataType);
1053 /*************************************************************************
1054 * SQLNumResultCols [ODBC32.018]
1056 SQLRETURN WINAPI SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnCount)
1062 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMRESULTCOLS].func);
1063 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMRESULTCOLS].func)
1064 (StatementHandle, ColumnCount);
1068 /*************************************************************************
1069 * SQLParamData [ODBC32.048]
1071 SQLRETURN WINAPI SQLParamData(SQLHSTMT StatementHandle, SQLPOINTER *Value)
1077 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMDATA].func);
1078 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMDATA].func)
1079 (StatementHandle, Value);
1083 /*************************************************************************
1084 * SQLPrepare [ODBC32.019]
1086 SQLRETURN WINAPI SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
1092 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPREPARE].func);
1093 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPREPARE].func)
1094 (StatementHandle, StatementText, TextLength);
1098 /*************************************************************************
1099 * SQLPutData [ODBC32.049]
1101 SQLRETURN WINAPI SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLINTEGER StrLen_or_Ind)
1107 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPUTDATA].func);
1108 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPUTDATA].func)
1109 (StatementHandle, Data, StrLen_or_Ind);
1113 /*************************************************************************
1114 * SQLRowCount [ODBC32.020]
1116 SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle, SQLINTEGER *RowCount)
1122 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLROWCOUNT].func);
1123 return (gProxyHandle.functions[SQLAPI_INDEX_SQLROWCOUNT].func)
1124 (StatementHandle, RowCount);
1128 /*************************************************************************
1129 * SQLSetConnectAttr [ODBC32.039]
1131 SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute,
1132 SQLPOINTER Value, SQLINTEGER StringLength)
1138 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTATTR].func);
1139 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTATTR].func)
1140 (ConnectionHandle, Attribute, Value, StringLength);
1144 /*************************************************************************
1145 * SQLSetConnectOption [ODBC32.050]
1147 SQLRETURN WINAPI SQLSetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1153 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTOPTION].func);
1154 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTOPTION].func)
1155 (ConnectionHandle, Option, Value);
1159 /*************************************************************************
1160 * SQLSetCursorName [ODBC32.021]
1162 SQLRETURN WINAPI SQLSetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, SQLSMALLINT NameLength)
1168 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCURSORNAME].func);
1169 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCURSORNAME].func)
1170 (StatementHandle, CursorName, NameLength);
1174 /*************************************************************************
1175 * SQLSetDescField [ODBC32.073]
1177 SQLRETURN WINAPI SQLSetDescField(SQLHDESC DescriptorHandle,
1178 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
1179 SQLPOINTER Value, SQLINTEGER BufferLength)
1185 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCFIELD].func);
1186 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCFIELD].func)
1187 (DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength);
1191 /*************************************************************************
1192 * SQLSetDescRec [ODBC32.074]
1194 SQLRETURN WINAPI SQLSetDescRec(SQLHDESC DescriptorHandle,
1195 SQLSMALLINT RecNumber, SQLSMALLINT Type,
1196 SQLSMALLINT SubType, SQLINTEGER Length,
1197 SQLSMALLINT Precision, SQLSMALLINT Scale,
1198 SQLPOINTER Data, SQLINTEGER *StringLength,
1199 SQLINTEGER *Indicator)
1205 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCREC].func);
1206 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCREC].func)
1207 (DescriptorHandle, RecNumber, Type, SubType, Length,
1208 Precision, Scale, Data, StringLength, Indicator);
1212 /*************************************************************************
1213 * SQLSetEnvAttr [ODBC32.075]
1215 SQLRETURN WINAPI SQLSetEnvAttr(SQLHENV EnvironmentHandle,
1216 SQLINTEGER Attribute, SQLPOINTER Value,
1217 SQLINTEGER StringLength)
1223 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETENVATTR].func);
1224 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETENVATTR].func)
1225 (EnvironmentHandle, Attribute, Value, StringLength);
1229 /*************************************************************************
1230 * SQLSetParam [ODBC32.022]
1232 SQLRETURN WINAPI SQLSetParam(SQLHSTMT StatementHandle,
1233 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
1234 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
1235 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
1236 SQLINTEGER *StrLen_or_Ind)
1242 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPARAM].func);
1243 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPARAM].func)
1244 (StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision,
1245 ParameterScale, ParameterValue, StrLen_or_Ind);
1249 /*************************************************************************
1250 * SQLSetStmtAttr [ODBC32.076]
1252 SQLRETURN WINAPI SQLSetStmtAttr(SQLHSTMT StatementHandle,
1253 SQLINTEGER Attribute, SQLPOINTER Value,
1254 SQLINTEGER StringLength)
1260 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTATTR].func);
1261 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTATTR].func)
1262 (StatementHandle, Attribute, Value, StringLength);
1266 /*************************************************************************
1267 * SQLSetStmtOption [ODBC32.051]
1269 SQLRETURN WINAPI SQLSetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1275 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTOPTION].func);
1276 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTOPTION].func)
1277 (StatementHandle, Option, Value);
1281 /*************************************************************************
1282 * SQLSpecialColumns [ODBC32.052]
1284 SQLRETURN WINAPI SQLSpecialColumns(SQLHSTMT StatementHandle,
1285 SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName,
1286 SQLSMALLINT NameLength1, SQLCHAR *SchemaName,
1287 SQLSMALLINT NameLength2, SQLCHAR *TableName,
1288 SQLSMALLINT NameLength3, SQLUSMALLINT Scope,
1289 SQLUSMALLINT Nullable)
1294 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSPECIALCOLUMNS].func);
1295 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSPECIALCOLUMNS].func)
1296 (StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName,
1297 NameLength2, TableName, NameLength3, Scope, Nullable);
1301 /*************************************************************************
1302 * SQLStatistics [ODBC32.053]
1304 SQLRETURN WINAPI SQLStatistics(SQLHSTMT StatementHandle,
1305 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1306 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1307 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1308 SQLUSMALLINT Unique, SQLUSMALLINT Reserved)
1314 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSTATISTICS].func);
1315 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSTATISTICS].func)
1316 (StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2,
1317 TableName, NameLength3, Unique, Reserved);
1321 /*************************************************************************
1322 * SQLTables [ODBC32.054]
1324 SQLRETURN WINAPI SQLTables(SQLHSTMT StatementHandle,
1325 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1326 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1327 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1328 SQLCHAR *TableType, SQLSMALLINT NameLength4)
1334 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLES].func);
1335 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLES].func)
1336 (StatementHandle, CatalogName, NameLength1,
1337 SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4);
1341 /*************************************************************************
1342 * SQLTransact [ODBC32.023]
1344 SQLRETURN WINAPI SQLTransact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle,
1345 SQLUSMALLINT CompletionType)
1351 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLTRANSACT].func);
1352 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTRANSACT].func)
1353 (EnvironmentHandle, ConnectionHandle, CompletionType);
1357 /*************************************************************************
1358 * SQLBrowseConnect [ODBC32.055]
1360 SQLRETURN WINAPI SQLBrowseConnect(
1362 SQLCHAR *szConnStrIn,
1363 SQLSMALLINT cbConnStrIn,
1364 SQLCHAR *szConnStrOut,
1365 SQLSMALLINT cbConnStrOutMax,
1366 SQLSMALLINT *pcbConnStrOut)
1372 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBROWSECONNECT].func);
1373 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBROWSECONNECT].func)
1374 (hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut);
1378 /*************************************************************************
1379 * SQLBulkOperations [ODBC32.078]
1381 SQLRETURN WINAPI SQLBulkOperations(
1382 SQLHSTMT StatementHandle,
1383 SQLSMALLINT Operation)
1389 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBULKOPERATIONS].func);
1390 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBULKOPERATIONS].func)
1391 (StatementHandle, Operation);
1395 /*************************************************************************
1396 * SQLColAttributes [ODBC32.006]
1398 SQLRETURN WINAPI SQLColAttributes(
1401 SQLUSMALLINT fDescType,
1403 SQLSMALLINT cbDescMax,
1404 SQLSMALLINT *pcbDesc,
1411 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTES].func);
1412 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTES].func)
1413 (hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc);
1417 /*************************************************************************
1418 * SQLColumnPrivileges [ODBC32.056]
1420 SQLRETURN WINAPI SQLColumnPrivileges(
1422 SQLCHAR *szCatalogName,
1423 SQLSMALLINT cbCatalogName,
1424 SQLCHAR *szSchemaName,
1425 SQLSMALLINT cbSchemaName,
1426 SQLCHAR *szTableName,
1427 SQLSMALLINT cbTableName,
1428 SQLCHAR *szColumnName,
1429 SQLSMALLINT cbColumnName)
1435 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES].func);
1436 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES].func)
1437 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1438 szTableName, cbTableName, szColumnName, cbColumnName);
1442 /*************************************************************************
1443 * SQLDescribeParam [ODBC32.058]
1445 SQLRETURN WINAPI SQLDescribeParam(
1448 SQLSMALLINT *pfSqlType,
1449 SQLUINTEGER *pcbParamDef,
1450 SQLSMALLINT *pibScale,
1451 SQLSMALLINT *pfNullable)
1457 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBEPARAM].func);
1458 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBEPARAM].func)
1459 (hstmt, ipar, pfSqlType, pcbParamDef, pibScale, pfNullable);
1463 /*************************************************************************
1464 * SQLExtendedFetch [ODBC32.059]
1466 SQLRETURN WINAPI SQLExtendedFetch(
1468 SQLUSMALLINT fFetchType,
1471 SQLUSMALLINT *rgfRowStatus)
1477 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLEXTENDEDFETCH].func);
1478 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXTENDEDFETCH].func)
1479 (hstmt, fFetchType, irow, pcrow, rgfRowStatus);
1483 /*************************************************************************
1484 * SQLForeignKeys [ODBC32.060]
1486 SQLRETURN WINAPI SQLForeignKeys(
1488 SQLCHAR *szPkCatalogName,
1489 SQLSMALLINT cbPkCatalogName,
1490 SQLCHAR *szPkSchemaName,
1491 SQLSMALLINT cbPkSchemaName,
1492 SQLCHAR *szPkTableName,
1493 SQLSMALLINT cbPkTableName,
1494 SQLCHAR *szFkCatalogName,
1495 SQLSMALLINT cbFkCatalogName,
1496 SQLCHAR *szFkSchemaName,
1497 SQLSMALLINT cbFkSchemaName,
1498 SQLCHAR *szFkTableName,
1499 SQLSMALLINT cbFkTableName)
1505 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLFOREIGNKEYS].func);
1506 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFOREIGNKEYS].func)
1507 (hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName,
1508 szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName,
1509 cbFkSchemaName, szFkTableName, cbFkTableName);
1513 /*************************************************************************
1514 * SQLMoreResults [ODBC32.061]
1516 SQLRETURN WINAPI SQLMoreResults(SQLHSTMT hstmt)
1522 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLMORERESULTS].func);
1523 return (gProxyHandle.functions[SQLAPI_INDEX_SQLMORERESULTS].func) (hstmt);
1527 /*************************************************************************
1528 * SQLNativeSql [ODBC32.062]
1530 SQLRETURN WINAPI SQLNativeSql(
1532 SQLCHAR *szSqlStrIn,
1533 SQLINTEGER cbSqlStrIn,
1535 SQLINTEGER cbSqlStrMax,
1536 SQLINTEGER *pcbSqlStr)
1542 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLNATIVESQL].func);
1543 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNATIVESQL].func)
1544 (hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr);
1548 /*************************************************************************
1549 * SQLNumParams [ODBC32.063]
1551 SQLRETURN WINAPI SQLNumParams(
1559 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMPARAMS].func);
1560 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMPARAMS].func) (hstmt, pcpar);
1564 /*************************************************************************
1565 * SQLParamOptions [ODBC32.064]
1567 SQLRETURN WINAPI SQLParamOptions(
1576 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMOPTIONS].func);
1577 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMOPTIONS].func) (hstmt, crow, pirow);
1581 /*************************************************************************
1582 * SQLPrimaryKeys [ODBC32.065]
1584 SQLRETURN WINAPI SQLPrimaryKeys(
1586 SQLCHAR *szCatalogName,
1587 SQLSMALLINT cbCatalogName,
1588 SQLCHAR *szSchemaName,
1589 SQLSMALLINT cbSchemaName,
1590 SQLCHAR *szTableName,
1591 SQLSMALLINT cbTableName)
1597 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPRIMARYKEYS].func);
1598 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPRIMARYKEYS].func)
1599 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1600 szTableName, cbTableName);
1604 /*************************************************************************
1605 * SQLProcedureColumns [ODBC32.066]
1607 SQLRETURN WINAPI SQLProcedureColumns(
1609 SQLCHAR *szCatalogName,
1610 SQLSMALLINT cbCatalogName,
1611 SQLCHAR *szSchemaName,
1612 SQLSMALLINT cbSchemaName,
1613 SQLCHAR *szProcName,
1614 SQLSMALLINT cbProcName,
1615 SQLCHAR *szColumnName,
1616 SQLSMALLINT cbColumnName)
1622 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURECOLUMNS].func);
1623 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURECOLUMNS].func)
1624 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1625 szProcName, cbProcName, szColumnName, cbColumnName);
1629 /*************************************************************************
1630 * SQLProcedures [ODBC32.067]
1632 SQLRETURN WINAPI SQLProcedures(
1634 SQLCHAR *szCatalogName,
1635 SQLSMALLINT cbCatalogName,
1636 SQLCHAR *szSchemaName,
1637 SQLSMALLINT cbSchemaName,
1638 SQLCHAR *szProcName,
1639 SQLSMALLINT cbProcName)
1645 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURES].func);
1646 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURES].func)
1647 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1648 szProcName, cbProcName);
1652 /*************************************************************************
1653 * SQLSetPos [ODBC32.068]
1655 SQLRETURN WINAPI SQLSetPos(
1658 SQLUSMALLINT fOption,
1665 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPOS].func);
1666 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPOS].func)
1667 (hstmt, irow, fOption, fLock);
1671 /*************************************************************************
1672 * SQLTablePrivileges [ODBC32.070]
1674 SQLRETURN WINAPI SQLTablePrivileges(
1676 SQLCHAR *szCatalogName,
1677 SQLSMALLINT cbCatalogName,
1678 SQLCHAR *szSchemaName,
1679 SQLSMALLINT cbSchemaName,
1680 SQLCHAR *szTableName,
1681 SQLSMALLINT cbTableName)
1687 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLEPRIVILEGES].func);
1688 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLEPRIVILEGES].func)
1689 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1690 szTableName, cbTableName);
1694 /*************************************************************************
1695 * SQLDrivers [ODBC32.071]
1697 SQLRETURN WINAPI SQLDrivers(
1699 SQLUSMALLINT fDirection,
1700 SQLCHAR *szDriverDesc,
1701 SQLSMALLINT cbDriverDescMax,
1702 SQLSMALLINT *pcbDriverDesc,
1703 SQLCHAR *szDriverAttributes,
1704 SQLSMALLINT cbDriverAttrMax,
1705 SQLSMALLINT *pcbDriverAttr)
1711 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERS].func);
1712 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERS].func)
1713 (henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc,
1714 szDriverAttributes, cbDriverAttrMax, pcbDriverAttr);
1718 /*************************************************************************
1719 * SQLBindParameter [ODBC32.072]
1721 SQLRETURN WINAPI SQLBindParameter(
1724 SQLSMALLINT fParamType,
1726 SQLSMALLINT fSqlType,
1727 SQLUINTEGER cbColDef,
1728 SQLSMALLINT ibScale,
1729 SQLPOINTER rgbValue,
1730 SQLINTEGER cbValueMax,
1731 SQLINTEGER *pcbValue)
1737 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAMETER].func);
1738 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAMETER].func)
1739 (hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale,
1740 rgbValue, cbValueMax, pcbValue);
1744 /*************************************************************************
1745 * SQLDriverConnect [ODBC32.041]
1747 SQLRETURN WINAPI SQLDriverConnect(
1750 SQLCHAR *conn_str_in,
1751 SQLSMALLINT len_conn_str_in,
1752 SQLCHAR *conn_str_out,
1753 SQLSMALLINT conn_str_out_max,
1754 SQLSMALLINT *ptr_conn_str_out,
1755 SQLUSMALLINT driver_completion )
1761 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERCONNECT].func);
1762 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERCONNECT].func)
1763 (hdbc, hwnd, conn_str_in, len_conn_str_in, conn_str_out,
1764 conn_str_out_max, ptr_conn_str_out, driver_completion);
1768 /*************************************************************************
1769 * SQLSetScrollOptions [ODBC32.069]
1771 SQLRETURN WINAPI SQLSetScrollOptions(
1772 SQLHSTMT statement_handle,
1773 SQLUSMALLINT f_concurrency,
1774 SQLINTEGER crow_keyset,
1775 SQLUSMALLINT crow_rowset )
1781 assert (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSCROLLOPTIONS].func);
1782 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSCROLLOPTIONS].func)
1783 (statement_handle, f_concurrency, crow_keyset, crow_rowset);