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
17 #include "debugtools.h"
18 #include "wine/port.h"
24 #include "proxyodbc.h"
26 DEFAULT_DEBUG_CHANNEL(odbc
);
28 static const DM_FUNC template_func
[] =
30 /* 00 */ { SQL_API_SQLALLOCCONNECT
, "SQLAllocConnect", SQLAllocConnect
, NULL
},
31 /* 01 */ { SQL_API_SQLALLOCENV
, "SQLAllocEnv", SQLAllocEnv
, NULL
},
32 /* 02 */ { SQL_API_SQLALLOCHANDLE
, "SQLAllocHandle", SQLAllocHandle
, NULL
},
33 /* 03 */ { SQL_API_SQLALLOCSTMT
, "SQLAllocStmt", SQLAllocStmt
, NULL
},
34 /* 04 */ { SQL_API_SQLALLOCHANDLESTD
, "SQLAllocHandleStd", SQLAllocHandleStd
, NULL
},
35 /* 05 */ { SQL_API_SQLBINDCOL
, "SQLBindCol", SQLBindCol
, NULL
},
36 /* 06 */ { SQL_API_SQLBINDPARAM
, "SQLBindParam", SQLBindParam
, NULL
},
37 /* 07 */ { SQL_API_SQLBINDPARAMETER
, "SQLBindParameter", SQLBindParameter
, NULL
},
38 /* 08 */ { SQL_API_SQLBROWSECONNECT
, "SQLBrowseConnect", SQLBrowseConnect
, NULL
},
39 /* 09 */ { SQL_API_SQLBULKOPERATIONS
, "SQLBulkOperations", SQLBulkOperations
, NULL
},
40 /* 10 */ { SQL_API_SQLCANCEL
, "SQLCancel", SQLCancel
, NULL
},
41 /* 11 */ { SQL_API_SQLCLOSECURSOR
, "SQLCloseCursor", SQLCloseCursor
, NULL
},
42 /* 12 */ { SQL_API_SQLCOLATTRIBUTE
, "SQLColAttribute", SQLColAttribute
, NULL
},
43 /* 13 */ { SQL_API_SQLCOLATTRIBUTES
, "SQLColAttributes", SQLColAttributes
, NULL
},
44 /* 14 */ { SQL_API_SQLCOLUMNPRIVILEGES
, "SQLColumnPrivileges", SQLColumnPrivileges
, NULL
},
45 /* 15 */ { SQL_API_SQLCOLUMNS
, "SQLColumns", SQLColumns
, NULL
},
46 /* 16 */ { SQL_API_SQLCONNECT
, "SQLConnect", SQLConnect
, NULL
},
47 /* 17 */ { SQL_API_SQLCOPYDESC
, "SQLCopyDesc", SQLCopyDesc
, NULL
},
48 /* 18 */ { SQL_API_SQLDATASOURCES
, "SQLDataSources", SQLDataSources
, NULL
},
49 /* 19 */ { SQL_API_SQLDESCRIBECOL
, "SQLDescribeCol", SQLDescribeCol
, NULL
},
50 /* 20 */ { SQL_API_SQLDESCRIBEPARAM
, "SQLDescribeParam", SQLDescribeParam
, NULL
},
51 /* 21 */ { SQL_API_SQLDISCONNECT
, "SQLDisconnect", SQLDisconnect
, NULL
},
52 /* 22 */ { SQL_API_SQLDRIVERCONNECT
, "SQLDriverConnect", SQLDriverConnect
, NULL
},
53 /* 23 */ { SQL_API_SQLDRIVERS
, "SQLDrivers", SQLDrivers
, NULL
},
54 /* 24 */ { SQL_API_SQLENDTRAN
, "SQLEndTran", SQLEndTran
, NULL
},
55 /* 25 */ { SQL_API_SQLERROR
, "SQLError", SQLError
, NULL
},
56 /* 26 */ { SQL_API_SQLEXECDIRECT
, "SQLExecDirect", SQLExecDirect
, NULL
},
57 /* 27 */ { SQL_API_SQLEXECUTE
, "SQLExecute", SQLExecute
, NULL
},
58 /* 28 */ { SQL_API_SQLEXTENDEDFETCH
, "SQLExtendedFetch", SQLExtendedFetch
, NULL
},
59 /* 29 */ { SQL_API_SQLFETCH
, "SQLFetch", SQLFetch
, NULL
},
60 /* 30 */ { SQL_API_SQLFETCHSCROLL
, "SQLFetchScroll", SQLFetchScroll
, NULL
},
61 /* 31 */ { SQL_API_SQLFOREIGNKEYS
, "SQLForeignKeys", SQLForeignKeys
, NULL
},
62 /* 32 */ { SQL_API_SQLFREEENV
, "SQLFreeEnv", SQLFreeEnv
, NULL
},
63 /* 33 */ { SQL_API_SQLFREEHANDLE
, "SQLFreeHandle", SQLFreeHandle
, NULL
},
64 /* 34 */ { SQL_API_SQLFREESTMT
, "SQLFreeStmt", SQLFreeStmt
, NULL
},
65 /* 35 */ { SQL_API_SQLFREECONNECT
, "SQLFreeConnect", SQLFreeConnect
, NULL
},
66 /* 36 */ { SQL_API_SQLGETCONNECTATTR
, "SQLGetConnectAttr", SQLGetConnectAttr
, NULL
},
67 /* 37 */ { SQL_API_SQLGETCONNECTOPTION
, "SQLGetConnectOption", SQLGetConnectOption
, NULL
},
68 /* 38 */ { SQL_API_SQLGETCURSORNAME
, "SQLGetCursorName", SQLGetCursorName
, NULL
},
69 /* 39 */ { SQL_API_SQLGETDATA
, "SQLGetData", SQLGetData
, NULL
},
70 /* 40 */ { SQL_API_SQLGETDESCFIELD
, "SQLGetDescField", SQLGetDescField
, NULL
},
71 /* 41 */ { SQL_API_SQLGETDESCREC
, "SQLGetDescRec", SQLGetDescRec
, NULL
},
72 /* 42 */ { SQL_API_SQLGETDIAGFIELD
, "SQLGetDiagField", SQLGetDiagField
, NULL
},
73 /* 43 */ { SQL_API_SQLGETENVATTR
, "SQLGetEnvAttr", SQLGetEnvAttr
, NULL
},
74 /* 44 */ { SQL_API_SQLGETFUNCTIONS
, "SQLGetFunctions", SQLGetFunctions
, NULL
},
75 /* 45 */ { SQL_API_SQLGETINFO
, "SQLGetInfo", SQLGetInfo
, NULL
},
76 /* 46 */ { SQL_API_SQLGETSTMTATTR
, "SQLGetStmtAttr", SQLGetStmtAttr
, NULL
},
77 /* 47 */ { SQL_API_SQLGETSTMTOPTION
, "SQLGetStmtOption", SQLGetStmtOption
, NULL
},
78 /* 48 */ { SQL_API_SQLGETTYPEINFO
, "SQLGetTypeInfo", SQLGetTypeInfo
, NULL
},
79 /* 49 */ { SQL_API_SQLMORERESULTS
, "SQLMoreResults", SQLMoreResults
, NULL
},
80 /* 50 */ { SQL_API_SQLNATIVESQL
, "SQLNativeSql", SQLNativeSql
, NULL
},
81 /* 51 */ { SQL_API_SQLNUMPARAMS
, "SQLNumParams", SQLNumParams
, NULL
},
82 /* 52 */ { SQL_API_SQLNUMRESULTCOLS
, "SQLNumResultCols", SQLNumResultCols
, NULL
},
83 /* 53 */ { SQL_API_SQLPARAMDATA
, "SQLParamData", SQLParamData
, NULL
},
84 /* 54 */ { SQL_API_SQLPARAMOPTIONS
, "SQLParamOptions", SQLParamOptions
, NULL
},
85 /* 55 */ { SQL_API_SQLPREPARE
, "SQLPrepare", SQLPrepare
, NULL
},
86 /* 56 */ { SQL_API_SQLPRIMARYKEYS
, "SQLPrimaryKeys", SQLPrimaryKeys
, NULL
},
87 /* 57 */ { SQL_API_SQLPROCEDURECOLUMNS
, "SQLProcedureColumns", SQLProcedureColumns
, NULL
},
88 /* 58 */ { SQL_API_SQLPROCEDURES
, "SQLProcedures", SQLProcedures
, NULL
},
89 /* 59 */ { SQL_API_SQLPUTDATA
, "SQLPutData", SQLPutData
, NULL
},
90 /* 60 */ { SQL_API_SQLROWCOUNT
, "SQLRowCount", SQLRowCount
, NULL
},
91 /* 61 */ { SQL_API_SQLSETCONNECTATTR
, "SQLSetConnectAttr", SQLSetConnectAttr
, NULL
},
92 /* 62 */ { SQL_API_SQLSETCONNECTOPTION
, "SQLSetConnectOption", SQLSetConnectOption
, NULL
},
93 /* 63 */ { SQL_API_SQLSETCURSORNAME
, "SQLSetCursorName", SQLSetCursorName
, NULL
},
94 /* 64 */ { SQL_API_SQLSETDESCFIELD
, "SQLSetDescField", SQLSetDescField
, NULL
},
95 /* 65 */ { SQL_API_SQLSETDESCREC
, "SQLSetDescRec", SQLSetDescRec
, NULL
},
96 /* 66 */ { SQL_API_SQLSETENVATTR
, "SQLSetEnvAttr", SQLSetEnvAttr
, NULL
},
97 /* 67 */ { SQL_API_SQLSETPARAM
, "SQLSetParam", SQLSetParam
, NULL
},
98 /* 68 */ { SQL_API_SQLSETPOS
, "SQLSetPos", SQLSetPos
, NULL
},
99 /* 69 */ { SQL_API_SQLSETSCROLLOPTIONS
, "SQLSetScrollOptions", SQLSetScrollOptions
, NULL
},
100 /* 70 */ { SQL_API_SQLSETSTMTATTR
, "SQLSetStmtAttr", SQLSetStmtAttr
, NULL
},
101 /* 71 */ { SQL_API_SQLSETSTMTOPTION
, "SQLSetStmtOption", SQLSetStmtOption
, NULL
},
102 /* 72 */ { SQL_API_SQLSPECIALCOLUMNS
, "SQLSpecialColumns", SQLSpecialColumns
, NULL
},
103 /* 73 */ { SQL_API_SQLSTATISTICS
, "SQLStatistics", SQLStatistics
, NULL
},
104 /* 74 */ { SQL_API_SQLTABLEPRIVILEGES
, "SQLTablePrivileges", SQLTablePrivileges
, NULL
},
105 /* 75 */ { SQL_API_SQLTABLES
, "SQLTables", SQLTables
, NULL
},
106 /* 76 */ { SQL_API_SQLTRANSACT
, "SQLTransact", SQLTransact
, NULL
},
107 /* 77 */ { SQL_API_SQLGETDIAGREC
, "SQLGetDiagRec", SQLGetDiagRec
, NULL
},
110 static PROXYHANDLE gProxyHandle
= {
115 ERROR_LIBRARY_NOT_FOUND
,
123 SQLRETURN
SQLDummyFunc()
125 TRACE("SQLDummyFunc: \n");
129 /***********************************************************************
130 * MAIN_OdbcInit [Internal] Initializes the internal 'ODBC32.DLL'.
133 * hinstDLL [I] handle to the DLL's instance
135 * lpvReserved [I] reserved, must be NULL
143 MAIN_OdbcInit(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
146 TRACE("Initializing proxy ODBC: %x,%lx,%p\n", hinstDLL
, fdwReason
, lpvReserved
);
148 if (fdwReason
== DLL_PROCESS_ATTACH
)
150 TRACE("Loading ODBC...\n");
151 if (ODBC_LoadDriverManager())
152 ODBC_LoadDMFunctions();
154 else if (fdwReason
== DLL_PROCESS_DETACH
)
156 TRACE("Unloading ODBC...\n");
157 if (gProxyHandle
.bFunctionReady
)
159 for ( i
= 0; i
< NUM_SQLFUNC
; i
++ )
161 gProxyHandle
.functions
[i
].func
= SQLDummyFunc
;
165 if (gProxyHandle
.dmHandle
)
167 wine_dlclose(gProxyHandle
.dmHandle
,NULL
,0);
168 gProxyHandle
.dmHandle
= NULL
;
176 /***********************************************************************
177 * ODBC_LoadDriverManager [Internal] Load ODBC library.
186 BOOL
ODBC_LoadDriverManager()
188 char *s
= getenv("LIB_ODBC_DRIVER_MANAGER");
193 gProxyHandle
.bFunctionReady
= FALSE
;
195 if (s
!= NULL
&& strlen(s
) > 0)
196 strcpy(gProxyHandle
.dmLibName
, s
);
198 strcpy(gProxyHandle
.dmLibName
, "libodbc.so");
200 gProxyHandle
.dmHandle
= wine_dlopen(gProxyHandle
.dmLibName
, RTLD_LAZY
, error
, sizeof(error
));
202 if (gProxyHandle
.dmHandle
== NULL
) /* fail to load unixODBC driver manager */
204 WARN("failed to open library %s: %s\n", gProxyHandle
.dmLibName
, error
);
205 gProxyHandle
.dmLibName
[0] = '\0';
206 gProxyHandle
.nErrorType
= ERROR_LIBRARY_NOT_FOUND
;
211 gProxyHandle
.nErrorType
= ERROR_FREE
;
217 /***********************************************************************
218 * ODBC_LoadDMFunctions [Internal] Populate function table.
227 BOOL
ODBC_LoadDMFunctions()
232 if (gProxyHandle
.dmHandle
== NULL
)
235 for ( i
= 0; i
< NUM_SQLFUNC
; i
++ )
237 gProxyHandle
.functions
[i
] = template_func
[i
];
238 gProxyHandle
.functions
[i
].func
= wine_dlsym(gProxyHandle
.dmHandle
,
239 gProxyHandle
.functions
[i
].name
, error
, sizeof(error
));
243 ERR("Failed to load function %s",gProxyHandle
.functions
[i
].name
);
244 gProxyHandle
.functions
[i
].func
= SQLDummyFunc
;
248 gProxyHandle
.bFunctionReady
= TRUE
;
254 /*************************************************************************
255 * SQLAllocConnect [ODBC32.001]
257 SQLRETURN WINAPI
SQLAllocConnect(SQLHENV EnvironmentHandle
, SQLHDBC
*ConnectionHandle
)
261 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
263 *ConnectionHandle
= SQL_NULL_HDBC
;
267 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCCONNECT
].func
)
268 (EnvironmentHandle
, ConnectionHandle
);
272 /*************************************************************************
273 * SQLAllocEnv [ODBC32.002]
275 SQLRETURN WINAPI
SQLAllocEnv(SQLHENV
*EnvironmentHandle
)
279 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
281 *EnvironmentHandle
= SQL_NULL_HENV
;
285 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCENV
].func
) (EnvironmentHandle
);
289 /*************************************************************************
290 * SQLAllocHandle [ODBC32.024]
292 SQLRETURN WINAPI
SQLAllocHandle(SQLSMALLINT HandleType
, SQLHANDLE InputHandle
, SQLHANDLE
*OutputHandle
)
296 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
298 if (gProxyHandle
.nErrorType
== ERROR_LIBRARY_NOT_FOUND
)
299 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
301 if (HandleType
== SQL_HANDLE_ENV
)
302 *OutputHandle
= SQL_NULL_HENV
;
303 else if (HandleType
== SQL_HANDLE_DBC
)
304 *OutputHandle
= SQL_NULL_HDBC
;
305 else if (HandleType
== SQL_HANDLE_STMT
)
306 *OutputHandle
= SQL_NULL_HSTMT
;
307 else if (HandleType
== SQL_HANDLE_DESC
)
308 *OutputHandle
= SQL_NULL_HDESC
;
313 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCHANDLE
].func
)
314 (HandleType
, InputHandle
, OutputHandle
);
318 /*************************************************************************
319 * SQLAllocStmt [ODBC32.003]
321 SQLRETURN WINAPI
SQLAllocStmt(SQLHDBC ConnectionHandle
, SQLHSTMT
*StatementHandle
)
326 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
328 *StatementHandle
= SQL_NULL_HSTMT
;
332 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCSTMT
].func
)
333 (ConnectionHandle
, StatementHandle
);
337 /*************************************************************************
338 * SQLAllocHandleStd [ODBC32.077]
340 SQLRETURN WINAPI
SQLAllocHandleStd( SQLSMALLINT HandleType
,
341 SQLHANDLE InputHandle
, SQLHANDLE
*OutputHandle
)
343 TRACE("ProxyODBC: SQLAllocHandelStd.\n");
345 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
347 if (gProxyHandle
.nErrorType
== ERROR_LIBRARY_NOT_FOUND
)
348 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
350 if (HandleType
== SQL_HANDLE_ENV
)
351 *OutputHandle
= SQL_NULL_HENV
;
352 else if (HandleType
== SQL_HANDLE_DBC
)
353 *OutputHandle
= SQL_NULL_HDBC
;
354 else if (HandleType
== SQL_HANDLE_STMT
)
355 *OutputHandle
= SQL_NULL_HSTMT
;
356 else if (HandleType
== SQL_HANDLE_DESC
)
357 *OutputHandle
= SQL_NULL_HDESC
;
362 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCHANDLESTD
].func
)
363 (HandleType
, InputHandle
, OutputHandle
);
367 /*************************************************************************
368 * SQLBindCol [ODBC32.004]
370 SQLRETURN WINAPI
SQLBindCol(SQLHSTMT StatementHandle
,
371 SQLUSMALLINT ColumnNumber
, SQLSMALLINT TargetType
,
372 SQLPOINTER TargetValue
, SQLINTEGER BufferLength
,
373 SQLINTEGER
*StrLen_or_Ind
)
377 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
382 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBINDCOL
].func
)
383 (StatementHandle
, ColumnNumber
, TargetType
,
384 TargetValue
, BufferLength
, StrLen_or_Ind
);
388 /*************************************************************************
389 * SQLBindParam [ODBC32.025]
391 SQLRETURN WINAPI
SQLBindParam(SQLHSTMT StatementHandle
,
392 SQLUSMALLINT ParameterNumber
, SQLSMALLINT ValueType
,
393 SQLSMALLINT ParameterType
, SQLUINTEGER LengthPrecision
,
394 SQLSMALLINT ParameterScale
, SQLPOINTER ParameterValue
,
395 SQLINTEGER
*StrLen_or_Ind
)
399 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
404 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBINDPARAM
].func
)
405 (StatementHandle
, ParameterNumber
, ValueType
,
406 ParameterScale
, ParameterValue
, StrLen_or_Ind
);
410 /*************************************************************************
411 * SQLCancel [ODBC32.005]
413 SQLRETURN WINAPI
SQLCancel(SQLHSTMT StatementHandle
)
417 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
422 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCANCEL
].func
) (StatementHandle
);
426 /*************************************************************************
427 * SQLCloseCursor [ODBC32.026]
429 SQLRETURN WINAPI
SQLCloseCursor(SQLHSTMT StatementHandle
)
433 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
438 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCLOSECURSOR
].func
) (StatementHandle
);
442 /*************************************************************************
443 * SQLColAttribute [ODBC32.027]
445 SQLRETURN WINAPI
SQLColAttribute (SQLHSTMT StatementHandle
,
446 SQLUSMALLINT ColumnNumber
, SQLUSMALLINT FieldIdentifier
,
447 SQLPOINTER CharacterAttribute
, SQLSMALLINT BufferLength
,
448 SQLSMALLINT
*StringLength
, SQLPOINTER NumericAttribute
)
452 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
457 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLATTRIBUTE
].func
)
458 (StatementHandle
, ColumnNumber
, FieldIdentifier
,
459 CharacterAttribute
, BufferLength
, StringLength
, NumericAttribute
);
463 /*************************************************************************
464 * SQLColumns [ODBC32.040]
466 SQLRETURN WINAPI
SQLColumns(SQLHSTMT StatementHandle
,
467 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
468 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
469 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
470 SQLCHAR
*ColumnName
, SQLSMALLINT NameLength4
)
474 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
479 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLUMNS
].func
)
480 (StatementHandle
, CatalogName
, NameLength1
,
481 SchemaName
, NameLength2
, TableName
, NameLength3
, ColumnName
, NameLength4
);
485 /*************************************************************************
486 * SQLConnect [ODBC32.007]
488 SQLRETURN WINAPI
SQLConnect(SQLHDBC ConnectionHandle
,
489 SQLCHAR
*ServerName
, SQLSMALLINT NameLength1
,
490 SQLCHAR
*UserName
, SQLSMALLINT NameLength2
,
491 SQLCHAR
*Authentication
, SQLSMALLINT NameLength3
)
495 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
500 strcpy(gProxyHandle
.ServerName
, ServerName
);
501 strcpy(gProxyHandle
.UserName
, UserName
);
503 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCONNECT
].func
)
504 (ConnectionHandle
, ServerName
, NameLength1
,
505 UserName
, NameLength2
, Authentication
, NameLength3
);
509 /*************************************************************************
510 * SQLCopyDesc [ODBC32.028]
512 SQLRETURN WINAPI
SQLCopyDesc(SQLHDESC SourceDescHandle
, SQLHDESC TargetDescHandle
)
516 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
521 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOPYDESC
].func
)
522 (SourceDescHandle
, TargetDescHandle
);
526 /*************************************************************************
527 * SQLDataSources [ODBC32.057]
529 SQLRETURN WINAPI
SQLDataSources(SQLHENV EnvironmentHandle
,
530 SQLUSMALLINT Direction
, SQLCHAR
*ServerName
,
531 SQLSMALLINT BufferLength1
, SQLSMALLINT
*NameLength1
,
532 SQLCHAR
*Description
, SQLSMALLINT BufferLength2
,
533 SQLSMALLINT
*NameLength2
)
537 TRACE("EnvironmentHandle = %p\n", (LPVOID
)EnvironmentHandle
);
539 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
541 ERR("Error: empty dm handle (gProxyHandle.dmHandle == NULL)\n");
545 ret
= (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDATASOURCES
].func
)
546 (EnvironmentHandle
, Direction
, ServerName
,
547 BufferLength1
, NameLength1
, Description
, BufferLength2
, NameLength2
);
551 TRACE("returns: %d \t", ret
);
552 if (*NameLength1
> 0)
553 TRACE("DataSource = %s,", ServerName
);
554 if (*NameLength2
> 0)
555 TRACE(" Description = %s\n", Description
);
562 /*************************************************************************
563 * SQLDescribeCol [ODBC32.008]
565 SQLRETURN WINAPI
SQLDescribeCol(SQLHSTMT StatementHandle
,
566 SQLUSMALLINT ColumnNumber
, SQLCHAR
*ColumnName
,
567 SQLSMALLINT BufferLength
, SQLSMALLINT
*NameLength
,
568 SQLSMALLINT
*DataType
, SQLUINTEGER
*ColumnSize
,
569 SQLSMALLINT
*DecimalDigits
, SQLSMALLINT
*Nullable
)
573 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
578 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDESCRIBECOL
].func
)
579 (StatementHandle
, ColumnNumber
, ColumnName
,
580 BufferLength
, NameLength
, DataType
, ColumnSize
, DecimalDigits
, Nullable
);
584 /*************************************************************************
585 * SQLDisconnect [ODBC32.009]
587 SQLRETURN WINAPI
SQLDisconnect(SQLHDBC ConnectionHandle
)
591 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
596 gProxyHandle
.ServerName
[0] = '\0';
597 gProxyHandle
.UserName
[0] = '\0';
599 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDISCONNECT
].func
) (ConnectionHandle
);
603 /*************************************************************************
604 * SQLEndTran [ODBC32.029]
606 SQLRETURN WINAPI
SQLEndTran(SQLSMALLINT HandleType
, SQLHANDLE Handle
, SQLSMALLINT CompletionType
)
610 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
615 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLENDTRAN
].func
) (HandleType
, Handle
, CompletionType
);
619 /*************************************************************************
620 * SQLError [ODBC32.010]
622 SQLRETURN WINAPI
SQLError(SQLHENV EnvironmentHandle
,
623 SQLHDBC ConnectionHandle
, SQLHSTMT StatementHandle
,
624 SQLCHAR
*Sqlstate
, SQLINTEGER
*NativeError
,
625 SQLCHAR
*MessageText
, SQLSMALLINT BufferLength
,
626 SQLSMALLINT
*TextLength
)
630 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
635 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLERROR
].func
)
636 (EnvironmentHandle
, ConnectionHandle
, StatementHandle
,
637 Sqlstate
, NativeError
, MessageText
, BufferLength
, TextLength
);
641 /*************************************************************************
642 * SQLExecDirect [ODBC32.011]
644 SQLRETURN WINAPI
SQLExecDirect(SQLHSTMT StatementHandle
, SQLCHAR
*StatementText
, SQLINTEGER TextLength
)
648 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
653 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLEXECDIRECT
].func
)
654 (StatementHandle
, StatementText
, TextLength
);
658 /*************************************************************************
659 * SQLExecute [ODBC32.012]
661 SQLRETURN WINAPI
SQLExecute(SQLHSTMT StatementHandle
)
665 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
670 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLEXECUTE
].func
) (StatementHandle
);
674 /*************************************************************************
675 * SQLFetch [ODBC32.013]
677 SQLRETURN WINAPI
SQLFetch(SQLHSTMT StatementHandle
)
681 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
686 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFETCH
].func
) (StatementHandle
);
690 /*************************************************************************
691 * SQLFetchScroll [ODBC32.030]
693 SQLRETURN WINAPI
SQLFetchScroll(SQLHSTMT StatementHandle
, SQLSMALLINT FetchOrientation
, SQLINTEGER FetchOffset
)
697 if (gProxyHandle
.dmHandle
== NULL
)
702 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFETCHSCROLL
].func
)
703 (StatementHandle
, FetchOrientation
, FetchOffset
);
707 /*************************************************************************
708 * SQLFreeConnect [ODBC32.014]
710 SQLRETURN WINAPI
SQLFreeConnect(SQLHDBC ConnectionHandle
)
714 if (gProxyHandle
.dmHandle
== NULL
)
719 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREECONNECT
].func
) (ConnectionHandle
);
723 /*************************************************************************
724 * SQLFreeEnv [ODBC32.015]
726 SQLRETURN WINAPI
SQLFreeEnv(SQLHENV EnvironmentHandle
)
732 if (gProxyHandle
.dmHandle
== NULL
)
737 ret
= (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREEENV
].func
) (EnvironmentHandle
);
739 if (gProxyHandle.dmHandle)
741 wine_dlclose(gProxyHandle.dmHandle,NULL,0);
742 gProxyHandle.dmHandle = NULL;
750 /*************************************************************************
751 * SQLFreeHandle [ODBC32.031]
753 SQLRETURN WINAPI
SQLFreeHandle(SQLSMALLINT HandleType
, SQLHANDLE Handle
)
759 if (gProxyHandle
.dmHandle
== NULL
)
764 ret
= (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREEHANDLE
].func
)
765 (HandleType
, Handle
);
767 if (HandleType
== SQL_HANDLE_ENV
) /* it is time to close the loaded library */
769 if (gProxyHandle
.dmHandle
)
771 wine_dlclose(gProxyHandle
.dmHandle
,NULL
,0);
772 gProxyHandle
.dmHandle
= NULL
;
780 /*************************************************************************
781 * SQLFreeStmt [ODBC32.016]
783 SQLRETURN WINAPI
SQLFreeStmt(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
)
788 if (gProxyHandle
.dmHandle
== NULL
)
793 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREESTMT
].func
)
794 (StatementHandle
, Option
);
798 /*************************************************************************
799 * SQLGetConnectAttr [ODBC32.032]
801 SQLRETURN WINAPI
SQLGetConnectAttr(SQLHDBC ConnectionHandle
,
802 SQLINTEGER Attribute
, SQLPOINTER Value
,
803 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
807 if (gProxyHandle
.dmHandle
== NULL
)
812 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETCONNECTATTR
].func
)
813 (ConnectionHandle
, Attribute
, Value
,
814 BufferLength
, StringLength
);
818 /*************************************************************************
819 * SQLGetConnectOption [ODBC32.042]
821 SQLRETURN WINAPI
SQLGetConnectOption(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLPOINTER Value
)
825 if (gProxyHandle
.dmHandle
== NULL
)
830 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETCONNECTOPTION
].func
)
831 (ConnectionHandle
, Option
, Value
);
835 /*************************************************************************
836 * SQLGetCursorName [ODBC32.017]
838 SQLRETURN WINAPI
SQLGetCursorName(SQLHSTMT StatementHandle
,
839 SQLCHAR
*CursorName
, SQLSMALLINT BufferLength
,
840 SQLSMALLINT
*NameLength
)
844 if (gProxyHandle
.dmHandle
== NULL
)
849 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETCURSORNAME
].func
)
850 (StatementHandle
, CursorName
, BufferLength
, NameLength
);
854 /*************************************************************************
855 * SQLGetData [ODBC32.043]
857 SQLRETURN WINAPI
SQLGetData(SQLHSTMT StatementHandle
,
858 SQLUSMALLINT ColumnNumber
, SQLSMALLINT TargetType
,
859 SQLPOINTER TargetValue
, SQLINTEGER BufferLength
,
860 SQLINTEGER
*StrLen_or_Ind
)
863 if (gProxyHandle
.dmHandle
== NULL
)
868 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDATA
].func
)
869 (StatementHandle
, ColumnNumber
, TargetType
,
870 TargetValue
, BufferLength
, StrLen_or_Ind
);
874 /*************************************************************************
875 * SQLGetDescField [ODBC32.033]
877 SQLRETURN WINAPI
SQLGetDescField(SQLHDESC DescriptorHandle
,
878 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
879 SQLPOINTER Value
, SQLINTEGER BufferLength
,
880 SQLINTEGER
*StringLength
)
883 if (gProxyHandle
.dmHandle
== NULL
)
888 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDESCFIELD
].func
)
889 (DescriptorHandle
, RecNumber
, FieldIdentifier
,
890 Value
, BufferLength
, StringLength
);
894 /*************************************************************************
895 * SQLGetDescRec [ODBC32.034]
897 SQLRETURN WINAPI
SQLGetDescRec(SQLHDESC DescriptorHandle
,
898 SQLSMALLINT RecNumber
, SQLCHAR
*Name
,
899 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
,
900 SQLSMALLINT
*Type
, SQLSMALLINT
*SubType
,
901 SQLINTEGER
*Length
, SQLSMALLINT
*Precision
,
902 SQLSMALLINT
*Scale
, SQLSMALLINT
*Nullable
)
905 if (gProxyHandle
.dmHandle
== NULL
)
910 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDESCREC
].func
)
911 (DescriptorHandle
, RecNumber
, Name
, BufferLength
,
912 StringLength
, Type
, SubType
, Length
, Precision
, Scale
, Nullable
);
916 /*************************************************************************
917 * SQLGetDiagField [ODBC32.035]
919 SQLRETURN WINAPI
SQLGetDiagField(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
920 SQLSMALLINT RecNumber
, SQLSMALLINT DiagIdentifier
,
921 SQLPOINTER DiagInfo
, SQLSMALLINT BufferLength
,
922 SQLSMALLINT
*StringLength
)
925 if (gProxyHandle
.dmHandle
== NULL
)
930 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDIAGFIELD
].func
)
931 (HandleType
, Handle
, RecNumber
, DiagIdentifier
,
932 DiagInfo
, BufferLength
, StringLength
);
936 /*************************************************************************
937 * SQLGetDiagRec [ODBC32.036]
939 SQLRETURN WINAPI
SQLGetDiagRec(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
940 SQLSMALLINT RecNumber
, SQLCHAR
*Sqlstate
,
941 SQLINTEGER
*NativeError
, SQLCHAR
*MessageText
,
942 SQLSMALLINT BufferLength
, SQLSMALLINT
*TextLength
)
945 if (gProxyHandle
.dmHandle
== NULL
)
950 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDIAGREC
].func
)
951 (HandleType
, Handle
, RecNumber
, Sqlstate
, NativeError
,
952 MessageText
, BufferLength
, TextLength
);
956 /*************************************************************************
957 * SQLGetEnvAttr [ODBC32.037]
959 SQLRETURN WINAPI
SQLGetEnvAttr(SQLHENV EnvironmentHandle
,
960 SQLINTEGER Attribute
, SQLPOINTER Value
,
961 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
964 if (gProxyHandle
.dmHandle
== NULL
)
969 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETENVATTR
].func
)
970 (EnvironmentHandle
, Attribute
, Value
, BufferLength
, StringLength
);
974 /*************************************************************************
975 * SQLGetFunctions [ODBC32.044]
977 SQLRETURN WINAPI
SQLGetFunctions(SQLHDBC ConnectionHandle
, SQLUSMALLINT FunctionId
, SQLUSMALLINT
*Supported
)
980 if (gProxyHandle
.dmHandle
== NULL
)
985 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETFUNCTIONS
].func
)
986 (ConnectionHandle
, FunctionId
, Supported
);
990 /*************************************************************************
991 * SQLGetInfo [ODBC32.045]
993 SQLRETURN WINAPI
SQLGetInfo(SQLHDBC ConnectionHandle
,
994 SQLUSMALLINT InfoType
, SQLPOINTER InfoValue
,
995 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
)
998 if (gProxyHandle
.dmHandle
== NULL
)
1003 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETINFO
].func
)
1004 (ConnectionHandle
, InfoType
, InfoValue
, BufferLength
, StringLength
);
1008 /*************************************************************************
1009 * SQLGetStmtAttr [ODBC32.038]
1011 SQLRETURN WINAPI
SQLGetStmtAttr(SQLHSTMT StatementHandle
,
1012 SQLINTEGER Attribute
, SQLPOINTER Value
,
1013 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
1016 if (gProxyHandle
.dmHandle
== NULL
)
1021 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETSTMTATTR
].func
)
1022 (StatementHandle
, Attribute
, Value
, BufferLength
, StringLength
);
1026 /*************************************************************************
1027 * SQLGetStmtOption [ODBC32.046]
1029 SQLRETURN WINAPI
SQLGetStmtOption(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
, SQLPOINTER Value
)
1032 if (gProxyHandle
.dmHandle
== NULL
)
1037 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETSTMTOPTION
].func
)
1038 (StatementHandle
, Option
, Value
);
1042 /*************************************************************************
1043 * SQLGetTypeInfo [ODBC32.047]
1045 SQLRETURN WINAPI
SQLGetTypeInfo(SQLHSTMT StatementHandle
, SQLSMALLINT DataType
)
1048 if (gProxyHandle
.dmHandle
== NULL
)
1053 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETTYPEINFO
].func
)
1054 (StatementHandle
, DataType
);
1058 /*************************************************************************
1059 * SQLNumResultCols [ODBC32.018]
1061 SQLRETURN WINAPI
SQLNumResultCols(SQLHSTMT StatementHandle
, SQLSMALLINT
*ColumnCount
)
1064 if (gProxyHandle
.dmHandle
== NULL
)
1069 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLNUMRESULTCOLS
].func
)
1070 (StatementHandle
, ColumnCount
);
1074 /*************************************************************************
1075 * SQLParamData [ODBC32.048]
1077 SQLRETURN WINAPI
SQLParamData(SQLHSTMT StatementHandle
, SQLPOINTER
*Value
)
1080 if (gProxyHandle
.dmHandle
== NULL
)
1085 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPARAMDATA
].func
)
1086 (StatementHandle
, Value
);
1090 /*************************************************************************
1091 * SQLPrepare [ODBC32.019]
1093 SQLRETURN WINAPI
SQLPrepare(SQLHSTMT StatementHandle
, SQLCHAR
*StatementText
, SQLINTEGER TextLength
)
1096 if (gProxyHandle
.dmHandle
== NULL
)
1101 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPREPARE
].func
)
1102 (StatementHandle
, StatementText
, TextLength
);
1106 /*************************************************************************
1107 * SQLPutData [ODBC32.049]
1109 SQLRETURN WINAPI
SQLPutData(SQLHSTMT StatementHandle
, SQLPOINTER Data
, SQLINTEGER StrLen_or_Ind
)
1112 if (gProxyHandle
.dmHandle
== NULL
)
1117 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPUTDATA
].func
)
1118 (StatementHandle
, Data
, StrLen_or_Ind
);
1122 /*************************************************************************
1123 * SQLRowCount [ODBC32.020]
1125 SQLRETURN WINAPI
SQLRowCount(SQLHSTMT StatementHandle
, SQLINTEGER
*RowCount
)
1128 if (gProxyHandle
.dmHandle
== NULL
)
1133 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLROWCOUNT
].func
)
1134 (StatementHandle
, RowCount
);
1138 /*************************************************************************
1139 * SQLSetConnectAttr [ODBC32.039]
1141 SQLRETURN WINAPI
SQLSetConnectAttr(SQLHDBC ConnectionHandle
, SQLINTEGER Attribute
,
1142 SQLPOINTER Value
, SQLINTEGER StringLength
)
1145 if (gProxyHandle
.dmHandle
== NULL
)
1150 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETCONNECTATTR
].func
)
1151 (ConnectionHandle
, Attribute
, Value
, StringLength
);
1155 /*************************************************************************
1156 * SQLSetConnectOption [ODBC32.050]
1158 SQLRETURN WINAPI
SQLSetConnectOption(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLUINTEGER Value
)
1161 if (gProxyHandle
.dmHandle
== NULL
)
1166 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETCONNECTOPTION
].func
)
1167 (ConnectionHandle
, Option
, Value
);
1171 /*************************************************************************
1172 * SQLSetCursorName [ODBC32.021]
1174 SQLRETURN WINAPI
SQLSetCursorName(SQLHSTMT StatementHandle
, SQLCHAR
*CursorName
, SQLSMALLINT NameLength
)
1177 if (gProxyHandle
.dmHandle
== NULL
)
1182 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETCURSORNAME
].func
)
1183 (StatementHandle
, CursorName
, NameLength
);
1187 /*************************************************************************
1188 * SQLSetDescField [ODBC32.073]
1190 SQLRETURN WINAPI
SQLSetDescField(SQLHDESC DescriptorHandle
,
1191 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
1192 SQLPOINTER Value
, SQLINTEGER BufferLength
)
1195 if (gProxyHandle
.dmHandle
== NULL
)
1200 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETDESCFIELD
].func
)
1201 (DescriptorHandle
, RecNumber
, FieldIdentifier
, Value
, BufferLength
);
1205 /*************************************************************************
1206 * SQLSetDescRec [ODBC32.074]
1208 SQLRETURN WINAPI
SQLSetDescRec(SQLHDESC DescriptorHandle
,
1209 SQLSMALLINT RecNumber
, SQLSMALLINT Type
,
1210 SQLSMALLINT SubType
, SQLINTEGER Length
,
1211 SQLSMALLINT Precision
, SQLSMALLINT Scale
,
1212 SQLPOINTER Data
, SQLINTEGER
*StringLength
,
1213 SQLINTEGER
*Indicator
)
1216 if (gProxyHandle
.dmHandle
== NULL
)
1221 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETDESCREC
].func
)
1222 (DescriptorHandle
, RecNumber
, Type
, SubType
, Length
,
1223 Precision
, Scale
, Data
, StringLength
, Indicator
);
1227 /*************************************************************************
1228 * SQLSetEnvAttr [ODBC32.075]
1230 SQLRETURN WINAPI
SQLSetEnvAttr(SQLHENV EnvironmentHandle
,
1231 SQLINTEGER Attribute
, SQLPOINTER Value
,
1232 SQLINTEGER StringLength
)
1235 if (gProxyHandle
.dmHandle
== NULL
)
1240 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETENVATTR
].func
)
1241 (EnvironmentHandle
, Attribute
, Value
, StringLength
);
1245 /*************************************************************************
1246 * SQLSetParam [ODBC32.022]
1248 SQLRETURN WINAPI
SQLSetParam(SQLHSTMT StatementHandle
,
1249 SQLUSMALLINT ParameterNumber
, SQLSMALLINT ValueType
,
1250 SQLSMALLINT ParameterType
, SQLUINTEGER LengthPrecision
,
1251 SQLSMALLINT ParameterScale
, SQLPOINTER ParameterValue
,
1252 SQLINTEGER
*StrLen_or_Ind
)
1255 if (gProxyHandle
.dmHandle
== NULL
)
1260 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETPARAM
].func
)
1261 (StatementHandle
, ParameterNumber
, ValueType
, ParameterType
, LengthPrecision
,
1262 ParameterScale
, ParameterValue
, StrLen_or_Ind
);
1266 /*************************************************************************
1267 * SQLSetStmtAttr [ODBC32.076]
1269 SQLRETURN WINAPI
SQLSetStmtAttr(SQLHSTMT StatementHandle
,
1270 SQLINTEGER Attribute
, SQLPOINTER Value
,
1271 SQLINTEGER StringLength
)
1274 if (gProxyHandle
.dmHandle
== NULL
)
1279 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETSTMTATTR
].func
)
1280 (StatementHandle
, Attribute
, Value
, StringLength
);
1284 /*************************************************************************
1285 * SQLSetStmtOption [ODBC32.051]
1287 SQLRETURN WINAPI
SQLSetStmtOption(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
, SQLUINTEGER Value
)
1290 if (gProxyHandle
.dmHandle
== NULL
)
1295 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETSTMTOPTION
].func
)
1296 (StatementHandle
, Option
, Value
);
1300 /*************************************************************************
1301 * SQLSpecialColumns [ODBC32.052]
1303 SQLRETURN WINAPI
SQLSpecialColumns(SQLHSTMT StatementHandle
,
1304 SQLUSMALLINT IdentifierType
, SQLCHAR
*CatalogName
,
1305 SQLSMALLINT NameLength1
, SQLCHAR
*SchemaName
,
1306 SQLSMALLINT NameLength2
, SQLCHAR
*TableName
,
1307 SQLSMALLINT NameLength3
, SQLUSMALLINT Scope
,
1308 SQLUSMALLINT Nullable
)
1310 if (gProxyHandle
.dmHandle
== NULL
)
1315 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSPECIALCOLUMNS
].func
)
1316 (StatementHandle
, IdentifierType
, CatalogName
, NameLength1
, SchemaName
,
1317 NameLength2
, TableName
, NameLength3
, Scope
, Nullable
);
1321 /*************************************************************************
1322 * SQLStatistics [ODBC32.053]
1324 SQLRETURN WINAPI
SQLStatistics(SQLHSTMT StatementHandle
,
1325 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
1326 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
1327 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
1328 SQLUSMALLINT Unique
, SQLUSMALLINT Reserved
)
1331 if (gProxyHandle
.dmHandle
== NULL
)
1336 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSTATISTICS
].func
)
1337 (StatementHandle
, CatalogName
, NameLength1
, SchemaName
, NameLength2
,
1338 TableName
, NameLength3
, Unique
, Reserved
);
1342 /*************************************************************************
1343 * SQLTables [ODBC32.054]
1345 SQLRETURN WINAPI
SQLTables(SQLHSTMT StatementHandle
,
1346 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
1347 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
1348 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
1349 SQLCHAR
*TableType
, SQLSMALLINT NameLength4
)
1352 if (gProxyHandle
.dmHandle
== NULL
)
1357 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLTABLES
].func
)
1358 (StatementHandle
, CatalogName
, NameLength1
,
1359 SchemaName
, NameLength2
, TableName
, NameLength3
, TableType
, NameLength4
);
1363 /*************************************************************************
1364 * SQLTransact [ODBC32.023]
1366 SQLRETURN WINAPI
SQLTransact(SQLHENV EnvironmentHandle
, SQLHDBC ConnectionHandle
,
1367 SQLUSMALLINT CompletionType
)
1370 if (gProxyHandle
.dmHandle
== NULL
)
1375 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLTRANSACT
].func
)
1376 (EnvironmentHandle
, ConnectionHandle
, CompletionType
);
1380 /*************************************************************************
1381 * SQLBrowseConnect [ODBC32.055]
1383 SQLRETURN WINAPI
SQLBrowseConnect(
1385 SQLCHAR
*szConnStrIn
,
1386 SQLSMALLINT cbConnStrIn
,
1387 SQLCHAR
*szConnStrOut
,
1388 SQLSMALLINT cbConnStrOutMax
,
1389 SQLSMALLINT
*pcbConnStrOut
)
1392 if (gProxyHandle
.dmHandle
== NULL
)
1397 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBROWSECONNECT
].func
)
1398 (hdbc
, szConnStrIn
, cbConnStrIn
, szConnStrOut
, cbConnStrOutMax
, pcbConnStrOut
);
1402 /*************************************************************************
1403 * SQLBulkOperations [ODBC32.078]
1405 SQLRETURN WINAPI
SQLBulkOperations(
1406 SQLHSTMT StatementHandle
,
1407 SQLSMALLINT Operation
)
1410 if (gProxyHandle
.dmHandle
== NULL
)
1415 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBULKOPERATIONS
].func
)
1416 (StatementHandle
, Operation
);
1420 /*************************************************************************
1421 * SQLColAttributes [ODBC32.006]
1423 SQLRETURN WINAPI
SQLColAttributes(
1426 SQLUSMALLINT fDescType
,
1428 SQLSMALLINT cbDescMax
,
1429 SQLSMALLINT
*pcbDesc
,
1433 if (gProxyHandle
.dmHandle
== NULL
)
1438 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLATTRIBUTES
].func
)
1439 (hstmt
, icol
, fDescType
, rgbDesc
, cbDescMax
, pcbDesc
, pfDesc
);
1443 /*************************************************************************
1444 * SQLColumnPrivileges [ODBC32.056]
1446 SQLRETURN WINAPI
SQLColumnPrivileges(
1448 SQLCHAR
*szCatalogName
,
1449 SQLSMALLINT cbCatalogName
,
1450 SQLCHAR
*szSchemaName
,
1451 SQLSMALLINT cbSchemaName
,
1452 SQLCHAR
*szTableName
,
1453 SQLSMALLINT cbTableName
,
1454 SQLCHAR
*szColumnName
,
1455 SQLSMALLINT cbColumnName
)
1458 if (gProxyHandle
.dmHandle
== NULL
)
1463 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES
].func
)
1464 (hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1465 szTableName
, cbTableName
, szColumnName
, cbColumnName
);
1469 /*************************************************************************
1470 * SQLDescribeParam [ODBC32.058]
1472 SQLRETURN WINAPI
SQLDescribeParam(
1475 SQLSMALLINT
*pfSqlType
,
1476 SQLUINTEGER
*pcbParamDef
,
1477 SQLSMALLINT
*pibScale
,
1478 SQLSMALLINT
*pfNullable
)
1481 if (gProxyHandle
.dmHandle
== NULL
)
1486 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDESCRIBEPARAM
].func
)
1487 (hstmt
, ipar
, pfSqlType
, pcbParamDef
, pibScale
, pfNullable
);
1491 /*************************************************************************
1492 * SQLExtendedFetch [ODBC32.059]
1494 SQLRETURN WINAPI
SQLExtendedFetch(
1496 SQLUSMALLINT fFetchType
,
1499 SQLUSMALLINT
*rgfRowStatus
)
1502 if (gProxyHandle
.dmHandle
== NULL
)
1507 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLEXTENDEDFETCH
].func
)
1508 (hstmt
, fFetchType
, irow
, pcrow
, rgfRowStatus
);
1512 /*************************************************************************
1513 * SQLForeignKeys [ODBC32.060]
1515 SQLRETURN WINAPI
SQLForeignKeys(
1517 SQLCHAR
*szPkCatalogName
,
1518 SQLSMALLINT cbPkCatalogName
,
1519 SQLCHAR
*szPkSchemaName
,
1520 SQLSMALLINT cbPkSchemaName
,
1521 SQLCHAR
*szPkTableName
,
1522 SQLSMALLINT cbPkTableName
,
1523 SQLCHAR
*szFkCatalogName
,
1524 SQLSMALLINT cbFkCatalogName
,
1525 SQLCHAR
*szFkSchemaName
,
1526 SQLSMALLINT cbFkSchemaName
,
1527 SQLCHAR
*szFkTableName
,
1528 SQLSMALLINT cbFkTableName
)
1531 if (gProxyHandle
.dmHandle
== NULL
)
1536 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFOREIGNKEYS
].func
)
1537 (hstmt
, szPkCatalogName
, cbPkCatalogName
, szPkSchemaName
, cbPkSchemaName
,
1538 szPkTableName
, cbPkTableName
, szFkCatalogName
, cbFkCatalogName
, szFkSchemaName
,
1539 cbFkSchemaName
, szFkTableName
, cbFkTableName
);
1543 /*************************************************************************
1544 * SQLMoreResults [ODBC32.061]
1546 SQLRETURN WINAPI
SQLMoreResults(SQLHSTMT hstmt
)
1549 if (gProxyHandle
.dmHandle
== NULL
)
1554 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLMORERESULTS
].func
) (hstmt
);
1558 /*************************************************************************
1559 * SQLNativeSql [ODBC32.062]
1561 SQLRETURN WINAPI
SQLNativeSql(
1563 SQLCHAR
*szSqlStrIn
,
1564 SQLINTEGER cbSqlStrIn
,
1566 SQLINTEGER cbSqlStrMax
,
1567 SQLINTEGER
*pcbSqlStr
)
1570 if (gProxyHandle
.dmHandle
== NULL
)
1575 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLNATIVESQL
].func
)
1576 (hdbc
, szSqlStrIn
, cbSqlStrIn
, szSqlStr
, cbSqlStrMax
, pcbSqlStr
);
1580 /*************************************************************************
1581 * SQLNumParams [ODBC32.063]
1583 SQLRETURN WINAPI
SQLNumParams(
1588 if (gProxyHandle
.dmHandle
== NULL
)
1593 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLNUMPARAMS
].func
) (hstmt
, pcpar
);
1597 /*************************************************************************
1598 * SQLParamOptions [ODBC32.064]
1600 SQLRETURN WINAPI
SQLParamOptions(
1606 if (gProxyHandle
.dmHandle
== NULL
)
1611 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPARAMOPTIONS
].func
) (hstmt
, crow
, pirow
);
1615 /*************************************************************************
1616 * SQLPrimaryKeys [ODBC32.065]
1618 SQLRETURN WINAPI
SQLPrimaryKeys(
1620 SQLCHAR
*szCatalogName
,
1621 SQLSMALLINT cbCatalogName
,
1622 SQLCHAR
*szSchemaName
,
1623 SQLSMALLINT cbSchemaName
,
1624 SQLCHAR
*szTableName
,
1625 SQLSMALLINT cbTableName
)
1628 if (gProxyHandle
.dmHandle
== NULL
)
1633 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPRIMARYKEYS
].func
)
1634 (hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1635 szTableName
, cbTableName
);
1639 /*************************************************************************
1640 * SQLProcedureColumns [ODBC32.066]
1642 SQLRETURN WINAPI
SQLProcedureColumns(
1644 SQLCHAR
*szCatalogName
,
1645 SQLSMALLINT cbCatalogName
,
1646 SQLCHAR
*szSchemaName
,
1647 SQLSMALLINT cbSchemaName
,
1648 SQLCHAR
*szProcName
,
1649 SQLSMALLINT cbProcName
,
1650 SQLCHAR
*szColumnName
,
1651 SQLSMALLINT cbColumnName
)
1654 if (gProxyHandle
.dmHandle
== NULL
)
1659 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPROCEDURECOLUMNS
].func
)
1660 (hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1661 szProcName
, cbProcName
, szColumnName
, cbColumnName
);
1665 /*************************************************************************
1666 * SQLProcedures [ODBC32.067]
1668 SQLRETURN WINAPI
SQLProcedures(
1670 SQLCHAR
*szCatalogName
,
1671 SQLSMALLINT cbCatalogName
,
1672 SQLCHAR
*szSchemaName
,
1673 SQLSMALLINT cbSchemaName
,
1674 SQLCHAR
*szProcName
,
1675 SQLSMALLINT cbProcName
)
1678 if (gProxyHandle
.dmHandle
== NULL
)
1683 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPROCEDURES
].func
)
1684 (hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1685 szProcName
, cbProcName
);
1689 /*************************************************************************
1690 * SQLSetPos [ODBC32.068]
1692 SQLRETURN WINAPI
SQLSetPos(
1695 SQLUSMALLINT fOption
,
1699 if (gProxyHandle
.dmHandle
== NULL
)
1704 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETPOS
].func
)
1705 (hstmt
, irow
, fOption
, fLock
);
1709 /*************************************************************************
1710 * SQLTablePrivileges [ODBC32.070]
1712 SQLRETURN WINAPI
SQLTablePrivileges(
1714 SQLCHAR
*szCatalogName
,
1715 SQLSMALLINT cbCatalogName
,
1716 SQLCHAR
*szSchemaName
,
1717 SQLSMALLINT cbSchemaName
,
1718 SQLCHAR
*szTableName
,
1719 SQLSMALLINT cbTableName
)
1722 if (gProxyHandle
.dmHandle
== NULL
)
1727 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLTABLEPRIVILEGES
].func
)
1728 (hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1729 szTableName
, cbTableName
);
1733 /*************************************************************************
1734 * SQLDrivers [ODBC32.071]
1736 SQLRETURN WINAPI
SQLDrivers(
1738 SQLUSMALLINT fDirection
,
1739 SQLCHAR
*szDriverDesc
,
1740 SQLSMALLINT cbDriverDescMax
,
1741 SQLSMALLINT
*pcbDriverDesc
,
1742 SQLCHAR
*szDriverAttributes
,
1743 SQLSMALLINT cbDriverAttrMax
,
1744 SQLSMALLINT
*pcbDriverAttr
)
1747 if (gProxyHandle
.dmHandle
== NULL
)
1752 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDRIVERS
].func
)
1753 (henv
, fDirection
, szDriverDesc
, cbDriverDescMax
, pcbDriverDesc
,
1754 szDriverAttributes
, cbDriverAttrMax
, pcbDriverAttr
);
1758 /*************************************************************************
1759 * SQLBindParameter [ODBC32.072]
1761 SQLRETURN WINAPI
SQLBindParameter(
1764 SQLSMALLINT fParamType
,
1766 SQLSMALLINT fSqlType
,
1767 SQLUINTEGER cbColDef
,
1768 SQLSMALLINT ibScale
,
1769 SQLPOINTER rgbValue
,
1770 SQLINTEGER cbValueMax
,
1771 SQLINTEGER
*pcbValue
)
1774 if (gProxyHandle
.dmHandle
== NULL
)
1779 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBINDPARAMETER
].func
)
1780 (hstmt
, ipar
, fParamType
, fCType
, fSqlType
, cbColDef
, ibScale
,
1781 rgbValue
, cbValueMax
, pcbValue
);
1785 /*************************************************************************
1786 * SQLDriverConnect [ODBC32.041]
1788 SQLRETURN WINAPI
SQLDriverConnect(
1791 SQLCHAR
*conn_str_in
,
1792 SQLSMALLINT len_conn_str_in
,
1793 SQLCHAR
*conn_str_out
,
1794 SQLSMALLINT conn_str_out_max
,
1795 SQLSMALLINT
*ptr_conn_str_out
,
1796 SQLUSMALLINT driver_completion
)
1799 if (gProxyHandle
.dmHandle
== NULL
)
1804 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDRIVERCONNECT
].func
)
1805 (hdbc
, hwnd
, conn_str_in
, len_conn_str_in
, conn_str_out
,
1806 conn_str_out_max
, ptr_conn_str_out
, driver_completion
);
1810 /*************************************************************************
1811 * SQLSetScrollOptions [ODBC32.069]
1813 SQLRETURN WINAPI
SQLSetScrollOptions(
1814 SQLHSTMT statement_handle
,
1815 SQLUSMALLINT f_concurrency
,
1816 SQLINTEGER crow_keyset
,
1817 SQLUSMALLINT crow_rowset
)
1820 if (gProxyHandle
.dmHandle
== NULL
)
1825 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETSCROLLOPTIONS
].func
)
1826 (statement_handle
, f_concurrency
, crow_keyset
, crow_rowset
);