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 DM_FUNC template_func[] =
30 /* 00 */ { SQL_API_SQLALLOCCONNECT, "SQLAllocConnect", SQLAllocConnect },
31 /* 01 */ { SQL_API_SQLALLOCENV, "SQLAllocEnv", SQLAllocEnv },
32 /* 02 */ { SQL_API_SQLALLOCHANDLE, "SQLAllocHandle", SQLAllocHandle },
33 /* 03 */ { SQL_API_SQLALLOCSTMT, "SQLAllocStmt", SQLAllocStmt },
34 /* 04 */ { SQL_API_SQLALLOCHANDLESTD, "SQLAllocHandleStd", SQLAllocHandleStd },
35 /* 05 */ { SQL_API_SQLBINDCOL, "SQLBindCol", SQLBindCol },
36 /* 06 */ { SQL_API_SQLBINDPARAM, "SQLBindParam", SQLBindParam },
37 /* 07 */ { SQL_API_SQLBINDPARAMETER, "SQLBindParameter", SQLBindParameter },
38 /* 08 */ { SQL_API_SQLBROWSECONNECT, "SQLBrowseConnect", SQLBrowseConnect },
39 /* 09 */ { SQL_API_SQLBULKOPERATIONS, "SQLBulkOperations", SQLBulkOperations },
40 /* 10 */ { SQL_API_SQLCANCEL, "SQLCancel", SQLCancel },
41 /* 11 */ { SQL_API_SQLCLOSECURSOR, "SQLCloseCursor", SQLCloseCursor },
42 /* 12 */ { SQL_API_SQLCOLATTRIBUTE, "SQLColAttribute", SQLColAttribute },
43 /* 13 */ { SQL_API_SQLCOLATTRIBUTES, "SQLColAttributes", SQLColAttributes },
44 /* 14 */ { SQL_API_SQLCOLUMNPRIVILEGES, "SQLColumnPrivileges", SQLColumnPrivileges },
45 /* 15 */ { SQL_API_SQLCOLUMNS, "SQLColumns", SQLColumns },
46 /* 16 */ { SQL_API_SQLCONNECT, "SQLConnect", SQLConnect },
47 /* 17 */ { SQL_API_SQLCOPYDESC, "SQLCopyDesc", SQLCopyDesc },
48 /* 18 */ { SQL_API_SQLDATASOURCES, "SQLDataSources", SQLDataSources },
49 /* 19 */ { SQL_API_SQLDESCRIBECOL, "SQLDescribeCol", SQLDescribeCol },
50 /* 20 */ { SQL_API_SQLDESCRIBEPARAM, "SQLDescribeParam", SQLDescribeParam },
51 /* 21 */ { SQL_API_SQLDISCONNECT, "SQLDisconnect", SQLDisconnect },
52 /* 22 */ { SQL_API_SQLDRIVERCONNECT, "SQLDriverConnect", SQLDriverConnect },
53 /* 23 */ { SQL_API_SQLDRIVERS, "SQLDrivers", SQLDrivers },
54 /* 24 */ { SQL_API_SQLENDTRAN, "SQLEndTran", SQLEndTran },
55 /* 25 */ { SQL_API_SQLERROR, "SQLError", SQLError },
56 /* 26 */ { SQL_API_SQLEXECDIRECT, "SQLExecDirect", SQLExecDirect },
57 /* 27 */ { SQL_API_SQLEXECUTE, "SQLExecute", SQLExecute },
58 /* 28 */ { SQL_API_SQLEXTENDEDFETCH, "SQLExtendedFetch", SQLExtendedFetch },
59 /* 29 */ { SQL_API_SQLFETCH, "SQLFetch", SQLFetch },
60 /* 30 */ { SQL_API_SQLFETCHSCROLL, "SQLFetchScroll", SQLFetchScroll },
61 /* 31 */ { SQL_API_SQLFOREIGNKEYS, "SQLForeignKeys", SQLForeignKeys },
62 /* 32 */ { SQL_API_SQLFREEENV, "SQLFreeEnv", SQLFreeEnv },
63 /* 33 */ { SQL_API_SQLFREEHANDLE, "SQLFreeHandle", SQLFreeHandle },
64 /* 34 */ { SQL_API_SQLFREESTMT, "SQLFreeStmt", SQLFreeStmt },
65 /* 35 */ { SQL_API_SQLFREECONNECT, "SQLFreeConnect", SQLFreeConnect },
66 /* 36 */ { SQL_API_SQLGETCONNECTATTR, "SQLGetConnectAttr", SQLGetConnectAttr },
67 /* 37 */ { SQL_API_SQLGETCONNECTOPTION, "SQLGetConnectOption", SQLGetConnectOption },
68 /* 38 */ { SQL_API_SQLGETCURSORNAME, "SQLGetCursorName", SQLGetCursorName },
69 /* 39 */ { SQL_API_SQLGETDATA, "SQLGetData", SQLGetData },
70 /* 40 */ { SQL_API_SQLGETDESCFIELD, "SQLGetDescField", SQLGetDescField },
71 /* 41 */ { SQL_API_SQLGETDESCREC, "SQLGetDescRec", SQLGetDescRec },
72 /* 42 */ { SQL_API_SQLGETDIAGFIELD, "SQLGetDiagField", SQLGetDiagField },
73 /* 43 */ { SQL_API_SQLGETENVATTR, "SQLGetEnvAttr", SQLGetEnvAttr },
74 /* 44 */ { SQL_API_SQLGETFUNCTIONS, "SQLGetFunctions", SQLGetFunctions },
75 /* 45 */ { SQL_API_SQLGETINFO, "SQLGetInfo", SQLGetInfo },
76 /* 46 */ { SQL_API_SQLGETSTMTATTR, "SQLGetStmtAttr", SQLGetStmtAttr },
77 /* 47 */ { SQL_API_SQLGETSTMTOPTION, "SQLGetStmtOption", SQLGetStmtOption },
78 /* 48 */ { SQL_API_SQLGETTYPEINFO, "SQLGetTypeInfo", SQLGetTypeInfo },
79 /* 49 */ { SQL_API_SQLMORERESULTS, "SQLMoreResults", SQLMoreResults },
80 /* 50 */ { SQL_API_SQLNATIVESQL, "SQLNativeSql", SQLNativeSql },
81 /* 51 */ { SQL_API_SQLNUMPARAMS, "SQLNumParams", SQLNumParams },
82 /* 52 */ { SQL_API_SQLNUMRESULTCOLS, "SQLNumResultCols", SQLNumResultCols },
83 /* 53 */ { SQL_API_SQLPARAMDATA, "SQLParamData", SQLParamData },
84 /* 54 */ { SQL_API_SQLPARAMOPTIONS, "SQLParamOptions", SQLParamOptions },
85 /* 55 */ { SQL_API_SQLPREPARE, "SQLPrepare", SQLPrepare },
86 /* 56 */ { SQL_API_SQLPRIMARYKEYS, "SQLPrimaryKeys", SQLPrimaryKeys },
87 /* 57 */ { SQL_API_SQLPROCEDURECOLUMNS, "SQLProcedureColumns", SQLProcedureColumns },
88 /* 58 */ { SQL_API_SQLPROCEDURES, "SQLProcedures", SQLProcedures },
89 /* 59 */ { SQL_API_SQLPUTDATA, "SQLPutData", SQLPutData },
90 /* 60 */ { SQL_API_SQLROWCOUNT, "SQLRowCount", SQLRowCount },
91 /* 61 */ { SQL_API_SQLSETCONNECTATTR, "SQLSetConnectAttr", SQLSetConnectAttr },
92 /* 62 */ { SQL_API_SQLSETCONNECTOPTION, "SQLSetConnectOption", SQLSetConnectOption },
93 /* 63 */ { SQL_API_SQLSETCURSORNAME, "SQLSetCursorName", SQLSetCursorName },
94 /* 64 */ { SQL_API_SQLSETDESCFIELD, "SQLSetDescField", SQLSetDescField },
95 /* 65 */ { SQL_API_SQLSETDESCREC, "SQLSetDescRec", SQLSetDescRec },
96 /* 66 */ { SQL_API_SQLSETENVATTR, "SQLSetEnvAttr", SQLSetEnvAttr },
97 /* 67 */ { SQL_API_SQLSETPARAM, "SQLSetParam", SQLSetParam },
98 /* 68 */ { SQL_API_SQLSETPOS, "SQLSetPos", SQLSetPos },
99 /* 69 */ { SQL_API_SQLSETSCROLLOPTIONS, "SQLSetScrollOptions", SQLSetScrollOptions },
100 /* 70 */ { SQL_API_SQLSETSTMTATTR, "SQLSetStmtAttr", SQLSetStmtAttr },
101 /* 71 */ { SQL_API_SQLSETSTMTOPTION, "SQLSetStmtOption", SQLSetStmtOption },
102 /* 72 */ { SQL_API_SQLSPECIALCOLUMNS, "SQLSpecialColumns", SQLSpecialColumns },
103 /* 73 */ { SQL_API_SQLSTATISTICS, "SQLStatistics", SQLStatistics },
104 /* 74 */ { SQL_API_SQLTABLEPRIVILEGES, "SQLTablePrivileges", SQLTablePrivileges },
105 /* 75 */ { SQL_API_SQLTABLES, "SQLTables", SQLTables },
106 /* 76 */ { SQL_API_SQLTRANSACT, "SQLTransact", SQLTransact },
107 /* 77 */ { SQL_API_SQLGETDIAGREC, "SQLGetDiagRec", SQLGetDiagRec },
110 static PROXYHANDLE gProxyHandle = {NULL, FALSE, FALSE, FALSE, ERROR_LIBRARY_NOT_FOUND};
112 SQLRETURN SQLDummyFunc()
114 TRACE("SQLDummyFunc: \n");
118 /***********************************************************************
119 * MAIN_OdbcInit [Internal] Initializes the internal 'ODBC32.DLL'.
122 * hinstDLL [I] handle to the DLL's instance
124 * lpvReserved [I] reserved, must be NULL
132 MAIN_OdbcInit(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
135 TRACE("Initializing proxy ODBC: %x,%lx,%p\n", hinstDLL, fdwReason, lpvReserved);
137 if (fdwReason == DLL_PROCESS_ATTACH)
139 TRACE("Loading ODBC...\n");
140 if (ODBC_LoadDriverManager())
141 ODBC_LoadDMFunctions();
143 else if (fdwReason == DLL_PROCESS_DETACH)
145 TRACE("Unloading ODBC...\n");
146 if (gProxyHandle.bFunctionReady)
148 for ( i = 0; i < NUM_SQLFUNC; i ++ )
150 gProxyHandle.functions[i].func = SQLDummyFunc;
154 if (gProxyHandle.dmHandle)
156 dlclose(gProxyHandle.dmHandle);
157 gProxyHandle.dmHandle = NULL;
165 /***********************************************************************
166 * ODBC_LoadDriverManager [Internal] Load ODBC library.
175 BOOL ODBC_LoadDriverManager()
177 char *s = getenv("LIB_ODBC_DRIVER_MANAGER");
181 gProxyHandle.bFunctionReady = FALSE;
183 if (s != NULL && strlen(s) > 0)
184 strcpy(gProxyHandle.dmLibName, s);
186 strcpy(gProxyHandle.dmLibName, "libodbc.so");
188 gProxyHandle.dmHandle = dlopen(gProxyHandle.dmLibName, RTLD_LAZY);
190 if (gProxyHandle.dmHandle == NULL) /* fail to load unixODBC driver manager */
192 WARN("failed to open library %s\n", gProxyHandle.dmLibName);
193 gProxyHandle.dmLibName[0] = '\0';
194 gProxyHandle.nErrorType = ERROR_LIBRARY_NOT_FOUND;
199 gProxyHandle.nErrorType = ERROR_FREE;
205 /***********************************************************************
206 * ODBC_LoadDMFunctions [Internal] Populate function table.
215 BOOL ODBC_LoadDMFunctions()
219 if (gProxyHandle.dmHandle == NULL)
222 for ( i = 0; i < NUM_SQLFUNC; i ++ )
224 gProxyHandle.functions[i] = template_func[i];
225 gProxyHandle.functions[i].func = dlsym(gProxyHandle.dmHandle,
226 gProxyHandle.functions[i].name);
230 ERR("Failed to load function %s",gProxyHandle.functions[i].name);
231 gProxyHandle.functions[i].func = SQLDummyFunc;
235 gProxyHandle.bFunctionReady = TRUE;
241 /*************************************************************************
242 * SQLAllocConnect [ODBC32.001]
244 SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle)
248 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
250 *ConnectionHandle = SQL_NULL_HDBC;
254 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCCONNECT].func)
255 (EnvironmentHandle, ConnectionHandle);
259 /*************************************************************************
260 * SQLAllocEnv [ODBC32.002]
262 SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle)
266 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
268 *EnvironmentHandle = SQL_NULL_HENV;
272 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCENV].func) (EnvironmentHandle);
276 /*************************************************************************
277 * SQLAllocHandle [ODBC32.024]
279 SQLRETURN WINAPI SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
283 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
285 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
286 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
288 if (HandleType == SQL_HANDLE_ENV)
289 *OutputHandle = SQL_NULL_HENV;
290 else if (HandleType == SQL_HANDLE_DBC)
291 *OutputHandle = SQL_NULL_HDBC;
292 else if (HandleType == SQL_HANDLE_STMT)
293 *OutputHandle = SQL_NULL_HSTMT;
294 else if (HandleType == SQL_HANDLE_DESC)
295 *OutputHandle = SQL_NULL_HDESC;
300 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLE].func)
301 (HandleType, InputHandle, OutputHandle);
305 /*************************************************************************
306 * SQLAllocStmt [ODBC32.003]
308 SQLRETURN WINAPI SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle)
313 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
315 *StatementHandle = SQL_NULL_HSTMT;
319 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCSTMT].func)
320 (ConnectionHandle, StatementHandle);
324 /*************************************************************************
325 * SQLAllocHandleStd [ODBC32.077]
327 SQLRETURN WINAPI SQLAllocHandleStd( SQLSMALLINT HandleType,
328 SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
330 TRACE("ProxyODBC: SQLAllocHandelStd.\n");
332 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
334 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
335 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
337 if (HandleType == SQL_HANDLE_ENV)
338 *OutputHandle = SQL_NULL_HENV;
339 else if (HandleType == SQL_HANDLE_DBC)
340 *OutputHandle = SQL_NULL_HDBC;
341 else if (HandleType == SQL_HANDLE_STMT)
342 *OutputHandle = SQL_NULL_HSTMT;
343 else if (HandleType == SQL_HANDLE_DESC)
344 *OutputHandle = SQL_NULL_HDESC;
349 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLESTD].func)
350 (HandleType, InputHandle, OutputHandle);
354 /*************************************************************************
355 * SQLBindCol [ODBC32.004]
357 SQLRETURN WINAPI SQLBindCol(SQLHSTMT StatementHandle,
358 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
359 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
360 SQLINTEGER *StrLen_or_Ind)
364 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
369 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDCOL].func)
370 (StatementHandle, ColumnNumber, TargetType,
371 TargetValue, BufferLength, StrLen_or_Ind);
375 /*************************************************************************
376 * SQLBindParam [ODBC32.025]
378 SQLRETURN WINAPI SQLBindParam(SQLHSTMT StatementHandle,
379 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
380 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
381 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
382 SQLINTEGER *StrLen_or_Ind)
386 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
391 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAM].func)
392 (StatementHandle, ParameterNumber, ValueType,
393 ParameterScale, ParameterValue, StrLen_or_Ind);
397 /*************************************************************************
398 * SQLCancel [ODBC32.005]
400 SQLRETURN WINAPI SQLCancel(SQLHSTMT StatementHandle)
404 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
409 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCANCEL].func) (StatementHandle);
413 /*************************************************************************
414 * SQLCloseCursor [ODBC32.026]
416 SQLRETURN WINAPI SQLCloseCursor(SQLHSTMT StatementHandle)
420 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
425 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCLOSECURSOR].func) (StatementHandle);
429 /*************************************************************************
430 * SQLColAttribute [ODBC32.027]
432 SQLRETURN WINAPI SQLColAttribute (SQLHSTMT StatementHandle,
433 SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier,
434 SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength,
435 SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute)
439 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
444 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTE].func)
445 (StatementHandle, ColumnNumber, FieldIdentifier,
446 CharacterAttribute, BufferLength, StringLength, NumericAttribute);
450 /*************************************************************************
451 * SQLColumns [ODBC32.040]
453 SQLRETURN WINAPI SQLColumns(SQLHSTMT StatementHandle,
454 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
455 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
456 SQLCHAR *TableName, SQLSMALLINT NameLength3,
457 SQLCHAR *ColumnName, SQLSMALLINT NameLength4)
461 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
466 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNS].func)
467 (StatementHandle, CatalogName, NameLength1,
468 SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4);
472 /*************************************************************************
473 * SQLConnect [ODBC32.007]
475 SQLRETURN WINAPI SQLConnect(SQLHDBC ConnectionHandle,
476 SQLCHAR *ServerName, SQLSMALLINT NameLength1,
477 SQLCHAR *UserName, SQLSMALLINT NameLength2,
478 SQLCHAR *Authentication, SQLSMALLINT NameLength3)
482 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
487 strcpy(gProxyHandle.ServerName, ServerName);
488 strcpy(gProxyHandle.UserName, UserName);
490 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCONNECT].func)
491 (ConnectionHandle, ServerName, NameLength1,
492 UserName, NameLength2, Authentication, NameLength3);
496 /*************************************************************************
497 * SQLCopyDesc [ODBC32.028]
499 SQLRETURN WINAPI SQLCopyDesc(SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle)
503 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
508 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOPYDESC].func)
509 (SourceDescHandle, TargetDescHandle);
513 /*************************************************************************
514 * SQLDataSources [ODBC32.057]
516 SQLRETURN WINAPI SQLDataSources(SQLHENV EnvironmentHandle,
517 SQLUSMALLINT Direction, SQLCHAR *ServerName,
518 SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1,
519 SQLCHAR *Description, SQLSMALLINT BufferLength2,
520 SQLSMALLINT *NameLength2)
524 TRACE("EnvironmentHandle = %p\n", (LPVOID)EnvironmentHandle);
526 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
528 ERR("Error: empty dm handle (gProxyHandle.dmHandle == NULL)\n");
532 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLDATASOURCES].func)
533 (EnvironmentHandle, Direction, ServerName,
534 BufferLength1, NameLength1, Description, BufferLength2, NameLength2);
538 TRACE("returns: %d \t", ret);
539 if (*NameLength1 > 0)
540 TRACE("DataSource = %s,", ServerName);
541 if (*NameLength2 > 0)
542 TRACE(" Description = %s\n", Description);
549 /*************************************************************************
550 * SQLDescribeCol [ODBC32.008]
552 SQLRETURN WINAPI SQLDescribeCol(SQLHSTMT StatementHandle,
553 SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName,
554 SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,
555 SQLSMALLINT *DataType, SQLUINTEGER *ColumnSize,
556 SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable)
560 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
565 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBECOL].func)
566 (StatementHandle, ColumnNumber, ColumnName,
567 BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable);
571 /*************************************************************************
572 * SQLDisconnect [ODBC32.009]
574 SQLRETURN WINAPI SQLDisconnect(SQLHDBC ConnectionHandle)
578 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
583 gProxyHandle.ServerName[0] = '\0';
584 gProxyHandle.UserName[0] = '\0';
586 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDISCONNECT].func) (ConnectionHandle);
590 /*************************************************************************
591 * SQLEndTran [ODBC32.029]
593 SQLRETURN WINAPI SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType)
597 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
602 return (gProxyHandle.functions[SQLAPI_INDEX_SQLENDTRAN].func) (HandleType, Handle, CompletionType);
606 /*************************************************************************
607 * SQLError [ODBC32.010]
609 SQLRETURN WINAPI SQLError(SQLHENV EnvironmentHandle,
610 SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle,
611 SQLCHAR *Sqlstate, SQLINTEGER *NativeError,
612 SQLCHAR *MessageText, SQLSMALLINT BufferLength,
613 SQLSMALLINT *TextLength)
617 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
622 return (gProxyHandle.functions[SQLAPI_INDEX_SQLERROR].func)
623 (EnvironmentHandle, ConnectionHandle, StatementHandle,
624 Sqlstate, NativeError, MessageText, BufferLength, TextLength);
628 /*************************************************************************
629 * SQLExecDirect [ODBC32.011]
631 SQLRETURN WINAPI SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
635 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
640 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECDIRECT].func)
641 (StatementHandle, StatementText, TextLength);
645 /*************************************************************************
646 * SQLExecute [ODBC32.012]
648 SQLRETURN WINAPI SQLExecute(SQLHSTMT StatementHandle)
652 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
657 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECUTE].func) (StatementHandle);
661 /*************************************************************************
662 * SQLFetch [ODBC32.013]
664 SQLRETURN WINAPI SQLFetch(SQLHSTMT StatementHandle)
668 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
673 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCH].func) (StatementHandle);
677 /*************************************************************************
678 * SQLFetchScroll [ODBC32.030]
680 SQLRETURN WINAPI SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset)
684 if (gProxyHandle.dmHandle == NULL)
689 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCHSCROLL].func)
690 (StatementHandle, FetchOrientation, FetchOffset);
694 /*************************************************************************
695 * SQLFreeConnect [ODBC32.014]
697 SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle)
701 if (gProxyHandle.dmHandle == NULL)
706 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFREECONNECT].func) (ConnectionHandle);
710 /*************************************************************************
711 * SQLFreeEnv [ODBC32.015]
713 SQLRETURN WINAPI SQLFreeEnv(SQLHENV EnvironmentHandle)
719 if (gProxyHandle.dmHandle == NULL)
724 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEENV].func) (EnvironmentHandle);
726 if (gProxyHandle.dmHandle)
728 dlclose(gProxyHandle.dmHandle);
729 gProxyHandle.dmHandle = NULL;
737 /*************************************************************************
738 * SQLFreeHandle [ODBC32.031]
740 SQLRETURN WINAPI SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle)
746 if (gProxyHandle.dmHandle == NULL)
751 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEHANDLE].func)
752 (HandleType, Handle);
754 if (HandleType == SQL_HANDLE_ENV) /* it is time to close the loaded library */
756 if (gProxyHandle.dmHandle)
758 dlclose(gProxyHandle.dmHandle);
759 gProxyHandle.dmHandle = NULL;
767 /*************************************************************************
768 * SQLFreeStmt [ODBC32.016]
770 SQLRETURN WINAPI SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option)
775 if (gProxyHandle.dmHandle == NULL)
780 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFREESTMT].func)
781 (StatementHandle, Option);
785 /*************************************************************************
786 * SQLGetConnectAttr [ODBC32.032]
788 SQLRETURN WINAPI SQLGetConnectAttr(SQLHDBC ConnectionHandle,
789 SQLINTEGER Attribute, SQLPOINTER Value,
790 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
794 if (gProxyHandle.dmHandle == NULL)
799 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTATTR].func)
800 (ConnectionHandle, Attribute, Value,
801 BufferLength, StringLength);
805 /*************************************************************************
806 * SQLGetConnectOption [ODBC32.042]
808 SQLRETURN WINAPI SQLGetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value)
812 if (gProxyHandle.dmHandle == NULL)
817 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTOPTION].func)
818 (ConnectionHandle, Option, Value);
822 /*************************************************************************
823 * SQLGetCursorName [ODBC32.017]
825 SQLRETURN WINAPI SQLGetCursorName(SQLHSTMT StatementHandle,
826 SQLCHAR *CursorName, SQLSMALLINT BufferLength,
827 SQLSMALLINT *NameLength)
831 if (gProxyHandle.dmHandle == NULL)
836 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCURSORNAME].func)
837 (StatementHandle, CursorName, BufferLength, NameLength);
841 /*************************************************************************
842 * SQLGetData [ODBC32.043]
844 SQLRETURN WINAPI SQLGetData(SQLHSTMT StatementHandle,
845 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
846 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
847 SQLINTEGER *StrLen_or_Ind)
850 if (gProxyHandle.dmHandle == NULL)
855 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDATA].func)
856 (StatementHandle, ColumnNumber, TargetType,
857 TargetValue, BufferLength, StrLen_or_Ind);
861 /*************************************************************************
862 * SQLGetDescField [ODBC32.033]
864 SQLRETURN WINAPI SQLGetDescField(SQLHDESC DescriptorHandle,
865 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
866 SQLPOINTER Value, SQLINTEGER BufferLength,
867 SQLINTEGER *StringLength)
870 if (gProxyHandle.dmHandle == NULL)
875 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCFIELD].func)
876 (DescriptorHandle, RecNumber, FieldIdentifier,
877 Value, BufferLength, StringLength);
881 /*************************************************************************
882 * SQLGetDescRec [ODBC32.034]
884 SQLRETURN WINAPI SQLGetDescRec(SQLHDESC DescriptorHandle,
885 SQLSMALLINT RecNumber, SQLCHAR *Name,
886 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength,
887 SQLSMALLINT *Type, SQLSMALLINT *SubType,
888 SQLINTEGER *Length, SQLSMALLINT *Precision,
889 SQLSMALLINT *Scale, SQLSMALLINT *Nullable)
892 if (gProxyHandle.dmHandle == NULL)
897 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCREC].func)
898 (DescriptorHandle, RecNumber, Name, BufferLength,
899 StringLength, Type, SubType, Length, Precision, Scale, Nullable);
903 /*************************************************************************
904 * SQLGetDiagField [ODBC32.035]
906 SQLRETURN WINAPI SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle,
907 SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier,
908 SQLPOINTER DiagInfo, SQLSMALLINT BufferLength,
909 SQLSMALLINT *StringLength)
912 if (gProxyHandle.dmHandle == NULL)
917 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGFIELD].func)
918 (HandleType, Handle, RecNumber, DiagIdentifier,
919 DiagInfo, BufferLength, StringLength);
923 /*************************************************************************
924 * SQLGetDiagRec [ODBC32.036]
926 SQLRETURN WINAPI SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle,
927 SQLSMALLINT RecNumber, SQLCHAR *Sqlstate,
928 SQLINTEGER *NativeError, SQLCHAR *MessageText,
929 SQLSMALLINT BufferLength, SQLSMALLINT *TextLength)
932 if (gProxyHandle.dmHandle == NULL)
937 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGREC].func)
938 (HandleType, Handle, RecNumber, Sqlstate, NativeError,
939 MessageText, BufferLength, TextLength);
943 /*************************************************************************
944 * SQLGetEnvAttr [ODBC32.037]
946 SQLRETURN WINAPI SQLGetEnvAttr(SQLHENV EnvironmentHandle,
947 SQLINTEGER Attribute, SQLPOINTER Value,
948 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
951 if (gProxyHandle.dmHandle == NULL)
956 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETENVATTR].func)
957 (EnvironmentHandle, Attribute, Value, BufferLength, StringLength);
961 /*************************************************************************
962 * SQLGetFunctions [ODBC32.044]
964 SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported)
967 if (gProxyHandle.dmHandle == NULL)
972 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETFUNCTIONS].func)
973 (ConnectionHandle, FunctionId, Supported);
977 /*************************************************************************
978 * SQLGetInfo [ODBC32.045]
980 SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle,
981 SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
982 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength)
985 if (gProxyHandle.dmHandle == NULL)
990 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETINFO].func)
991 (ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength);
995 /*************************************************************************
996 * SQLGetStmtAttr [ODBC32.038]
998 SQLRETURN WINAPI SQLGetStmtAttr(SQLHSTMT StatementHandle,
999 SQLINTEGER Attribute, SQLPOINTER Value,
1000 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
1003 if (gProxyHandle.dmHandle == NULL)
1008 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTATTR].func)
1009 (StatementHandle, Attribute, Value, BufferLength, StringLength);
1013 /*************************************************************************
1014 * SQLGetStmtOption [ODBC32.046]
1016 SQLRETURN WINAPI SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value)
1019 if (gProxyHandle.dmHandle == NULL)
1024 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTOPTION].func)
1025 (StatementHandle, Option, Value);
1029 /*************************************************************************
1030 * SQLGetTypeInfo [ODBC32.047]
1032 SQLRETURN WINAPI SQLGetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType)
1035 if (gProxyHandle.dmHandle == NULL)
1040 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETTYPEINFO].func)
1041 (StatementHandle, DataType);
1045 /*************************************************************************
1046 * SQLNumResultCols [ODBC32.018]
1048 SQLRETURN WINAPI SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnCount)
1051 if (gProxyHandle.dmHandle == NULL)
1056 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMRESULTCOLS].func)
1057 (StatementHandle, ColumnCount);
1061 /*************************************************************************
1062 * SQLParamData [ODBC32.048]
1064 SQLRETURN WINAPI SQLParamData(SQLHSTMT StatementHandle, SQLPOINTER *Value)
1067 if (gProxyHandle.dmHandle == NULL)
1072 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMDATA].func)
1073 (StatementHandle, Value);
1077 /*************************************************************************
1078 * SQLPrepare [ODBC32.019]
1080 SQLRETURN WINAPI SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
1083 if (gProxyHandle.dmHandle == NULL)
1088 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPREPARE].func)
1089 (StatementHandle, StatementText, TextLength);
1093 /*************************************************************************
1094 * SQLPutData [ODBC32.049]
1096 SQLRETURN WINAPI SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLINTEGER StrLen_or_Ind)
1099 if (gProxyHandle.dmHandle == NULL)
1104 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPUTDATA].func)
1105 (StatementHandle, Data, StrLen_or_Ind);
1109 /*************************************************************************
1110 * SQLRowCount [ODBC32.020]
1112 SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle, SQLINTEGER *RowCount)
1115 if (gProxyHandle.dmHandle == NULL)
1120 return (gProxyHandle.functions[SQLAPI_INDEX_SQLROWCOUNT].func)
1121 (StatementHandle, RowCount);
1125 /*************************************************************************
1126 * SQLSetConnectAttr [ODBC32.039]
1128 SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute,
1129 SQLPOINTER Value, SQLINTEGER StringLength)
1132 if (gProxyHandle.dmHandle == NULL)
1137 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTATTR].func)
1138 (ConnectionHandle, Attribute, Value, StringLength);
1142 /*************************************************************************
1143 * SQLSetConnectOption [ODBC32.050]
1145 SQLRETURN WINAPI SQLSetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1148 if (gProxyHandle.dmHandle == NULL)
1153 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTOPTION].func)
1154 (ConnectionHandle, Option, Value);
1158 /*************************************************************************
1159 * SQLSetCursorName [ODBC32.021]
1161 SQLRETURN WINAPI SQLSetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, SQLSMALLINT NameLength)
1164 if (gProxyHandle.dmHandle == NULL)
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)
1182 if (gProxyHandle.dmHandle == NULL)
1187 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCFIELD].func)
1188 (DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength);
1192 /*************************************************************************
1193 * SQLSetDescRec [ODBC32.074]
1195 SQLRETURN WINAPI SQLSetDescRec(SQLHDESC DescriptorHandle,
1196 SQLSMALLINT RecNumber, SQLSMALLINT Type,
1197 SQLSMALLINT SubType, SQLINTEGER Length,
1198 SQLSMALLINT Precision, SQLSMALLINT Scale,
1199 SQLPOINTER Data, SQLINTEGER *StringLength,
1200 SQLINTEGER *Indicator)
1203 if (gProxyHandle.dmHandle == NULL)
1208 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCREC].func)
1209 (DescriptorHandle, RecNumber, Type, SubType, Length,
1210 Precision, Scale, Data, StringLength, Indicator);
1214 /*************************************************************************
1215 * SQLSetEnvAttr [ODBC32.075]
1217 SQLRETURN WINAPI SQLSetEnvAttr(SQLHENV EnvironmentHandle,
1218 SQLINTEGER Attribute, SQLPOINTER Value,
1219 SQLINTEGER StringLength)
1222 if (gProxyHandle.dmHandle == NULL)
1227 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETENVATTR].func)
1228 (EnvironmentHandle, Attribute, Value, StringLength);
1232 /*************************************************************************
1233 * SQLSetParam [ODBC32.022]
1235 SQLRETURN WINAPI SQLSetParam(SQLHSTMT StatementHandle,
1236 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
1237 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
1238 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
1239 SQLINTEGER *StrLen_or_Ind)
1242 if (gProxyHandle.dmHandle == NULL)
1247 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPARAM].func)
1248 (StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision,
1249 ParameterScale, ParameterValue, StrLen_or_Ind);
1253 /*************************************************************************
1254 * SQLSetStmtAttr [ODBC32.076]
1256 SQLRETURN WINAPI SQLSetStmtAttr(SQLHSTMT StatementHandle,
1257 SQLINTEGER Attribute, SQLPOINTER Value,
1258 SQLINTEGER StringLength)
1261 if (gProxyHandle.dmHandle == NULL)
1266 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTATTR].func)
1267 (StatementHandle, Attribute, Value, StringLength);
1271 /*************************************************************************
1272 * SQLSetStmtOption [ODBC32.051]
1274 SQLRETURN WINAPI SQLSetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1277 if (gProxyHandle.dmHandle == NULL)
1282 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTOPTION].func)
1283 (StatementHandle, Option, Value);
1287 /*************************************************************************
1288 * SQLSpecialColumns [ODBC32.052]
1290 SQLRETURN WINAPI SQLSpecialColumns(SQLHSTMT StatementHandle,
1291 SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName,
1292 SQLSMALLINT NameLength1, SQLCHAR *SchemaName,
1293 SQLSMALLINT NameLength2, SQLCHAR *TableName,
1294 SQLSMALLINT NameLength3, SQLUSMALLINT Scope,
1295 SQLUSMALLINT Nullable)
1297 if (gProxyHandle.dmHandle == NULL)
1302 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSPECIALCOLUMNS].func)
1303 (StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName,
1304 NameLength2, TableName, NameLength3, Scope, Nullable);
1308 /*************************************************************************
1309 * SQLStatistics [ODBC32.053]
1311 SQLRETURN WINAPI SQLStatistics(SQLHSTMT StatementHandle,
1312 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1313 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1314 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1315 SQLUSMALLINT Unique, SQLUSMALLINT Reserved)
1318 if (gProxyHandle.dmHandle == NULL)
1323 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSTATISTICS].func)
1324 (StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2,
1325 TableName, NameLength3, Unique, Reserved);
1329 /*************************************************************************
1330 * SQLTables [ODBC32.054]
1332 SQLRETURN WINAPI SQLTables(SQLHSTMT StatementHandle,
1333 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1334 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1335 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1336 SQLCHAR *TableType, SQLSMALLINT NameLength4)
1339 if (gProxyHandle.dmHandle == NULL)
1344 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLES].func)
1345 (StatementHandle, CatalogName, NameLength1,
1346 SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4);
1350 /*************************************************************************
1351 * SQLTransact [ODBC32.023]
1353 SQLRETURN WINAPI SQLTransact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle,
1354 SQLUSMALLINT CompletionType)
1357 if (gProxyHandle.dmHandle == NULL)
1362 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTRANSACT].func)
1363 (EnvironmentHandle, ConnectionHandle, CompletionType);
1367 /*************************************************************************
1368 * SQLBrowseConnect [ODBC32.055]
1370 SQLRETURN WINAPI SQLBrowseConnect(
1372 SQLCHAR *szConnStrIn,
1373 SQLSMALLINT cbConnStrIn,
1374 SQLCHAR *szConnStrOut,
1375 SQLSMALLINT cbConnStrOutMax,
1376 SQLSMALLINT *pcbConnStrOut)
1379 if (gProxyHandle.dmHandle == NULL)
1384 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBROWSECONNECT].func)
1385 (hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut);
1389 /*************************************************************************
1390 * SQLBulkOperations [ODBC32.078]
1392 SQLRETURN WINAPI SQLBulkOperations(
1393 SQLHSTMT StatementHandle,
1394 SQLSMALLINT Operation)
1397 if (gProxyHandle.dmHandle == NULL)
1402 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBULKOPERATIONS].func)
1403 (StatementHandle, Operation);
1407 /*************************************************************************
1408 * SQLColAttributes [ODBC32.006]
1410 SQLRETURN WINAPI SQLColAttributes(
1413 SQLUSMALLINT fDescType,
1415 SQLSMALLINT cbDescMax,
1416 SQLSMALLINT *pcbDesc,
1420 if (gProxyHandle.dmHandle == NULL)
1425 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTES].func)
1426 (hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc);
1430 /*************************************************************************
1431 * SQLColumnPrivileges [ODBC32.056]
1433 SQLRETURN WINAPI SQLColumnPrivileges(
1435 SQLCHAR *szCatalogName,
1436 SQLSMALLINT cbCatalogName,
1437 SQLCHAR *szSchemaName,
1438 SQLSMALLINT cbSchemaName,
1439 SQLCHAR *szTableName,
1440 SQLSMALLINT cbTableName,
1441 SQLCHAR *szColumnName,
1442 SQLSMALLINT cbColumnName)
1445 if (gProxyHandle.dmHandle == NULL)
1450 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES].func)
1451 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1452 szTableName, cbTableName, szColumnName, cbColumnName);
1456 /*************************************************************************
1457 * SQLDescribeParam [ODBC32.058]
1459 SQLRETURN WINAPI SQLDescribeParam(
1462 SQLSMALLINT *pfSqlType,
1463 SQLUINTEGER *pcbParamDef,
1464 SQLSMALLINT *pibScale,
1465 SQLSMALLINT *pfNullable)
1468 if (gProxyHandle.dmHandle == NULL)
1473 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBEPARAM].func)
1474 (hstmt, ipar, pfSqlType, pcbParamDef, pibScale, pfNullable);
1478 /*************************************************************************
1479 * SQLExtendedFetch [ODBC32.059]
1481 SQLRETURN WINAPI SQLExtendedFetch(
1483 SQLUSMALLINT fFetchType,
1486 SQLUSMALLINT *rgfRowStatus)
1489 if (gProxyHandle.dmHandle == NULL)
1494 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXTENDEDFETCH].func)
1495 (hstmt, fFetchType, irow, pcrow, rgfRowStatus);
1499 /*************************************************************************
1500 * SQLForeignKeys [ODBC32.060]
1502 SQLRETURN WINAPI SQLForeignKeys(
1504 SQLCHAR *szPkCatalogName,
1505 SQLSMALLINT cbPkCatalogName,
1506 SQLCHAR *szPkSchemaName,
1507 SQLSMALLINT cbPkSchemaName,
1508 SQLCHAR *szPkTableName,
1509 SQLSMALLINT cbPkTableName,
1510 SQLCHAR *szFkCatalogName,
1511 SQLSMALLINT cbFkCatalogName,
1512 SQLCHAR *szFkSchemaName,
1513 SQLSMALLINT cbFkSchemaName,
1514 SQLCHAR *szFkTableName,
1515 SQLSMALLINT cbFkTableName)
1518 if (gProxyHandle.dmHandle == NULL)
1523 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFOREIGNKEYS].func)
1524 (hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName,
1525 szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName,
1526 cbFkSchemaName, szFkTableName, cbFkTableName);
1530 /*************************************************************************
1531 * SQLMoreResults [ODBC32.061]
1533 SQLRETURN WINAPI SQLMoreResults(SQLHSTMT hstmt)
1536 if (gProxyHandle.dmHandle == NULL)
1541 return (gProxyHandle.functions[SQLAPI_INDEX_SQLMORERESULTS].func) (hstmt);
1545 /*************************************************************************
1546 * SQLNativeSql [ODBC32.062]
1548 SQLRETURN WINAPI SQLNativeSql(
1550 SQLCHAR *szSqlStrIn,
1551 SQLINTEGER cbSqlStrIn,
1553 SQLINTEGER cbSqlStrMax,
1554 SQLINTEGER *pcbSqlStr)
1557 if (gProxyHandle.dmHandle == NULL)
1562 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNATIVESQL].func)
1563 (hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr);
1567 /*************************************************************************
1568 * SQLNumParams [ODBC32.063]
1570 SQLRETURN WINAPI SQLNumParams(
1575 if (gProxyHandle.dmHandle == NULL)
1580 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMPARAMS].func) (hstmt, pcpar);
1584 /*************************************************************************
1585 * SQLParamOptions [ODBC32.064]
1587 SQLRETURN WINAPI SQLParamOptions(
1593 if (gProxyHandle.dmHandle == NULL)
1598 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMOPTIONS].func) (hstmt, crow, pirow);
1602 /*************************************************************************
1603 * SQLPrimaryKeys [ODBC32.065]
1605 SQLRETURN WINAPI SQLPrimaryKeys(
1607 SQLCHAR *szCatalogName,
1608 SQLSMALLINT cbCatalogName,
1609 SQLCHAR *szSchemaName,
1610 SQLSMALLINT cbSchemaName,
1611 SQLCHAR *szTableName,
1612 SQLSMALLINT cbTableName)
1615 if (gProxyHandle.dmHandle == NULL)
1620 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPRIMARYKEYS].func)
1621 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1622 szTableName, cbTableName);
1626 /*************************************************************************
1627 * SQLProcedureColumns [ODBC32.066]
1629 SQLRETURN WINAPI SQLProcedureColumns(
1631 SQLCHAR *szCatalogName,
1632 SQLSMALLINT cbCatalogName,
1633 SQLCHAR *szSchemaName,
1634 SQLSMALLINT cbSchemaName,
1635 SQLCHAR *szProcName,
1636 SQLSMALLINT cbProcName,
1637 SQLCHAR *szColumnName,
1638 SQLSMALLINT cbColumnName)
1641 if (gProxyHandle.dmHandle == NULL)
1646 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURECOLUMNS].func)
1647 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1648 szProcName, cbProcName, szColumnName, cbColumnName);
1652 /*************************************************************************
1653 * SQLProcedures [ODBC32.067]
1655 SQLRETURN WINAPI SQLProcedures(
1657 SQLCHAR *szCatalogName,
1658 SQLSMALLINT cbCatalogName,
1659 SQLCHAR *szSchemaName,
1660 SQLSMALLINT cbSchemaName,
1661 SQLCHAR *szProcName,
1662 SQLSMALLINT cbProcName)
1665 if (gProxyHandle.dmHandle == NULL)
1670 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURES].func)
1671 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1672 szProcName, cbProcName);
1676 /*************************************************************************
1677 * SQLSetPos [ODBC32.068]
1679 SQLRETURN WINAPI SQLSetPos(
1682 SQLUSMALLINT fOption,
1686 if (gProxyHandle.dmHandle == NULL)
1691 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPOS].func)
1692 (hstmt, irow, fOption, fLock);
1696 /*************************************************************************
1697 * SQLTablePrivileges [ODBC32.070]
1699 SQLRETURN WINAPI SQLTablePrivileges(
1701 SQLCHAR *szCatalogName,
1702 SQLSMALLINT cbCatalogName,
1703 SQLCHAR *szSchemaName,
1704 SQLSMALLINT cbSchemaName,
1705 SQLCHAR *szTableName,
1706 SQLSMALLINT cbTableName)
1709 if (gProxyHandle.dmHandle == NULL)
1714 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLEPRIVILEGES].func)
1715 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1716 szTableName, cbTableName);
1720 /*************************************************************************
1721 * SQLDrivers [ODBC32.071]
1723 SQLRETURN WINAPI SQLDrivers(
1725 SQLUSMALLINT fDirection,
1726 SQLCHAR *szDriverDesc,
1727 SQLSMALLINT cbDriverDescMax,
1728 SQLSMALLINT *pcbDriverDesc,
1729 SQLCHAR *szDriverAttributes,
1730 SQLSMALLINT cbDriverAttrMax,
1731 SQLSMALLINT *pcbDriverAttr)
1734 if (gProxyHandle.dmHandle == NULL)
1739 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERS].func)
1740 (henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc,
1741 szDriverAttributes, cbDriverAttrMax, pcbDriverAttr);
1745 /*************************************************************************
1746 * SQLBindParameter [ODBC32.072]
1748 SQLRETURN WINAPI SQLBindParameter(
1751 SQLSMALLINT fParamType,
1753 SQLSMALLINT fSqlType,
1754 SQLUINTEGER cbColDef,
1755 SQLSMALLINT ibScale,
1756 SQLPOINTER rgbValue,
1757 SQLINTEGER cbValueMax,
1758 SQLINTEGER *pcbValue)
1761 if (gProxyHandle.dmHandle == NULL)
1766 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAMETER].func)
1767 (hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale,
1768 rgbValue, cbValueMax, pcbValue);
1772 /*************************************************************************
1773 * SQLDriverConnect [ODBC32.041]
1775 SQLRETURN WINAPI SQLDriverConnect(
1778 SQLCHAR *conn_str_in,
1779 SQLSMALLINT len_conn_str_in,
1780 SQLCHAR *conn_str_out,
1781 SQLSMALLINT conn_str_out_max,
1782 SQLSMALLINT *ptr_conn_str_out,
1783 SQLUSMALLINT driver_completion )
1786 if (gProxyHandle.dmHandle == NULL)
1791 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERCONNECT].func)
1792 (hdbc, hwnd, conn_str_in, len_conn_str_in, conn_str_out,
1793 conn_str_out_max, ptr_conn_str_out, driver_completion);
1797 /*************************************************************************
1798 * SQLSetScrollOptions [ODBC32.069]
1800 SQLRETURN WINAPI SQLSetScrollOptions(
1801 SQLHSTMT statement_handle,
1802 SQLUSMALLINT f_concurrency,
1803 SQLINTEGER crow_keyset,
1804 SQLUSMALLINT crow_rowset )
1807 if (gProxyHandle.dmHandle == NULL)
1812 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSCROLLOPTIONS].func)
1813 (statement_handle, f_concurrency, crow_keyset, crow_rowset);