4 * Copyright 1999 Xiang Li, Corel Corporation
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 * Proxy ODBC driver manager. This manager delegates all ODBC
22 * calls to a real ODBC driver manager named by the environment
23 * variable LIB_ODBC_DRIVER_MANAGER, or to libodbc.so if the
24 * variable is not set.
29 #include "wine/port.h"
39 #include "wine/debug.h"
40 //#include "wine/library.h"
48 #include "proxyodbc.h"
50 static BOOL
ODBC_LoadDriverManager(void);
51 static BOOL
ODBC_LoadDMFunctions(void);
53 WINE_DEFAULT_DEBUG_CHANNEL(odbc
);
55 static const DM_FUNC template_func
[] =
57 /* 00 */ { SQL_API_SQLALLOCCONNECT
, "SQLAllocConnect", SQLAllocConnect
, NULL
},
58 /* 01 */ { SQL_API_SQLALLOCENV
, "SQLAllocEnv", SQLAllocEnv
, NULL
},
59 /* 02 */ { SQL_API_SQLALLOCHANDLE
, "SQLAllocHandle", SQLAllocHandle
, NULL
},
60 /* 03 */ { SQL_API_SQLALLOCSTMT
, "SQLAllocStmt", SQLAllocStmt
, NULL
},
61 /* 04 */ { SQL_API_SQLALLOCHANDLESTD
, "SQLAllocHandleStd", SQLAllocHandleStd
, NULL
},
62 /* 05 */ { SQL_API_SQLBINDCOL
, "SQLBindCol", SQLBindCol
, NULL
},
63 /* 06 */ { SQL_API_SQLBINDPARAM
, "SQLBindParam", SQLBindParam
, NULL
},
64 /* 07 */ { SQL_API_SQLBINDPARAMETER
, "SQLBindParameter", SQLBindParameter
, NULL
},
65 /* 08 */ { SQL_API_SQLBROWSECONNECT
, "SQLBrowseConnect", SQLBrowseConnect
, NULL
},
66 /* 09 */ { SQL_API_SQLBULKOPERATIONS
, "SQLBulkOperations", SQLBulkOperations
, NULL
},
67 /* 10 */ { SQL_API_SQLCANCEL
, "SQLCancel", SQLCancel
, NULL
},
68 /* 11 */ { SQL_API_SQLCLOSECURSOR
, "SQLCloseCursor", SQLCloseCursor
, NULL
},
69 /* 12 */ { SQL_API_SQLCOLATTRIBUTE
, "SQLColAttribute", SQLColAttribute
, NULL
},
70 /* 13 */ { SQL_API_SQLCOLATTRIBUTES
, "SQLColAttributes", SQLColAttributes
, NULL
},
71 /* 14 */ { SQL_API_SQLCOLUMNPRIVILEGES
, "SQLColumnPrivileges", SQLColumnPrivileges
, NULL
},
72 /* 15 */ { SQL_API_SQLCOLUMNS
, "SQLColumns", SQLColumns
, NULL
},
73 /* 16 */ { SQL_API_SQLCONNECT
, "SQLConnect", SQLConnect
, NULL
},
74 /* 17 */ { SQL_API_SQLCOPYDESC
, "SQLCopyDesc", SQLCopyDesc
, NULL
},
75 /* 18 */ { SQL_API_SQLDATASOURCES
, "SQLDataSources", SQLDataSources
, NULL
},
76 /* 19 */ { SQL_API_SQLDESCRIBECOL
, "SQLDescribeCol", SQLDescribeCol
, NULL
},
77 /* 20 */ { SQL_API_SQLDESCRIBEPARAM
, "SQLDescribeParam", SQLDescribeParam
, NULL
},
78 /* 21 */ { SQL_API_SQLDISCONNECT
, "SQLDisconnect", SQLDisconnect
, NULL
},
79 /* 22 */ { SQL_API_SQLDRIVERCONNECT
, "SQLDriverConnect", SQLDriverConnect
, NULL
},
80 /* 23 */ { SQL_API_SQLDRIVERS
, "SQLDrivers", SQLDrivers
, NULL
},
81 /* 24 */ { SQL_API_SQLENDTRAN
, "SQLEndTran", SQLEndTran
, NULL
},
82 /* 25 */ { SQL_API_SQLERROR
, "SQLError", SQLError
, NULL
},
83 /* 26 */ { SQL_API_SQLEXECDIRECT
, "SQLExecDirect", SQLExecDirect
, NULL
},
84 /* 27 */ { SQL_API_SQLEXECUTE
, "SQLExecute", SQLExecute
, NULL
},
85 /* 28 */ { SQL_API_SQLEXTENDEDFETCH
, "SQLExtendedFetch", SQLExtendedFetch
, NULL
},
86 /* 29 */ { SQL_API_SQLFETCH
, "SQLFetch", SQLFetch
, NULL
},
87 /* 30 */ { SQL_API_SQLFETCHSCROLL
, "SQLFetchScroll", SQLFetchScroll
, NULL
},
88 /* 31 */ { SQL_API_SQLFOREIGNKEYS
, "SQLForeignKeys", SQLForeignKeys
, NULL
},
89 /* 32 */ { SQL_API_SQLFREEENV
, "SQLFreeEnv", SQLFreeEnv
, NULL
},
90 /* 33 */ { SQL_API_SQLFREEHANDLE
, "SQLFreeHandle", SQLFreeHandle
, NULL
},
91 /* 34 */ { SQL_API_SQLFREESTMT
, "SQLFreeStmt", SQLFreeStmt
, NULL
},
92 /* 35 */ { SQL_API_SQLFREECONNECT
, "SQLFreeConnect", SQLFreeConnect
, NULL
},
93 /* 36 */ { SQL_API_SQLGETCONNECTATTR
, "SQLGetConnectAttr", SQLGetConnectAttr
, NULL
},
94 /* 37 */ { SQL_API_SQLGETCONNECTOPTION
, "SQLGetConnectOption", SQLGetConnectOption
, NULL
},
95 /* 38 */ { SQL_API_SQLGETCURSORNAME
, "SQLGetCursorName", SQLGetCursorName
, NULL
},
96 /* 39 */ { SQL_API_SQLGETDATA
, "SQLGetData", SQLGetData
, NULL
},
97 /* 40 */ { SQL_API_SQLGETDESCFIELD
, "SQLGetDescField", SQLGetDescField
, NULL
},
98 /* 41 */ { SQL_API_SQLGETDESCREC
, "SQLGetDescRec", SQLGetDescRec
, NULL
},
99 /* 42 */ { SQL_API_SQLGETDIAGFIELD
, "SQLGetDiagField", SQLGetDiagField
, NULL
},
100 /* 43 */ { SQL_API_SQLGETENVATTR
, "SQLGetEnvAttr", SQLGetEnvAttr
, NULL
},
101 /* 44 */ { SQL_API_SQLGETFUNCTIONS
, "SQLGetFunctions", SQLGetFunctions
, NULL
},
102 /* 45 */ { SQL_API_SQLGETINFO
, "SQLGetInfo", SQLGetInfo
, NULL
},
103 /* 46 */ { SQL_API_SQLGETSTMTATTR
, "SQLGetStmtAttr", SQLGetStmtAttr
, NULL
},
104 /* 47 */ { SQL_API_SQLGETSTMTOPTION
, "SQLGetStmtOption", SQLGetStmtOption
, NULL
},
105 /* 48 */ { SQL_API_SQLGETTYPEINFO
, "SQLGetTypeInfo", SQLGetTypeInfo
, NULL
},
106 /* 49 */ { SQL_API_SQLMORERESULTS
, "SQLMoreResults", SQLMoreResults
, NULL
},
107 /* 50 */ { SQL_API_SQLNATIVESQL
, "SQLNativeSql", SQLNativeSql
, NULL
},
108 /* 51 */ { SQL_API_SQLNUMPARAMS
, "SQLNumParams", SQLNumParams
, NULL
},
109 /* 52 */ { SQL_API_SQLNUMRESULTCOLS
, "SQLNumResultCols", SQLNumResultCols
, NULL
},
110 /* 53 */ { SQL_API_SQLPARAMDATA
, "SQLParamData", SQLParamData
, NULL
},
111 /* 54 */ { SQL_API_SQLPARAMOPTIONS
, "SQLParamOptions", SQLParamOptions
, NULL
},
112 /* 55 */ { SQL_API_SQLPREPARE
, "SQLPrepare", SQLPrepare
, NULL
},
113 /* 56 */ { SQL_API_SQLPRIMARYKEYS
, "SQLPrimaryKeys", SQLPrimaryKeys
, NULL
},
114 /* 57 */ { SQL_API_SQLPROCEDURECOLUMNS
, "SQLProcedureColumns", SQLProcedureColumns
, NULL
},
115 /* 58 */ { SQL_API_SQLPROCEDURES
, "SQLProcedures", SQLProcedures
, NULL
},
116 /* 59 */ { SQL_API_SQLPUTDATA
, "SQLPutData", SQLPutData
, NULL
},
117 /* 60 */ { SQL_API_SQLROWCOUNT
, "SQLRowCount", SQLRowCount
, NULL
},
118 /* 61 */ { SQL_API_SQLSETCONNECTATTR
, "SQLSetConnectAttr", SQLSetConnectAttr
, NULL
},
119 /* 62 */ { SQL_API_SQLSETCONNECTOPTION
, "SQLSetConnectOption", SQLSetConnectOption
, NULL
},
120 /* 63 */ { SQL_API_SQLSETCURSORNAME
, "SQLSetCursorName", SQLSetCursorName
, NULL
},
121 /* 64 */ { SQL_API_SQLSETDESCFIELD
, "SQLSetDescField", SQLSetDescField
, NULL
},
122 /* 65 */ { SQL_API_SQLSETDESCREC
, "SQLSetDescRec", SQLSetDescRec
, NULL
},
123 /* 66 */ { SQL_API_SQLSETENVATTR
, "SQLSetEnvAttr", SQLSetEnvAttr
, NULL
},
124 /* 67 */ { SQL_API_SQLSETPARAM
, "SQLSetParam", SQLSetParam
, NULL
},
125 /* 68 */ { SQL_API_SQLSETPOS
, "SQLSetPos", SQLSetPos
, NULL
},
126 /* 69 */ { SQL_API_SQLSETSCROLLOPTIONS
, "SQLSetScrollOptions", SQLSetScrollOptions
, NULL
},
127 /* 70 */ { SQL_API_SQLSETSTMTATTR
, "SQLSetStmtAttr", SQLSetStmtAttr
, NULL
},
128 /* 71 */ { SQL_API_SQLSETSTMTOPTION
, "SQLSetStmtOption", SQLSetStmtOption
, NULL
},
129 /* 72 */ { SQL_API_SQLSPECIALCOLUMNS
, "SQLSpecialColumns", SQLSpecialColumns
, NULL
},
130 /* 73 */ { SQL_API_SQLSTATISTICS
, "SQLStatistics", SQLStatistics
, NULL
},
131 /* 74 */ { SQL_API_SQLTABLEPRIVILEGES
, "SQLTablePrivileges", SQLTablePrivileges
, NULL
},
132 /* 75 */ { SQL_API_SQLTABLES
, "SQLTables", SQLTables
, NULL
},
133 /* 76 */ { SQL_API_SQLTRANSACT
, "SQLTransact", SQLTransact
, NULL
},
134 /* 77 */ { SQL_API_SQLGETDIAGREC
, "SQLGetDiagRec", SQLGetDiagRec
, NULL
},
137 static PROXYHANDLE gProxyHandle
;
139 /* What is the difference between these two (dmHandle cf READY_AND_dmHandle)? When does one use one and when the other? */
141 #define CHECK_dmHandle() \
143 if (gProxyHandle.dmHandle == NULL) \
145 TRACE ("Not ready\n"); \
150 #define CHECK_READY_AND_dmHandle() \
152 if (!gProxyHandle.bFunctionReady || gProxyHandle.dmHandle == NULL) \
154 TRACE ("Not ready\n"); \
159 SQLRETURN
SQLDummyFunc()
161 TRACE("SQLDummyFunc: \n");
165 /***********************************************************************
166 * DllMain [Internal] Initializes the internal 'ODBC32.DLL'.
169 * hinstDLL [I] handle to the DLL's instance
171 * lpvReserved [I] reserved, must be NULL
178 BOOL WINAPI
DllMain(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
181 TRACE("Initializing or Finalizing proxy ODBC: %p,%lx,%p\n", hinstDLL
, fdwReason
, lpvReserved
);
183 if (fdwReason
== DLL_PROCESS_ATTACH
)
185 TRACE("Loading ODBC...\n");
186 DisableThreadLibraryCalls(hinstDLL
);
187 if (ODBC_LoadDriverManager())
188 ODBC_LoadDMFunctions();
190 else if (fdwReason
== DLL_PROCESS_DETACH
)
192 TRACE("Unloading ODBC...\n");
193 if (gProxyHandle
.bFunctionReady
)
195 for ( i
= 0; i
< NUM_SQLFUNC
; i
++ )
197 gProxyHandle
.functions
[i
].func
= SQLDummyFunc
;
201 if (gProxyHandle
.dmHandle
)
203 wine_dlclose(gProxyHandle
.dmHandle
,NULL
,0);
204 gProxyHandle
.dmHandle
= NULL
;
213 /***********************************************************************
214 * ODBC_LoadDriverManager [Internal] Load ODBC library.
223 static BOOL
ODBC_LoadDriverManager(void)
225 const char *s
= getenv("LIB_ODBC_DRIVER_MANAGER");
232 gProxyHandle
.bFunctionReady
= FALSE
;
233 gProxyHandle
.nErrorType
= ERROR_LIBRARY_NOT_FOUND
;
235 if (s
!= NULL
&& strlen (s
) >= sizeof(gProxyHandle
.dmLibName
))
237 ERR("Driver name too long (%s)\n",s
);
240 if (s
== NULL
|| strlen(s
) == 0)
242 strcpy(gProxyHandle
.dmLibName
, s
);
244 gProxyHandle
.dmHandle
= wine_dlopen(gProxyHandle
.dmLibName
, RTLD_LAZY
, error
, sizeof(error
));
246 if (gProxyHandle
.dmHandle
== NULL
) /* fail to load unixODBC driver manager */
248 WARN("failed to open library %s: %s\n", gProxyHandle
.dmLibName
, error
);
249 gProxyHandle
.dmLibName
[0] = '\0';
250 gProxyHandle
.nErrorType
= ERROR_LIBRARY_NOT_FOUND
;
255 gProxyHandle
.nErrorType
= ERROR_FREE
;
264 /***********************************************************************
265 * ODBC_LoadDMFunctions [Internal] Populate function table.
274 static BOOL
ODBC_LoadDMFunctions(void)
281 if (gProxyHandle
.dmHandle
== NULL
)
284 for ( i
= 0; i
< NUM_SQLFUNC
; i
++ )
286 gProxyHandle
.functions
[i
] = template_func
[i
];
287 gProxyHandle
.functions
[i
].func
= wine_dlsym(gProxyHandle
.dmHandle
,
288 gProxyHandle
.functions
[i
].name
, error
, sizeof(error
));
292 ERR("Failed to load function %s\n",gProxyHandle
.functions
[i
].name
);
293 gProxyHandle
.functions
[i
].func
= SQLDummyFunc
;
297 gProxyHandle
.bFunctionReady
= TRUE
;
303 /*************************************************************************
304 * SQLAllocConnect [ODBC32.001]
306 SQLRETURN WINAPI
SQLAllocConnect(SQLHENV EnvironmentHandle
, SQLHDBC
*ConnectionHandle
)
309 TRACE("Env=%lx\n",EnvironmentHandle
);
311 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
313 *ConnectionHandle
= SQL_NULL_HDBC
;
314 TRACE("Not ready\n");
318 assert(gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCCONNECT
].func
);
319 ret
=(gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCCONNECT
].func
)
320 (EnvironmentHandle
, ConnectionHandle
);
321 TRACE("Returns ret=%d, Handle %lx\n",ret
, *ConnectionHandle
);
326 /*************************************************************************
327 * SQLAllocEnv [ODBC32.002]
329 SQLRETURN WINAPI
SQLAllocEnv(SQLHENV
*EnvironmentHandle
)
334 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
336 *EnvironmentHandle
= SQL_NULL_HENV
;
337 TRACE("Not ready\n");
341 assert(gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCENV
].func
);
342 ret
=(gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCENV
].func
) (EnvironmentHandle
);
343 TRACE("Returns ret=%d, Env=%lx\n",ret
, *EnvironmentHandle
);
348 /*************************************************************************
349 * SQLAllocHandle [ODBC32.024]
351 SQLRETURN WINAPI
SQLAllocHandle(SQLSMALLINT HandleType
, SQLHANDLE InputHandle
, SQLHANDLE
*OutputHandle
)
354 TRACE("(Type=%d, Handle=%lx)\n",HandleType
,InputHandle
);
356 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
358 if (gProxyHandle
.nErrorType
== ERROR_LIBRARY_NOT_FOUND
)
359 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
361 if (HandleType
== SQL_HANDLE_ENV
)
362 *OutputHandle
= SQL_NULL_HENV
;
363 else if (HandleType
== SQL_HANDLE_DBC
)
364 *OutputHandle
= SQL_NULL_HDBC
;
365 else if (HandleType
== SQL_HANDLE_STMT
)
366 *OutputHandle
= SQL_NULL_HSTMT
;
367 else if (HandleType
== SQL_HANDLE_DESC
)
368 *OutputHandle
= SQL_NULL_HDESC
;
370 TRACE ("Not ready\n");
374 assert(gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCHANDLE
].func
);
375 ret
=(gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCHANDLE
].func
)
376 (HandleType
, InputHandle
, OutputHandle
);
377 TRACE("Returns ret=%d, Handle=%lx\n",ret
, *OutputHandle
);
382 /*************************************************************************
383 * SQLAllocStmt [ODBC32.003]
385 SQLRETURN WINAPI
SQLAllocStmt(SQLHDBC ConnectionHandle
, SQLHSTMT
*StatementHandle
)
389 TRACE("(Connection=%lx)\n",ConnectionHandle
);
391 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
393 *StatementHandle
= SQL_NULL_HSTMT
;
394 TRACE ("Not ready\n");
398 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCSTMT
].func
);
399 ret
=(gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCSTMT
].func
)
400 (ConnectionHandle
, StatementHandle
);
401 TRACE ("Returns ret=%d, Handle=%lx\n", ret
, *StatementHandle
);
406 /*************************************************************************
407 * SQLAllocHandleStd [ODBC32.077]
409 SQLRETURN WINAPI
SQLAllocHandleStd( SQLSMALLINT HandleType
,
410 SQLHANDLE InputHandle
, SQLHANDLE
*OutputHandle
)
412 TRACE("ProxyODBC: SQLAllocHandelStd.\n");
414 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
416 if (gProxyHandle
.nErrorType
== ERROR_LIBRARY_NOT_FOUND
)
417 WARN("ProxyODBC: Can not load ODBC driver manager library.\n");
419 if (HandleType
== SQL_HANDLE_ENV
)
420 *OutputHandle
= SQL_NULL_HENV
;
421 else if (HandleType
== SQL_HANDLE_DBC
)
422 *OutputHandle
= SQL_NULL_HDBC
;
423 else if (HandleType
== SQL_HANDLE_STMT
)
424 *OutputHandle
= SQL_NULL_HSTMT
;
425 else if (HandleType
== SQL_HANDLE_DESC
)
426 *OutputHandle
= SQL_NULL_HDESC
;
431 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCHANDLESTD
].func
);
432 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLALLOCHANDLESTD
].func
)
433 (HandleType
, InputHandle
, OutputHandle
);
437 /*************************************************************************
438 * SQLBindCol [ODBC32.004]
440 SQLRETURN WINAPI
SQLBindCol(SQLHSTMT StatementHandle
,
441 SQLUSMALLINT ColumnNumber
, SQLSMALLINT TargetType
,
442 SQLPOINTER TargetValue
, SQLINTEGER BufferLength
,
443 SQLINTEGER
*StrLen_or_Ind
)
447 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
449 TRACE ("Not ready\n");
453 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBINDCOL
].func
);
454 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBINDCOL
].func
)
455 (StatementHandle
, ColumnNumber
, TargetType
,
456 TargetValue
, BufferLength
, StrLen_or_Ind
);
460 /*************************************************************************
461 * SQLBindParam [ODBC32.025]
463 SQLRETURN WINAPI
SQLBindParam(SQLHSTMT StatementHandle
,
464 SQLUSMALLINT ParameterNumber
, SQLSMALLINT ValueType
,
465 SQLSMALLINT ParameterType
, SQLUINTEGER LengthPrecision
,
466 SQLSMALLINT ParameterScale
, SQLPOINTER ParameterValue
,
467 SQLINTEGER
*StrLen_or_Ind
)
471 CHECK_READY_AND_dmHandle();
473 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBINDPARAM
].func
);
474 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBINDPARAM
].func
)
475 (StatementHandle
, ParameterNumber
, ValueType
,
476 ParameterScale
, ParameterValue
, StrLen_or_Ind
);
480 /*************************************************************************
481 * SQLCancel [ODBC32.005]
483 SQLRETURN WINAPI
SQLCancel(SQLHSTMT StatementHandle
)
487 CHECK_READY_AND_dmHandle();
489 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCANCEL
].func
);
490 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCANCEL
].func
) (StatementHandle
);
494 /*************************************************************************
495 * SQLCloseCursor [ODBC32.026]
497 SQLRETURN WINAPI
SQLCloseCursor(SQLHSTMT StatementHandle
)
500 TRACE("(Handle=%lx)\n",StatementHandle
);
502 CHECK_READY_AND_dmHandle();
504 assert(gProxyHandle
.functions
[SQLAPI_INDEX_SQLCLOSECURSOR
].func
);
505 ret
=(gProxyHandle
.functions
[SQLAPI_INDEX_SQLCLOSECURSOR
].func
) (StatementHandle
);
506 TRACE("returns %d\n",ret
);
511 /*************************************************************************
512 * SQLColAttribute [ODBC32.027]
514 SQLRETURN WINAPI
SQLColAttribute (SQLHSTMT StatementHandle
,
515 SQLUSMALLINT ColumnNumber
, SQLUSMALLINT FieldIdentifier
,
516 SQLPOINTER CharacterAttribute
, SQLSMALLINT BufferLength
,
517 SQLSMALLINT
*StringLength
, SQLPOINTER NumericAttribute
)
521 CHECK_READY_AND_dmHandle();
523 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLATTRIBUTE
].func
);
524 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLATTRIBUTE
].func
)
525 (StatementHandle
, ColumnNumber
, FieldIdentifier
,
526 CharacterAttribute
, BufferLength
, StringLength
, NumericAttribute
);
530 /*************************************************************************
531 * SQLColumns [ODBC32.040]
533 SQLRETURN WINAPI
SQLColumns(SQLHSTMT StatementHandle
,
534 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
535 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
536 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
537 SQLCHAR
*ColumnName
, SQLSMALLINT NameLength4
)
541 CHECK_READY_AND_dmHandle();
543 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLUMNS
].func
);
544 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLUMNS
].func
)
545 (StatementHandle
, CatalogName
, NameLength1
,
546 SchemaName
, NameLength2
, TableName
, NameLength3
, ColumnName
, NameLength4
);
550 /*************************************************************************
551 * SQLConnect [ODBC32.007]
553 SQLRETURN WINAPI
SQLConnect(SQLHDBC ConnectionHandle
,
554 SQLCHAR
*ServerName
, SQLSMALLINT NameLength1
,
555 SQLCHAR
*UserName
, SQLSMALLINT NameLength2
,
556 SQLCHAR
*Authentication
, SQLSMALLINT NameLength3
)
559 TRACE("(Server=%.*s)\n",NameLength1
, ServerName
);
561 CHECK_READY_AND_dmHandle();
563 strcpy(gProxyHandle
.ServerName
, (const char*)ServerName
);
564 strcpy(gProxyHandle
.UserName
, (const char*)UserName
);
566 assert(gProxyHandle
.functions
[SQLAPI_INDEX_SQLCONNECT
].func
);
567 ret
=(gProxyHandle
.functions
[SQLAPI_INDEX_SQLCONNECT
].func
)
568 (ConnectionHandle
, ServerName
, NameLength1
,
569 UserName
, NameLength2
, Authentication
, NameLength3
);
571 TRACE("returns %d\n",ret
);
576 /*************************************************************************
577 * SQLCopyDesc [ODBC32.028]
579 SQLRETURN WINAPI
SQLCopyDesc(SQLHDESC SourceDescHandle
, SQLHDESC TargetDescHandle
)
583 CHECK_READY_AND_dmHandle();
585 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOPYDESC
].func
);
586 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOPYDESC
].func
)
587 (SourceDescHandle
, TargetDescHandle
);
591 /*************************************************************************
592 * SQLDataSources [ODBC32.057]
594 SQLRETURN WINAPI
SQLDataSources(SQLHENV EnvironmentHandle
,
595 SQLUSMALLINT Direction
, SQLCHAR
*ServerName
,
596 SQLSMALLINT BufferLength1
, SQLSMALLINT
*NameLength1
,
597 SQLCHAR
*Description
, SQLSMALLINT BufferLength2
,
598 SQLSMALLINT
*NameLength2
)
602 TRACE("EnvironmentHandle = %p\n", (LPVOID
)EnvironmentHandle
);
604 if (!gProxyHandle
.bFunctionReady
|| gProxyHandle
.dmHandle
== NULL
)
606 ERR("Error: empty dm handle (gProxyHandle.dmHandle == NULL)\n");
610 assert(gProxyHandle
.functions
[SQLAPI_INDEX_SQLDATASOURCES
].func
);
611 ret
= (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDATASOURCES
].func
)
612 (EnvironmentHandle
, Direction
, ServerName
,
613 BufferLength1
, NameLength1
, Description
, BufferLength2
, NameLength2
);
615 if (WINE_TRACE_ON(odbc
))
617 TRACE("returns: %d \t", ret
);
618 if (*NameLength1
> 0)
619 TRACE("DataSource = %s,", ServerName
);
620 if (*NameLength2
> 0)
621 TRACE(" Description = %s", Description
);
629 /*************************************************************************
630 * SQLDescribeCol [ODBC32.008]
632 SQLRETURN WINAPI
SQLDescribeCol(SQLHSTMT StatementHandle
,
633 SQLUSMALLINT ColumnNumber
, SQLCHAR
*ColumnName
,
634 SQLSMALLINT BufferLength
, SQLSMALLINT
*NameLength
,
635 SQLSMALLINT
*DataType
, SQLUINTEGER
*ColumnSize
,
636 SQLSMALLINT
*DecimalDigits
, SQLSMALLINT
*Nullable
)
640 CHECK_READY_AND_dmHandle();
642 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDESCRIBECOL
].func
);
643 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDESCRIBECOL
].func
)
644 (StatementHandle
, ColumnNumber
, ColumnName
,
645 BufferLength
, NameLength
, DataType
, ColumnSize
, DecimalDigits
, Nullable
);
649 /*************************************************************************
650 * SQLDisconnect [ODBC32.009]
652 SQLRETURN WINAPI
SQLDisconnect(SQLHDBC ConnectionHandle
)
655 TRACE("(Handle=%lx)\n", ConnectionHandle
);
657 CHECK_READY_AND_dmHandle();
659 gProxyHandle
.ServerName
[0] = '\0';
660 gProxyHandle
.UserName
[0] = '\0';
662 assert(gProxyHandle
.functions
[SQLAPI_INDEX_SQLDISCONNECT
].func
);
663 ret
= (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDISCONNECT
].func
) (ConnectionHandle
);
664 TRACE("returns %d\n",ret
);
669 /*************************************************************************
670 * SQLEndTran [ODBC32.029]
672 SQLRETURN WINAPI
SQLEndTran(SQLSMALLINT HandleType
, SQLHANDLE Handle
, SQLSMALLINT CompletionType
)
676 CHECK_READY_AND_dmHandle();
678 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLENDTRAN
].func
);
679 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLENDTRAN
].func
) (HandleType
, Handle
, CompletionType
);
683 /*************************************************************************
684 * SQLError [ODBC32.010]
686 SQLRETURN WINAPI
SQLError(SQLHENV EnvironmentHandle
,
687 SQLHDBC ConnectionHandle
, SQLHSTMT StatementHandle
,
688 SQLCHAR
*Sqlstate
, SQLINTEGER
*NativeError
,
689 SQLCHAR
*MessageText
, SQLSMALLINT BufferLength
,
690 SQLSMALLINT
*TextLength
)
694 CHECK_READY_AND_dmHandle();
696 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLERROR
].func
);
697 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLERROR
].func
)
698 (EnvironmentHandle
, ConnectionHandle
, StatementHandle
,
699 Sqlstate
, NativeError
, MessageText
, BufferLength
, TextLength
);
703 /*************************************************************************
704 * SQLExecDirect [ODBC32.011]
706 SQLRETURN WINAPI
SQLExecDirect(SQLHSTMT StatementHandle
, SQLCHAR
*StatementText
, SQLINTEGER TextLength
)
710 CHECK_READY_AND_dmHandle();
712 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLEXECDIRECT
].func
);
713 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLEXECDIRECT
].func
)
714 (StatementHandle
, StatementText
, TextLength
);
718 /*************************************************************************
719 * SQLExecute [ODBC32.012]
721 SQLRETURN WINAPI
SQLExecute(SQLHSTMT StatementHandle
)
725 CHECK_READY_AND_dmHandle();
727 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLEXECUTE
].func
);
728 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLEXECUTE
].func
) (StatementHandle
);
732 /*************************************************************************
733 * SQLFetch [ODBC32.013]
735 SQLRETURN WINAPI
SQLFetch(SQLHSTMT StatementHandle
)
739 CHECK_READY_AND_dmHandle();
741 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFETCH
].func
);
742 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFETCH
].func
) (StatementHandle
);
746 /*************************************************************************
747 * SQLFetchScroll [ODBC32.030]
749 SQLRETURN WINAPI
SQLFetchScroll(SQLHSTMT StatementHandle
, SQLSMALLINT FetchOrientation
, SQLINTEGER FetchOffset
)
755 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFETCHSCROLL
].func
);
756 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFETCHSCROLL
].func
)
757 (StatementHandle
, FetchOrientation
, FetchOffset
);
761 /*************************************************************************
762 * SQLFreeConnect [ODBC32.014]
764 SQLRETURN WINAPI
SQLFreeConnect(SQLHDBC ConnectionHandle
)
767 TRACE("(Handle=%lx)\n",ConnectionHandle
);
771 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREECONNECT
].func
);
772 ret
=(gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREECONNECT
].func
) (ConnectionHandle
);
773 TRACE("Returns %d\n",ret
);
778 /*************************************************************************
779 * SQLFreeEnv [ODBC32.015]
781 SQLRETURN WINAPI
SQLFreeEnv(SQLHENV EnvironmentHandle
)
784 TRACE("(Env=%lx)\n",EnvironmentHandle
);
788 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREEENV
].func
);
789 ret
= (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREEENV
].func
) (EnvironmentHandle
);
790 TRACE("Returns %d\n",ret
);
795 /*************************************************************************
796 * SQLFreeHandle [ODBC32.031]
798 SQLRETURN WINAPI
SQLFreeHandle(SQLSMALLINT HandleType
, SQLHANDLE Handle
)
801 TRACE("(Type=%d, Handle=%lx)\n",HandleType
,Handle
);
805 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREEHANDLE
].func
);
806 ret
= (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREEHANDLE
].func
)
807 (HandleType
, Handle
);
808 TRACE ("Returns %d\n",ret
);
813 /*************************************************************************
814 * SQLFreeStmt [ODBC32.016]
816 SQLRETURN WINAPI
SQLFreeStmt(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
)
819 TRACE("(Handle %lx, Option=%d)\n",StatementHandle
, Option
);
823 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREESTMT
].func
);
824 ret
=(gProxyHandle
.functions
[SQLAPI_INDEX_SQLFREESTMT
].func
)
825 (StatementHandle
, Option
);
826 TRACE("Returns %d\n",ret
);
831 /*************************************************************************
832 * SQLGetConnectAttr [ODBC32.032]
834 SQLRETURN WINAPI
SQLGetConnectAttr(SQLHDBC ConnectionHandle
,
835 SQLINTEGER Attribute
, SQLPOINTER Value
,
836 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
842 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETCONNECTATTR
].func
);
843 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETCONNECTATTR
].func
)
844 (ConnectionHandle
, Attribute
, Value
,
845 BufferLength
, StringLength
);
849 /*************************************************************************
850 * SQLGetConnectOption [ODBC32.042]
852 SQLRETURN WINAPI
SQLGetConnectOption(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLPOINTER Value
)
858 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETCONNECTOPTION
].func
);
859 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETCONNECTOPTION
].func
)
860 (ConnectionHandle
, Option
, Value
);
864 /*************************************************************************
865 * SQLGetCursorName [ODBC32.017]
867 SQLRETURN WINAPI
SQLGetCursorName(SQLHSTMT StatementHandle
,
868 SQLCHAR
*CursorName
, SQLSMALLINT BufferLength
,
869 SQLSMALLINT
*NameLength
)
875 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETCURSORNAME
].func
);
876 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETCURSORNAME
].func
)
877 (StatementHandle
, CursorName
, BufferLength
, NameLength
);
881 /*************************************************************************
882 * SQLGetData [ODBC32.043]
884 SQLRETURN WINAPI
SQLGetData(SQLHSTMT StatementHandle
,
885 SQLUSMALLINT ColumnNumber
, SQLSMALLINT TargetType
,
886 SQLPOINTER TargetValue
, SQLINTEGER BufferLength
,
887 SQLINTEGER
*StrLen_or_Ind
)
893 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDATA
].func
);
894 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDATA
].func
)
895 (StatementHandle
, ColumnNumber
, TargetType
,
896 TargetValue
, BufferLength
, StrLen_or_Ind
);
900 /*************************************************************************
901 * SQLGetDescField [ODBC32.033]
903 SQLRETURN WINAPI
SQLGetDescField(SQLHDESC DescriptorHandle
,
904 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
905 SQLPOINTER Value
, SQLINTEGER BufferLength
,
906 SQLINTEGER
*StringLength
)
912 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDESCFIELD
].func
);
913 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDESCFIELD
].func
)
914 (DescriptorHandle
, RecNumber
, FieldIdentifier
,
915 Value
, BufferLength
, StringLength
);
919 /*************************************************************************
920 * SQLGetDescRec [ODBC32.034]
922 SQLRETURN WINAPI
SQLGetDescRec(SQLHDESC DescriptorHandle
,
923 SQLSMALLINT RecNumber
, SQLCHAR
*Name
,
924 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
,
925 SQLSMALLINT
*Type
, SQLSMALLINT
*SubType
,
926 SQLINTEGER
*Length
, SQLSMALLINT
*Precision
,
927 SQLSMALLINT
*Scale
, SQLSMALLINT
*Nullable
)
933 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDESCREC
].func
);
934 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDESCREC
].func
)
935 (DescriptorHandle
, RecNumber
, Name
, BufferLength
,
936 StringLength
, Type
, SubType
, Length
, Precision
, Scale
, Nullable
);
940 /*************************************************************************
941 * SQLGetDiagField [ODBC32.035]
943 SQLRETURN WINAPI
SQLGetDiagField(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
944 SQLSMALLINT RecNumber
, SQLSMALLINT DiagIdentifier
,
945 SQLPOINTER DiagInfo
, SQLSMALLINT BufferLength
,
946 SQLSMALLINT
*StringLength
)
952 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDIAGFIELD
].func
);
953 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDIAGFIELD
].func
)
954 (HandleType
, Handle
, RecNumber
, DiagIdentifier
,
955 DiagInfo
, BufferLength
, StringLength
);
959 /*************************************************************************
960 * SQLGetDiagRec [ODBC32.036]
962 SQLRETURN WINAPI
SQLGetDiagRec(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
963 SQLSMALLINT RecNumber
, SQLCHAR
*Sqlstate
,
964 SQLINTEGER
*NativeError
, SQLCHAR
*MessageText
,
965 SQLSMALLINT BufferLength
, SQLSMALLINT
*TextLength
)
971 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDIAGREC
].func
);
972 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETDIAGREC
].func
)
973 (HandleType
, Handle
, RecNumber
, Sqlstate
, NativeError
,
974 MessageText
, BufferLength
, TextLength
);
978 /*************************************************************************
979 * SQLGetEnvAttr [ODBC32.037]
981 SQLRETURN WINAPI
SQLGetEnvAttr(SQLHENV EnvironmentHandle
,
982 SQLINTEGER Attribute
, SQLPOINTER Value
,
983 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
989 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETENVATTR
].func
);
990 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETENVATTR
].func
)
991 (EnvironmentHandle
, Attribute
, Value
, BufferLength
, StringLength
);
995 /*************************************************************************
996 * SQLGetFunctions [ODBC32.044]
998 SQLRETURN WINAPI
SQLGetFunctions(SQLHDBC ConnectionHandle
, SQLUSMALLINT FunctionId
, SQLUSMALLINT
*Supported
)
1004 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETFUNCTIONS
].func
);
1005 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETFUNCTIONS
].func
)
1006 (ConnectionHandle
, FunctionId
, Supported
);
1010 /*************************************************************************
1011 * SQLGetInfo [ODBC32.045]
1013 SQLRETURN WINAPI
SQLGetInfo(SQLHDBC ConnectionHandle
,
1014 SQLUSMALLINT InfoType
, SQLPOINTER InfoValue
,
1015 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
)
1021 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETINFO
].func
);
1022 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETINFO
].func
)
1023 (ConnectionHandle
, InfoType
, InfoValue
, BufferLength
, StringLength
);
1027 /*************************************************************************
1028 * SQLGetStmtAttr [ODBC32.038]
1030 SQLRETURN WINAPI
SQLGetStmtAttr(SQLHSTMT StatementHandle
,
1031 SQLINTEGER Attribute
, SQLPOINTER Value
,
1032 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
1038 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETSTMTATTR
].func
);
1039 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETSTMTATTR
].func
)
1040 (StatementHandle
, Attribute
, Value
, BufferLength
, StringLength
);
1044 /*************************************************************************
1045 * SQLGetStmtOption [ODBC32.046]
1047 SQLRETURN WINAPI
SQLGetStmtOption(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
, SQLPOINTER Value
)
1053 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETSTMTOPTION
].func
);
1054 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETSTMTOPTION
].func
)
1055 (StatementHandle
, Option
, Value
);
1059 /*************************************************************************
1060 * SQLGetTypeInfo [ODBC32.047]
1062 SQLRETURN WINAPI
SQLGetTypeInfo(SQLHSTMT StatementHandle
, SQLSMALLINT DataType
)
1068 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETTYPEINFO
].func
);
1069 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLGETTYPEINFO
].func
)
1070 (StatementHandle
, DataType
);
1074 /*************************************************************************
1075 * SQLNumResultCols [ODBC32.018]
1077 SQLRETURN WINAPI
SQLNumResultCols(SQLHSTMT StatementHandle
, SQLSMALLINT
*ColumnCount
)
1083 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLNUMRESULTCOLS
].func
);
1084 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLNUMRESULTCOLS
].func
)
1085 (StatementHandle
, ColumnCount
);
1089 /*************************************************************************
1090 * SQLParamData [ODBC32.048]
1092 SQLRETURN WINAPI
SQLParamData(SQLHSTMT StatementHandle
, SQLPOINTER
*Value
)
1098 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPARAMDATA
].func
);
1099 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPARAMDATA
].func
)
1100 (StatementHandle
, Value
);
1104 /*************************************************************************
1105 * SQLPrepare [ODBC32.019]
1107 SQLRETURN WINAPI
SQLPrepare(SQLHSTMT StatementHandle
, SQLCHAR
*StatementText
, SQLINTEGER TextLength
)
1113 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPREPARE
].func
);
1114 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPREPARE
].func
)
1115 (StatementHandle
, StatementText
, TextLength
);
1119 /*************************************************************************
1120 * SQLPutData [ODBC32.049]
1122 SQLRETURN WINAPI
SQLPutData(SQLHSTMT StatementHandle
, SQLPOINTER Data
, SQLINTEGER StrLen_or_Ind
)
1128 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPUTDATA
].func
);
1129 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPUTDATA
].func
)
1130 (StatementHandle
, Data
, StrLen_or_Ind
);
1134 /*************************************************************************
1135 * SQLRowCount [ODBC32.020]
1137 SQLRETURN WINAPI
SQLRowCount(SQLHSTMT StatementHandle
, SQLINTEGER
*RowCount
)
1143 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLROWCOUNT
].func
);
1144 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLROWCOUNT
].func
)
1145 (StatementHandle
, RowCount
);
1149 /*************************************************************************
1150 * SQLSetConnectAttr [ODBC32.039]
1152 SQLRETURN WINAPI
SQLSetConnectAttr(SQLHDBC ConnectionHandle
, SQLINTEGER Attribute
,
1153 SQLPOINTER Value
, SQLINTEGER StringLength
)
1159 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETCONNECTATTR
].func
);
1160 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETCONNECTATTR
].func
)
1161 (ConnectionHandle
, Attribute
, Value
, StringLength
);
1165 /*************************************************************************
1166 * SQLSetConnectOption [ODBC32.050]
1168 SQLRETURN WINAPI
SQLSetConnectOption(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLUINTEGER Value
)
1174 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETCONNECTOPTION
].func
);
1175 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETCONNECTOPTION
].func
)
1176 (ConnectionHandle
, Option
, Value
);
1180 /*************************************************************************
1181 * SQLSetCursorName [ODBC32.021]
1183 SQLRETURN WINAPI
SQLSetCursorName(SQLHSTMT StatementHandle
, SQLCHAR
*CursorName
, SQLSMALLINT NameLength
)
1189 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETCURSORNAME
].func
);
1190 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETCURSORNAME
].func
)
1191 (StatementHandle
, CursorName
, NameLength
);
1195 /*************************************************************************
1196 * SQLSetDescField [ODBC32.073]
1198 SQLRETURN WINAPI
SQLSetDescField(SQLHDESC DescriptorHandle
,
1199 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
1200 SQLPOINTER Value
, SQLINTEGER BufferLength
)
1206 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETDESCFIELD
].func
);
1207 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETDESCFIELD
].func
)
1208 (DescriptorHandle
, RecNumber
, FieldIdentifier
, Value
, BufferLength
);
1212 /*************************************************************************
1213 * SQLSetDescRec [ODBC32.074]
1215 SQLRETURN WINAPI
SQLSetDescRec(SQLHDESC DescriptorHandle
,
1216 SQLSMALLINT RecNumber
, SQLSMALLINT Type
,
1217 SQLSMALLINT SubType
, SQLINTEGER Length
,
1218 SQLSMALLINT Precision
, SQLSMALLINT Scale
,
1219 SQLPOINTER Data
, SQLINTEGER
*StringLength
,
1220 SQLINTEGER
*Indicator
)
1226 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETDESCREC
].func
);
1227 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETDESCREC
].func
)
1228 (DescriptorHandle
, RecNumber
, Type
, SubType
, Length
,
1229 Precision
, Scale
, Data
, StringLength
, Indicator
);
1233 /*************************************************************************
1234 * SQLSetEnvAttr [ODBC32.075]
1236 SQLRETURN WINAPI
SQLSetEnvAttr(SQLHENV EnvironmentHandle
,
1237 SQLINTEGER Attribute
, SQLPOINTER Value
,
1238 SQLINTEGER StringLength
)
1244 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETENVATTR
].func
);
1245 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETENVATTR
].func
)
1246 (EnvironmentHandle
, Attribute
, Value
, StringLength
);
1250 /*************************************************************************
1251 * SQLSetParam [ODBC32.022]
1253 SQLRETURN WINAPI
SQLSetParam(SQLHSTMT StatementHandle
,
1254 SQLUSMALLINT ParameterNumber
, SQLSMALLINT ValueType
,
1255 SQLSMALLINT ParameterType
, SQLUINTEGER LengthPrecision
,
1256 SQLSMALLINT ParameterScale
, SQLPOINTER ParameterValue
,
1257 SQLINTEGER
*StrLen_or_Ind
)
1263 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETPARAM
].func
);
1264 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETPARAM
].func
)
1265 (StatementHandle
, ParameterNumber
, ValueType
, ParameterType
, LengthPrecision
,
1266 ParameterScale
, ParameterValue
, StrLen_or_Ind
);
1270 /*************************************************************************
1271 * SQLSetStmtAttr [ODBC32.076]
1273 SQLRETURN WINAPI
SQLSetStmtAttr(SQLHSTMT StatementHandle
,
1274 SQLINTEGER Attribute
, SQLPOINTER Value
,
1275 SQLINTEGER StringLength
)
1281 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETSTMTATTR
].func
);
1282 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETSTMTATTR
].func
)
1283 (StatementHandle
, Attribute
, Value
, StringLength
);
1287 /*************************************************************************
1288 * SQLSetStmtOption [ODBC32.051]
1290 SQLRETURN WINAPI
SQLSetStmtOption(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
, SQLUINTEGER Value
)
1296 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETSTMTOPTION
].func
);
1297 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETSTMTOPTION
].func
)
1298 (StatementHandle
, Option
, Value
);
1302 /*************************************************************************
1303 * SQLSpecialColumns [ODBC32.052]
1305 SQLRETURN WINAPI
SQLSpecialColumns(SQLHSTMT StatementHandle
,
1306 SQLUSMALLINT IdentifierType
, SQLCHAR
*CatalogName
,
1307 SQLSMALLINT NameLength1
, SQLCHAR
*SchemaName
,
1308 SQLSMALLINT NameLength2
, SQLCHAR
*TableName
,
1309 SQLSMALLINT NameLength3
, SQLUSMALLINT Scope
,
1310 SQLUSMALLINT Nullable
)
1315 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSPECIALCOLUMNS
].func
);
1316 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSPECIALCOLUMNS
].func
)
1317 (StatementHandle
, IdentifierType
, CatalogName
, NameLength1
, SchemaName
,
1318 NameLength2
, TableName
, NameLength3
, Scope
, Nullable
);
1322 /*************************************************************************
1323 * SQLStatistics [ODBC32.053]
1325 SQLRETURN WINAPI
SQLStatistics(SQLHSTMT StatementHandle
,
1326 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
1327 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
1328 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
1329 SQLUSMALLINT Unique
, SQLUSMALLINT Reserved
)
1335 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSTATISTICS
].func
);
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
)
1355 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLTABLES
].func
);
1356 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLTABLES
].func
)
1357 (StatementHandle
, CatalogName
, NameLength1
,
1358 SchemaName
, NameLength2
, TableName
, NameLength3
, TableType
, NameLength4
);
1362 /*************************************************************************
1363 * SQLTransact [ODBC32.023]
1365 SQLRETURN WINAPI
SQLTransact(SQLHENV EnvironmentHandle
, SQLHDBC ConnectionHandle
,
1366 SQLUSMALLINT CompletionType
)
1372 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLTRANSACT
].func
);
1373 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLTRANSACT
].func
)
1374 (EnvironmentHandle
, ConnectionHandle
, CompletionType
);
1378 /*************************************************************************
1379 * SQLBrowseConnect [ODBC32.055]
1381 SQLRETURN WINAPI
SQLBrowseConnect(
1383 SQLCHAR
*szConnStrIn
,
1384 SQLSMALLINT cbConnStrIn
,
1385 SQLCHAR
*szConnStrOut
,
1386 SQLSMALLINT cbConnStrOutMax
,
1387 SQLSMALLINT
*pcbConnStrOut
)
1393 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBROWSECONNECT
].func
);
1394 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBROWSECONNECT
].func
)
1395 (hdbc
, szConnStrIn
, cbConnStrIn
, szConnStrOut
, cbConnStrOutMax
, pcbConnStrOut
);
1399 /*************************************************************************
1400 * SQLBulkOperations [ODBC32.078]
1402 SQLRETURN WINAPI
SQLBulkOperations(
1403 SQLHSTMT StatementHandle
,
1404 SQLSMALLINT Operation
)
1410 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBULKOPERATIONS
].func
);
1411 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBULKOPERATIONS
].func
)
1412 (StatementHandle
, Operation
);
1416 /*************************************************************************
1417 * SQLColAttributes [ODBC32.006]
1419 SQLRETURN WINAPI
SQLColAttributes(
1422 SQLUSMALLINT fDescType
,
1424 SQLSMALLINT cbDescMax
,
1425 SQLSMALLINT
*pcbDesc
,
1432 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLATTRIBUTES
].func
);
1433 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLATTRIBUTES
].func
)
1434 (hstmt
, icol
, fDescType
, rgbDesc
, cbDescMax
, pcbDesc
, pfDesc
);
1438 /*************************************************************************
1439 * SQLColumnPrivileges [ODBC32.056]
1441 SQLRETURN WINAPI
SQLColumnPrivileges(
1443 SQLCHAR
*szCatalogName
,
1444 SQLSMALLINT cbCatalogName
,
1445 SQLCHAR
*szSchemaName
,
1446 SQLSMALLINT cbSchemaName
,
1447 SQLCHAR
*szTableName
,
1448 SQLSMALLINT cbTableName
,
1449 SQLCHAR
*szColumnName
,
1450 SQLSMALLINT cbColumnName
)
1456 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES
].func
);
1457 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLCOLUMNPRIVILEGES
].func
)
1458 (hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1459 szTableName
, cbTableName
, szColumnName
, cbColumnName
);
1463 /*************************************************************************
1464 * SQLDescribeParam [ODBC32.058]
1466 SQLRETURN WINAPI
SQLDescribeParam(
1469 SQLSMALLINT
*pfSqlType
,
1470 SQLUINTEGER
*pcbParamDef
,
1471 SQLSMALLINT
*pibScale
,
1472 SQLSMALLINT
*pfNullable
)
1478 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDESCRIBEPARAM
].func
);
1479 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDESCRIBEPARAM
].func
)
1480 (hstmt
, ipar
, pfSqlType
, pcbParamDef
, pibScale
, pfNullable
);
1484 /*************************************************************************
1485 * SQLExtendedFetch [ODBC32.059]
1487 SQLRETURN WINAPI
SQLExtendedFetch(
1489 SQLUSMALLINT fFetchType
,
1492 SQLUSMALLINT
*rgfRowStatus
)
1498 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLEXTENDEDFETCH
].func
);
1499 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLEXTENDEDFETCH
].func
)
1500 (hstmt
, fFetchType
, irow
, pcrow
, rgfRowStatus
);
1504 /*************************************************************************
1505 * SQLForeignKeys [ODBC32.060]
1507 SQLRETURN WINAPI
SQLForeignKeys(
1509 SQLCHAR
*szPkCatalogName
,
1510 SQLSMALLINT cbPkCatalogName
,
1511 SQLCHAR
*szPkSchemaName
,
1512 SQLSMALLINT cbPkSchemaName
,
1513 SQLCHAR
*szPkTableName
,
1514 SQLSMALLINT cbPkTableName
,
1515 SQLCHAR
*szFkCatalogName
,
1516 SQLSMALLINT cbFkCatalogName
,
1517 SQLCHAR
*szFkSchemaName
,
1518 SQLSMALLINT cbFkSchemaName
,
1519 SQLCHAR
*szFkTableName
,
1520 SQLSMALLINT cbFkTableName
)
1526 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFOREIGNKEYS
].func
);
1527 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLFOREIGNKEYS
].func
)
1528 (hstmt
, szPkCatalogName
, cbPkCatalogName
, szPkSchemaName
, cbPkSchemaName
,
1529 szPkTableName
, cbPkTableName
, szFkCatalogName
, cbFkCatalogName
, szFkSchemaName
,
1530 cbFkSchemaName
, szFkTableName
, cbFkTableName
);
1534 /*************************************************************************
1535 * SQLMoreResults [ODBC32.061]
1537 SQLRETURN WINAPI
SQLMoreResults(SQLHSTMT hstmt
)
1543 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLMORERESULTS
].func
);
1544 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLMORERESULTS
].func
) (hstmt
);
1548 /*************************************************************************
1549 * SQLNativeSql [ODBC32.062]
1551 SQLRETURN WINAPI
SQLNativeSql(
1553 SQLCHAR
*szSqlStrIn
,
1554 SQLINTEGER cbSqlStrIn
,
1556 SQLINTEGER cbSqlStrMax
,
1557 SQLINTEGER
*pcbSqlStr
)
1563 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLNATIVESQL
].func
);
1564 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLNATIVESQL
].func
)
1565 (hdbc
, szSqlStrIn
, cbSqlStrIn
, szSqlStr
, cbSqlStrMax
, pcbSqlStr
);
1569 /*************************************************************************
1570 * SQLNumParams [ODBC32.063]
1572 SQLRETURN WINAPI
SQLNumParams(
1580 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLNUMPARAMS
].func
);
1581 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLNUMPARAMS
].func
) (hstmt
, pcpar
);
1585 /*************************************************************************
1586 * SQLParamOptions [ODBC32.064]
1588 SQLRETURN WINAPI
SQLParamOptions(
1597 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPARAMOPTIONS
].func
);
1598 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPARAMOPTIONS
].func
) (hstmt
, crow
, pirow
);
1602 /*************************************************************************
1603 * SQLPrimaryKeys [ODBC32.065]
1605 SQLRETURN WINAPI
SQLPrimaryKeys(
1607 SQLCHAR
*szCatalogName
,
1608 SQLSMALLINT cbCatalogName
,
1609 SQLCHAR
*szSchemaName
,
1610 SQLSMALLINT cbSchemaName
,
1611 SQLCHAR
*szTableName
,
1612 SQLSMALLINT cbTableName
)
1618 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPRIMARYKEYS
].func
);
1619 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPRIMARYKEYS
].func
)
1620 (hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1621 szTableName
, cbTableName
);
1625 /*************************************************************************
1626 * SQLProcedureColumns [ODBC32.066]
1628 SQLRETURN WINAPI
SQLProcedureColumns(
1630 SQLCHAR
*szCatalogName
,
1631 SQLSMALLINT cbCatalogName
,
1632 SQLCHAR
*szSchemaName
,
1633 SQLSMALLINT cbSchemaName
,
1634 SQLCHAR
*szProcName
,
1635 SQLSMALLINT cbProcName
,
1636 SQLCHAR
*szColumnName
,
1637 SQLSMALLINT cbColumnName
)
1643 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPROCEDURECOLUMNS
].func
);
1644 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPROCEDURECOLUMNS
].func
)
1645 (hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1646 szProcName
, cbProcName
, szColumnName
, cbColumnName
);
1650 /*************************************************************************
1651 * SQLProcedures [ODBC32.067]
1653 SQLRETURN WINAPI
SQLProcedures(
1655 SQLCHAR
*szCatalogName
,
1656 SQLSMALLINT cbCatalogName
,
1657 SQLCHAR
*szSchemaName
,
1658 SQLSMALLINT cbSchemaName
,
1659 SQLCHAR
*szProcName
,
1660 SQLSMALLINT cbProcName
)
1666 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPROCEDURES
].func
);
1667 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLPROCEDURES
].func
)
1668 (hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1669 szProcName
, cbProcName
);
1673 /*************************************************************************
1674 * SQLSetPos [ODBC32.068]
1676 SQLRETURN WINAPI
SQLSetPos(
1679 SQLUSMALLINT fOption
,
1686 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETPOS
].func
);
1687 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETPOS
].func
)
1688 (hstmt
, irow
, fOption
, fLock
);
1692 /*************************************************************************
1693 * SQLTablePrivileges [ODBC32.070]
1695 SQLRETURN WINAPI
SQLTablePrivileges(
1697 SQLCHAR
*szCatalogName
,
1698 SQLSMALLINT cbCatalogName
,
1699 SQLCHAR
*szSchemaName
,
1700 SQLSMALLINT cbSchemaName
,
1701 SQLCHAR
*szTableName
,
1702 SQLSMALLINT cbTableName
)
1708 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLTABLEPRIVILEGES
].func
);
1709 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLTABLEPRIVILEGES
].func
)
1710 (hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1711 szTableName
, cbTableName
);
1715 /*************************************************************************
1716 * SQLDrivers [ODBC32.071]
1718 SQLRETURN WINAPI
SQLDrivers(
1720 SQLUSMALLINT fDirection
,
1721 SQLCHAR
*szDriverDesc
,
1722 SQLSMALLINT cbDriverDescMax
,
1723 SQLSMALLINT
*pcbDriverDesc
,
1724 SQLCHAR
*szDriverAttributes
,
1725 SQLSMALLINT cbDriverAttrMax
,
1726 SQLSMALLINT
*pcbDriverAttr
)
1732 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDRIVERS
].func
);
1733 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDRIVERS
].func
)
1734 (henv
, fDirection
, szDriverDesc
, cbDriverDescMax
, pcbDriverDesc
,
1735 szDriverAttributes
, cbDriverAttrMax
, pcbDriverAttr
);
1739 /*************************************************************************
1740 * SQLBindParameter [ODBC32.072]
1742 SQLRETURN WINAPI
SQLBindParameter(
1745 SQLSMALLINT fParamType
,
1747 SQLSMALLINT fSqlType
,
1748 SQLUINTEGER cbColDef
,
1749 SQLSMALLINT ibScale
,
1750 SQLPOINTER rgbValue
,
1751 SQLINTEGER cbValueMax
,
1752 SQLINTEGER
*pcbValue
)
1758 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBINDPARAMETER
].func
);
1759 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLBINDPARAMETER
].func
)
1760 (hstmt
, ipar
, fParamType
, fCType
, fSqlType
, cbColDef
, ibScale
,
1761 rgbValue
, cbValueMax
, pcbValue
);
1765 /*************************************************************************
1766 * SQLDriverConnect [ODBC32.041]
1768 SQLRETURN WINAPI
SQLDriverConnect(
1771 SQLCHAR
*conn_str_in
,
1772 SQLSMALLINT len_conn_str_in
,
1773 SQLCHAR
*conn_str_out
,
1774 SQLSMALLINT conn_str_out_max
,
1775 SQLSMALLINT
*ptr_conn_str_out
,
1776 SQLUSMALLINT driver_completion
)
1782 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDRIVERCONNECT
].func
);
1783 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLDRIVERCONNECT
].func
)
1784 (hdbc
, hwnd
, conn_str_in
, len_conn_str_in
, conn_str_out
,
1785 conn_str_out_max
, ptr_conn_str_out
, driver_completion
);
1789 /*************************************************************************
1790 * SQLSetScrollOptions [ODBC32.069]
1792 SQLRETURN WINAPI
SQLSetScrollOptions(
1793 SQLHSTMT statement_handle
,
1794 SQLUSMALLINT f_concurrency
,
1795 SQLINTEGER crow_keyset
,
1796 SQLUSMALLINT crow_rowset
)
1802 assert (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETSCROLLOPTIONS
].func
);
1803 return (gProxyHandle
.functions
[SQLAPI_INDEX_SQLSETSCROLLOPTIONS
].func
)
1804 (statement_handle
, f_concurrency
, crow_keyset
, crow_rowset
);