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"
24 #include "proxyodbc.h"
26 DEFAULT_DEBUG_CHANNEL(odbc);
28 static const DM_FUNC template_func[] =
30 /* 00 */ { SQL_API_SQLALLOCCONNECT, "SQLAllocConnect", SQLAllocConnect, NULL },
31 /* 01 */ { SQL_API_SQLALLOCENV, "SQLAllocEnv", SQLAllocEnv, NULL },
32 /* 02 */ { SQL_API_SQLALLOCHANDLE, "SQLAllocHandle", SQLAllocHandle, NULL },
33 /* 03 */ { SQL_API_SQLALLOCSTMT, "SQLAllocStmt", SQLAllocStmt, NULL },
34 /* 04 */ { SQL_API_SQLALLOCHANDLESTD, "SQLAllocHandleStd", SQLAllocHandleStd, NULL },
35 /* 05 */ { SQL_API_SQLBINDCOL, "SQLBindCol", SQLBindCol, NULL },
36 /* 06 */ { SQL_API_SQLBINDPARAM, "SQLBindParam", SQLBindParam, NULL },
37 /* 07 */ { SQL_API_SQLBINDPARAMETER, "SQLBindParameter", SQLBindParameter, NULL },
38 /* 08 */ { SQL_API_SQLBROWSECONNECT, "SQLBrowseConnect", SQLBrowseConnect, NULL },
39 /* 09 */ { SQL_API_SQLBULKOPERATIONS, "SQLBulkOperations", SQLBulkOperations, NULL },
40 /* 10 */ { SQL_API_SQLCANCEL, "SQLCancel", SQLCancel, NULL },
41 /* 11 */ { SQL_API_SQLCLOSECURSOR, "SQLCloseCursor", SQLCloseCursor, NULL },
42 /* 12 */ { SQL_API_SQLCOLATTRIBUTE, "SQLColAttribute", SQLColAttribute, NULL },
43 /* 13 */ { SQL_API_SQLCOLATTRIBUTES, "SQLColAttributes", SQLColAttributes, NULL },
44 /* 14 */ { SQL_API_SQLCOLUMNPRIVILEGES, "SQLColumnPrivileges", SQLColumnPrivileges, NULL },
45 /* 15 */ { SQL_API_SQLCOLUMNS, "SQLColumns", SQLColumns, NULL },
46 /* 16 */ { SQL_API_SQLCONNECT, "SQLConnect", SQLConnect, NULL },
47 /* 17 */ { SQL_API_SQLCOPYDESC, "SQLCopyDesc", SQLCopyDesc, NULL },
48 /* 18 */ { SQL_API_SQLDATASOURCES, "SQLDataSources", SQLDataSources, NULL },
49 /* 19 */ { SQL_API_SQLDESCRIBECOL, "SQLDescribeCol", SQLDescribeCol, NULL },
50 /* 20 */ { SQL_API_SQLDESCRIBEPARAM, "SQLDescribeParam", SQLDescribeParam, NULL },
51 /* 21 */ { SQL_API_SQLDISCONNECT, "SQLDisconnect", SQLDisconnect, NULL },
52 /* 22 */ { SQL_API_SQLDRIVERCONNECT, "SQLDriverConnect", SQLDriverConnect, NULL },
53 /* 23 */ { SQL_API_SQLDRIVERS, "SQLDrivers", SQLDrivers, NULL },
54 /* 24 */ { SQL_API_SQLENDTRAN, "SQLEndTran", SQLEndTran, NULL },
55 /* 25 */ { SQL_API_SQLERROR, "SQLError", SQLError, NULL },
56 /* 26 */ { SQL_API_SQLEXECDIRECT, "SQLExecDirect", SQLExecDirect, NULL },
57 /* 27 */ { SQL_API_SQLEXECUTE, "SQLExecute", SQLExecute, NULL },
58 /* 28 */ { SQL_API_SQLEXTENDEDFETCH, "SQLExtendedFetch", SQLExtendedFetch, NULL },
59 /* 29 */ { SQL_API_SQLFETCH, "SQLFetch", SQLFetch, NULL },
60 /* 30 */ { SQL_API_SQLFETCHSCROLL, "SQLFetchScroll", SQLFetchScroll, NULL },
61 /* 31 */ { SQL_API_SQLFOREIGNKEYS, "SQLForeignKeys", SQLForeignKeys, NULL },
62 /* 32 */ { SQL_API_SQLFREEENV, "SQLFreeEnv", SQLFreeEnv, NULL },
63 /* 33 */ { SQL_API_SQLFREEHANDLE, "SQLFreeHandle", SQLFreeHandle, NULL },
64 /* 34 */ { SQL_API_SQLFREESTMT, "SQLFreeStmt", SQLFreeStmt, NULL },
65 /* 35 */ { SQL_API_SQLFREECONNECT, "SQLFreeConnect", SQLFreeConnect, NULL },
66 /* 36 */ { SQL_API_SQLGETCONNECTATTR, "SQLGetConnectAttr", SQLGetConnectAttr, NULL },
67 /* 37 */ { SQL_API_SQLGETCONNECTOPTION, "SQLGetConnectOption", SQLGetConnectOption, NULL },
68 /* 38 */ { SQL_API_SQLGETCURSORNAME, "SQLGetCursorName", SQLGetCursorName, NULL },
69 /* 39 */ { SQL_API_SQLGETDATA, "SQLGetData", SQLGetData, NULL },
70 /* 40 */ { SQL_API_SQLGETDESCFIELD, "SQLGetDescField", SQLGetDescField, NULL },
71 /* 41 */ { SQL_API_SQLGETDESCREC, "SQLGetDescRec", SQLGetDescRec, NULL },
72 /* 42 */ { SQL_API_SQLGETDIAGFIELD, "SQLGetDiagField", SQLGetDiagField, NULL },
73 /* 43 */ { SQL_API_SQLGETENVATTR, "SQLGetEnvAttr", SQLGetEnvAttr, NULL },
74 /* 44 */ { SQL_API_SQLGETFUNCTIONS, "SQLGetFunctions", SQLGetFunctions, NULL },
75 /* 45 */ { SQL_API_SQLGETINFO, "SQLGetInfo", SQLGetInfo, NULL },
76 /* 46 */ { SQL_API_SQLGETSTMTATTR, "SQLGetStmtAttr", SQLGetStmtAttr, NULL },
77 /* 47 */ { SQL_API_SQLGETSTMTOPTION, "SQLGetStmtOption", SQLGetStmtOption, NULL },
78 /* 48 */ { SQL_API_SQLGETTYPEINFO, "SQLGetTypeInfo", SQLGetTypeInfo, NULL },
79 /* 49 */ { SQL_API_SQLMORERESULTS, "SQLMoreResults", SQLMoreResults, NULL },
80 /* 50 */ { SQL_API_SQLNATIVESQL, "SQLNativeSql", SQLNativeSql, NULL },
81 /* 51 */ { SQL_API_SQLNUMPARAMS, "SQLNumParams", SQLNumParams, NULL },
82 /* 52 */ { SQL_API_SQLNUMRESULTCOLS, "SQLNumResultCols", SQLNumResultCols, NULL },
83 /* 53 */ { SQL_API_SQLPARAMDATA, "SQLParamData", SQLParamData, NULL },
84 /* 54 */ { SQL_API_SQLPARAMOPTIONS, "SQLParamOptions", SQLParamOptions, NULL },
85 /* 55 */ { SQL_API_SQLPREPARE, "SQLPrepare", SQLPrepare, NULL },
86 /* 56 */ { SQL_API_SQLPRIMARYKEYS, "SQLPrimaryKeys", SQLPrimaryKeys, NULL },
87 /* 57 */ { SQL_API_SQLPROCEDURECOLUMNS, "SQLProcedureColumns", SQLProcedureColumns, NULL },
88 /* 58 */ { SQL_API_SQLPROCEDURES, "SQLProcedures", SQLProcedures, NULL },
89 /* 59 */ { SQL_API_SQLPUTDATA, "SQLPutData", SQLPutData, NULL },
90 /* 60 */ { SQL_API_SQLROWCOUNT, "SQLRowCount", SQLRowCount, NULL },
91 /* 61 */ { SQL_API_SQLSETCONNECTATTR, "SQLSetConnectAttr", SQLSetConnectAttr, NULL },
92 /* 62 */ { SQL_API_SQLSETCONNECTOPTION, "SQLSetConnectOption", SQLSetConnectOption, NULL },
93 /* 63 */ { SQL_API_SQLSETCURSORNAME, "SQLSetCursorName", SQLSetCursorName, NULL },
94 /* 64 */ { SQL_API_SQLSETDESCFIELD, "SQLSetDescField", SQLSetDescField, NULL },
95 /* 65 */ { SQL_API_SQLSETDESCREC, "SQLSetDescRec", SQLSetDescRec, NULL },
96 /* 66 */ { SQL_API_SQLSETENVATTR, "SQLSetEnvAttr", SQLSetEnvAttr, NULL },
97 /* 67 */ { SQL_API_SQLSETPARAM, "SQLSetParam", SQLSetParam, NULL },
98 /* 68 */ { SQL_API_SQLSETPOS, "SQLSetPos", SQLSetPos, NULL },
99 /* 69 */ { SQL_API_SQLSETSCROLLOPTIONS, "SQLSetScrollOptions", SQLSetScrollOptions, NULL },
100 /* 70 */ { SQL_API_SQLSETSTMTATTR, "SQLSetStmtAttr", SQLSetStmtAttr, NULL },
101 /* 71 */ { SQL_API_SQLSETSTMTOPTION, "SQLSetStmtOption", SQLSetStmtOption, NULL },
102 /* 72 */ { SQL_API_SQLSPECIALCOLUMNS, "SQLSpecialColumns", SQLSpecialColumns, NULL },
103 /* 73 */ { SQL_API_SQLSTATISTICS, "SQLStatistics", SQLStatistics, NULL },
104 /* 74 */ { SQL_API_SQLTABLEPRIVILEGES, "SQLTablePrivileges", SQLTablePrivileges, NULL },
105 /* 75 */ { SQL_API_SQLTABLES, "SQLTables", SQLTables, NULL },
106 /* 76 */ { SQL_API_SQLTRANSACT, "SQLTransact", SQLTransact, NULL },
107 /* 77 */ { SQL_API_SQLGETDIAGREC, "SQLGetDiagRec", SQLGetDiagRec, NULL },
110 static PROXYHANDLE gProxyHandle = {
115 ERROR_LIBRARY_NOT_FOUND,
123 SQLRETURN SQLDummyFunc()
125 TRACE("SQLDummyFunc: \n");
129 /***********************************************************************
130 * MAIN_OdbcInit [Internal] Initializes the internal 'ODBC32.DLL'.
133 * hinstDLL [I] handle to the DLL's instance
135 * lpvReserved [I] reserved, must be NULL
143 MAIN_OdbcInit(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
146 TRACE("Initializing proxy ODBC: %x,%lx,%p\n", hinstDLL, fdwReason, lpvReserved);
148 if (fdwReason == DLL_PROCESS_ATTACH)
150 TRACE("Loading ODBC...\n");
151 if (ODBC_LoadDriverManager())
152 ODBC_LoadDMFunctions();
154 else if (fdwReason == DLL_PROCESS_DETACH)
156 TRACE("Unloading ODBC...\n");
157 if (gProxyHandle.bFunctionReady)
159 for ( i = 0; i < NUM_SQLFUNC; i ++ )
161 gProxyHandle.functions[i].func = SQLDummyFunc;
165 if (gProxyHandle.dmHandle)
167 dlclose(gProxyHandle.dmHandle);
168 gProxyHandle.dmHandle = NULL;
176 /***********************************************************************
177 * ODBC_LoadDriverManager [Internal] Load ODBC library.
186 BOOL ODBC_LoadDriverManager()
188 char *s = getenv("LIB_ODBC_DRIVER_MANAGER");
192 gProxyHandle.bFunctionReady = FALSE;
194 if (s != NULL && strlen(s) > 0)
195 strcpy(gProxyHandle.dmLibName, s);
197 strcpy(gProxyHandle.dmLibName, "libodbc.so");
199 dlerror(); /* clear dlerror first */
200 gProxyHandle.dmHandle = dlopen(gProxyHandle.dmLibName, RTLD_LAZY);
202 if (gProxyHandle.dmHandle == NULL) /* fail to load unixODBC driver manager */
204 const char *err = dlerror();
205 WARN("failed to open library %s: %s\n", gProxyHandle.dmLibName, err);
206 gProxyHandle.dmLibName[0] = '\0';
207 gProxyHandle.nErrorType = ERROR_LIBRARY_NOT_FOUND;
212 gProxyHandle.nErrorType = ERROR_FREE;
218 /***********************************************************************
219 * ODBC_LoadDMFunctions [Internal] Populate function table.
228 BOOL ODBC_LoadDMFunctions()
232 if (gProxyHandle.dmHandle == NULL)
235 dlerror(); /* clear dlerror first */
236 for ( i = 0; i < NUM_SQLFUNC; i ++ )
238 gProxyHandle.functions[i] = template_func[i];
239 gProxyHandle.functions[i].func = dlsym(gProxyHandle.dmHandle,
240 gProxyHandle.functions[i].name);
244 ERR("Failed to load function %s",gProxyHandle.functions[i].name);
245 gProxyHandle.functions[i].func = SQLDummyFunc;
249 gProxyHandle.bFunctionReady = TRUE;
255 /*************************************************************************
256 * SQLAllocConnect [ODBC32.001]
258 SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle)
262 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
264 *ConnectionHandle = SQL_NULL_HDBC;
268 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCCONNECT].func)
269 (EnvironmentHandle, ConnectionHandle);
273 /*************************************************************************
274 * SQLAllocEnv [ODBC32.002]
276 SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle)
280 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
282 *EnvironmentHandle = SQL_NULL_HENV;
286 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCENV].func) (EnvironmentHandle);
290 /*************************************************************************
291 * SQLAllocHandle [ODBC32.024]
293 SQLRETURN WINAPI SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
297 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
299 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
300 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
302 if (HandleType == SQL_HANDLE_ENV)
303 *OutputHandle = SQL_NULL_HENV;
304 else if (HandleType == SQL_HANDLE_DBC)
305 *OutputHandle = SQL_NULL_HDBC;
306 else if (HandleType == SQL_HANDLE_STMT)
307 *OutputHandle = SQL_NULL_HSTMT;
308 else if (HandleType == SQL_HANDLE_DESC)
309 *OutputHandle = SQL_NULL_HDESC;
314 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLE].func)
315 (HandleType, InputHandle, OutputHandle);
319 /*************************************************************************
320 * SQLAllocStmt [ODBC32.003]
322 SQLRETURN WINAPI SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle)
327 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
329 *StatementHandle = SQL_NULL_HSTMT;
333 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCSTMT].func)
334 (ConnectionHandle, StatementHandle);
338 /*************************************************************************
339 * SQLAllocHandleStd [ODBC32.077]
341 SQLRETURN WINAPI SQLAllocHandleStd( SQLSMALLINT HandleType,
342 SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
344 TRACE("ProxyODBC: SQLAllocHandelStd.\n");
346 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
348 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
349 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
351 if (HandleType == SQL_HANDLE_ENV)
352 *OutputHandle = SQL_NULL_HENV;
353 else if (HandleType == SQL_HANDLE_DBC)
354 *OutputHandle = SQL_NULL_HDBC;
355 else if (HandleType == SQL_HANDLE_STMT)
356 *OutputHandle = SQL_NULL_HSTMT;
357 else if (HandleType == SQL_HANDLE_DESC)
358 *OutputHandle = SQL_NULL_HDESC;
363 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLESTD].func)
364 (HandleType, InputHandle, OutputHandle);
368 /*************************************************************************
369 * SQLBindCol [ODBC32.004]
371 SQLRETURN WINAPI SQLBindCol(SQLHSTMT StatementHandle,
372 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
373 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
374 SQLINTEGER *StrLen_or_Ind)
378 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
383 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDCOL].func)
384 (StatementHandle, ColumnNumber, TargetType,
385 TargetValue, BufferLength, StrLen_or_Ind);
389 /*************************************************************************
390 * SQLBindParam [ODBC32.025]
392 SQLRETURN WINAPI SQLBindParam(SQLHSTMT StatementHandle,
393 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
394 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
395 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
396 SQLINTEGER *StrLen_or_Ind)
400 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
405 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAM].func)
406 (StatementHandle, ParameterNumber, ValueType,
407 ParameterScale, ParameterValue, StrLen_or_Ind);
411 /*************************************************************************
412 * SQLCancel [ODBC32.005]
414 SQLRETURN WINAPI SQLCancel(SQLHSTMT StatementHandle)
418 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
423 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCANCEL].func) (StatementHandle);
427 /*************************************************************************
428 * SQLCloseCursor [ODBC32.026]
430 SQLRETURN WINAPI SQLCloseCursor(SQLHSTMT StatementHandle)
434 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
439 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCLOSECURSOR].func) (StatementHandle);
443 /*************************************************************************
444 * SQLColAttribute [ODBC32.027]
446 SQLRETURN WINAPI SQLColAttribute (SQLHSTMT StatementHandle,
447 SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier,
448 SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength,
449 SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute)
453 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
458 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTE].func)
459 (StatementHandle, ColumnNumber, FieldIdentifier,
460 CharacterAttribute, BufferLength, StringLength, NumericAttribute);
464 /*************************************************************************
465 * SQLColumns [ODBC32.040]
467 SQLRETURN WINAPI SQLColumns(SQLHSTMT StatementHandle,
468 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
469 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
470 SQLCHAR *TableName, SQLSMALLINT NameLength3,
471 SQLCHAR *ColumnName, SQLSMALLINT NameLength4)
475 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
480 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNS].func)
481 (StatementHandle, CatalogName, NameLength1,
482 SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4);
486 /*************************************************************************
487 * SQLConnect [ODBC32.007]
489 SQLRETURN WINAPI SQLConnect(SQLHDBC ConnectionHandle,
490 SQLCHAR *ServerName, SQLSMALLINT NameLength1,
491 SQLCHAR *UserName, SQLSMALLINT NameLength2,
492 SQLCHAR *Authentication, SQLSMALLINT NameLength3)
496 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
501 strcpy(gProxyHandle.ServerName, ServerName);
502 strcpy(gProxyHandle.UserName, UserName);
504 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCONNECT].func)
505 (ConnectionHandle, ServerName, NameLength1,
506 UserName, NameLength2, Authentication, NameLength3);
510 /*************************************************************************
511 * SQLCopyDesc [ODBC32.028]
513 SQLRETURN WINAPI SQLCopyDesc(SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle)
517 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
522 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOPYDESC].func)
523 (SourceDescHandle, TargetDescHandle);
527 /*************************************************************************
528 * SQLDataSources [ODBC32.057]
530 SQLRETURN WINAPI SQLDataSources(SQLHENV EnvironmentHandle,
531 SQLUSMALLINT Direction, SQLCHAR *ServerName,
532 SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1,
533 SQLCHAR *Description, SQLSMALLINT BufferLength2,
534 SQLSMALLINT *NameLength2)
538 TRACE("EnvironmentHandle = %p\n", (LPVOID)EnvironmentHandle);
540 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
542 ERR("Error: empty dm handle (gProxyHandle.dmHandle == NULL)\n");
546 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLDATASOURCES].func)
547 (EnvironmentHandle, Direction, ServerName,
548 BufferLength1, NameLength1, Description, BufferLength2, NameLength2);
552 TRACE("returns: %d \t", ret);
553 if (*NameLength1 > 0)
554 TRACE("DataSource = %s,", ServerName);
555 if (*NameLength2 > 0)
556 TRACE(" Description = %s\n", Description);
563 /*************************************************************************
564 * SQLDescribeCol [ODBC32.008]
566 SQLRETURN WINAPI SQLDescribeCol(SQLHSTMT StatementHandle,
567 SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName,
568 SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,
569 SQLSMALLINT *DataType, SQLUINTEGER *ColumnSize,
570 SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable)
574 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
579 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBECOL].func)
580 (StatementHandle, ColumnNumber, ColumnName,
581 BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable);
585 /*************************************************************************
586 * SQLDisconnect [ODBC32.009]
588 SQLRETURN WINAPI SQLDisconnect(SQLHDBC ConnectionHandle)
592 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
597 gProxyHandle.ServerName[0] = '\0';
598 gProxyHandle.UserName[0] = '\0';
600 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDISCONNECT].func) (ConnectionHandle);
604 /*************************************************************************
605 * SQLEndTran [ODBC32.029]
607 SQLRETURN WINAPI SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType)
611 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
616 return (gProxyHandle.functions[SQLAPI_INDEX_SQLENDTRAN].func) (HandleType, Handle, CompletionType);
620 /*************************************************************************
621 * SQLError [ODBC32.010]
623 SQLRETURN WINAPI SQLError(SQLHENV EnvironmentHandle,
624 SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle,
625 SQLCHAR *Sqlstate, SQLINTEGER *NativeError,
626 SQLCHAR *MessageText, SQLSMALLINT BufferLength,
627 SQLSMALLINT *TextLength)
631 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
636 return (gProxyHandle.functions[SQLAPI_INDEX_SQLERROR].func)
637 (EnvironmentHandle, ConnectionHandle, StatementHandle,
638 Sqlstate, NativeError, MessageText, BufferLength, TextLength);
642 /*************************************************************************
643 * SQLExecDirect [ODBC32.011]
645 SQLRETURN WINAPI SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
649 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
654 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECDIRECT].func)
655 (StatementHandle, StatementText, TextLength);
659 /*************************************************************************
660 * SQLExecute [ODBC32.012]
662 SQLRETURN WINAPI SQLExecute(SQLHSTMT StatementHandle)
666 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
671 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECUTE].func) (StatementHandle);
675 /*************************************************************************
676 * SQLFetch [ODBC32.013]
678 SQLRETURN WINAPI SQLFetch(SQLHSTMT StatementHandle)
682 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
687 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCH].func) (StatementHandle);
691 /*************************************************************************
692 * SQLFetchScroll [ODBC32.030]
694 SQLRETURN WINAPI SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset)
698 if (gProxyHandle.dmHandle == NULL)
703 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCHSCROLL].func)
704 (StatementHandle, FetchOrientation, FetchOffset);
708 /*************************************************************************
709 * SQLFreeConnect [ODBC32.014]
711 SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle)
715 if (gProxyHandle.dmHandle == NULL)
720 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFREECONNECT].func) (ConnectionHandle);
724 /*************************************************************************
725 * SQLFreeEnv [ODBC32.015]
727 SQLRETURN WINAPI SQLFreeEnv(SQLHENV EnvironmentHandle)
733 if (gProxyHandle.dmHandle == NULL)
738 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEENV].func) (EnvironmentHandle);
740 if (gProxyHandle.dmHandle)
742 dlclose(gProxyHandle.dmHandle);
743 gProxyHandle.dmHandle = NULL;
751 /*************************************************************************
752 * SQLFreeHandle [ODBC32.031]
754 SQLRETURN WINAPI SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle)
760 if (gProxyHandle.dmHandle == NULL)
765 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEHANDLE].func)
766 (HandleType, Handle);
768 if (HandleType == SQL_HANDLE_ENV) /* it is time to close the loaded library */
770 if (gProxyHandle.dmHandle)
772 dlclose(gProxyHandle.dmHandle);
773 gProxyHandle.dmHandle = NULL;
781 /*************************************************************************
782 * SQLFreeStmt [ODBC32.016]
784 SQLRETURN WINAPI SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option)
789 if (gProxyHandle.dmHandle == NULL)
794 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFREESTMT].func)
795 (StatementHandle, Option);
799 /*************************************************************************
800 * SQLGetConnectAttr [ODBC32.032]
802 SQLRETURN WINAPI SQLGetConnectAttr(SQLHDBC ConnectionHandle,
803 SQLINTEGER Attribute, SQLPOINTER Value,
804 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
808 if (gProxyHandle.dmHandle == NULL)
813 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTATTR].func)
814 (ConnectionHandle, Attribute, Value,
815 BufferLength, StringLength);
819 /*************************************************************************
820 * SQLGetConnectOption [ODBC32.042]
822 SQLRETURN WINAPI SQLGetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value)
826 if (gProxyHandle.dmHandle == NULL)
831 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTOPTION].func)
832 (ConnectionHandle, Option, Value);
836 /*************************************************************************
837 * SQLGetCursorName [ODBC32.017]
839 SQLRETURN WINAPI SQLGetCursorName(SQLHSTMT StatementHandle,
840 SQLCHAR *CursorName, SQLSMALLINT BufferLength,
841 SQLSMALLINT *NameLength)
845 if (gProxyHandle.dmHandle == NULL)
850 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCURSORNAME].func)
851 (StatementHandle, CursorName, BufferLength, NameLength);
855 /*************************************************************************
856 * SQLGetData [ODBC32.043]
858 SQLRETURN WINAPI SQLGetData(SQLHSTMT StatementHandle,
859 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
860 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
861 SQLINTEGER *StrLen_or_Ind)
864 if (gProxyHandle.dmHandle == NULL)
869 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDATA].func)
870 (StatementHandle, ColumnNumber, TargetType,
871 TargetValue, BufferLength, StrLen_or_Ind);
875 /*************************************************************************
876 * SQLGetDescField [ODBC32.033]
878 SQLRETURN WINAPI SQLGetDescField(SQLHDESC DescriptorHandle,
879 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
880 SQLPOINTER Value, SQLINTEGER BufferLength,
881 SQLINTEGER *StringLength)
884 if (gProxyHandle.dmHandle == NULL)
889 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCFIELD].func)
890 (DescriptorHandle, RecNumber, FieldIdentifier,
891 Value, BufferLength, StringLength);
895 /*************************************************************************
896 * SQLGetDescRec [ODBC32.034]
898 SQLRETURN WINAPI SQLGetDescRec(SQLHDESC DescriptorHandle,
899 SQLSMALLINT RecNumber, SQLCHAR *Name,
900 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength,
901 SQLSMALLINT *Type, SQLSMALLINT *SubType,
902 SQLINTEGER *Length, SQLSMALLINT *Precision,
903 SQLSMALLINT *Scale, SQLSMALLINT *Nullable)
906 if (gProxyHandle.dmHandle == NULL)
911 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCREC].func)
912 (DescriptorHandle, RecNumber, Name, BufferLength,
913 StringLength, Type, SubType, Length, Precision, Scale, Nullable);
917 /*************************************************************************
918 * SQLGetDiagField [ODBC32.035]
920 SQLRETURN WINAPI SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle,
921 SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier,
922 SQLPOINTER DiagInfo, SQLSMALLINT BufferLength,
923 SQLSMALLINT *StringLength)
926 if (gProxyHandle.dmHandle == NULL)
931 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGFIELD].func)
932 (HandleType, Handle, RecNumber, DiagIdentifier,
933 DiagInfo, BufferLength, StringLength);
937 /*************************************************************************
938 * SQLGetDiagRec [ODBC32.036]
940 SQLRETURN WINAPI SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle,
941 SQLSMALLINT RecNumber, SQLCHAR *Sqlstate,
942 SQLINTEGER *NativeError, SQLCHAR *MessageText,
943 SQLSMALLINT BufferLength, SQLSMALLINT *TextLength)
946 if (gProxyHandle.dmHandle == NULL)
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)
965 if (gProxyHandle.dmHandle == NULL)
970 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETENVATTR].func)
971 (EnvironmentHandle, Attribute, Value, BufferLength, StringLength);
975 /*************************************************************************
976 * SQLGetFunctions [ODBC32.044]
978 SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported)
981 if (gProxyHandle.dmHandle == NULL)
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)
999 if (gProxyHandle.dmHandle == NULL)
1004 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETINFO].func)
1005 (ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength);
1009 /*************************************************************************
1010 * SQLGetStmtAttr [ODBC32.038]
1012 SQLRETURN WINAPI SQLGetStmtAttr(SQLHSTMT StatementHandle,
1013 SQLINTEGER Attribute, SQLPOINTER Value,
1014 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
1017 if (gProxyHandle.dmHandle == NULL)
1022 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTATTR].func)
1023 (StatementHandle, Attribute, Value, BufferLength, StringLength);
1027 /*************************************************************************
1028 * SQLGetStmtOption [ODBC32.046]
1030 SQLRETURN WINAPI SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value)
1033 if (gProxyHandle.dmHandle == NULL)
1038 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTOPTION].func)
1039 (StatementHandle, Option, Value);
1043 /*************************************************************************
1044 * SQLGetTypeInfo [ODBC32.047]
1046 SQLRETURN WINAPI SQLGetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType)
1049 if (gProxyHandle.dmHandle == NULL)
1054 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETTYPEINFO].func)
1055 (StatementHandle, DataType);
1059 /*************************************************************************
1060 * SQLNumResultCols [ODBC32.018]
1062 SQLRETURN WINAPI SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnCount)
1065 if (gProxyHandle.dmHandle == NULL)
1070 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMRESULTCOLS].func)
1071 (StatementHandle, ColumnCount);
1075 /*************************************************************************
1076 * SQLParamData [ODBC32.048]
1078 SQLRETURN WINAPI SQLParamData(SQLHSTMT StatementHandle, SQLPOINTER *Value)
1081 if (gProxyHandle.dmHandle == NULL)
1086 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMDATA].func)
1087 (StatementHandle, Value);
1091 /*************************************************************************
1092 * SQLPrepare [ODBC32.019]
1094 SQLRETURN WINAPI SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
1097 if (gProxyHandle.dmHandle == NULL)
1102 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPREPARE].func)
1103 (StatementHandle, StatementText, TextLength);
1107 /*************************************************************************
1108 * SQLPutData [ODBC32.049]
1110 SQLRETURN WINAPI SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLINTEGER StrLen_or_Ind)
1113 if (gProxyHandle.dmHandle == NULL)
1118 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPUTDATA].func)
1119 (StatementHandle, Data, StrLen_or_Ind);
1123 /*************************************************************************
1124 * SQLRowCount [ODBC32.020]
1126 SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle, SQLINTEGER *RowCount)
1129 if (gProxyHandle.dmHandle == NULL)
1134 return (gProxyHandle.functions[SQLAPI_INDEX_SQLROWCOUNT].func)
1135 (StatementHandle, RowCount);
1139 /*************************************************************************
1140 * SQLSetConnectAttr [ODBC32.039]
1142 SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute,
1143 SQLPOINTER Value, SQLINTEGER StringLength)
1146 if (gProxyHandle.dmHandle == NULL)
1151 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTATTR].func)
1152 (ConnectionHandle, Attribute, Value, StringLength);
1156 /*************************************************************************
1157 * SQLSetConnectOption [ODBC32.050]
1159 SQLRETURN WINAPI SQLSetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1162 if (gProxyHandle.dmHandle == NULL)
1167 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTOPTION].func)
1168 (ConnectionHandle, Option, Value);
1172 /*************************************************************************
1173 * SQLSetCursorName [ODBC32.021]
1175 SQLRETURN WINAPI SQLSetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, SQLSMALLINT NameLength)
1178 if (gProxyHandle.dmHandle == NULL)
1183 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCURSORNAME].func)
1184 (StatementHandle, CursorName, NameLength);
1188 /*************************************************************************
1189 * SQLSetDescField [ODBC32.073]
1191 SQLRETURN WINAPI SQLSetDescField(SQLHDESC DescriptorHandle,
1192 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
1193 SQLPOINTER Value, SQLINTEGER BufferLength)
1196 if (gProxyHandle.dmHandle == NULL)
1201 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCFIELD].func)
1202 (DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength);
1206 /*************************************************************************
1207 * SQLSetDescRec [ODBC32.074]
1209 SQLRETURN WINAPI SQLSetDescRec(SQLHDESC DescriptorHandle,
1210 SQLSMALLINT RecNumber, SQLSMALLINT Type,
1211 SQLSMALLINT SubType, SQLINTEGER Length,
1212 SQLSMALLINT Precision, SQLSMALLINT Scale,
1213 SQLPOINTER Data, SQLINTEGER *StringLength,
1214 SQLINTEGER *Indicator)
1217 if (gProxyHandle.dmHandle == NULL)
1222 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCREC].func)
1223 (DescriptorHandle, RecNumber, Type, SubType, Length,
1224 Precision, Scale, Data, StringLength, Indicator);
1228 /*************************************************************************
1229 * SQLSetEnvAttr [ODBC32.075]
1231 SQLRETURN WINAPI SQLSetEnvAttr(SQLHENV EnvironmentHandle,
1232 SQLINTEGER Attribute, SQLPOINTER Value,
1233 SQLINTEGER StringLength)
1236 if (gProxyHandle.dmHandle == NULL)
1241 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETENVATTR].func)
1242 (EnvironmentHandle, Attribute, Value, StringLength);
1246 /*************************************************************************
1247 * SQLSetParam [ODBC32.022]
1249 SQLRETURN WINAPI SQLSetParam(SQLHSTMT StatementHandle,
1250 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
1251 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
1252 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
1253 SQLINTEGER *StrLen_or_Ind)
1256 if (gProxyHandle.dmHandle == NULL)
1261 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPARAM].func)
1262 (StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision,
1263 ParameterScale, ParameterValue, StrLen_or_Ind);
1267 /*************************************************************************
1268 * SQLSetStmtAttr [ODBC32.076]
1270 SQLRETURN WINAPI SQLSetStmtAttr(SQLHSTMT StatementHandle,
1271 SQLINTEGER Attribute, SQLPOINTER Value,
1272 SQLINTEGER StringLength)
1275 if (gProxyHandle.dmHandle == NULL)
1280 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTATTR].func)
1281 (StatementHandle, Attribute, Value, StringLength);
1285 /*************************************************************************
1286 * SQLSetStmtOption [ODBC32.051]
1288 SQLRETURN WINAPI SQLSetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1291 if (gProxyHandle.dmHandle == NULL)
1296 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTOPTION].func)
1297 (StatementHandle, Option, Value);
1301 /*************************************************************************
1302 * SQLSpecialColumns [ODBC32.052]
1304 SQLRETURN WINAPI SQLSpecialColumns(SQLHSTMT StatementHandle,
1305 SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName,
1306 SQLSMALLINT NameLength1, SQLCHAR *SchemaName,
1307 SQLSMALLINT NameLength2, SQLCHAR *TableName,
1308 SQLSMALLINT NameLength3, SQLUSMALLINT Scope,
1309 SQLUSMALLINT Nullable)
1311 if (gProxyHandle.dmHandle == NULL)
1316 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSPECIALCOLUMNS].func)
1317 (StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName,
1318 NameLength2, TableName, NameLength3, Scope, Nullable);
1322 /*************************************************************************
1323 * SQLStatistics [ODBC32.053]
1325 SQLRETURN WINAPI SQLStatistics(SQLHSTMT StatementHandle,
1326 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1327 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1328 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1329 SQLUSMALLINT Unique, SQLUSMALLINT Reserved)
1332 if (gProxyHandle.dmHandle == NULL)
1337 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSTATISTICS].func)
1338 (StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2,
1339 TableName, NameLength3, Unique, Reserved);
1343 /*************************************************************************
1344 * SQLTables [ODBC32.054]
1346 SQLRETURN WINAPI SQLTables(SQLHSTMT StatementHandle,
1347 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1348 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1349 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1350 SQLCHAR *TableType, SQLSMALLINT NameLength4)
1353 if (gProxyHandle.dmHandle == NULL)
1358 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLES].func)
1359 (StatementHandle, CatalogName, NameLength1,
1360 SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4);
1364 /*************************************************************************
1365 * SQLTransact [ODBC32.023]
1367 SQLRETURN WINAPI SQLTransact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle,
1368 SQLUSMALLINT CompletionType)
1371 if (gProxyHandle.dmHandle == NULL)
1376 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTRANSACT].func)
1377 (EnvironmentHandle, ConnectionHandle, CompletionType);
1381 /*************************************************************************
1382 * SQLBrowseConnect [ODBC32.055]
1384 SQLRETURN WINAPI SQLBrowseConnect(
1386 SQLCHAR *szConnStrIn,
1387 SQLSMALLINT cbConnStrIn,
1388 SQLCHAR *szConnStrOut,
1389 SQLSMALLINT cbConnStrOutMax,
1390 SQLSMALLINT *pcbConnStrOut)
1393 if (gProxyHandle.dmHandle == NULL)
1398 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBROWSECONNECT].func)
1399 (hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut);
1403 /*************************************************************************
1404 * SQLBulkOperations [ODBC32.078]
1406 SQLRETURN WINAPI SQLBulkOperations(
1407 SQLHSTMT StatementHandle,
1408 SQLSMALLINT Operation)
1411 if (gProxyHandle.dmHandle == NULL)
1416 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBULKOPERATIONS].func)
1417 (StatementHandle, Operation);
1421 /*************************************************************************
1422 * SQLColAttributes [ODBC32.006]
1424 SQLRETURN WINAPI SQLColAttributes(
1427 SQLUSMALLINT fDescType,
1429 SQLSMALLINT cbDescMax,
1430 SQLSMALLINT *pcbDesc,
1434 if (gProxyHandle.dmHandle == NULL)
1439 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTES].func)
1440 (hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc);
1444 /*************************************************************************
1445 * SQLColumnPrivileges [ODBC32.056]
1447 SQLRETURN WINAPI SQLColumnPrivileges(
1449 SQLCHAR *szCatalogName,
1450 SQLSMALLINT cbCatalogName,
1451 SQLCHAR *szSchemaName,
1452 SQLSMALLINT cbSchemaName,
1453 SQLCHAR *szTableName,
1454 SQLSMALLINT cbTableName,
1455 SQLCHAR *szColumnName,
1456 SQLSMALLINT cbColumnName)
1459 if (gProxyHandle.dmHandle == NULL)
1464 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES].func)
1465 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1466 szTableName, cbTableName, szColumnName, cbColumnName);
1470 /*************************************************************************
1471 * SQLDescribeParam [ODBC32.058]
1473 SQLRETURN WINAPI SQLDescribeParam(
1476 SQLSMALLINT *pfSqlType,
1477 SQLUINTEGER *pcbParamDef,
1478 SQLSMALLINT *pibScale,
1479 SQLSMALLINT *pfNullable)
1482 if (gProxyHandle.dmHandle == NULL)
1487 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBEPARAM].func)
1488 (hstmt, ipar, pfSqlType, pcbParamDef, pibScale, pfNullable);
1492 /*************************************************************************
1493 * SQLExtendedFetch [ODBC32.059]
1495 SQLRETURN WINAPI SQLExtendedFetch(
1497 SQLUSMALLINT fFetchType,
1500 SQLUSMALLINT *rgfRowStatus)
1503 if (gProxyHandle.dmHandle == NULL)
1508 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXTENDEDFETCH].func)
1509 (hstmt, fFetchType, irow, pcrow, rgfRowStatus);
1513 /*************************************************************************
1514 * SQLForeignKeys [ODBC32.060]
1516 SQLRETURN WINAPI SQLForeignKeys(
1518 SQLCHAR *szPkCatalogName,
1519 SQLSMALLINT cbPkCatalogName,
1520 SQLCHAR *szPkSchemaName,
1521 SQLSMALLINT cbPkSchemaName,
1522 SQLCHAR *szPkTableName,
1523 SQLSMALLINT cbPkTableName,
1524 SQLCHAR *szFkCatalogName,
1525 SQLSMALLINT cbFkCatalogName,
1526 SQLCHAR *szFkSchemaName,
1527 SQLSMALLINT cbFkSchemaName,
1528 SQLCHAR *szFkTableName,
1529 SQLSMALLINT cbFkTableName)
1532 if (gProxyHandle.dmHandle == NULL)
1537 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFOREIGNKEYS].func)
1538 (hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName,
1539 szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName,
1540 cbFkSchemaName, szFkTableName, cbFkTableName);
1544 /*************************************************************************
1545 * SQLMoreResults [ODBC32.061]
1547 SQLRETURN WINAPI SQLMoreResults(SQLHSTMT hstmt)
1550 if (gProxyHandle.dmHandle == NULL)
1555 return (gProxyHandle.functions[SQLAPI_INDEX_SQLMORERESULTS].func) (hstmt);
1559 /*************************************************************************
1560 * SQLNativeSql [ODBC32.062]
1562 SQLRETURN WINAPI SQLNativeSql(
1564 SQLCHAR *szSqlStrIn,
1565 SQLINTEGER cbSqlStrIn,
1567 SQLINTEGER cbSqlStrMax,
1568 SQLINTEGER *pcbSqlStr)
1571 if (gProxyHandle.dmHandle == NULL)
1576 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNATIVESQL].func)
1577 (hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr);
1581 /*************************************************************************
1582 * SQLNumParams [ODBC32.063]
1584 SQLRETURN WINAPI SQLNumParams(
1589 if (gProxyHandle.dmHandle == NULL)
1594 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMPARAMS].func) (hstmt, pcpar);
1598 /*************************************************************************
1599 * SQLParamOptions [ODBC32.064]
1601 SQLRETURN WINAPI SQLParamOptions(
1607 if (gProxyHandle.dmHandle == NULL)
1612 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMOPTIONS].func) (hstmt, crow, pirow);
1616 /*************************************************************************
1617 * SQLPrimaryKeys [ODBC32.065]
1619 SQLRETURN WINAPI SQLPrimaryKeys(
1621 SQLCHAR *szCatalogName,
1622 SQLSMALLINT cbCatalogName,
1623 SQLCHAR *szSchemaName,
1624 SQLSMALLINT cbSchemaName,
1625 SQLCHAR *szTableName,
1626 SQLSMALLINT cbTableName)
1629 if (gProxyHandle.dmHandle == NULL)
1634 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPRIMARYKEYS].func)
1635 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1636 szTableName, cbTableName);
1640 /*************************************************************************
1641 * SQLProcedureColumns [ODBC32.066]
1643 SQLRETURN WINAPI SQLProcedureColumns(
1645 SQLCHAR *szCatalogName,
1646 SQLSMALLINT cbCatalogName,
1647 SQLCHAR *szSchemaName,
1648 SQLSMALLINT cbSchemaName,
1649 SQLCHAR *szProcName,
1650 SQLSMALLINT cbProcName,
1651 SQLCHAR *szColumnName,
1652 SQLSMALLINT cbColumnName)
1655 if (gProxyHandle.dmHandle == NULL)
1660 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURECOLUMNS].func)
1661 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1662 szProcName, cbProcName, szColumnName, cbColumnName);
1666 /*************************************************************************
1667 * SQLProcedures [ODBC32.067]
1669 SQLRETURN WINAPI SQLProcedures(
1671 SQLCHAR *szCatalogName,
1672 SQLSMALLINT cbCatalogName,
1673 SQLCHAR *szSchemaName,
1674 SQLSMALLINT cbSchemaName,
1675 SQLCHAR *szProcName,
1676 SQLSMALLINT cbProcName)
1679 if (gProxyHandle.dmHandle == NULL)
1684 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURES].func)
1685 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1686 szProcName, cbProcName);
1690 /*************************************************************************
1691 * SQLSetPos [ODBC32.068]
1693 SQLRETURN WINAPI SQLSetPos(
1696 SQLUSMALLINT fOption,
1700 if (gProxyHandle.dmHandle == NULL)
1705 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPOS].func)
1706 (hstmt, irow, fOption, fLock);
1710 /*************************************************************************
1711 * SQLTablePrivileges [ODBC32.070]
1713 SQLRETURN WINAPI SQLTablePrivileges(
1715 SQLCHAR *szCatalogName,
1716 SQLSMALLINT cbCatalogName,
1717 SQLCHAR *szSchemaName,
1718 SQLSMALLINT cbSchemaName,
1719 SQLCHAR *szTableName,
1720 SQLSMALLINT cbTableName)
1723 if (gProxyHandle.dmHandle == NULL)
1728 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLEPRIVILEGES].func)
1729 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1730 szTableName, cbTableName);
1734 /*************************************************************************
1735 * SQLDrivers [ODBC32.071]
1737 SQLRETURN WINAPI SQLDrivers(
1739 SQLUSMALLINT fDirection,
1740 SQLCHAR *szDriverDesc,
1741 SQLSMALLINT cbDriverDescMax,
1742 SQLSMALLINT *pcbDriverDesc,
1743 SQLCHAR *szDriverAttributes,
1744 SQLSMALLINT cbDriverAttrMax,
1745 SQLSMALLINT *pcbDriverAttr)
1748 if (gProxyHandle.dmHandle == NULL)
1753 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERS].func)
1754 (henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc,
1755 szDriverAttributes, cbDriverAttrMax, pcbDriverAttr);
1759 /*************************************************************************
1760 * SQLBindParameter [ODBC32.072]
1762 SQLRETURN WINAPI SQLBindParameter(
1765 SQLSMALLINT fParamType,
1767 SQLSMALLINT fSqlType,
1768 SQLUINTEGER cbColDef,
1769 SQLSMALLINT ibScale,
1770 SQLPOINTER rgbValue,
1771 SQLINTEGER cbValueMax,
1772 SQLINTEGER *pcbValue)
1775 if (gProxyHandle.dmHandle == NULL)
1780 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAMETER].func)
1781 (hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale,
1782 rgbValue, cbValueMax, pcbValue);
1786 /*************************************************************************
1787 * SQLDriverConnect [ODBC32.041]
1789 SQLRETURN WINAPI SQLDriverConnect(
1792 SQLCHAR *conn_str_in,
1793 SQLSMALLINT len_conn_str_in,
1794 SQLCHAR *conn_str_out,
1795 SQLSMALLINT conn_str_out_max,
1796 SQLSMALLINT *ptr_conn_str_out,
1797 SQLUSMALLINT driver_completion )
1800 if (gProxyHandle.dmHandle == NULL)
1805 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERCONNECT].func)
1806 (hdbc, hwnd, conn_str_in, len_conn_str_in, conn_str_out,
1807 conn_str_out_max, ptr_conn_str_out, driver_completion);
1811 /*************************************************************************
1812 * SQLSetScrollOptions [ODBC32.069]
1814 SQLRETURN WINAPI SQLSetScrollOptions(
1815 SQLHSTMT statement_handle,
1816 SQLUSMALLINT f_concurrency,
1817 SQLINTEGER crow_keyset,
1818 SQLUSMALLINT crow_rowset )
1821 if (gProxyHandle.dmHandle == NULL)
1826 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSCROLLOPTIONS].func)
1827 (statement_handle, f_concurrency, crow_keyset, crow_rowset);