Release 20000326.
[wine/gsoc-2012-control.git] / dlls / odbc32 / proxyodbc.c
blobfa9bad4009b8c71a8cbb50475c2d1b4758102330
1 /*
2 * Win32 ODBC functions
3 *
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
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <dlfcn.h>
15 #include <string.h>
17 #include "winbase.h"
18 #include "debugtools.h"
20 #ifndef _WINDOWS
21 #define _WINDOWS
22 #endif
24 typedef char* GUID; /* This definition is in sqltypes.h, but if _WINDOWS is defined, this is skipped. */
26 #include "sql.h"
27 #include "sqltypes.h"
28 #include "sqlext.h"
30 #include "proxyodbc.h"
32 /*#define SQLRETURNTYPE SQLRETURN SQL_API*/
33 #define SQLRETURNTYPE SQLRETURN WINAPI
35 DEFAULT_DEBUG_CHANNEL(odbc);
37 static DM_FUNC template_func[] =
39 /* 00 */ { SQL_API_SQLALLOCCONNECT, "SQLAllocConnect", SQLAllocConnect },
40 /* 01 */ { SQL_API_SQLALLOCENV, "SQLAllocEnv", SQLAllocEnv },
41 /* 02 */ { SQL_API_SQLALLOCHANDLE, "SQLAllocHandle", SQLAllocHandle },
42 /* 03 */ { SQL_API_SQLALLOCSTMT, "SQLAllocStmt", SQLAllocStmt },
43 /* 04 */ { SQL_API_SQLALLOCHANDLESTD, "SQLAllocHandleStd", SQLAllocHandleStd },
44 /* 05 */ { SQL_API_SQLBINDCOL, "SQLBindCol", SQLBindCol },
45 /* 06 */ { SQL_API_SQLBINDPARAM, "SQLBindParam", SQLBindParam },
46 /* 07 */ { SQL_API_SQLBINDPARAMETER, "SQLBindParameter", SQLBindParameter },
47 /* 08 */ { SQL_API_SQLBROWSECONNECT, "SQLBrowseConnect", SQLBrowseConnect },
48 /* 09 */ { SQL_API_SQLBULKOPERATIONS, "SQLBulkOperations", SQLBulkOperations },
49 /* 10 */ { SQL_API_SQLCANCEL, "SQLCancel", SQLCancel },
50 /* 11 */ { SQL_API_SQLCLOSECURSOR, "SQLCloseCursor", SQLCloseCursor },
51 /* 12 */ { SQL_API_SQLCOLATTRIBUTE, "SQLColAttribute", SQLColAttribute },
52 /* 13 */ { SQL_API_SQLCOLATTRIBUTES, "SQLColAttributes", SQLColAttributes },
53 /* 14 */ { SQL_API_SQLCOLUMNPRIVILEGES, "SQLColumnPrivileges", SQLColumnPrivileges },
54 /* 15 */ { SQL_API_SQLCOLUMNS, "SQLColumns", SQLColumns },
55 /* 16 */ { SQL_API_SQLCONNECT, "SQLConnect", SQLConnect },
56 /* 17 */ { SQL_API_SQLCOPYDESC, "SQLCopyDesc", SQLCopyDesc },
57 /* 18 */ { SQL_API_SQLDATASOURCES, "SQLDataSources", SQLDataSources },
58 /* 19 */ { SQL_API_SQLDESCRIBECOL, "SQLDescribeCol", SQLDescribeCol },
59 /* 20 */ { SQL_API_SQLDESCRIBEPARAM, "SQLDescribeParam", SQLDescribeParam },
60 /* 21 */ { SQL_API_SQLDISCONNECT, "SQLDisconnect", SQLDisconnect },
61 /* 22 */ { SQL_API_SQLDRIVERCONNECT, "SQLDriverConnect", SQLDriverConnect },
62 /* 23 */ { SQL_API_SQLDRIVERS, "SQLDrivers", SQLDrivers },
63 /* 24 */ { SQL_API_SQLENDTRAN, "SQLEndTran", SQLEndTran },
64 /* 25 */ { SQL_API_SQLERROR, "SQLError", SQLError },
65 /* 26 */ { SQL_API_SQLEXECDIRECT, "SQLExecDirect", SQLExecDirect },
66 /* 27 */ { SQL_API_SQLEXECUTE, "SQLExecute", SQLExecute },
67 /* 28 */ { SQL_API_SQLEXTENDEDFETCH, "SQLExtendedFetch", SQLExtendedFetch },
68 /* 29 */ { SQL_API_SQLFETCH, "SQLFetch", SQLFetch },
69 /* 30 */ { SQL_API_SQLFETCHSCROLL, "SQLFetchScroll", SQLFetchScroll },
70 /* 31 */ { SQL_API_SQLFOREIGNKEYS, "SQLForeignKeys", SQLForeignKeys },
71 /* 32 */ { SQL_API_SQLFREEENV, "SQLFreeEnv", SQLFreeEnv },
72 /* 33 */ { SQL_API_SQLFREEHANDLE, "SQLFreeHandle", SQLFreeHandle },
73 /* 34 */ { SQL_API_SQLFREESTMT, "SQLFreeStmt", SQLFreeStmt },
74 /* 35 */ { SQL_API_SQLFREECONNECT, "SQLFreeConnect", SQLFreeConnect },
75 /* 36 */ { SQL_API_SQLGETCONNECTATTR, "SQLGetConnectAttr", SQLGetConnectAttr },
76 /* 37 */ { SQL_API_SQLGETCONNECTOPTION, "SQLGetConnectOption", SQLGetConnectOption },
77 /* 38 */ { SQL_API_SQLGETCURSORNAME, "SQLGetCursorName", SQLGetCursorName },
78 /* 39 */ { SQL_API_SQLGETDATA, "SQLGetData", SQLGetData },
79 /* 40 */ { SQL_API_SQLGETDESCFIELD, "SQLGetDescField", SQLGetDescField },
80 /* 41 */ { SQL_API_SQLGETDESCREC, "SQLGetDescRec", SQLGetDescRec },
81 /* 42 */ { SQL_API_SQLGETDIAGFIELD, "SQLGetDiagField", SQLGetDiagField },
82 /* 43 */ { SQL_API_SQLGETENVATTR, "SQLGetEnvAttr", SQLGetEnvAttr },
83 /* 44 */ { SQL_API_SQLGETFUNCTIONS, "SQLGetFunctions", SQLGetFunctions },
84 /* 45 */ { SQL_API_SQLGETINFO, "SQLGetInfo", SQLGetInfo },
85 /* 46 */ { SQL_API_SQLGETSTMTATTR, "SQLGetStmtAttr", SQLGetStmtAttr },
86 /* 47 */ { SQL_API_SQLGETSTMTOPTION, "SQLGetStmtOption", SQLGetStmtOption },
87 /* 48 */ { SQL_API_SQLGETTYPEINFO, "SQLGetTypeInfo", SQLGetTypeInfo },
88 /* 49 */ { SQL_API_SQLMORERESULTS, "SQLMoreResults", SQLMoreResults },
89 /* 50 */ { SQL_API_SQLNATIVESQL, "SQLNativeSql", SQLNativeSql },
90 /* 51 */ { SQL_API_SQLNUMPARAMS, "SQLNumParams", SQLNumParams },
91 /* 52 */ { SQL_API_SQLNUMRESULTCOLS, "SQLNumResultCols", SQLNumResultCols },
92 /* 53 */ { SQL_API_SQLPARAMDATA, "SQLParamData", SQLParamData },
93 /* 54 */ { SQL_API_SQLPARAMOPTIONS, "SQLParamOptions", SQLParamOptions },
94 /* 55 */ { SQL_API_SQLPREPARE, "SQLPrepare", SQLPrepare },
95 /* 56 */ { SQL_API_SQLPRIMARYKEYS, "SQLPrimaryKeys", SQLPrimaryKeys },
96 /* 57 */ { SQL_API_SQLPROCEDURECOLUMNS, "SQLProcedureColumns", SQLProcedureColumns },
97 /* 58 */ { SQL_API_SQLPROCEDURES, "SQLProcedures", SQLProcedures },
98 /* 59 */ { SQL_API_SQLPUTDATA, "SQLPutData", SQLPutData },
99 /* 60 */ { SQL_API_SQLROWCOUNT, "SQLRowCount", SQLRowCount },
100 /* 61 */ { SQL_API_SQLSETCONNECTATTR, "SQLSetConnectAttr", SQLSetConnectAttr },
101 /* 62 */ { SQL_API_SQLSETCONNECTOPTION, "SQLSetConnectOption", SQLSetConnectOption },
102 /* 63 */ { SQL_API_SQLSETCURSORNAME, "SQLSetCursorName", SQLSetCursorName },
103 /* 64 */ { SQL_API_SQLSETDESCFIELD, "SQLSetDescField", SQLSetDescField },
104 /* 65 */ { SQL_API_SQLSETDESCREC, "SQLSetDescRec", SQLSetDescRec },
105 /* 66 */ { SQL_API_SQLSETENVATTR, "SQLSetEnvAttr", SQLSetEnvAttr },
106 /* 67 */ { SQL_API_SQLSETPARAM, "SQLSetParam", SQLSetParam },
107 /* 68 */ { SQL_API_SQLSETPOS, "SQLSetPos", SQLSetPos },
108 /* 69 */ { SQL_API_SQLSETSCROLLOPTIONS, "SQLSetScrollOptions", SQLSetScrollOptions },
109 /* 70 */ { SQL_API_SQLSETSTMTATTR, "SQLSetStmtAttr", SQLSetStmtAttr },
110 /* 71 */ { SQL_API_SQLSETSTMTOPTION, "SQLSetStmtOption", SQLSetStmtOption },
111 /* 72 */ { SQL_API_SQLSPECIALCOLUMNS, "SQLSpecialColumns", SQLSpecialColumns },
112 /* 73 */ { SQL_API_SQLSTATISTICS, "SQLStatistics", SQLStatistics },
113 /* 74 */ { SQL_API_SQLTABLEPRIVILEGES, "SQLTablePrivileges", SQLTablePrivileges },
114 /* 75 */ { SQL_API_SQLTABLES, "SQLTables", SQLTables },
115 /* 76 */ { SQL_API_SQLTRANSACT, "SQLTransact", SQLTransact },
116 /* 77 */ { SQL_API_SQLGETDIAGREC, "SQLGetDiagRec", SQLGetDiagRec },
119 static PROXYHANDLE gProxyHandle = {NULL, FALSE, FALSE, FALSE, ERROR_LIBRARY_NOT_FOUND};
121 SQLRETURN SQLDummyFunc()
123 TRACE("SQLDummyFunc: \n");
124 return SQL_SUCCESS;
127 /***********************************************************************
128 * MAIN_OdbcInit [Internal] Initializes the internal 'ODBC32.DLL'.
130 * PARAMS
131 * hinstDLL [I] handle to the 'dlls' instance
132 * fdwReason [I]
133 * lpvReserved [I] reserverd, must be NULL
135 * RETURNS
136 * Success: TRUE
137 * Failure: FALSE
140 BOOL WINAPI
141 MAIN_OdbcInit(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
143 int i;
144 TRACE("Initializing proxy ODBC: %x,%lx,%p\n", hinstDLL, fdwReason, lpvReserved);
146 if (fdwReason == DLL_PROCESS_ATTACH)
148 TRACE("Loading ODBC...\n");
149 if (ODBC_LoadDriverManager())
150 ODBC_LoadDMFunctions();
152 else if (fdwReason == DLL_PROCESS_DETACH)
154 TRACE("Unloading ODBC...\n");
155 if (gProxyHandle.bFunctionReady)
157 for ( i = 0; i < NUM_SQLFUNC; i ++ )
159 gProxyHandle.functions[i].func = SQLDummyFunc;
163 if (gProxyHandle.dmHandle)
165 dlclose(gProxyHandle.dmHandle);
166 gProxyHandle.dmHandle = NULL;
170 return TRUE;
174 /***********************************************************************
175 * ODBC_LoadDriverManager [Internal] Load ODBC library.
177 * PARAMS
179 * RETURNS
180 * Success: TRUE
181 * Failure: FALSE
184 BOOL ODBC_LoadDriverManager()
186 char *s = getenv("LIB_ODBC_DRIVER_MANAGER");
188 TRACE("\n");
190 gProxyHandle.bFunctionReady = FALSE;
192 if (s != NULL && strlen(s) > 0)
193 strcpy(gProxyHandle.dmLibName, s);
194 else
195 strcpy(gProxyHandle.dmLibName, "libodbc.so");
197 gProxyHandle.dmHandle = dlopen(gProxyHandle.dmLibName, RTLD_LAZY);
199 if (gProxyHandle.dmHandle == NULL) /* fail to load unixODBC driver manager */
201 WARN("failed to open library %s\n", gProxyHandle.dmLibName);
202 gProxyHandle.dmLibName[0] = '\0';
203 gProxyHandle.nErrorType = ERROR_LIBRARY_NOT_FOUND;
204 return FALSE;
206 else
208 gProxyHandle.nErrorType = ERROR_FREE;
209 return TRUE;
214 /***********************************************************************
215 * ODBC_LoadDMFunctions [Internal] Populate function table.
217 * PARAMS
219 * RETURNS
220 * Success: TRUE
221 * Failure: FALSE
224 BOOL ODBC_LoadDMFunctions()
226 int i;
228 if (gProxyHandle.dmHandle == NULL)
229 return FALSE;
231 for ( i = 0; i < NUM_SQLFUNC; i ++ )
233 gProxyHandle.functions[i] = template_func[i];
234 gProxyHandle.functions[i].func = dlsym(gProxyHandle.dmHandle,
235 gProxyHandle.functions[i].name);
237 if (dlerror())
239 ERR("Failed to load function %s",gProxyHandle.functions[i].name);
240 gProxyHandle.functions[i].func = SQLDummyFunc;
244 gProxyHandle.bFunctionReady = TRUE;
246 return TRUE;
250 /*************************************************************************
251 * SQLAllocConnect [ODBC32.001]
253 SQLRETURNTYPE SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle)
255 TRACE("\n");
257 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
259 *ConnectionHandle = SQL_NULL_HDBC;
260 return SQL_ERROR;
263 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCCONNECT].func)
264 (EnvironmentHandle, ConnectionHandle);
268 /*************************************************************************
269 * SQLAllocEnv [ODBC32.002]
271 SQLRETURNTYPE SQLAllocEnv(SQLHENV *EnvironmentHandle)
273 TRACE("\n");
275 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
277 *EnvironmentHandle = SQL_NULL_HENV;
278 return SQL_ERROR;
281 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCENV].func) (EnvironmentHandle);
285 /*************************************************************************
286 * SQLAllocHandle [ODBC32.024]
288 SQLRETURNTYPE SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
290 TRACE(".\n");
292 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
294 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
295 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
297 if (HandleType == SQL_HANDLE_ENV)
298 *OutputHandle = SQL_NULL_HENV;
299 else if (HandleType == SQL_HANDLE_DBC)
300 *OutputHandle = SQL_NULL_HDBC;
301 else if (HandleType == SQL_HANDLE_STMT)
302 *OutputHandle = SQL_NULL_HSTMT;
303 else if (HandleType == SQL_HANDLE_DESC)
304 *OutputHandle = SQL_NULL_HDESC;
306 return SQL_ERROR;
309 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLE].func)
310 (HandleType, InputHandle, OutputHandle);
314 /*************************************************************************
315 * SQLAllocStmt [ODBC32.003]
317 SQLRETURNTYPE SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle)
320 TRACE("\n");
322 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
324 *StatementHandle = SQL_NULL_HSTMT;
325 return SQL_ERROR;
328 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCSTMT].func)
329 (ConnectionHandle, StatementHandle);
333 /*************************************************************************
334 * SQLAllocHandleStd [ODBC32.077]
336 SQLRETURNTYPE SQLAllocHandleStd( SQLSMALLINT HandleType,
337 SQLHANDLE InputHandle, SQLHANDLE *OutputHandle)
339 TRACE("ProxyODBC: SQLAllocHandelStd.\n");
341 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
343 if (gProxyHandle.nErrorType == ERROR_LIBRARY_NOT_FOUND)
344 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
346 if (HandleType == SQL_HANDLE_ENV)
347 *OutputHandle = SQL_NULL_HENV;
348 else if (HandleType == SQL_HANDLE_DBC)
349 *OutputHandle = SQL_NULL_HDBC;
350 else if (HandleType == SQL_HANDLE_STMT)
351 *OutputHandle = SQL_NULL_HSTMT;
352 else if (HandleType == SQL_HANDLE_DESC)
353 *OutputHandle = SQL_NULL_HDESC;
355 return SQL_ERROR;
358 return (gProxyHandle.functions[SQLAPI_INDEX_SQLALLOCHANDLESTD].func)
359 (HandleType, InputHandle, OutputHandle);
363 /*************************************************************************
364 * SQLBindCol [ODBC32.004]
366 SQLRETURNTYPE SQLBindCol(SQLHSTMT StatementHandle,
367 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
368 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
369 SQLINTEGER *StrLen_or_Ind)
371 TRACE("\n");
373 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
375 return SQL_ERROR;
378 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDCOL].func)
379 (StatementHandle, ColumnNumber, TargetType,
380 TargetValue, BufferLength, StrLen_or_Ind);
384 /*************************************************************************
385 * SQLBindParam [ODBC32.025]
387 SQLRETURNTYPE SQLBindParam(SQLHSTMT StatementHandle,
388 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
389 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
390 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
391 SQLINTEGER *StrLen_or_Ind)
393 TRACE("\n");
395 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
397 return SQL_ERROR;
400 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAM].func)
401 (StatementHandle, ParameterNumber, ValueType,
402 ParameterScale, ParameterValue, StrLen_or_Ind);
406 /*************************************************************************
407 * SQLCancel [ODBC32.005]
409 SQLRETURNTYPE SQLCancel(SQLHSTMT StatementHandle)
411 TRACE("\n");
413 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
415 return SQL_ERROR;
418 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCANCEL].func) (StatementHandle);
422 /*************************************************************************
423 * SQLCloseCursor [ODBC32.026]
425 SQLRETURNTYPE SQLCloseCursor(SQLHSTMT StatementHandle)
427 TRACE("\n");
429 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
431 return SQL_ERROR;
434 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCLOSECURSOR].func) (StatementHandle);
438 /*************************************************************************
439 * SQLColAttribute [ODBC32.027]
441 SQLRETURNTYPE SQLColAttribute (SQLHSTMT StatementHandle,
442 SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier,
443 SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength,
444 SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute)
446 TRACE("\n");
448 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
450 return SQL_ERROR;
453 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTE].func)
454 (StatementHandle, ColumnNumber, FieldIdentifier,
455 CharacterAttribute, BufferLength, StringLength, NumericAttribute);
459 /*************************************************************************
460 * SQLColumns [ODBC32.040]
462 SQLRETURNTYPE SQLColumns(SQLHSTMT StatementHandle,
463 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
464 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
465 SQLCHAR *TableName, SQLSMALLINT NameLength3,
466 SQLCHAR *ColumnName, SQLSMALLINT NameLength4)
468 TRACE("\n");
470 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
472 return SQL_ERROR;
475 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNS].func)
476 (StatementHandle, CatalogName, NameLength1,
477 SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4);
481 /*************************************************************************
482 * SQLConnect [ODBC32.007]
484 SQLRETURNTYPE SQLConnect(SQLHDBC ConnectionHandle,
485 SQLCHAR *ServerName, SQLSMALLINT NameLength1,
486 SQLCHAR *UserName, SQLSMALLINT NameLength2,
487 SQLCHAR *Authentication, SQLSMALLINT NameLength3)
489 TRACE("\n");
491 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
493 return SQL_ERROR;
496 strcpy(gProxyHandle.ServerName, ServerName);
497 strcpy(gProxyHandle.UserName, UserName);
499 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCONNECT].func)
500 (ConnectionHandle, ServerName, NameLength1,
501 UserName, NameLength2, Authentication, NameLength3);
505 /*************************************************************************
506 * SQLCopyDesc [ODBC32.028]
508 SQLRETURNTYPE SQLCopyDesc(SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle)
510 TRACE("\n");
512 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
514 return SQL_ERROR;
517 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOPYDESC].func)
518 (SourceDescHandle, TargetDescHandle);
522 /*************************************************************************
523 * SQLDataSources [ODBC32.057]
525 SQLRETURNTYPE SQLDataSources(SQLHENV EnvironmentHandle,
526 SQLUSMALLINT Direction, SQLCHAR *ServerName,
527 SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1,
528 SQLCHAR *Description, SQLSMALLINT BufferLength2,
529 SQLSMALLINT *NameLength2)
531 SQLRETURN ret;
533 TRACE("EnvironmentHandle = %p\n", (LPVOID)EnvironmentHandle);
535 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
537 ERR("Error: empty dm handle (gProxyHandle.dmHandle == NULL)\n");
538 return SQL_ERROR;
541 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLDATASOURCES].func)
542 (EnvironmentHandle, Direction, ServerName,
543 BufferLength1, NameLength1, Description, BufferLength2, NameLength2);
545 if (TRACE_ON(odbc))
547 TRACE("returns: %d \t", ret);
548 if (*NameLength1 > 0)
549 TRACE("DataSource = %s,", ServerName);
550 if (*NameLength2 > 0)
551 TRACE(" Description = %s\n", Description);
554 return ret;
558 /*************************************************************************
559 * SQLDescribeCol [ODBC32.008]
561 SQLRETURNTYPE SQLDescribeCol(SQLHSTMT StatementHandle,
562 SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName,
563 SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,
564 SQLSMALLINT *DataType, SQLUINTEGER *ColumnSize,
565 SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable)
567 TRACE("\n");
569 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
571 return SQL_ERROR;
574 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBECOL].func)
575 (StatementHandle, ColumnNumber, ColumnName,
576 BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable);
580 /*************************************************************************
581 * SQLDisconnect [ODBC32.009]
583 SQLRETURNTYPE SQLDisconnect(SQLHDBC ConnectionHandle)
585 TRACE("\n");
587 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
589 return SQL_ERROR;
592 gProxyHandle.ServerName[0] = '\0';
593 gProxyHandle.UserName[0] = '\0';
595 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDISCONNECT].func) (ConnectionHandle);
599 /*************************************************************************
600 * SQLEndTran [ODBC32.029]
602 SQLRETURNTYPE SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType)
604 TRACE("\n");
606 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
608 return SQL_ERROR;
611 return (gProxyHandle.functions[SQLAPI_INDEX_SQLENDTRAN].func) (HandleType, Handle, CompletionType);
615 /*************************************************************************
616 * SQLError [ODBC32.010]
618 SQLRETURNTYPE SQLError(SQLHENV EnvironmentHandle,
619 SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle,
620 SQLCHAR *Sqlstate, SQLINTEGER *NativeError,
621 SQLCHAR *MessageText, SQLSMALLINT BufferLength,
622 SQLSMALLINT *TextLength)
624 TRACE("\n");
626 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
628 return SQL_ERROR;
631 return (gProxyHandle.functions[SQLAPI_INDEX_SQLERROR].func)
632 (EnvironmentHandle, ConnectionHandle, StatementHandle,
633 Sqlstate, NativeError, MessageText, BufferLength, TextLength);
637 /*************************************************************************
638 * SQLExecDirect [ODBC32.011]
640 SQLRETURNTYPE SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
642 TRACE("\n");
644 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
646 return SQL_ERROR;
649 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECDIRECT].func)
650 (StatementHandle, StatementText, TextLength);
654 /*************************************************************************
655 * SQLExecute [ODBC32.012]
657 SQLRETURNTYPE SQLExecute(SQLHSTMT StatementHandle)
659 TRACE("\n");
661 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
663 return SQL_ERROR;
666 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXECUTE].func) (StatementHandle);
670 /*************************************************************************
671 * SQLFetch [ODBC32.013]
673 SQLRETURNTYPE SQLFetch(SQLHSTMT StatementHandle)
675 TRACE("\n");
677 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL)
679 return SQL_ERROR;
682 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCH].func) (StatementHandle);
686 /*************************************************************************
687 * SQLFetchScroll [ODBC32.030]
689 SQLRETURNTYPE SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset)
691 TRACE("\n");
693 if (gProxyHandle.dmHandle == NULL)
695 return SQL_ERROR;
698 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFETCHSCROLL].func)
699 (StatementHandle, FetchOrientation, FetchOffset);
703 /*************************************************************************
704 * SQLFreeConnect [ODBC32.014]
706 SQLRETURNTYPE SQLFreeConnect(SQLHDBC ConnectionHandle)
708 TRACE("\n");
710 if (gProxyHandle.dmHandle == NULL)
712 return SQL_ERROR;
715 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFREECONNECT].func) (ConnectionHandle);
719 /*************************************************************************
720 * SQLFreeEnv [ODBC32.015]
722 SQLRETURNTYPE SQLFreeEnv(SQLHENV EnvironmentHandle)
724 SQLRETURN ret;
726 TRACE("\n");
728 if (gProxyHandle.dmHandle == NULL)
730 return SQL_ERROR;
733 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEENV].func) (EnvironmentHandle);
735 if (gProxyHandle.dmHandle)
737 dlclose(gProxyHandle.dmHandle);
738 gProxyHandle.dmHandle = NULL;
742 return ret;
746 /*************************************************************************
747 * SQLFreeHandle [ODBC32.031]
749 SQLRETURNTYPE SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle)
751 SQLRETURN ret;
753 TRACE("\n");
755 if (gProxyHandle.dmHandle == NULL)
757 return SQL_ERROR;
760 ret = (gProxyHandle.functions[SQLAPI_INDEX_SQLFREEHANDLE].func)
761 (HandleType, Handle);
763 if (HandleType == SQL_HANDLE_ENV) /* it is time to close the loaded library */
765 if (gProxyHandle.dmHandle)
767 dlclose(gProxyHandle.dmHandle);
768 gProxyHandle.dmHandle = NULL;
772 return ret;
776 /*************************************************************************
777 * SQLFreeStmt [ODBC32.016]
779 SQLRETURNTYPE SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option)
782 TRACE("\n");
784 if (gProxyHandle.dmHandle == NULL)
786 return SQL_ERROR;
789 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFREESTMT].func)
790 (StatementHandle, Option);
794 /*************************************************************************
795 * SQLGetConnectAttr [ODBC32.032]
797 SQLRETURNTYPE SQLGetConnectAttr(SQLHDBC ConnectionHandle,
798 SQLINTEGER Attribute, SQLPOINTER Value,
799 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
801 TRACE("\n");
803 if (gProxyHandle.dmHandle == NULL)
805 return SQL_ERROR;
808 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTATTR].func)
809 (ConnectionHandle, Attribute, Value,
810 BufferLength, StringLength);
814 /*************************************************************************
815 * SQLGetConnectOption [ODBC32.042]
817 SQLRETURNTYPE SQLGetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value)
819 TRACE("\n");
821 if (gProxyHandle.dmHandle == NULL)
823 return SQL_ERROR;
826 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCONNECTOPTION].func)
827 (ConnectionHandle, Option, Value);
831 /*************************************************************************
832 * SQLGetCursorName [ODBC32.017]
834 SQLRETURNTYPE SQLGetCursorName(SQLHSTMT StatementHandle,
835 SQLCHAR *CursorName, SQLSMALLINT BufferLength,
836 SQLSMALLINT *NameLength)
838 TRACE("\n");
840 if (gProxyHandle.dmHandle == NULL)
842 return SQL_ERROR;
845 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETCURSORNAME].func)
846 (StatementHandle, CursorName, BufferLength, NameLength);
850 /*************************************************************************
851 * SQLGetData [ODBC32.043]
853 SQLRETURNTYPE SQLGetData(SQLHSTMT StatementHandle,
854 SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
855 SQLPOINTER TargetValue, SQLINTEGER BufferLength,
856 SQLINTEGER *StrLen_or_Ind)
858 TRACE("\n");
859 if (gProxyHandle.dmHandle == NULL)
861 return SQL_ERROR;
864 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDATA].func)
865 (StatementHandle, ColumnNumber, TargetType,
866 TargetValue, BufferLength, StrLen_or_Ind);
870 /*************************************************************************
871 * SQLGetDescField [ODBC32.033]
873 SQLRETURNTYPE SQLGetDescField(SQLHDESC DescriptorHandle,
874 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
875 SQLPOINTER Value, SQLINTEGER BufferLength,
876 SQLINTEGER *StringLength)
878 TRACE("\n");
879 if (gProxyHandle.dmHandle == NULL)
881 return SQL_ERROR;
884 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCFIELD].func)
885 (DescriptorHandle, RecNumber, FieldIdentifier,
886 Value, BufferLength, StringLength);
890 /*************************************************************************
891 * SQLGetDescRec [ODBC32.034]
893 SQLRETURNTYPE SQLGetDescRec(SQLHDESC DescriptorHandle,
894 SQLSMALLINT RecNumber, SQLCHAR *Name,
895 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength,
896 SQLSMALLINT *Type, SQLSMALLINT *SubType,
897 SQLINTEGER *Length, SQLSMALLINT *Precision,
898 SQLSMALLINT *Scale, SQLSMALLINT *Nullable)
900 TRACE("\n");
901 if (gProxyHandle.dmHandle == NULL)
903 return SQL_ERROR;
906 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDESCREC].func)
907 (DescriptorHandle, RecNumber, Name, BufferLength,
908 StringLength, Type, SubType, Length, Precision, Scale, Nullable);
912 /*************************************************************************
913 * SQLGetDiagField [ODBC32.035]
915 SQLRETURNTYPE SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle,
916 SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier,
917 SQLPOINTER DiagInfo, SQLSMALLINT BufferLength,
918 SQLSMALLINT *StringLength)
920 TRACE("\n");
921 if (gProxyHandle.dmHandle == NULL)
923 return SQL_ERROR;
926 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGFIELD].func)
927 (HandleType, Handle, RecNumber, DiagIdentifier,
928 DiagInfo, BufferLength, StringLength);
932 /*************************************************************************
933 * SQLGetDiagRec [ODBC32.036]
935 SQLRETURNTYPE SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle,
936 SQLSMALLINT RecNumber, SQLCHAR *Sqlstate,
937 SQLINTEGER *NativeError, SQLCHAR *MessageText,
938 SQLSMALLINT BufferLength, SQLSMALLINT *TextLength)
940 TRACE("\n");
941 if (gProxyHandle.dmHandle == NULL)
943 return SQL_ERROR;
946 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETDIAGREC].func)
947 (HandleType, Handle, RecNumber, Sqlstate, NativeError,
948 MessageText, BufferLength, TextLength);
952 /*************************************************************************
953 * SQLGetEnvAttr [ODBC32.037]
955 SQLRETURNTYPE SQLGetEnvAttr(SQLHENV EnvironmentHandle,
956 SQLINTEGER Attribute, SQLPOINTER Value,
957 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
959 TRACE("\n");
960 if (gProxyHandle.dmHandle == NULL)
962 return SQL_ERROR;
965 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETENVATTR].func)
966 (EnvironmentHandle, Attribute, Value, BufferLength, StringLength);
970 /*************************************************************************
971 * SQLGetFunctions [ODBC32.044]
973 SQLRETURNTYPE SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported)
975 TRACE("\n");
976 if (gProxyHandle.dmHandle == NULL)
978 return SQL_ERROR;
981 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETFUNCTIONS].func)
982 (ConnectionHandle, FunctionId, Supported);
986 /*************************************************************************
987 * SQLGetInfo [ODBC32.045]
989 SQLRETURNTYPE SQLGetInfo(SQLHDBC ConnectionHandle,
990 SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
991 SQLSMALLINT BufferLength, SQLSMALLINT *StringLength)
993 TRACE("\n");
994 if (gProxyHandle.dmHandle == NULL)
996 return SQL_ERROR;
999 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETINFO].func)
1000 (ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength);
1004 /*************************************************************************
1005 * SQLGetStmtAttr [ODBC32.038]
1007 SQLRETURNTYPE SQLGetStmtAttr(SQLHSTMT StatementHandle,
1008 SQLINTEGER Attribute, SQLPOINTER Value,
1009 SQLINTEGER BufferLength, SQLINTEGER *StringLength)
1011 TRACE("\n");
1012 if (gProxyHandle.dmHandle == NULL)
1014 return SQL_ERROR;
1017 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTATTR].func)
1018 (StatementHandle, Attribute, Value, BufferLength, StringLength);
1022 /*************************************************************************
1023 * SQLGetStmtOption [ODBC32.046]
1025 SQLRETURNTYPE SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value)
1027 TRACE("\n");
1028 if (gProxyHandle.dmHandle == NULL)
1030 return SQL_ERROR;
1033 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETSTMTOPTION].func)
1034 (StatementHandle, Option, Value);
1038 /*************************************************************************
1039 * SQLGetTypeInfo [ODBC32.047]
1041 SQLRETURNTYPE SQLGetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType)
1043 TRACE("\n");
1044 if (gProxyHandle.dmHandle == NULL)
1046 return SQL_ERROR;
1049 return (gProxyHandle.functions[SQLAPI_INDEX_SQLGETTYPEINFO].func)
1050 (StatementHandle, DataType);
1054 /*************************************************************************
1055 * SQLNumResultCols [ODBC32.018]
1057 SQLRETURNTYPE SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnCount)
1059 TRACE("\n");
1060 if (gProxyHandle.dmHandle == NULL)
1062 return SQL_ERROR;
1065 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMRESULTCOLS].func)
1066 (StatementHandle, ColumnCount);
1070 /*************************************************************************
1071 * SQLParamData [ODBC32.048]
1073 SQLRETURNTYPE SQLParamData(SQLHSTMT StatementHandle, SQLPOINTER *Value)
1075 TRACE("\n");
1076 if (gProxyHandle.dmHandle == NULL)
1078 return SQL_ERROR;
1081 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMDATA].func)
1082 (StatementHandle, Value);
1086 /*************************************************************************
1087 * SQLPrepare [ODBC32.019]
1089 SQLRETURNTYPE SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
1091 TRACE("\n");
1092 if (gProxyHandle.dmHandle == NULL)
1094 return SQL_ERROR;
1097 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPREPARE].func)
1098 (StatementHandle, StatementText, TextLength);
1102 /*************************************************************************
1103 * SQLPutData [ODBC32.049]
1105 SQLRETURNTYPE SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLINTEGER StrLen_or_Ind)
1107 TRACE("\n");
1108 if (gProxyHandle.dmHandle == NULL)
1110 return SQL_ERROR;
1113 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPUTDATA].func)
1114 (StatementHandle, Data, StrLen_or_Ind);
1118 /*************************************************************************
1119 * SQLRowCount [ODBC32.020]
1121 SQLRETURNTYPE SQLRowCount(SQLHSTMT StatementHandle, SQLINTEGER *RowCount)
1123 TRACE("\n");
1124 if (gProxyHandle.dmHandle == NULL)
1126 return SQL_ERROR;
1129 return (gProxyHandle.functions[SQLAPI_INDEX_SQLROWCOUNT].func)
1130 (StatementHandle, RowCount);
1134 /*************************************************************************
1135 * SQLSetConnectAttr [ODBC32.039]
1137 SQLRETURNTYPE SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute,
1138 SQLPOINTER Value, SQLINTEGER StringLength)
1140 TRACE("\n");
1141 if (gProxyHandle.dmHandle == NULL)
1143 return SQL_ERROR;
1146 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTATTR].func)
1147 (ConnectionHandle, Attribute, Value, StringLength);
1151 /*************************************************************************
1152 * SQLSetConnectOption [ODBC32.050]
1154 SQLRETURNTYPE SQLSetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1156 TRACE("\n");
1157 if (gProxyHandle.dmHandle == NULL)
1159 return SQL_ERROR;
1162 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCONNECTOPTION].func)
1163 (ConnectionHandle, Option, Value);
1167 /*************************************************************************
1168 * SQLSetCursorName [ODBC32.021]
1170 SQLRETURNTYPE SQLSetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, SQLSMALLINT NameLength)
1172 TRACE("\n");
1173 if (gProxyHandle.dmHandle == NULL)
1175 return SQL_ERROR;
1178 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETCURSORNAME].func)
1179 (StatementHandle, CursorName, NameLength);
1183 /*************************************************************************
1184 * SQLSetDescField [ODBC32.073]
1186 SQLRETURNTYPE SQLSetDescField(SQLHDESC DescriptorHandle,
1187 SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
1188 SQLPOINTER Value, SQLINTEGER BufferLength)
1190 TRACE("\n");
1191 if (gProxyHandle.dmHandle == NULL)
1193 return SQL_ERROR;
1196 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCFIELD].func)
1197 (DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength);
1201 /*************************************************************************
1202 * SQLSetDescRec [ODBC32.074]
1204 SQLRETURNTYPE SQLSetDescRec(SQLHDESC DescriptorHandle,
1205 SQLSMALLINT RecNumber, SQLSMALLINT Type,
1206 SQLSMALLINT SubType, SQLINTEGER Length,
1207 SQLSMALLINT Precision, SQLSMALLINT Scale,
1208 SQLPOINTER Data, SQLINTEGER *StringLength,
1209 SQLINTEGER *Indicator)
1211 TRACE("\n");
1212 if (gProxyHandle.dmHandle == NULL)
1214 return SQL_ERROR;
1217 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETDESCREC].func)
1218 (DescriptorHandle, RecNumber, Type, SubType, Length,
1219 Precision, Scale, Data, StringLength, Indicator);
1223 /*************************************************************************
1224 * SQLSetEnvAttr [ODBC32.075]
1226 SQLRETURNTYPE SQLSetEnvAttr(SQLHENV EnvironmentHandle,
1227 SQLINTEGER Attribute, SQLPOINTER Value,
1228 SQLINTEGER StringLength)
1230 TRACE("\n");
1231 if (gProxyHandle.dmHandle == NULL)
1233 return SQL_ERROR;
1236 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETENVATTR].func)
1237 (EnvironmentHandle, Attribute, Value, StringLength);
1241 /*************************************************************************
1242 * SQLSetParam [ODBC32.022]
1244 SQLRETURNTYPE SQLSetParam(SQLHSTMT StatementHandle,
1245 SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
1246 SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
1247 SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
1248 SQLINTEGER *StrLen_or_Ind)
1250 TRACE("\n");
1251 if (gProxyHandle.dmHandle == NULL)
1253 return SQL_ERROR;
1256 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPARAM].func)
1257 (StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision,
1258 ParameterScale, ParameterValue, StrLen_or_Ind);
1262 /*************************************************************************
1263 * SQLSetStmtAttr [ODBC32.076]
1265 SQLRETURNTYPE SQLSetStmtAttr(SQLHSTMT StatementHandle,
1266 SQLINTEGER Attribute, SQLPOINTER Value,
1267 SQLINTEGER StringLength)
1269 TRACE("\n");
1270 if (gProxyHandle.dmHandle == NULL)
1272 return SQL_ERROR;
1275 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTATTR].func)
1276 (StatementHandle, Attribute, Value, StringLength);
1280 /*************************************************************************
1281 * SQLSetStmtOption [ODBC32.051]
1283 SQLRETURNTYPE SQLSetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLUINTEGER Value)
1285 TRACE("\n");
1286 if (gProxyHandle.dmHandle == NULL)
1288 return SQL_ERROR;
1291 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSTMTOPTION].func)
1292 (StatementHandle, Option, Value);
1296 /*************************************************************************
1297 * SQLSpecialColumns [ODBC32.052]
1299 SQLRETURNTYPE SQLSpecialColumns(SQLHSTMT StatementHandle,
1300 SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName,
1301 SQLSMALLINT NameLength1, SQLCHAR *SchemaName,
1302 SQLSMALLINT NameLength2, SQLCHAR *TableName,
1303 SQLSMALLINT NameLength3, SQLUSMALLINT Scope,
1304 SQLUSMALLINT Nullable)
1306 if (gProxyHandle.dmHandle == NULL)
1308 return SQL_ERROR;
1311 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSPECIALCOLUMNS].func)
1312 (StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName,
1313 NameLength2, TableName, NameLength3, Scope, Nullable);
1317 /*************************************************************************
1318 * SQLStatistics [ODBC32.053]
1320 SQLRETURNTYPE SQLStatistics(SQLHSTMT StatementHandle,
1321 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1322 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1323 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1324 SQLUSMALLINT Unique, SQLUSMALLINT Reserved)
1326 TRACE("\n");
1327 if (gProxyHandle.dmHandle == NULL)
1329 return SQL_ERROR;
1332 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSTATISTICS].func)
1333 (StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2,
1334 TableName, NameLength3, Unique, Reserved);
1338 /*************************************************************************
1339 * SQLTables [ODBC32.054]
1341 SQLRETURNTYPE SQLTables(SQLHSTMT StatementHandle,
1342 SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
1343 SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
1344 SQLCHAR *TableName, SQLSMALLINT NameLength3,
1345 SQLCHAR *TableType, SQLSMALLINT NameLength4)
1347 TRACE("\n");
1348 if (gProxyHandle.dmHandle == NULL)
1350 return SQL_ERROR;
1353 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLES].func)
1354 (StatementHandle, CatalogName, NameLength1,
1355 SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4);
1359 /*************************************************************************
1360 * SQLTransact [ODBC32.023]
1362 SQLRETURNTYPE SQLTransact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle,
1363 SQLUSMALLINT CompletionType)
1365 TRACE("\n");
1366 if (gProxyHandle.dmHandle == NULL)
1368 return SQL_ERROR;
1371 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTRANSACT].func)
1372 (EnvironmentHandle, ConnectionHandle, CompletionType);
1376 /*************************************************************************
1377 * SQLBrowseConnect [ODBC32.055]
1379 SQLRETURNTYPE SQLBrowseConnect(
1380 SQLHDBC hdbc,
1381 SQLCHAR *szConnStrIn,
1382 SQLSMALLINT cbConnStrIn,
1383 SQLCHAR *szConnStrOut,
1384 SQLSMALLINT cbConnStrOutMax,
1385 SQLSMALLINT *pcbConnStrOut)
1387 TRACE("\n");
1388 if (gProxyHandle.dmHandle == NULL)
1390 return SQL_ERROR;
1393 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBROWSECONNECT].func)
1394 (hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut);
1398 /*************************************************************************
1399 * SQLBulkOperations [ODBC32.078]
1401 SQLRETURNTYPE SQLBulkOperations(
1402 SQLHSTMT StatementHandle,
1403 SQLSMALLINT Operation)
1405 TRACE("\n");
1406 if (gProxyHandle.dmHandle == NULL)
1408 return SQL_ERROR;
1411 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBULKOPERATIONS].func)
1412 (StatementHandle, Operation);
1416 /*************************************************************************
1417 * SQLColAttributes [ODBC32.006]
1419 SQLRETURNTYPE SQLColAttributes(
1420 SQLHSTMT hstmt,
1421 SQLUSMALLINT icol,
1422 SQLUSMALLINT fDescType,
1423 SQLPOINTER rgbDesc,
1424 SQLSMALLINT cbDescMax,
1425 SQLSMALLINT *pcbDesc,
1426 SQLINTEGER *pfDesc)
1428 TRACE("\n");
1429 if (gProxyHandle.dmHandle == NULL)
1431 return SQL_ERROR;
1434 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLATTRIBUTES].func)
1435 (hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc);
1439 /*************************************************************************
1440 * SQLColumnPrivileges [ODBC32.056]
1442 SQLRETURNTYPE SQLColumnPrivileges(
1443 SQLHSTMT hstmt,
1444 SQLCHAR *szCatalogName,
1445 SQLSMALLINT cbCatalogName,
1446 SQLCHAR *szSchemaName,
1447 SQLSMALLINT cbSchemaName,
1448 SQLCHAR *szTableName,
1449 SQLSMALLINT cbTableName,
1450 SQLCHAR *szColumnName,
1451 SQLSMALLINT cbColumnName)
1453 TRACE("\n");
1454 if (gProxyHandle.dmHandle == NULL)
1456 return SQL_ERROR;
1459 return (gProxyHandle.functions[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES].func)
1460 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1461 szTableName, cbTableName, szColumnName, cbColumnName);
1465 /*************************************************************************
1466 * SQLDescribeParam [ODBC32.058]
1468 SQLRETURNTYPE SQLDescribeParam(
1469 SQLHSTMT hstmt,
1470 SQLUSMALLINT ipar,
1471 SQLSMALLINT *pfSqlType,
1472 SQLUINTEGER *pcbParamDef,
1473 SQLSMALLINT *pibScale,
1474 SQLSMALLINT *pfNullable)
1476 TRACE("\n");
1477 if (gProxyHandle.dmHandle == NULL)
1479 return SQL_ERROR;
1482 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDESCRIBEPARAM].func)
1483 (hstmt, ipar, pfSqlType, pcbParamDef, pibScale, pfNullable);
1487 /*************************************************************************
1488 * SQLExtendedFetch [ODBC32.059]
1490 SQLRETURNTYPE SQLExtendedFetch(
1491 SQLHSTMT hstmt,
1492 SQLUSMALLINT fFetchType,
1493 SQLINTEGER irow,
1494 SQLUINTEGER *pcrow,
1495 SQLUSMALLINT *rgfRowStatus)
1497 TRACE("\n");
1498 if (gProxyHandle.dmHandle == NULL)
1500 return SQL_ERROR;
1503 return (gProxyHandle.functions[SQLAPI_INDEX_SQLEXTENDEDFETCH].func)
1504 (hstmt, fFetchType, irow, pcrow, rgfRowStatus);
1508 /*************************************************************************
1509 * SQLForeignKeys [ODBC32.060]
1511 SQLRETURNTYPE SQLForeignKeys(
1512 SQLHSTMT hstmt,
1513 SQLCHAR *szPkCatalogName,
1514 SQLSMALLINT cbPkCatalogName,
1515 SQLCHAR *szPkSchemaName,
1516 SQLSMALLINT cbPkSchemaName,
1517 SQLCHAR *szPkTableName,
1518 SQLSMALLINT cbPkTableName,
1519 SQLCHAR *szFkCatalogName,
1520 SQLSMALLINT cbFkCatalogName,
1521 SQLCHAR *szFkSchemaName,
1522 SQLSMALLINT cbFkSchemaName,
1523 SQLCHAR *szFkTableName,
1524 SQLSMALLINT cbFkTableName)
1526 TRACE("\n");
1527 if (gProxyHandle.dmHandle == NULL)
1529 return SQL_ERROR;
1532 return (gProxyHandle.functions[SQLAPI_INDEX_SQLFOREIGNKEYS].func)
1533 (hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName,
1534 szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName,
1535 cbFkSchemaName, szFkTableName, cbFkTableName);
1539 /*************************************************************************
1540 * SQLMoreResults [ODBC32.061]
1542 SQLRETURNTYPE SQLMoreResults(SQLHSTMT hstmt)
1544 TRACE("\n");
1545 if (gProxyHandle.dmHandle == NULL)
1547 return SQL_ERROR;
1550 return (gProxyHandle.functions[SQLAPI_INDEX_SQLMORERESULTS].func) (hstmt);
1554 /*************************************************************************
1555 * SQLNativeSql [ODBC32.062]
1557 SQLRETURNTYPE SQLNativeSql(
1558 SQLHDBC hdbc,
1559 SQLCHAR *szSqlStrIn,
1560 SQLINTEGER cbSqlStrIn,
1561 SQLCHAR *szSqlStr,
1562 SQLINTEGER cbSqlStrMax,
1563 SQLINTEGER *pcbSqlStr)
1565 TRACE("\n");
1566 if (gProxyHandle.dmHandle == NULL)
1568 return SQL_ERROR;
1571 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNATIVESQL].func)
1572 (hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr);
1576 /*************************************************************************
1577 * SQLNumParams [ODBC32.063]
1579 SQLRETURNTYPE SQLNumParams(
1580 SQLHSTMT hstmt,
1581 SQLSMALLINT *pcpar)
1583 TRACE("\n");
1584 if (gProxyHandle.dmHandle == NULL)
1586 return SQL_ERROR;
1589 return (gProxyHandle.functions[SQLAPI_INDEX_SQLNUMPARAMS].func) (hstmt, pcpar);
1593 /*************************************************************************
1594 * SQLParamOptions [ODBC32.064]
1596 SQLRETURNTYPE SQLParamOptions(
1597 SQLHSTMT hstmt,
1598 SQLUINTEGER crow,
1599 SQLUINTEGER *pirow)
1601 TRACE("\n");
1602 if (gProxyHandle.dmHandle == NULL)
1604 return SQL_ERROR;
1607 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPARAMOPTIONS].func) (hstmt, crow, pirow);
1611 /*************************************************************************
1612 * SQLPrimaryKeys [ODBC32.065]
1614 SQLRETURNTYPE SQLPrimaryKeys(
1615 SQLHSTMT hstmt,
1616 SQLCHAR *szCatalogName,
1617 SQLSMALLINT cbCatalogName,
1618 SQLCHAR *szSchemaName,
1619 SQLSMALLINT cbSchemaName,
1620 SQLCHAR *szTableName,
1621 SQLSMALLINT cbTableName)
1623 TRACE("\n");
1624 if (gProxyHandle.dmHandle == NULL)
1626 return SQL_ERROR;
1629 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPRIMARYKEYS].func)
1630 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1631 szTableName, cbTableName);
1635 /*************************************************************************
1636 * SQLProcedureColumns [ODBC32.066]
1638 SQLRETURNTYPE SQLProcedureColumns(
1639 SQLHSTMT hstmt,
1640 SQLCHAR *szCatalogName,
1641 SQLSMALLINT cbCatalogName,
1642 SQLCHAR *szSchemaName,
1643 SQLSMALLINT cbSchemaName,
1644 SQLCHAR *szProcName,
1645 SQLSMALLINT cbProcName,
1646 SQLCHAR *szColumnName,
1647 SQLSMALLINT cbColumnName)
1649 TRACE("\n");
1650 if (gProxyHandle.dmHandle == NULL)
1652 return SQL_ERROR;
1655 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURECOLUMNS].func)
1656 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1657 szProcName, cbProcName, szColumnName, cbColumnName);
1661 /*************************************************************************
1662 * SQLProcedures [ODBC32.067]
1664 SQLRETURNTYPE SQLProcedures(
1665 SQLHSTMT hstmt,
1666 SQLCHAR *szCatalogName,
1667 SQLSMALLINT cbCatalogName,
1668 SQLCHAR *szSchemaName,
1669 SQLSMALLINT cbSchemaName,
1670 SQLCHAR *szProcName,
1671 SQLSMALLINT cbProcName)
1673 TRACE("\n");
1674 if (gProxyHandle.dmHandle == NULL)
1676 return SQL_ERROR;
1679 return (gProxyHandle.functions[SQLAPI_INDEX_SQLPROCEDURES].func)
1680 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1681 szProcName, cbProcName);
1685 /*************************************************************************
1686 * SQLSetPos [ODBC32.068]
1688 SQLRETURNTYPE SQLSetPos(
1689 SQLHSTMT hstmt,
1690 SQLUSMALLINT irow,
1691 SQLUSMALLINT fOption,
1692 SQLUSMALLINT fLock)
1694 TRACE("\n");
1695 if (gProxyHandle.dmHandle == NULL)
1697 return SQL_ERROR;
1700 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETPOS].func)
1701 (hstmt, irow, fOption, fLock);
1705 /*************************************************************************
1706 * SQLTablePrivileges [ODBC32.070]
1708 SQLRETURNTYPE SQLTablePrivileges(
1709 SQLHSTMT hstmt,
1710 SQLCHAR *szCatalogName,
1711 SQLSMALLINT cbCatalogName,
1712 SQLCHAR *szSchemaName,
1713 SQLSMALLINT cbSchemaName,
1714 SQLCHAR *szTableName,
1715 SQLSMALLINT cbTableName)
1717 TRACE("\n");
1718 if (gProxyHandle.dmHandle == NULL)
1720 return SQL_ERROR;
1723 return (gProxyHandle.functions[SQLAPI_INDEX_SQLTABLEPRIVILEGES].func)
1724 (hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName,
1725 szTableName, cbTableName);
1729 /*************************************************************************
1730 * SQLDrivers [ODBC32.071]
1732 SQLRETURNTYPE SQLDrivers(
1733 SQLHENV henv,
1734 SQLUSMALLINT fDirection,
1735 SQLCHAR *szDriverDesc,
1736 SQLSMALLINT cbDriverDescMax,
1737 SQLSMALLINT *pcbDriverDesc,
1738 SQLCHAR *szDriverAttributes,
1739 SQLSMALLINT cbDriverAttrMax,
1740 SQLSMALLINT *pcbDriverAttr)
1742 TRACE("\n");
1743 if (gProxyHandle.dmHandle == NULL)
1745 return SQL_ERROR;
1748 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERS].func)
1749 (henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc,
1750 szDriverAttributes, cbDriverAttrMax, pcbDriverAttr);
1754 /*************************************************************************
1755 * SQLBindParameter [ODBC32.072]
1757 SQLRETURNTYPE SQLBindParameter(
1758 SQLHSTMT hstmt,
1759 SQLUSMALLINT ipar,
1760 SQLSMALLINT fParamType,
1761 SQLSMALLINT fCType,
1762 SQLSMALLINT fSqlType,
1763 SQLUINTEGER cbColDef,
1764 SQLSMALLINT ibScale,
1765 SQLPOINTER rgbValue,
1766 SQLINTEGER cbValueMax,
1767 SQLINTEGER *pcbValue)
1769 TRACE("\n");
1770 if (gProxyHandle.dmHandle == NULL)
1772 return SQL_ERROR;
1775 return (gProxyHandle.functions[SQLAPI_INDEX_SQLBINDPARAMETER].func)
1776 (hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale,
1777 rgbValue, cbValueMax, pcbValue);
1781 /*************************************************************************
1782 * SQLDriverConnect [ODBC32.041]
1784 SQLRETURNTYPE SQLDriverConnect(
1785 SQLHDBC hdbc,
1786 SQLHWND hwnd,
1787 SQLCHAR *conn_str_in,
1788 SQLSMALLINT len_conn_str_in,
1789 SQLCHAR *conn_str_out,
1790 SQLSMALLINT conn_str_out_max,
1791 SQLSMALLINT *ptr_conn_str_out,
1792 SQLUSMALLINT driver_completion )
1794 TRACE("\n");
1795 if (gProxyHandle.dmHandle == NULL)
1797 return SQL_ERROR;
1800 return (gProxyHandle.functions[SQLAPI_INDEX_SQLDRIVERCONNECT].func)
1801 (hdbc, hwnd, conn_str_in, len_conn_str_in, conn_str_out,
1802 conn_str_out_max, ptr_conn_str_out, driver_completion);
1806 /*************************************************************************
1807 * SQLSetScrollOptions [ODBC32.069]
1809 SQLRETURNTYPE SQLSetScrollOptions(
1810 SQLHSTMT statement_handle,
1811 SQLUSMALLINT f_concurrency,
1812 SQLINTEGER crow_keyset,
1813 SQLUSMALLINT crow_rowset )
1815 TRACE("\n");
1816 if (gProxyHandle.dmHandle == NULL)
1818 return SQL_ERROR;
1821 return (gProxyHandle.functions[SQLAPI_INDEX_SQLSETSCROLLOPTIONS].func)
1822 (statement_handle, f_concurrency, crow_keyset, crow_rowset);