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 St, 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.
28 #define WIN32_NO_STATUS
31 #include <wine/port.h>
40 //#include "winbase.h"
44 //#include "sqltypes.h"
49 #include <wine/debug.h>
50 #include <wine/library.h>
51 #include <wine/unicode.h>
53 static BOOL
ODBC_LoadDriverManager(void);
54 static BOOL
ODBC_LoadDMFunctions(void);
56 WINE_DEFAULT_DEBUG_CHANNEL(odbc
);
57 WINE_DECLARE_DEBUG_CHANNEL(winediag
);
59 static SQLRETURN (*pSQLAllocConnect
)(SQLHENV
,SQLHDBC
*);
60 static SQLRETURN (*pSQLAllocEnv
)(SQLHENV
*);
61 static SQLRETURN (*pSQLAllocHandle
)(SQLSMALLINT
,SQLHANDLE
,SQLHANDLE
*);
62 static SQLRETURN (*pSQLAllocHandleStd
)(SQLSMALLINT
,SQLHANDLE
,SQLHANDLE
*);
63 static SQLRETURN (*pSQLAllocStmt
)(SQLHDBC
,SQLHSTMT
*);
64 static SQLRETURN (*pSQLBindCol
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
,SQLLEN
*);
65 static SQLRETURN (*pSQLBindParam
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
,SQLSMALLINT
,SQLUINTEGER
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
*);
66 static SQLRETURN (*pSQLBindParameter
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
,SQLSMALLINT
,SQLSMALLINT
,SQLUINTEGER
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
67 static SQLRETURN (*pSQLBrowseConnect
)(SQLHDBC
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
68 static SQLRETURN (*pSQLBrowseConnectW
)(SQLHDBC
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
69 static SQLRETURN (*pSQLBulkOperations
)(SQLHSTMT
,SQLSMALLINT
);
70 static SQLRETURN (*pSQLCancel
)(SQLHSTMT
);
71 static SQLRETURN (*pSQLCloseCursor
)(SQLHSTMT
);
72 static SQLRETURN (*pSQLColAttribute
)(SQLHSTMT
,SQLUSMALLINT
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*,SQLPOINTER
);
73 static SQLRETURN (*pSQLColAttributeW
)(SQLHSTMT
,SQLUSMALLINT
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*,SQLPOINTER
);
74 static SQLRETURN (*pSQLColAttributes
)(SQLHSTMT
,SQLUSMALLINT
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*,SQLINTEGER
*);
75 static SQLRETURN (*pSQLColAttributesW
)(SQLHSTMT
,SQLUSMALLINT
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*,SQLPOINTER
);
76 static SQLRETURN (*pSQLColumnPrivileges
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
77 static SQLRETURN (*pSQLColumnPrivilegesW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
78 static SQLRETURN (*pSQLColumns
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
79 static SQLRETURN (*pSQLColumnsW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
80 static SQLRETURN (*pSQLConnect
)(SQLHDBC
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
81 static SQLRETURN (*pSQLConnectW
)(SQLHDBC
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
82 static SQLRETURN (*pSQLCopyDesc
)(SQLHDESC
,SQLHDESC
);
83 static SQLRETURN (*pSQLDataSources
)(SQLHENV
,SQLUSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
84 static SQLRETURN (*pSQLDataSourcesA
)(SQLHENV
,SQLUSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
85 static SQLRETURN (*pSQLDataSourcesW
)(SQLHENV
,SQLUSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
86 static SQLRETURN (*pSQLDescribeCol
)(SQLHSTMT
,SQLUSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLSMALLINT
*,SQLUINTEGER
*,SQLSMALLINT
*,SQLSMALLINT
*);
87 static SQLRETURN (*pSQLDescribeColW
)(SQLHSTMT
,SQLUSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLSMALLINT
*,SQLULEN
*,SQLSMALLINT
*,SQLSMALLINT
*);
88 static SQLRETURN (*pSQLDescribeParam
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
*,SQLUINTEGER
*,SQLSMALLINT
*,SQLSMALLINT
*);
89 static SQLRETURN (*pSQLDisconnect
)(SQLHDBC
);
90 static SQLRETURN (*pSQLDriverConnect
)(SQLHDBC
,SQLHWND
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLUSMALLINT
);
91 static SQLRETURN (*pSQLDriverConnectW
)(SQLHDBC
,SQLHWND
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLUSMALLINT
);
92 static SQLRETURN (*pSQLDrivers
)(SQLHENV
,SQLUSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
93 static SQLRETURN (*pSQLDriversW
)(SQLHENV
,SQLUSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
94 static SQLRETURN (*pSQLEndTran
)(SQLSMALLINT
,SQLHANDLE
,SQLSMALLINT
);
95 static SQLRETURN (*pSQLError
)(SQLHENV
,SQLHDBC
,SQLHSTMT
,SQLCHAR
*,SQLINTEGER
*,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
96 static SQLRETURN (*pSQLErrorW
)(SQLHENV
,SQLHDBC
,SQLHSTMT
,SQLWCHAR
*,SQLINTEGER
*,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
97 static SQLRETURN (*pSQLExecDirect
)(SQLHSTMT
,SQLCHAR
*,SQLINTEGER
);
98 static SQLRETURN (*pSQLExecDirectW
)(SQLHSTMT
,SQLWCHAR
*,SQLINTEGER
);
99 static SQLRETURN (*pSQLExecute
)(SQLHSTMT
);
100 static SQLRETURN (*pSQLExtendedFetch
)(SQLHSTMT
,SQLUSMALLINT
,SQLINTEGER
,SQLUINTEGER
*,SQLUSMALLINT
*);
101 static SQLRETURN (*pSQLFetch
)(SQLHSTMT
);
102 static SQLRETURN (*pSQLFetchScroll
)(SQLHSTMT
,SQLSMALLINT
,SQLINTEGER
);
103 static SQLRETURN (*pSQLForeignKeys
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
104 static SQLRETURN (*pSQLForeignKeysW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
105 static SQLRETURN (*pSQLFreeConnect
)(SQLHDBC
);
106 static SQLRETURN (*pSQLFreeEnv
)(SQLHENV
);
107 static SQLRETURN (*pSQLFreeHandle
)(SQLSMALLINT
,SQLHANDLE
);
108 static SQLRETURN (*pSQLFreeStmt
)(SQLHSTMT
,SQLUSMALLINT
);
109 static SQLRETURN (*pSQLGetConnectAttr
)(SQLHDBC
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
110 static SQLRETURN (*pSQLGetConnectAttrW
)(SQLHDBC
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
111 static SQLRETURN (*pSQLGetConnectOption
)(SQLHDBC
,SQLUSMALLINT
,SQLPOINTER
);
112 static SQLRETURN (*pSQLGetConnectOptionW
)(SQLHDBC
,SQLUSMALLINT
,SQLPOINTER
);
113 static SQLRETURN (*pSQLGetCursorName
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
114 static SQLRETURN (*pSQLGetCursorNameW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
115 static SQLRETURN (*pSQLGetData
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
116 static SQLRETURN (*pSQLGetDescField
)(SQLHDESC
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
117 static SQLRETURN (*pSQLGetDescFieldW
)(SQLHDESC
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
118 static SQLRETURN (*pSQLGetDescRec
)(SQLHDESC
,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLSMALLINT
*,SQLSMALLINT
*,SQLINTEGER
*,SQLSMALLINT
*,SQLSMALLINT
*,SQLSMALLINT
*);
119 static SQLRETURN (*pSQLGetDescRecW
)(SQLHDESC
,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLSMALLINT
*,SQLSMALLINT
*,SQLLEN
*,SQLSMALLINT
*,SQLSMALLINT
*,SQLSMALLINT
*);
120 static SQLRETURN (*pSQLGetDiagField
)(SQLSMALLINT
,SQLHANDLE
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*);
121 static SQLRETURN (*pSQLGetDiagFieldW
)(SQLSMALLINT
,SQLHANDLE
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*);
122 static SQLRETURN (*pSQLGetDiagRec
)(SQLSMALLINT
,SQLHANDLE
,SQLSMALLINT
,SQLCHAR
*,SQLINTEGER
*,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
123 static SQLRETURN (*pSQLGetDiagRecW
)(SQLSMALLINT
,SQLHANDLE
,SQLSMALLINT
,SQLWCHAR
*,SQLINTEGER
*,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
124 static SQLRETURN (*pSQLGetEnvAttr
)(SQLHENV
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
125 static SQLRETURN (*pSQLGetFunctions
)(SQLHDBC
,SQLUSMALLINT
,SQLUSMALLINT
*);
126 static SQLRETURN (*pSQLGetInfo
)(SQLHDBC
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*);
127 static SQLRETURN (*pSQLGetInfoW
)(SQLHDBC
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*);
128 static SQLRETURN (*pSQLGetStmtAttr
)(SQLHSTMT
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
129 static SQLRETURN (*pSQLGetStmtAttrW
)(SQLHSTMT
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
130 static SQLRETURN (*pSQLGetStmtOption
)(SQLHSTMT
,SQLUSMALLINT
,SQLPOINTER
);
131 static SQLRETURN (*pSQLGetTypeInfo
)(SQLHSTMT
,SQLSMALLINT
);
132 static SQLRETURN (*pSQLGetTypeInfoW
)(SQLHSTMT
,SQLSMALLINT
);
133 static SQLRETURN (*pSQLMoreResults
)(SQLHSTMT
);
134 static SQLRETURN (*pSQLNativeSql
)(SQLHDBC
,SQLCHAR
*,SQLINTEGER
,SQLCHAR
*,SQLINTEGER
,SQLINTEGER
*);
135 static SQLRETURN (*pSQLNativeSqlW
)(SQLHDBC
,SQLWCHAR
*,SQLINTEGER
,SQLWCHAR
*,SQLINTEGER
,SQLINTEGER
*);
136 static SQLRETURN (*pSQLNumParams
)(SQLHSTMT
,SQLSMALLINT
*);
137 static SQLRETURN (*pSQLNumResultCols
)(SQLHSTMT
,SQLSMALLINT
*);
138 static SQLRETURN (*pSQLParamData
)(SQLHSTMT
,SQLPOINTER
*);
139 static SQLRETURN (*pSQLParamOptions
)(SQLHSTMT
,SQLUINTEGER
,SQLUINTEGER
*);
140 static SQLRETURN (*pSQLPrepare
)(SQLHSTMT
,SQLCHAR
*,SQLINTEGER
);
141 static SQLRETURN (*pSQLPrepareW
)(SQLHSTMT
,SQLWCHAR
*,SQLINTEGER
);
142 static SQLRETURN (*pSQLPrimaryKeys
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
143 static SQLRETURN (*pSQLPrimaryKeysW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
144 static SQLRETURN (*pSQLProcedureColumns
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
145 static SQLRETURN (*pSQLProcedureColumnsW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
146 static SQLRETURN (*pSQLProcedures
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
147 static SQLRETURN (*pSQLProceduresW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
148 static SQLRETURN (*pSQLPutData
)(SQLHSTMT
,SQLPOINTER
,SQLINTEGER
);
149 static SQLRETURN (*pSQLRowCount
)(SQLHSTMT
,SQLINTEGER
*);
150 static SQLRETURN (*pSQLSetConnectAttr
)(SQLHDBC
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
);
151 static SQLRETURN (*pSQLSetConnectAttrW
)(SQLHDBC
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
);
152 static SQLRETURN (*pSQLSetConnectOption
)(SQLHDBC
,SQLUSMALLINT
,SQLUINTEGER
);
153 static SQLRETURN (*pSQLSetConnectOptionW
)(SQLHDBC
,SQLUSMALLINT
,SQLULEN
);
154 static SQLRETURN (*pSQLSetCursorName
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
);
155 static SQLRETURN (*pSQLSetCursorNameW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
);
156 static SQLRETURN (*pSQLSetDescField
)(SQLHDESC
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
);
157 static SQLRETURN (*pSQLSetDescFieldW
)(SQLHDESC
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
);
158 static SQLRETURN (*pSQLSetDescRec
)(SQLHDESC
,SQLSMALLINT
,SQLSMALLINT
,SQLSMALLINT
,SQLINTEGER
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
*,SQLINTEGER
*);
159 static SQLRETURN (*pSQLSetEnvAttr
)(SQLHENV
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
);
160 static SQLRETURN (*pSQLSetParam
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
,SQLSMALLINT
,SQLUINTEGER
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
*);
161 static SQLRETURN (*pSQLSetPos
)(SQLHSTMT
,SQLUSMALLINT
,SQLUSMALLINT
,SQLUSMALLINT
);
162 static SQLRETURN (*pSQLSetScrollOptions
)(SQLHSTMT
,SQLUSMALLINT
,SQLINTEGER
,SQLUSMALLINT
);
163 static SQLRETURN (*pSQLSetStmtAttr
)(SQLHSTMT
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
);
164 static SQLRETURN (*pSQLSetStmtAttrW
)(SQLHSTMT
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
);
165 static SQLRETURN (*pSQLSetStmtOption
)(SQLHSTMT
,SQLUSMALLINT
,SQLUINTEGER
);
166 static SQLRETURN (*pSQLSpecialColumns
)(SQLHSTMT
,SQLUSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLUSMALLINT
,SQLUSMALLINT
);
167 static SQLRETURN (*pSQLSpecialColumnsW
)(SQLHSTMT
,SQLUSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLUSMALLINT
,SQLUSMALLINT
);
168 static SQLRETURN (*pSQLStatistics
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLUSMALLINT
,SQLUSMALLINT
);
169 static SQLRETURN (*pSQLStatisticsW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLUSMALLINT
,SQLUSMALLINT
);
170 static SQLRETURN (*pSQLTablePrivileges
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
171 static SQLRETURN (*pSQLTablePrivilegesW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
172 static SQLRETURN (*pSQLTables
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
173 static SQLRETURN (*pSQLTablesW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
174 static SQLRETURN (*pSQLTransact
)(SQLHENV
,SQLHDBC
,SQLUSMALLINT
);
177 #define ERROR_SQLERROR 1
178 #define ERROR_LIBRARY_NOT_FOUND 2
180 static void *dmHandle
;
181 static int nErrorType
;
183 /***********************************************************************
184 * ODBC_ReplicateODBCInstToRegistry
190 * Utility to ODBC_ReplicateToRegistry to replicate the drivers of the
191 * ODBCINST.INI settings
193 * The driver settings are not replicated to the registry. If we were to
194 * replicate them we would need to decide whether to replicate all settings
195 * or to do some translation; whether to remove any entries present only in
196 * the windows registry, etc.
199 static void ODBC_ReplicateODBCInstToRegistry (SQLHENV hEnv
)
206 TRACE ("Driver settings are not currently replicated to the registry\n");
207 if ((reg_ret
= RegCreateKeyExA (HKEY_LOCAL_MACHINE
,
208 "Software\\ODBC\\ODBCINST.INI", 0, NULL
,
209 REG_OPTION_NON_VOLATILE
,
210 KEY_ALL_ACCESS
/* a couple more than we need */, NULL
,
211 &hODBCInst
, NULL
)) == ERROR_SUCCESS
)
214 if ((reg_ret
= RegCreateKeyExA (hODBCInst
, "ODBC Drivers", 0,
215 NULL
, REG_OPTION_NON_VOLATILE
,
216 KEY_ALL_ACCESS
/* overkill */, NULL
, &hDrivers
, NULL
))
222 SQLSMALLINT sizedesc
;
225 dirn
= SQL_FETCH_FIRST
;
226 while ((sql_ret
= SQLDrivers (hEnv
, dirn
, (SQLCHAR
*)desc
, sizeof(desc
),
227 &sizedesc
, NULL
, 0, NULL
)) == SQL_SUCCESS
||
228 sql_ret
== SQL_SUCCESS_WITH_INFO
)
230 /* FIXME Do some proper handling of the SUCCESS_WITH_INFO */
231 dirn
= SQL_FETCH_NEXT
;
232 if (sizedesc
== lstrlenA(desc
))
235 if ((reg_ret
= RegQueryValueExA (hDrivers
, desc
, NULL
,
236 NULL
, NULL
, NULL
)) == ERROR_FILE_NOT_FOUND
)
238 if ((reg_ret
= RegSetValueExA (hDrivers
, desc
, 0,
239 REG_SZ
, (const BYTE
*)"Installed", 10)) != ERROR_SUCCESS
)
241 TRACE ("Error %d replicating driver %s\n",
246 else if (reg_ret
!= ERROR_SUCCESS
)
248 TRACE ("Error %d checking for %s in drivers\n",
252 if ((reg_ret
= RegCreateKeyExA (hODBCInst
, desc
, 0,
253 NULL
, REG_OPTION_NON_VOLATILE
,
254 KEY_ALL_ACCESS
, NULL
, &hThis
, NULL
))
257 /* FIXME This is where the settings go.
258 * I suggest that if the disposition says it
259 * exists then we leave it alone. Alternatively
260 * include an extra value to flag that it is
261 * a replication of the unixODBC/iODBC/...
263 if ((reg_ret
= RegCloseKey (hThis
)) !=
265 TRACE ("Error %d closing %s key\n", reg_ret
,
270 TRACE ("Error %d ensuring driver key %s\n",
277 WARN ("Unusually long driver name %s not replicated\n",
282 if (sql_ret
!= SQL_NO_DATA
)
284 TRACE ("Error %d enumerating drivers\n", (int)sql_ret
);
287 if ((reg_ret
= RegCloseKey (hDrivers
)) != ERROR_SUCCESS
)
289 TRACE ("Error %d closing hDrivers\n", reg_ret
);
294 TRACE ("Error %d opening HKLM\\S\\O\\OI\\Drivers\n", reg_ret
);
296 if ((reg_ret
= RegCloseKey (hODBCInst
)) != ERROR_SUCCESS
)
298 TRACE ("Error %d closing HKLM\\S\\O\\ODBCINST.INI\n", reg_ret
);
303 TRACE ("Error %d opening HKLM\\S\\O\\ODBCINST.INI\n", reg_ret
);
307 WARN ("May not have replicated all ODBC drivers to the registry\n");
311 /***********************************************************************
312 * ODBC_ReplicateODBCToRegistry
318 * Utility to ODBC_ReplicateToRegistry to replicate either the USER or
321 * For now simply place the "Driver description" (as returned by SQLDataSources)
322 * into the registry as the driver. This is enough to satisfy Crystal's
323 * requirement that there be a driver entry. (It doesn't seem to care what
325 * A slightly more accurate setting would be to access the registry to find
326 * the actual driver library for the given description (which appears to map
327 * to one of the HKLM/Software/ODBC/ODBCINST.INI keys). (If you do this note
328 * that this will add a requirement that this function be called after
329 * ODBC_ReplicateODBCInstToRegistry)
331 static void ODBC_ReplicateODBCToRegistry (BOOL is_user
, SQLHENV hEnv
)
337 CHAR dsn
[SQL_MAX_DSN_LENGTH
+ 1];
340 SQLSMALLINT sizedesc
;
342 const char *which
= is_user
? "user" : "system";
345 if ((reg_ret
= RegCreateKeyExA (
346 is_user
? HKEY_CURRENT_USER
: HKEY_LOCAL_MACHINE
,
347 "Software\\ODBC\\ODBC.INI", 0, NULL
, REG_OPTION_NON_VOLATILE
,
348 KEY_ALL_ACCESS
/* a couple more than we need */, NULL
, &hODBC
,
349 NULL
)) == ERROR_SUCCESS
)
352 dirn
= is_user
? SQL_FETCH_FIRST_USER
: SQL_FETCH_FIRST_SYSTEM
;
353 while ((sql_ret
= SQLDataSources (hEnv
, dirn
,
354 (SQLCHAR
*)dsn
, sizeof(dsn
), &sizedsn
,
355 (SQLCHAR
*)desc
, sizeof(desc
), &sizedesc
)) == SQL_SUCCESS
356 || sql_ret
== SQL_SUCCESS_WITH_INFO
)
358 /* FIXME Do some proper handling of the SUCCESS_WITH_INFO */
359 dirn
= SQL_FETCH_NEXT
;
360 if (sizedsn
== lstrlenA(dsn
) && sizedesc
== lstrlenA(desc
))
363 if ((reg_ret
= RegCreateKeyExA (hODBC
, dsn
, 0,
364 NULL
, REG_OPTION_NON_VOLATILE
,
365 KEY_ALL_ACCESS
, NULL
, &hDSN
, NULL
))
368 static const char DRIVERKEY
[] = "Driver";
369 if ((reg_ret
= RegQueryValueExA (hDSN
, DRIVERKEY
,
370 NULL
, NULL
, NULL
, NULL
))
371 == ERROR_FILE_NOT_FOUND
)
373 if ((reg_ret
= RegSetValueExA (hDSN
, DRIVERKEY
, 0,
374 REG_SZ
, (LPBYTE
)desc
, sizedesc
)) != ERROR_SUCCESS
)
376 TRACE ("Error %d replicating description of "
377 "%s(%s)\n", reg_ret
, dsn
, desc
);
381 else if (reg_ret
!= ERROR_SUCCESS
)
383 TRACE ("Error %d checking for description of %s\n",
387 if ((reg_ret
= RegCloseKey (hDSN
)) != ERROR_SUCCESS
)
389 TRACE ("Error %d closing %s DSN key %s\n",
390 reg_ret
, which
, dsn
);
395 TRACE ("Error %d opening %s DSN key %s\n",
396 reg_ret
, which
, dsn
);
402 WARN ("Unusually long %s data source name %s (%s) not "
403 "replicated\n", which
, dsn
, desc
);
407 if (sql_ret
!= SQL_NO_DATA
)
409 TRACE ("Error %d enumerating %s datasources\n",
410 (int)sql_ret
, which
);
413 if ((reg_ret
= RegCloseKey (hODBC
)) != ERROR_SUCCESS
)
415 TRACE ("Error %d closing %s ODBC.INI registry key\n", reg_ret
,
421 TRACE ("Error %d creating/opening %s ODBC.INI registry key\n",
426 WARN ("May not have replicated all %s ODBC DSNs to the registry\n",
431 /***********************************************************************
432 * ODBC_ReplicateToRegistry
438 * Unfortunately some of the functions that Windows documents as being part
439 * of the ODBC API it implements directly during compilation or something
440 * in terms of registry access functions.
441 * e.g. SQLGetInstalledDrivers queries the list at
442 * HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers
444 * This function is called when the driver manager is loaded and is used
445 * to replicate the appropriate details into the Wine registry
448 static void ODBC_ReplicateToRegistry (void)
453 if ((sql_ret
= SQLAllocEnv (&hEnv
)) == SQL_SUCCESS
)
455 ODBC_ReplicateODBCInstToRegistry (hEnv
);
456 ODBC_ReplicateODBCToRegistry (FALSE
/* system dsns */, hEnv
);
457 ODBC_ReplicateODBCToRegistry (TRUE
/* user dsns */, hEnv
);
459 if ((sql_ret
= SQLFreeEnv (hEnv
)) != SQL_SUCCESS
)
461 TRACE ("Error %d freeing the SQL environment.\n", (int)sql_ret
);
466 TRACE ("Error %d opening an SQL environment.\n", (int)sql_ret
);
467 WARN ("The external ODBC settings have not been replicated to the"
472 /***********************************************************************
473 * DllMain [Internal] Initializes the internal 'ODBC32.DLL'.
475 BOOL WINAPI
DllMain(HINSTANCE hinstDLL
, DWORD reason
, LPVOID reserved
)
477 TRACE("proxy ODBC: %p,%x,%p\n", hinstDLL
, reason
, reserved
);
481 case DLL_PROCESS_ATTACH
:
482 DisableThreadLibraryCalls(hinstDLL
);
483 if (ODBC_LoadDriverManager())
485 ODBC_LoadDMFunctions();
486 ODBC_ReplicateToRegistry();
490 case DLL_PROCESS_DETACH
:
492 if (dmHandle
) wine_dlclose(dmHandle
,NULL
,0);
498 /***********************************************************************
499 * ODBC_LoadDriverManager [Internal] Load ODBC library.
508 static BOOL
ODBC_LoadDriverManager(void)
510 const char *s
= getenv("LIB_ODBC_DRIVER_MANAGER");
515 #ifdef SONAME_LIBODBC
516 if (!s
|| !s
[0]) s
= SONAME_LIBODBC
;
518 if (!s
|| !s
[0]) goto failed
;
520 dmHandle
= wine_dlopen(s
, RTLD_LAZY
| RTLD_GLOBAL
, error
, sizeof(error
));
522 if (dmHandle
!= NULL
)
524 nErrorType
= ERROR_FREE
;
528 WARN("failed to open library %s: %s\n", debugstr_a(s
), error
);
529 nErrorType
= ERROR_LIBRARY_NOT_FOUND
;
534 /***********************************************************************
535 * ODBC_LoadDMFunctions [Internal] Populate function table.
544 static BOOL
ODBC_LoadDMFunctions(void)
548 if (dmHandle
== NULL
)
551 #define LOAD_FUNC(name) \
552 if ((p##name = wine_dlsym( dmHandle, #name, error, sizeof(error) ))); \
553 else WARN( "Failed to load %s: %s\n", #name, error )
555 LOAD_FUNC(SQLAllocConnect
);
556 LOAD_FUNC(SQLAllocEnv
);
557 LOAD_FUNC(SQLAllocHandle
);
558 LOAD_FUNC(SQLAllocHandleStd
);
559 LOAD_FUNC(SQLAllocStmt
);
560 LOAD_FUNC(SQLBindCol
);
561 LOAD_FUNC(SQLBindParam
);
562 LOAD_FUNC(SQLBindParameter
);
563 LOAD_FUNC(SQLBrowseConnect
);
564 LOAD_FUNC(SQLBrowseConnectW
);
565 LOAD_FUNC(SQLBulkOperations
);
566 LOAD_FUNC(SQLCancel
);
567 LOAD_FUNC(SQLCloseCursor
);
568 LOAD_FUNC(SQLColAttribute
);
569 LOAD_FUNC(SQLColAttributeW
);
570 LOAD_FUNC(SQLColAttributes
);
571 LOAD_FUNC(SQLColAttributesW
);
572 LOAD_FUNC(SQLColumnPrivileges
);
573 LOAD_FUNC(SQLColumnPrivilegesW
);
574 LOAD_FUNC(SQLColumns
);
575 LOAD_FUNC(SQLColumnsW
);
576 LOAD_FUNC(SQLConnect
);
577 LOAD_FUNC(SQLConnectW
);
578 LOAD_FUNC(SQLCopyDesc
);
579 LOAD_FUNC(SQLDataSources
);
580 LOAD_FUNC(SQLDataSourcesA
);
581 LOAD_FUNC(SQLDataSourcesW
);
582 LOAD_FUNC(SQLDescribeCol
);
583 LOAD_FUNC(SQLDescribeColW
);
584 LOAD_FUNC(SQLDescribeParam
);
585 LOAD_FUNC(SQLDisconnect
);
586 LOAD_FUNC(SQLDriverConnect
);
587 LOAD_FUNC(SQLDriverConnectW
);
588 LOAD_FUNC(SQLDrivers
);
589 LOAD_FUNC(SQLDriversW
);
590 LOAD_FUNC(SQLEndTran
);
592 LOAD_FUNC(SQLErrorW
);
593 LOAD_FUNC(SQLExecDirect
);
594 LOAD_FUNC(SQLExecDirectW
);
595 LOAD_FUNC(SQLExecute
);
596 LOAD_FUNC(SQLExtendedFetch
);
598 LOAD_FUNC(SQLFetchScroll
);
599 LOAD_FUNC(SQLForeignKeys
);
600 LOAD_FUNC(SQLForeignKeysW
);
601 LOAD_FUNC(SQLFreeConnect
);
602 LOAD_FUNC(SQLFreeEnv
);
603 LOAD_FUNC(SQLFreeHandle
);
604 LOAD_FUNC(SQLFreeStmt
);
605 LOAD_FUNC(SQLGetConnectAttr
);
606 LOAD_FUNC(SQLGetConnectAttrW
);
607 LOAD_FUNC(SQLGetConnectOption
);
608 LOAD_FUNC(SQLGetConnectOptionW
);
609 LOAD_FUNC(SQLGetCursorName
);
610 LOAD_FUNC(SQLGetCursorNameW
);
611 LOAD_FUNC(SQLGetData
);
612 LOAD_FUNC(SQLGetDescField
);
613 LOAD_FUNC(SQLGetDescFieldW
);
614 LOAD_FUNC(SQLGetDescRec
);
615 LOAD_FUNC(SQLGetDescRecW
);
616 LOAD_FUNC(SQLGetDiagField
);
617 LOAD_FUNC(SQLGetDiagFieldW
);
618 LOAD_FUNC(SQLGetDiagRec
);
619 LOAD_FUNC(SQLGetDiagRecW
);
620 LOAD_FUNC(SQLGetEnvAttr
);
621 LOAD_FUNC(SQLGetFunctions
);
622 LOAD_FUNC(SQLGetInfo
);
623 LOAD_FUNC(SQLGetInfoW
);
624 LOAD_FUNC(SQLGetStmtAttr
);
625 LOAD_FUNC(SQLGetStmtAttrW
);
626 LOAD_FUNC(SQLGetStmtOption
);
627 LOAD_FUNC(SQLGetTypeInfo
);
628 LOAD_FUNC(SQLGetTypeInfoW
);
629 LOAD_FUNC(SQLMoreResults
);
630 LOAD_FUNC(SQLNativeSql
);
631 LOAD_FUNC(SQLNativeSqlW
);
632 LOAD_FUNC(SQLNumParams
);
633 LOAD_FUNC(SQLNumResultCols
);
634 LOAD_FUNC(SQLParamData
);
635 LOAD_FUNC(SQLParamOptions
);
636 LOAD_FUNC(SQLPrepare
);
637 LOAD_FUNC(SQLPrepareW
);
638 LOAD_FUNC(SQLPrimaryKeys
);
639 LOAD_FUNC(SQLPrimaryKeysW
);
640 LOAD_FUNC(SQLProcedureColumns
);
641 LOAD_FUNC(SQLProcedureColumnsW
);
642 LOAD_FUNC(SQLProcedures
);
643 LOAD_FUNC(SQLProceduresW
);
644 LOAD_FUNC(SQLPutData
);
645 LOAD_FUNC(SQLRowCount
);
646 LOAD_FUNC(SQLSetConnectAttr
);
647 LOAD_FUNC(SQLSetConnectAttrW
);
648 LOAD_FUNC(SQLSetConnectOption
);
649 LOAD_FUNC(SQLSetConnectOptionW
);
650 LOAD_FUNC(SQLSetCursorName
);
651 LOAD_FUNC(SQLSetCursorNameW
);
652 LOAD_FUNC(SQLSetDescField
);
653 LOAD_FUNC(SQLSetDescFieldW
);
654 LOAD_FUNC(SQLSetDescRec
);
655 LOAD_FUNC(SQLSetEnvAttr
);
656 LOAD_FUNC(SQLSetParam
);
657 LOAD_FUNC(SQLSetPos
);
658 LOAD_FUNC(SQLSetScrollOptions
);
659 LOAD_FUNC(SQLSetStmtAttr
);
660 LOAD_FUNC(SQLSetStmtAttrW
);
661 LOAD_FUNC(SQLSetStmtOption
);
662 LOAD_FUNC(SQLSpecialColumns
);
663 LOAD_FUNC(SQLSpecialColumnsW
);
664 LOAD_FUNC(SQLStatistics
);
665 LOAD_FUNC(SQLStatisticsW
);
666 LOAD_FUNC(SQLTablePrivileges
);
667 LOAD_FUNC(SQLTablePrivilegesW
);
668 LOAD_FUNC(SQLTables
);
669 LOAD_FUNC(SQLTablesW
);
670 LOAD_FUNC(SQLTransact
);
677 /*************************************************************************
678 * SQLAllocConnect [ODBC32.001]
680 SQLRETURN WINAPI
SQLAllocConnect(SQLHENV EnvironmentHandle
, SQLHDBC
*ConnectionHandle
)
683 TRACE("Env=%p\n",EnvironmentHandle
);
685 if (!pSQLAllocConnect
)
687 *ConnectionHandle
= SQL_NULL_HDBC
;
688 TRACE("Not ready\n");
692 ret
= pSQLAllocConnect(EnvironmentHandle
, ConnectionHandle
);
693 TRACE("Returns ret=%d, Handle %p\n",ret
, *ConnectionHandle
);
698 /*************************************************************************
699 * SQLAllocEnv [ODBC32.002]
701 SQLRETURN WINAPI
SQLAllocEnv(SQLHENV
*EnvironmentHandle
)
708 *EnvironmentHandle
= SQL_NULL_HENV
;
709 TRACE("Not ready\n");
713 ret
= pSQLAllocEnv(EnvironmentHandle
);
714 TRACE("Returns ret=%d, Env=%p\n",ret
, *EnvironmentHandle
);
719 /*************************************************************************
720 * SQLAllocHandle [ODBC32.024]
722 SQLRETURN WINAPI
SQLAllocHandle(SQLSMALLINT HandleType
, SQLHANDLE InputHandle
, SQLHANDLE
*OutputHandle
)
725 TRACE("(Type=%d, Handle=%p)\n",HandleType
,InputHandle
);
727 if (!pSQLAllocHandle
)
729 if (nErrorType
== ERROR_LIBRARY_NOT_FOUND
)
730 WARN("ProxyODBC: Cannot load ODBC driver manager library.\n");
732 if (HandleType
== SQL_HANDLE_ENV
)
733 *OutputHandle
= SQL_NULL_HENV
;
734 else if (HandleType
== SQL_HANDLE_DBC
)
735 *OutputHandle
= SQL_NULL_HDBC
;
736 else if (HandleType
== SQL_HANDLE_STMT
)
737 *OutputHandle
= SQL_NULL_HSTMT
;
738 else if (HandleType
== SQL_HANDLE_DESC
)
739 *OutputHandle
= SQL_NULL_HDESC
;
741 TRACE ("Not ready\n");
745 ret
= pSQLAllocHandle(HandleType
, InputHandle
, OutputHandle
);
746 TRACE("Returns ret=%d, Handle=%p\n",ret
, *OutputHandle
);
751 /*************************************************************************
752 * SQLAllocStmt [ODBC32.003]
754 SQLRETURN WINAPI
SQLAllocStmt(SQLHDBC ConnectionHandle
, SQLHSTMT
*StatementHandle
)
758 TRACE("(Connection=%p)\n",ConnectionHandle
);
762 *StatementHandle
= SQL_NULL_HSTMT
;
763 TRACE ("Not ready\n");
767 ret
= pSQLAllocStmt(ConnectionHandle
, StatementHandle
);
768 TRACE ("Returns ret=%d, Handle=%p\n", ret
, *StatementHandle
);
773 /*************************************************************************
774 * SQLAllocHandleStd [ODBC32.077]
776 SQLRETURN WINAPI
SQLAllocHandleStd( SQLSMALLINT HandleType
,
777 SQLHANDLE InputHandle
, SQLHANDLE
*OutputHandle
)
779 TRACE("ProxyODBC: SQLAllocHandleStd.\n");
781 if (!pSQLAllocHandleStd
)
783 if (nErrorType
== ERROR_LIBRARY_NOT_FOUND
)
784 WARN("ProxyODBC: Cannot load ODBC driver manager library.\n");
786 if (HandleType
== SQL_HANDLE_ENV
)
787 *OutputHandle
= SQL_NULL_HENV
;
788 else if (HandleType
== SQL_HANDLE_DBC
)
789 *OutputHandle
= SQL_NULL_HDBC
;
790 else if (HandleType
== SQL_HANDLE_STMT
)
791 *OutputHandle
= SQL_NULL_HSTMT
;
792 else if (HandleType
== SQL_HANDLE_DESC
)
793 *OutputHandle
= SQL_NULL_HDESC
;
798 return pSQLAllocHandleStd(HandleType
, InputHandle
, OutputHandle
);
802 /*************************************************************************
803 * SQLBindCol [ODBC32.004]
805 SQLRETURN WINAPI
SQLBindCol(SQLHSTMT StatementHandle
,
806 SQLUSMALLINT ColumnNumber
, SQLSMALLINT TargetType
,
807 SQLPOINTER TargetValue
, SQLLEN BufferLength
,
808 SQLLEN
*StrLen_or_Ind
)
814 TRACE ("Not ready\n");
818 return pSQLBindCol(StatementHandle
, ColumnNumber
, TargetType
,
819 TargetValue
, BufferLength
, StrLen_or_Ind
);
823 /*************************************************************************
824 * SQLBindParam [ODBC32.025]
826 SQLRETURN WINAPI
SQLBindParam(SQLHSTMT StatementHandle
,
827 SQLUSMALLINT ParameterNumber
, SQLSMALLINT ValueType
,
828 SQLSMALLINT ParameterType
, SQLULEN LengthPrecision
,
829 SQLSMALLINT ParameterScale
, SQLPOINTER ParameterValue
,
830 SQLLEN
*StrLen_or_Ind
)
834 if (!pSQLBindParam
) return SQL_ERROR
;
835 return pSQLBindParam(StatementHandle
, ParameterNumber
, ValueType
,
836 ParameterType
, LengthPrecision
, ParameterScale
,
837 ParameterValue
, StrLen_or_Ind
);
841 /*************************************************************************
842 * SQLCancel [ODBC32.005]
844 SQLRETURN WINAPI
SQLCancel(SQLHSTMT StatementHandle
)
848 if (!pSQLCancel
) return SQL_ERROR
;
849 return pSQLCancel(StatementHandle
);
853 /*************************************************************************
854 * SQLCloseCursor [ODBC32.026]
856 SQLRETURN WINAPI
SQLCloseCursor(SQLHSTMT StatementHandle
)
859 TRACE("(Handle=%p)\n",StatementHandle
);
861 if (!pSQLCloseCursor
) return SQL_ERROR
;
863 ret
= pSQLCloseCursor(StatementHandle
);
864 TRACE("returns %d\n",ret
);
869 /*************************************************************************
870 * SQLColAttribute [ODBC32.027]
872 SQLRETURN WINAPI
SQLColAttribute (SQLHSTMT StatementHandle
,
873 SQLUSMALLINT ColumnNumber
, SQLUSMALLINT FieldIdentifier
,
874 SQLPOINTER CharacterAttribute
, SQLSMALLINT BufferLength
,
875 SQLSMALLINT
*StringLength
, SQLPOINTER NumericAttribute
)
879 if (!pSQLColAttribute
) return SQL_ERROR
;
880 return pSQLColAttribute(StatementHandle
, ColumnNumber
, FieldIdentifier
,
881 CharacterAttribute
, BufferLength
, StringLength
, NumericAttribute
);
885 /*************************************************************************
886 * SQLColumns [ODBC32.040]
888 SQLRETURN WINAPI
SQLColumns(SQLHSTMT StatementHandle
,
889 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
890 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
891 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
892 SQLCHAR
*ColumnName
, SQLSMALLINT NameLength4
)
896 if (!pSQLColumns
) return SQL_ERROR
;
897 return pSQLColumns(StatementHandle
, CatalogName
, NameLength1
,
898 SchemaName
, NameLength2
, TableName
, NameLength3
, ColumnName
, NameLength4
);
902 /*************************************************************************
903 * SQLConnect [ODBC32.007]
905 SQLRETURN WINAPI
SQLConnect(SQLHDBC ConnectionHandle
,
906 SQLCHAR
*ServerName
, SQLSMALLINT NameLength1
,
907 SQLCHAR
*UserName
, SQLSMALLINT NameLength2
,
908 SQLCHAR
*Authentication
, SQLSMALLINT NameLength3
)
911 TRACE("(Server=%.*s)\n",NameLength1
, ServerName
);
913 if (!pSQLConnect
) return SQL_ERROR
;
915 ret
= pSQLConnect(ConnectionHandle
, ServerName
, NameLength1
,
916 UserName
, NameLength2
, Authentication
, NameLength3
);
918 TRACE("returns %d\n",ret
);
923 /*************************************************************************
924 * SQLCopyDesc [ODBC32.028]
926 SQLRETURN WINAPI
SQLCopyDesc(SQLHDESC SourceDescHandle
, SQLHDESC TargetDescHandle
)
930 if (!pSQLCopyDesc
) return SQL_ERROR
;
931 return pSQLCopyDesc(SourceDescHandle
, TargetDescHandle
);
935 /*************************************************************************
936 * SQLDataSources [ODBC32.057]
938 SQLRETURN WINAPI
SQLDataSources(SQLHENV EnvironmentHandle
,
939 SQLUSMALLINT Direction
, SQLCHAR
*ServerName
,
940 SQLSMALLINT BufferLength1
, SQLSMALLINT
*NameLength1
,
941 SQLCHAR
*Description
, SQLSMALLINT BufferLength2
,
942 SQLSMALLINT
*NameLength2
)
946 TRACE("EnvironmentHandle = %p\n", EnvironmentHandle
);
948 if (!pSQLDataSources
) return SQL_ERROR
;
950 ret
= pSQLDataSources(EnvironmentHandle
, Direction
, ServerName
,
951 BufferLength1
, NameLength1
, Description
, BufferLength2
, NameLength2
);
955 TRACE("returns: %d \t", ret
);
956 if (NameLength1
&& *NameLength1
> 0)
957 TRACE("DataSource = %s,", ServerName
);
958 if (NameLength2
&& *NameLength2
> 0)
959 TRACE(" Description = %s", Description
);
966 SQLRETURN WINAPI
SQLDataSourcesA(SQLHENV EnvironmentHandle
,
967 SQLUSMALLINT Direction
, SQLCHAR
*ServerName
,
968 SQLSMALLINT BufferLength1
, SQLSMALLINT
*NameLength1
,
969 SQLCHAR
*Description
, SQLSMALLINT BufferLength2
,
970 SQLSMALLINT
*NameLength2
)
974 TRACE("EnvironmentHandle = %p\n", EnvironmentHandle
);
976 if (!pSQLDataSourcesA
) return SQL_ERROR
;
978 ret
= pSQLDataSourcesA(EnvironmentHandle
, Direction
, ServerName
,
979 BufferLength1
, NameLength1
, Description
, BufferLength2
, NameLength2
);
982 TRACE("returns: %d \t", ret
);
983 if (NameLength1
&& *NameLength1
> 0)
984 TRACE("DataSource = %s,", ServerName
);
985 if (NameLength2
&& *NameLength2
> 0)
986 TRACE(" Description = %s", Description
);
993 /*************************************************************************
994 * SQLDescribeCol [ODBC32.008]
996 SQLRETURN WINAPI
SQLDescribeCol(SQLHSTMT StatementHandle
,
997 SQLUSMALLINT ColumnNumber
, SQLCHAR
*ColumnName
,
998 SQLSMALLINT BufferLength
, SQLSMALLINT
*NameLength
,
999 SQLSMALLINT
*DataType
, SQLULEN
*ColumnSize
,
1000 SQLSMALLINT
*DecimalDigits
, SQLSMALLINT
*Nullable
)
1004 if (!pSQLDescribeCol
) return SQL_ERROR
;
1005 return pSQLDescribeCol(StatementHandle
, ColumnNumber
, ColumnName
,
1006 BufferLength
, NameLength
, DataType
, ColumnSize
, DecimalDigits
, Nullable
);
1010 /*************************************************************************
1011 * SQLDisconnect [ODBC32.009]
1013 SQLRETURN WINAPI
SQLDisconnect(SQLHDBC ConnectionHandle
)
1016 TRACE("(Handle=%p)\n", ConnectionHandle
);
1018 if (!pSQLDisconnect
) return SQL_ERROR
;
1020 ret
= pSQLDisconnect(ConnectionHandle
);
1021 TRACE("returns %d\n",ret
);
1026 /*************************************************************************
1027 * SQLEndTran [ODBC32.029]
1029 SQLRETURN WINAPI
SQLEndTran(SQLSMALLINT HandleType
, SQLHANDLE Handle
, SQLSMALLINT CompletionType
)
1033 if (!pSQLEndTran
) return SQL_ERROR
;
1034 return pSQLEndTran(HandleType
, Handle
, CompletionType
);
1038 /*************************************************************************
1039 * SQLError [ODBC32.010]
1041 SQLRETURN WINAPI
SQLError(SQLHENV EnvironmentHandle
,
1042 SQLHDBC ConnectionHandle
, SQLHSTMT StatementHandle
,
1043 SQLCHAR
*Sqlstate
, SQLINTEGER
*NativeError
,
1044 SQLCHAR
*MessageText
, SQLSMALLINT BufferLength
,
1045 SQLSMALLINT
*TextLength
)
1049 if (!pSQLError
) return SQL_ERROR
;
1050 return pSQLError(EnvironmentHandle
, ConnectionHandle
, StatementHandle
,
1051 Sqlstate
, NativeError
, MessageText
, BufferLength
, TextLength
);
1055 /*************************************************************************
1056 * SQLExecDirect [ODBC32.011]
1058 SQLRETURN WINAPI
SQLExecDirect(SQLHSTMT StatementHandle
, SQLCHAR
*StatementText
, SQLINTEGER TextLength
)
1062 if (!pSQLExecDirect
) return SQL_ERROR
;
1063 return pSQLExecDirect(StatementHandle
, StatementText
, TextLength
);
1067 /*************************************************************************
1068 * SQLExecute [ODBC32.012]
1070 SQLRETURN WINAPI
SQLExecute(SQLHSTMT StatementHandle
)
1074 if (!pSQLExecute
) return SQL_ERROR
;
1075 return pSQLExecute(StatementHandle
);
1079 /*************************************************************************
1080 * SQLFetch [ODBC32.013]
1082 SQLRETURN WINAPI
SQLFetch(SQLHSTMT StatementHandle
)
1086 if (!pSQLFetch
) return SQL_ERROR
;
1087 return pSQLFetch(StatementHandle
);
1091 /*************************************************************************
1092 * SQLFetchScroll [ODBC32.030]
1094 SQLRETURN WINAPI
SQLFetchScroll(SQLHSTMT StatementHandle
, SQLSMALLINT FetchOrientation
, SQLLEN FetchOffset
)
1098 if (!pSQLFetchScroll
) return SQL_ERROR
;
1099 return pSQLFetchScroll(StatementHandle
, FetchOrientation
, FetchOffset
);
1103 /*************************************************************************
1104 * SQLFreeConnect [ODBC32.014]
1106 SQLRETURN WINAPI
SQLFreeConnect(SQLHDBC ConnectionHandle
)
1109 TRACE("(Handle=%p)\n",ConnectionHandle
);
1111 if (!pSQLFreeConnect
) return SQL_ERROR
;
1113 ret
= pSQLFreeConnect(ConnectionHandle
);
1114 TRACE("Returns %d\n",ret
);
1119 /*************************************************************************
1120 * SQLFreeEnv [ODBC32.015]
1122 SQLRETURN WINAPI
SQLFreeEnv(SQLHENV EnvironmentHandle
)
1125 TRACE("(Env=%p)\n",EnvironmentHandle
);
1127 if (!pSQLFreeEnv
) return SQL_ERROR
;
1129 ret
= pSQLFreeEnv(EnvironmentHandle
);
1130 TRACE("Returns %d\n",ret
);
1135 /*************************************************************************
1136 * SQLFreeHandle [ODBC32.031]
1138 SQLRETURN WINAPI
SQLFreeHandle(SQLSMALLINT HandleType
, SQLHANDLE Handle
)
1141 TRACE("(Type=%d, Handle=%p)\n",HandleType
,Handle
);
1143 if (!pSQLFreeHandle
) return SQL_ERROR
;
1145 ret
= pSQLFreeHandle(HandleType
, Handle
);
1146 TRACE ("Returns %d\n",ret
);
1151 /*************************************************************************
1152 * SQLFreeStmt [ODBC32.016]
1154 SQLRETURN WINAPI
SQLFreeStmt(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
)
1157 TRACE("(Handle %p, Option=%d)\n",StatementHandle
, Option
);
1159 if (!pSQLFreeStmt
) return SQL_ERROR
;
1161 ret
= pSQLFreeStmt(StatementHandle
, Option
);
1162 TRACE("Returns %d\n",ret
);
1167 /*************************************************************************
1168 * SQLGetConnectAttr [ODBC32.032]
1170 SQLRETURN WINAPI
SQLGetConnectAttr(SQLHDBC ConnectionHandle
,
1171 SQLINTEGER Attribute
, SQLPOINTER Value
,
1172 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
1176 if (!pSQLGetConnectAttr
) return SQL_ERROR
;
1177 return pSQLGetConnectAttr(ConnectionHandle
, Attribute
, Value
,
1178 BufferLength
, StringLength
);
1182 /*************************************************************************
1183 * SQLGetConnectOption [ODBC32.042]
1185 SQLRETURN WINAPI
SQLGetConnectOption(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLPOINTER Value
)
1189 if (!pSQLGetConnectOption
) return SQL_ERROR
;
1190 return pSQLGetConnectOption(ConnectionHandle
, Option
, Value
);
1194 /*************************************************************************
1195 * SQLGetCursorName [ODBC32.017]
1197 SQLRETURN WINAPI
SQLGetCursorName(SQLHSTMT StatementHandle
,
1198 SQLCHAR
*CursorName
, SQLSMALLINT BufferLength
,
1199 SQLSMALLINT
*NameLength
)
1203 if (!pSQLGetCursorName
) return SQL_ERROR
;
1204 return pSQLGetCursorName(StatementHandle
, CursorName
, BufferLength
, NameLength
);
1208 /*************************************************************************
1209 * SQLGetData [ODBC32.043]
1211 SQLRETURN WINAPI
SQLGetData(SQLHSTMT StatementHandle
,
1212 SQLUSMALLINT ColumnNumber
, SQLSMALLINT TargetType
,
1213 SQLPOINTER TargetValue
, SQLLEN BufferLength
,
1214 SQLLEN
*StrLen_or_Ind
)
1218 if (!pSQLGetData
) return SQL_ERROR
;
1219 return pSQLGetData(StatementHandle
, ColumnNumber
, TargetType
,
1220 TargetValue
, BufferLength
, StrLen_or_Ind
);
1224 /*************************************************************************
1225 * SQLGetDescField [ODBC32.033]
1227 SQLRETURN WINAPI
SQLGetDescField(SQLHDESC DescriptorHandle
,
1228 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
1229 SQLPOINTER Value
, SQLINTEGER BufferLength
,
1230 SQLINTEGER
*StringLength
)
1234 if (!pSQLGetDescField
) return SQL_ERROR
;
1235 return pSQLGetDescField(DescriptorHandle
, RecNumber
, FieldIdentifier
,
1236 Value
, BufferLength
, StringLength
);
1240 /*************************************************************************
1241 * SQLGetDescRec [ODBC32.034]
1243 SQLRETURN WINAPI
SQLGetDescRec(SQLHDESC DescriptorHandle
,
1244 SQLSMALLINT RecNumber
, SQLCHAR
*Name
,
1245 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
,
1246 SQLSMALLINT
*Type
, SQLSMALLINT
*SubType
,
1247 SQLLEN
*Length
, SQLSMALLINT
*Precision
,
1248 SQLSMALLINT
*Scale
, SQLSMALLINT
*Nullable
)
1252 if (!pSQLGetDescRec
) return SQL_ERROR
;
1253 return pSQLGetDescRec(DescriptorHandle
, RecNumber
, Name
, BufferLength
,
1254 StringLength
, Type
, SubType
, Length
, Precision
, Scale
, Nullable
);
1258 /*************************************************************************
1259 * SQLGetDiagField [ODBC32.035]
1261 SQLRETURN WINAPI
SQLGetDiagField(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
1262 SQLSMALLINT RecNumber
, SQLSMALLINT DiagIdentifier
,
1263 SQLPOINTER DiagInfo
, SQLSMALLINT BufferLength
,
1264 SQLSMALLINT
*StringLength
)
1268 if (!pSQLGetDiagField
) return SQL_ERROR
;
1269 return pSQLGetDiagField(HandleType
, Handle
, RecNumber
, DiagIdentifier
,
1270 DiagInfo
, BufferLength
, StringLength
);
1274 /*************************************************************************
1275 * SQLGetDiagRec [ODBC32.036]
1277 SQLRETURN WINAPI
SQLGetDiagRec(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
1278 SQLSMALLINT RecNumber
, SQLCHAR
*Sqlstate
,
1279 SQLINTEGER
*NativeError
, SQLCHAR
*MessageText
,
1280 SQLSMALLINT BufferLength
, SQLSMALLINT
*TextLength
)
1284 if (!pSQLGetDiagRec
) return SQL_ERROR
;
1285 return pSQLGetDiagRec(HandleType
, Handle
, RecNumber
, Sqlstate
, NativeError
,
1286 MessageText
, BufferLength
, TextLength
);
1290 /*************************************************************************
1291 * SQLGetEnvAttr [ODBC32.037]
1293 SQLRETURN WINAPI
SQLGetEnvAttr(SQLHENV EnvironmentHandle
,
1294 SQLINTEGER Attribute
, SQLPOINTER Value
,
1295 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
1299 if (!pSQLGetEnvAttr
) return SQL_ERROR
;
1300 return pSQLGetEnvAttr(EnvironmentHandle
, Attribute
, Value
, BufferLength
, StringLength
);
1304 /*************************************************************************
1305 * SQLGetFunctions [ODBC32.044]
1307 SQLRETURN WINAPI
SQLGetFunctions(SQLHDBC ConnectionHandle
, SQLUSMALLINT FunctionId
, SQLUSMALLINT
*Supported
)
1311 if (!pSQLGetFunctions
) return SQL_ERROR
;
1312 return pSQLGetFunctions(ConnectionHandle
, FunctionId
, Supported
);
1316 /*************************************************************************
1317 * SQLGetInfo [ODBC32.045]
1319 SQLRETURN WINAPI
SQLGetInfo(SQLHDBC ConnectionHandle
,
1320 SQLUSMALLINT InfoType
, SQLPOINTER InfoValue
,
1321 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
)
1325 if (!pSQLGetInfo
) return SQL_ERROR
;
1326 return pSQLGetInfo(ConnectionHandle
, InfoType
, InfoValue
, BufferLength
, StringLength
);
1330 /*************************************************************************
1331 * SQLGetStmtAttr [ODBC32.038]
1333 SQLRETURN WINAPI
SQLGetStmtAttr(SQLHSTMT StatementHandle
,
1334 SQLINTEGER Attribute
, SQLPOINTER Value
,
1335 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
1339 if (!pSQLGetStmtAttr
) return SQL_ERROR
;
1340 return pSQLGetStmtAttr(StatementHandle
, Attribute
, Value
, BufferLength
, StringLength
);
1344 /*************************************************************************
1345 * SQLGetStmtOption [ODBC32.046]
1347 SQLRETURN WINAPI
SQLGetStmtOption(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
, SQLPOINTER Value
)
1351 if (!pSQLGetStmtOption
) return SQL_ERROR
;
1352 return pSQLGetStmtOption(StatementHandle
, Option
, Value
);
1356 /*************************************************************************
1357 * SQLGetTypeInfo [ODBC32.047]
1359 SQLRETURN WINAPI
SQLGetTypeInfo(SQLHSTMT StatementHandle
, SQLSMALLINT DataType
)
1363 if (!pSQLGetTypeInfo
) return SQL_ERROR
;
1364 return pSQLGetTypeInfo(StatementHandle
, DataType
);
1368 /*************************************************************************
1369 * SQLNumResultCols [ODBC32.018]
1371 SQLRETURN WINAPI
SQLNumResultCols(SQLHSTMT StatementHandle
, SQLSMALLINT
*ColumnCount
)
1375 if (!pSQLNumResultCols
) return SQL_ERROR
;
1376 return pSQLNumResultCols(StatementHandle
, ColumnCount
);
1380 /*************************************************************************
1381 * SQLParamData [ODBC32.048]
1383 SQLRETURN WINAPI
SQLParamData(SQLHSTMT StatementHandle
, SQLPOINTER
*Value
)
1387 if (!pSQLParamData
) return SQL_ERROR
;
1388 return pSQLParamData(StatementHandle
, Value
);
1392 /*************************************************************************
1393 * SQLPrepare [ODBC32.019]
1395 SQLRETURN WINAPI
SQLPrepare(SQLHSTMT StatementHandle
, SQLCHAR
*StatementText
, SQLINTEGER TextLength
)
1399 if (!pSQLPrepare
) return SQL_ERROR
;
1400 return pSQLPrepare(StatementHandle
, StatementText
, TextLength
);
1404 /*************************************************************************
1405 * SQLPutData [ODBC32.049]
1407 SQLRETURN WINAPI
SQLPutData(SQLHSTMT StatementHandle
, SQLPOINTER Data
, SQLLEN StrLen_or_Ind
)
1411 if (!pSQLPutData
) return SQL_ERROR
;
1412 return pSQLPutData(StatementHandle
, Data
, StrLen_or_Ind
);
1416 /*************************************************************************
1417 * SQLRowCount [ODBC32.020]
1419 SQLRETURN WINAPI
SQLRowCount(SQLHSTMT StatementHandle
, SQLLEN
*RowCount
)
1423 if (!pSQLRowCount
) return SQL_ERROR
;
1424 return pSQLRowCount(StatementHandle
, RowCount
);
1428 /*************************************************************************
1429 * SQLSetConnectAttr [ODBC32.039]
1431 SQLRETURN WINAPI
SQLSetConnectAttr(SQLHDBC ConnectionHandle
, SQLINTEGER Attribute
,
1432 SQLPOINTER Value
, SQLINTEGER StringLength
)
1436 if (!pSQLSetConnectAttr
) return SQL_ERROR
;
1437 return pSQLSetConnectAttr(ConnectionHandle
, Attribute
, Value
, StringLength
);
1441 /*************************************************************************
1442 * SQLSetConnectOption [ODBC32.050]
1444 SQLRETURN WINAPI
SQLSetConnectOption(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLULEN Value
)
1448 if (!pSQLSetConnectOption
) return SQL_ERROR
;
1449 return pSQLSetConnectOption(ConnectionHandle
, Option
, Value
);
1453 /*************************************************************************
1454 * SQLSetCursorName [ODBC32.021]
1456 SQLRETURN WINAPI
SQLSetCursorName(SQLHSTMT StatementHandle
, SQLCHAR
*CursorName
, SQLSMALLINT NameLength
)
1460 if (!pSQLSetCursorName
) return SQL_ERROR
;
1461 return pSQLSetCursorName(StatementHandle
, CursorName
, NameLength
);
1465 /*************************************************************************
1466 * SQLSetDescField [ODBC32.073]
1468 SQLRETURN WINAPI
SQLSetDescField(SQLHDESC DescriptorHandle
,
1469 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
1470 SQLPOINTER Value
, SQLINTEGER BufferLength
)
1474 if (!pSQLSetDescField
) return SQL_ERROR
;
1475 return pSQLSetDescField(DescriptorHandle
, RecNumber
, FieldIdentifier
, Value
, BufferLength
);
1479 /*************************************************************************
1480 * SQLSetDescRec [ODBC32.074]
1482 SQLRETURN WINAPI
SQLSetDescRec(SQLHDESC DescriptorHandle
,
1483 SQLSMALLINT RecNumber
, SQLSMALLINT Type
,
1484 SQLSMALLINT SubType
, SQLLEN Length
,
1485 SQLSMALLINT Precision
, SQLSMALLINT Scale
,
1486 SQLPOINTER Data
, SQLLEN
*StringLength
,
1491 if (!pSQLSetDescRec
) return SQL_ERROR
;
1492 return pSQLSetDescRec(DescriptorHandle
, RecNumber
, Type
, SubType
, Length
,
1493 Precision
, Scale
, Data
, StringLength
, Indicator
);
1497 /*************************************************************************
1498 * SQLSetEnvAttr [ODBC32.075]
1500 SQLRETURN WINAPI
SQLSetEnvAttr(SQLHENV EnvironmentHandle
,
1501 SQLINTEGER Attribute
, SQLPOINTER Value
,
1502 SQLINTEGER StringLength
)
1506 if (!pSQLSetEnvAttr
) return SQL_ERROR
;
1507 return pSQLSetEnvAttr(EnvironmentHandle
, Attribute
, Value
, StringLength
);
1511 /*************************************************************************
1512 * SQLSetParam [ODBC32.022]
1514 SQLRETURN WINAPI
SQLSetParam(SQLHSTMT StatementHandle
,
1515 SQLUSMALLINT ParameterNumber
, SQLSMALLINT ValueType
,
1516 SQLSMALLINT ParameterType
, SQLULEN LengthPrecision
,
1517 SQLSMALLINT ParameterScale
, SQLPOINTER ParameterValue
,
1518 SQLLEN
*StrLen_or_Ind
)
1522 if (!pSQLSetParam
) return SQL_ERROR
;
1523 return pSQLSetParam(StatementHandle
, ParameterNumber
, ValueType
, ParameterType
, LengthPrecision
,
1524 ParameterScale
, ParameterValue
, StrLen_or_Ind
);
1528 /*************************************************************************
1529 * SQLSetStmtAttr [ODBC32.076]
1531 SQLRETURN WINAPI
SQLSetStmtAttr(SQLHSTMT StatementHandle
,
1532 SQLINTEGER Attribute
, SQLPOINTER Value
,
1533 SQLINTEGER StringLength
)
1537 if (!pSQLSetStmtAttr
) return SQL_ERROR
;
1538 return pSQLSetStmtAttr(StatementHandle
, Attribute
, Value
, StringLength
);
1542 /*************************************************************************
1543 * SQLSetStmtOption [ODBC32.051]
1545 SQLRETURN WINAPI
SQLSetStmtOption(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
, SQLULEN Value
)
1549 if (!pSQLSetStmtOption
) return SQL_ERROR
;
1550 return pSQLSetStmtOption(StatementHandle
, Option
, Value
);
1554 /*************************************************************************
1555 * SQLSpecialColumns [ODBC32.052]
1557 SQLRETURN WINAPI
SQLSpecialColumns(SQLHSTMT StatementHandle
,
1558 SQLUSMALLINT IdentifierType
, SQLCHAR
*CatalogName
,
1559 SQLSMALLINT NameLength1
, SQLCHAR
*SchemaName
,
1560 SQLSMALLINT NameLength2
, SQLCHAR
*TableName
,
1561 SQLSMALLINT NameLength3
, SQLUSMALLINT Scope
,
1562 SQLUSMALLINT Nullable
)
1565 if (!pSQLSpecialColumns
) return SQL_ERROR
;
1566 return pSQLSpecialColumns(StatementHandle
, IdentifierType
, CatalogName
, NameLength1
, SchemaName
,
1567 NameLength2
, TableName
, NameLength3
, Scope
, Nullable
);
1571 /*************************************************************************
1572 * SQLStatistics [ODBC32.053]
1574 SQLRETURN WINAPI
SQLStatistics(SQLHSTMT StatementHandle
,
1575 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
1576 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
1577 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
1578 SQLUSMALLINT Unique
, SQLUSMALLINT Reserved
)
1582 if (!pSQLStatistics
) return SQL_ERROR
;
1583 return pSQLStatistics(StatementHandle
, CatalogName
, NameLength1
, SchemaName
, NameLength2
,
1584 TableName
, NameLength3
, Unique
, Reserved
);
1588 /*************************************************************************
1589 * SQLTables [ODBC32.054]
1591 SQLRETURN WINAPI
SQLTables(SQLHSTMT StatementHandle
,
1592 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
1593 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
1594 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
1595 SQLCHAR
*TableType
, SQLSMALLINT NameLength4
)
1599 if (!pSQLTables
) return SQL_ERROR
;
1600 return pSQLTables(StatementHandle
, CatalogName
, NameLength1
,
1601 SchemaName
, NameLength2
, TableName
, NameLength3
, TableType
, NameLength4
);
1605 /*************************************************************************
1606 * SQLTransact [ODBC32.023]
1608 SQLRETURN WINAPI
SQLTransact(SQLHENV EnvironmentHandle
, SQLHDBC ConnectionHandle
,
1609 SQLUSMALLINT CompletionType
)
1613 if (!pSQLTransact
) return SQL_ERROR
;
1614 return pSQLTransact(EnvironmentHandle
, ConnectionHandle
, CompletionType
);
1618 /*************************************************************************
1619 * SQLBrowseConnect [ODBC32.055]
1621 SQLRETURN WINAPI
SQLBrowseConnect(
1623 SQLCHAR
*szConnStrIn
,
1624 SQLSMALLINT cbConnStrIn
,
1625 SQLCHAR
*szConnStrOut
,
1626 SQLSMALLINT cbConnStrOutMax
,
1627 SQLSMALLINT
*pcbConnStrOut
)
1631 if (!pSQLBrowseConnect
) return SQL_ERROR
;
1632 return pSQLBrowseConnect(hdbc
, szConnStrIn
, cbConnStrIn
, szConnStrOut
, cbConnStrOutMax
, pcbConnStrOut
);
1636 /*************************************************************************
1637 * SQLBulkOperations [ODBC32.078]
1639 SQLRETURN WINAPI
SQLBulkOperations(
1640 SQLHSTMT StatementHandle
,
1641 SQLSMALLINT Operation
)
1645 if (!pSQLBulkOperations
) return SQL_ERROR
;
1646 return pSQLBulkOperations(StatementHandle
, Operation
);
1650 /*************************************************************************
1651 * SQLColAttributes [ODBC32.006]
1653 SQLRETURN WINAPI
SQLColAttributes(
1656 SQLUSMALLINT fDescType
,
1658 SQLSMALLINT cbDescMax
,
1659 SQLSMALLINT
*pcbDesc
,
1664 if (!pSQLColAttributes
) return SQL_ERROR
;
1665 return pSQLColAttributes(hstmt
, icol
, fDescType
, rgbDesc
, cbDescMax
, pcbDesc
, pfDesc
);
1669 /*************************************************************************
1670 * SQLColumnPrivileges [ODBC32.056]
1672 SQLRETURN WINAPI
SQLColumnPrivileges(
1674 SQLCHAR
*szCatalogName
,
1675 SQLSMALLINT cbCatalogName
,
1676 SQLCHAR
*szSchemaName
,
1677 SQLSMALLINT cbSchemaName
,
1678 SQLCHAR
*szTableName
,
1679 SQLSMALLINT cbTableName
,
1680 SQLCHAR
*szColumnName
,
1681 SQLSMALLINT cbColumnName
)
1685 if (!pSQLColumnPrivileges
) return SQL_ERROR
;
1686 return pSQLColumnPrivileges(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1687 szTableName
, cbTableName
, szColumnName
, cbColumnName
);
1691 /*************************************************************************
1692 * SQLDescribeParam [ODBC32.058]
1694 SQLRETURN WINAPI
SQLDescribeParam(
1697 SQLSMALLINT
*pfSqlType
,
1698 SQLULEN
*pcbParamDef
,
1699 SQLSMALLINT
*pibScale
,
1700 SQLSMALLINT
*pfNullable
)
1704 if (!pSQLDescribeParam
) return SQL_ERROR
;
1705 return pSQLDescribeParam(hstmt
, ipar
, pfSqlType
, pcbParamDef
, pibScale
, pfNullable
);
1709 /*************************************************************************
1710 * SQLExtendedFetch [ODBC32.059]
1712 SQLRETURN WINAPI
SQLExtendedFetch(
1714 SQLUSMALLINT fFetchType
,
1717 SQLUSMALLINT
*rgfRowStatus
)
1721 if (!pSQLExtendedFetch
) return SQL_ERROR
;
1722 return pSQLExtendedFetch(hstmt
, fFetchType
, irow
, pcrow
, rgfRowStatus
);
1726 /*************************************************************************
1727 * SQLForeignKeys [ODBC32.060]
1729 SQLRETURN WINAPI
SQLForeignKeys(
1731 SQLCHAR
*szPkCatalogName
,
1732 SQLSMALLINT cbPkCatalogName
,
1733 SQLCHAR
*szPkSchemaName
,
1734 SQLSMALLINT cbPkSchemaName
,
1735 SQLCHAR
*szPkTableName
,
1736 SQLSMALLINT cbPkTableName
,
1737 SQLCHAR
*szFkCatalogName
,
1738 SQLSMALLINT cbFkCatalogName
,
1739 SQLCHAR
*szFkSchemaName
,
1740 SQLSMALLINT cbFkSchemaName
,
1741 SQLCHAR
*szFkTableName
,
1742 SQLSMALLINT cbFkTableName
)
1746 if (!pSQLForeignKeys
) return SQL_ERROR
;
1747 return pSQLForeignKeys(hstmt
, szPkCatalogName
, cbPkCatalogName
, szPkSchemaName
, cbPkSchemaName
,
1748 szPkTableName
, cbPkTableName
, szFkCatalogName
, cbFkCatalogName
,
1749 szFkSchemaName
, cbFkSchemaName
, szFkTableName
, cbFkTableName
);
1753 /*************************************************************************
1754 * SQLMoreResults [ODBC32.061]
1756 SQLRETURN WINAPI
SQLMoreResults(SQLHSTMT hstmt
)
1760 if (!pSQLMoreResults
) return SQL_ERROR
;
1761 return pSQLMoreResults(hstmt
);
1765 /*************************************************************************
1766 * SQLNativeSql [ODBC32.062]
1768 SQLRETURN WINAPI
SQLNativeSql(
1770 SQLCHAR
*szSqlStrIn
,
1771 SQLINTEGER cbSqlStrIn
,
1773 SQLINTEGER cbSqlStrMax
,
1774 SQLINTEGER
*pcbSqlStr
)
1778 if (!pSQLNativeSql
) return SQL_ERROR
;
1779 return pSQLNativeSql(hdbc
, szSqlStrIn
, cbSqlStrIn
, szSqlStr
, cbSqlStrMax
, pcbSqlStr
);
1783 /*************************************************************************
1784 * SQLNumParams [ODBC32.063]
1786 SQLRETURN WINAPI
SQLNumParams(
1792 if (!pSQLNumParams
) return SQL_ERROR
;
1793 return pSQLNumParams(hstmt
, pcpar
);
1797 /*************************************************************************
1798 * SQLParamOptions [ODBC32.064]
1800 SQLRETURN WINAPI
SQLParamOptions(
1807 if (!pSQLParamOptions
) return SQL_ERROR
;
1808 return pSQLParamOptions(hstmt
, crow
, pirow
);
1812 /*************************************************************************
1813 * SQLPrimaryKeys [ODBC32.065]
1815 SQLRETURN WINAPI
SQLPrimaryKeys(
1817 SQLCHAR
*szCatalogName
,
1818 SQLSMALLINT cbCatalogName
,
1819 SQLCHAR
*szSchemaName
,
1820 SQLSMALLINT cbSchemaName
,
1821 SQLCHAR
*szTableName
,
1822 SQLSMALLINT cbTableName
)
1826 if (!pSQLPrimaryKeys
) return SQL_ERROR
;
1827 return pSQLPrimaryKeys(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1828 szTableName
, cbTableName
);
1832 /*************************************************************************
1833 * SQLProcedureColumns [ODBC32.066]
1835 SQLRETURN WINAPI
SQLProcedureColumns(
1837 SQLCHAR
*szCatalogName
,
1838 SQLSMALLINT cbCatalogName
,
1839 SQLCHAR
*szSchemaName
,
1840 SQLSMALLINT cbSchemaName
,
1841 SQLCHAR
*szProcName
,
1842 SQLSMALLINT cbProcName
,
1843 SQLCHAR
*szColumnName
,
1844 SQLSMALLINT cbColumnName
)
1848 if (!pSQLProcedureColumns
) return SQL_ERROR
;
1849 return pSQLProcedureColumns(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1850 szProcName
, cbProcName
, szColumnName
, cbColumnName
);
1854 /*************************************************************************
1855 * SQLProcedures [ODBC32.067]
1857 SQLRETURN WINAPI
SQLProcedures(
1859 SQLCHAR
*szCatalogName
,
1860 SQLSMALLINT cbCatalogName
,
1861 SQLCHAR
*szSchemaName
,
1862 SQLSMALLINT cbSchemaName
,
1863 SQLCHAR
*szProcName
,
1864 SQLSMALLINT cbProcName
)
1868 if (!pSQLProcedures
) return SQL_ERROR
;
1869 return pSQLProcedures(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1870 szProcName
, cbProcName
);
1874 /*************************************************************************
1875 * SQLSetPos [ODBC32.068]
1877 SQLRETURN WINAPI
SQLSetPos(
1880 SQLUSMALLINT fOption
,
1885 if (!pSQLSetPos
) return SQL_ERROR
;
1886 return pSQLSetPos(hstmt
, irow
, fOption
, fLock
);
1890 /*************************************************************************
1891 * SQLTablePrivileges [ODBC32.070]
1893 SQLRETURN WINAPI
SQLTablePrivileges(
1895 SQLCHAR
*szCatalogName
,
1896 SQLSMALLINT cbCatalogName
,
1897 SQLCHAR
*szSchemaName
,
1898 SQLSMALLINT cbSchemaName
,
1899 SQLCHAR
*szTableName
,
1900 SQLSMALLINT cbTableName
)
1904 if (!pSQLTablePrivileges
) return SQL_ERROR
;
1905 return pSQLTablePrivileges(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1906 szTableName
, cbTableName
);
1910 /*************************************************************************
1911 * SQLDrivers [ODBC32.071]
1913 SQLRETURN WINAPI
SQLDrivers(
1915 SQLUSMALLINT fDirection
,
1916 SQLCHAR
*szDriverDesc
,
1917 SQLSMALLINT cbDriverDescMax
,
1918 SQLSMALLINT
*pcbDriverDesc
,
1919 SQLCHAR
*szDriverAttributes
,
1920 SQLSMALLINT cbDriverAttrMax
,
1921 SQLSMALLINT
*pcbDriverAttr
)
1925 TRACE("direction=%d\n", fDirection
);
1927 if (!pSQLDrivers
) return SQL_ERROR
;
1928 ret
= pSQLDrivers(henv
, fDirection
, szDriverDesc
, cbDriverDescMax
, pcbDriverDesc
,
1929 szDriverAttributes
, cbDriverAttrMax
, pcbDriverAttr
);
1931 if (ret
== SQL_NO_DATA
&& fDirection
== SQL_FETCH_FIRST
)
1932 ERR_(winediag
)("No ODBC drivers could be found. "
1933 "Check the settings for your libodbc provider.\n");
1939 /*************************************************************************
1940 * SQLBindParameter [ODBC32.072]
1942 SQLRETURN WINAPI
SQLBindParameter(
1945 SQLSMALLINT fParamType
,
1947 SQLSMALLINT fSqlType
,
1949 SQLSMALLINT ibScale
,
1950 SQLPOINTER rgbValue
,
1956 if (!pSQLBindParameter
) return SQL_ERROR
;
1957 return pSQLBindParameter(hstmt
, ipar
, fParamType
, fCType
, fSqlType
, cbColDef
, ibScale
,
1958 rgbValue
, cbValueMax
, pcbValue
);
1962 /*************************************************************************
1963 * SQLDriverConnect [ODBC32.041]
1965 SQLRETURN WINAPI
SQLDriverConnect(
1968 SQLCHAR
*conn_str_in
,
1969 SQLSMALLINT len_conn_str_in
,
1970 SQLCHAR
*conn_str_out
,
1971 SQLSMALLINT conn_str_out_max
,
1972 SQLSMALLINT
*ptr_conn_str_out
,
1973 SQLUSMALLINT driver_completion
)
1977 if (!pSQLDriverConnect
) return SQL_ERROR
;
1978 return pSQLDriverConnect(hdbc
, hwnd
, conn_str_in
, len_conn_str_in
, conn_str_out
,
1979 conn_str_out_max
, ptr_conn_str_out
, driver_completion
);
1983 /*************************************************************************
1984 * SQLSetScrollOptions [ODBC32.069]
1986 SQLRETURN WINAPI
SQLSetScrollOptions(
1987 SQLHSTMT statement_handle
,
1988 SQLUSMALLINT f_concurrency
,
1990 SQLUSMALLINT crow_rowset
)
1994 if (!pSQLSetScrollOptions
) return SQL_ERROR
;
1995 return pSQLSetScrollOptions(statement_handle
, f_concurrency
, crow_keyset
, crow_rowset
);
1998 static BOOL
SQLColAttributes_KnownStringAttribute(SQLUSMALLINT fDescType
)
2000 static const SQLUSMALLINT attrList
[] =
2002 SQL_COLUMN_OWNER_NAME
,
2003 SQL_COLUMN_QUALIFIER_NAME
,
2006 SQL_COLUMN_TABLE_NAME
,
2007 SQL_COLUMN_TYPE_NAME
,
2008 SQL_DESC_BASE_COLUMN_NAME
,
2009 SQL_DESC_BASE_TABLE_NAME
,
2010 SQL_DESC_CATALOG_NAME
,
2012 SQL_DESC_LITERAL_PREFIX
,
2013 SQL_DESC_LITERAL_SUFFIX
,
2014 SQL_DESC_LOCAL_TYPE_NAME
,
2016 SQL_DESC_SCHEMA_NAME
,
2017 SQL_DESC_TABLE_NAME
,
2022 for (i
= 0; i
< sizeof(attrList
) / sizeof(SQLUSMALLINT
); i
++) {
2023 if (attrList
[i
] == fDescType
) return TRUE
;
2028 /*************************************************************************
2029 * SQLColAttributesW [ODBC32.106]
2031 SQLRETURN WINAPI
SQLColAttributesW(
2034 SQLUSMALLINT fDescType
,
2036 SQLSMALLINT cbDescMax
,
2037 SQLSMALLINT
*pcbDesc
,
2042 TRACE("hstmt=%p icol=%d fDescType=%d rgbDesc=%p cbDescMax=%d pcbDesc=%p pfDesc=%p\n",
2043 hstmt
, icol
, fDescType
, rgbDesc
, cbDescMax
, pcbDesc
, pfDesc
);
2045 if (!pSQLColAttributesW
) return SQL_ERROR
;
2047 iResult
= pSQLColAttributesW(hstmt
, icol
, fDescType
, rgbDesc
, cbDescMax
, pcbDesc
, pfDesc
);
2048 if (iResult
== SQL_SUCCESS
&& rgbDesc
!= NULL
&& SQLColAttributes_KnownStringAttribute(fDescType
)) {
2050 TRACE("Dumping values fetched via SQLColAttributesW:\n");
2051 TRACE(" Attribute name : %s\n", debugstr_w(rgbDesc));
2052 TRACE(" Declared length: %d\n", *pcbDesc);
2054 if (*pcbDesc
!= lstrlenW(rgbDesc
) * 2) {
2055 TRACE("CHEAT: resetting name length for ADO\n");
2056 *pcbDesc
= lstrlenW(rgbDesc
) * 2;
2062 /*************************************************************************
2063 * SQLConnectW [ODBC32.107]
2065 SQLRETURN WINAPI
SQLConnectW(SQLHDBC ConnectionHandle
,
2066 WCHAR
*ServerName
, SQLSMALLINT NameLength1
,
2067 WCHAR
*UserName
, SQLSMALLINT NameLength2
,
2068 WCHAR
*Authentication
, SQLSMALLINT NameLength3
)
2071 TRACE("(Server=%.*s)\n",NameLength1
+3, debugstr_w(ServerName
));
2073 if (!pSQLConnectW
) return SQL_ERROR
;
2075 ret
= pSQLConnectW(ConnectionHandle
, ServerName
, NameLength1
,
2076 UserName
, NameLength2
, Authentication
, NameLength3
);
2078 TRACE("returns %d\n",ret
);
2082 /*************************************************************************
2083 * SQLDescribeColW [ODBC32.108]
2085 SQLRETURN WINAPI
SQLDescribeColW(SQLHSTMT StatementHandle
,
2086 SQLUSMALLINT ColumnNumber
, WCHAR
*ColumnName
,
2087 SQLSMALLINT BufferLength
, SQLSMALLINT
*NameLength
,
2088 SQLSMALLINT
*DataType
, SQLULEN
*ColumnSize
,
2089 SQLSMALLINT
*DecimalDigits
, SQLSMALLINT
*Nullable
)
2094 if (!pSQLDescribeColW
) return SQL_ERROR
;
2096 iResult
= pSQLDescribeColW(StatementHandle
, ColumnNumber
, ColumnName
,
2097 BufferLength
, NameLength
, DataType
, ColumnSize
,
2098 DecimalDigits
, Nullable
);
2100 TRACE("Successfully recovered the following column information:\n");
2101 TRACE("\tRequested column index: %d\n", ColumnNumber
);
2102 TRACE("\tAvailable length for column name: %d\n", BufferLength
);
2103 if (NameLength
!= NULL
)
2104 TRACE("\tActual length for column name: %d\n", *NameLength
);
2105 else TRACE("\tActual length for column name: (null)\n");
2106 TRACE("\tReturned column name: %s\n", debugstr_w(ColumnName
));
2111 /*************************************************************************
2112 * SQLErrorW [ODBC32.110]
2114 SQLRETURN WINAPI
SQLErrorW(SQLHENV EnvironmentHandle
,
2115 SQLHDBC ConnectionHandle
, SQLHSTMT StatementHandle
,
2116 WCHAR
*Sqlstate
, SQLINTEGER
*NativeError
,
2117 WCHAR
*MessageText
, SQLSMALLINT BufferLength
,
2118 SQLSMALLINT
*TextLength
)
2122 if (!pSQLErrorW
) return SQL_ERROR
;
2123 return pSQLErrorW(EnvironmentHandle
, ConnectionHandle
, StatementHandle
,
2124 Sqlstate
, NativeError
, MessageText
, BufferLength
, TextLength
);
2127 /*************************************************************************
2128 * SQLExecDirectW [ODBC32.111]
2130 SQLRETURN WINAPI
SQLExecDirectW(SQLHSTMT StatementHandle
,
2131 WCHAR
*StatementText
, SQLINTEGER TextLength
)
2135 if (!pSQLExecDirectW
) return SQL_ERROR
;
2136 return pSQLExecDirectW(StatementHandle
, StatementText
, TextLength
);
2139 /*************************************************************************
2140 * SQLGetCursorNameW [ODBC32.117]
2142 SQLRETURN WINAPI
SQLGetCursorNameW(SQLHSTMT StatementHandle
,
2143 WCHAR
*CursorName
, SQLSMALLINT BufferLength
,
2144 SQLSMALLINT
*NameLength
)
2148 if (!pSQLGetCursorNameW
) return SQL_ERROR
;
2149 return pSQLGetCursorNameW(StatementHandle
, CursorName
, BufferLength
, NameLength
);
2152 /*************************************************************************
2153 * SQLPrepareW [ODBC32.119]
2155 SQLRETURN WINAPI
SQLPrepareW(SQLHSTMT StatementHandle
,
2156 WCHAR
*StatementText
, SQLINTEGER TextLength
)
2160 if (!pSQLPrepareW
) return SQL_ERROR
;
2161 return pSQLPrepareW(StatementHandle
, StatementText
, TextLength
);
2164 /*************************************************************************
2165 * SQLSetCursorNameW [ODBC32.121]
2167 SQLRETURN WINAPI
SQLSetCursorNameW(SQLHSTMT StatementHandle
, WCHAR
*CursorName
, SQLSMALLINT NameLength
)
2171 if (!pSQLSetCursorNameW
) return SQL_ERROR
;
2172 return pSQLSetCursorNameW(StatementHandle
, CursorName
, NameLength
);
2175 /*************************************************************************
2176 * SQLColAttributeW [ODBC32.127]
2178 SQLRETURN WINAPI
SQLColAttributeW (SQLHSTMT StatementHandle
,
2179 SQLUSMALLINT ColumnNumber
, SQLUSMALLINT FieldIdentifier
,
2180 SQLPOINTER CharacterAttribute
, SQLSMALLINT BufferLength
,
2181 SQLSMALLINT
*StringLength
, SQLPOINTER NumericAttribute
)
2185 TRACE("StatementHandle=%p ColumnNumber=%d FieldIdentifier=%d CharacterAttribute=%p BufferLength=%d StringLength=%p NumericAttribute=%p\n",
2186 StatementHandle
, ColumnNumber
, FieldIdentifier
,
2187 CharacterAttribute
, BufferLength
, StringLength
, NumericAttribute
);
2189 if (!pSQLColAttributeW
) return SQL_ERROR
;
2191 iResult
= pSQLColAttributeW(StatementHandle
, ColumnNumber
, FieldIdentifier
,
2192 CharacterAttribute
, BufferLength
, StringLength
, NumericAttribute
);
2193 if (iResult
== SQL_SUCCESS
&& CharacterAttribute
!= NULL
&& SQLColAttributes_KnownStringAttribute(FieldIdentifier
)) {
2195 TRACE("Dumping values fetched via SQLColAttributeW:\n");
2196 TRACE(" Attribute name : %s\n", debugstr_w(rgbDesc));
2197 TRACE(" Declared length: %d\n", *pcbDesc);
2199 if (*StringLength
!= lstrlenW(CharacterAttribute
) * 2) {
2200 TRACE("CHEAT: resetting name length for ADO\n");
2201 *StringLength
= lstrlenW(CharacterAttribute
) * 2;
2207 /*************************************************************************
2208 * SQLGetConnectAttrW [ODBC32.132]
2210 SQLRETURN WINAPI
SQLGetConnectAttrW(SQLHDBC ConnectionHandle
,
2211 SQLINTEGER Attribute
, SQLPOINTER Value
,
2212 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
2216 if (!pSQLGetConnectAttrW
) return SQL_ERROR
;
2217 return pSQLGetConnectAttrW(ConnectionHandle
, Attribute
, Value
,
2218 BufferLength
, StringLength
);
2221 /*************************************************************************
2222 * SQLGetDescFieldW [ODBC32.133]
2224 SQLRETURN WINAPI
SQLGetDescFieldW(SQLHDESC DescriptorHandle
,
2225 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
2226 SQLPOINTER Value
, SQLINTEGER BufferLength
,
2227 SQLINTEGER
*StringLength
)
2231 if (!pSQLGetDescFieldW
) return SQL_ERROR
;
2232 return pSQLGetDescFieldW(DescriptorHandle
, RecNumber
, FieldIdentifier
,
2233 Value
, BufferLength
, StringLength
);
2236 /*************************************************************************
2237 * SQLGetDescRecW [ODBC32.134]
2239 SQLRETURN WINAPI
SQLGetDescRecW(SQLHDESC DescriptorHandle
,
2240 SQLSMALLINT RecNumber
, WCHAR
*Name
,
2241 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
,
2242 SQLSMALLINT
*Type
, SQLSMALLINT
*SubType
,
2243 SQLLEN
*Length
, SQLSMALLINT
*Precision
,
2244 SQLSMALLINT
*Scale
, SQLSMALLINT
*Nullable
)
2248 if (!pSQLGetDescRecW
) return SQL_ERROR
;
2249 return pSQLGetDescRecW(DescriptorHandle
, RecNumber
, Name
, BufferLength
,
2250 StringLength
, Type
, SubType
, Length
, Precision
, Scale
, Nullable
);
2253 /*************************************************************************
2254 * SQLGetDiagFieldW [ODBC32.135]
2256 SQLRETURN WINAPI
SQLGetDiagFieldW(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
2257 SQLSMALLINT RecNumber
, SQLSMALLINT DiagIdentifier
,
2258 SQLPOINTER DiagInfo
, SQLSMALLINT BufferLength
,
2259 SQLSMALLINT
*StringLength
)
2263 if (!pSQLGetDiagFieldW
) return SQL_ERROR
;
2264 return pSQLGetDiagFieldW(HandleType
, Handle
, RecNumber
, DiagIdentifier
,
2265 DiagInfo
, BufferLength
, StringLength
);
2268 /*************************************************************************
2269 * SQLGetDiagRecW [ODBC32.136]
2271 SQLRETURN WINAPI
SQLGetDiagRecW(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
2272 SQLSMALLINT RecNumber
, WCHAR
*Sqlstate
,
2273 SQLINTEGER
*NativeError
, WCHAR
*MessageText
,
2274 SQLSMALLINT BufferLength
, SQLSMALLINT
*TextLength
)
2278 if (!pSQLGetDiagRecW
) return SQL_ERROR
;
2279 return pSQLGetDiagRecW(HandleType
, Handle
, RecNumber
, Sqlstate
, NativeError
,
2280 MessageText
, BufferLength
, TextLength
);
2283 /*************************************************************************
2284 * SQLGetStmtAttrW [ODBC32.138]
2286 SQLRETURN WINAPI
SQLGetStmtAttrW(SQLHSTMT StatementHandle
,
2287 SQLINTEGER Attribute
, SQLPOINTER Value
,
2288 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
2292 TRACE("Attribute = (%02d) Value = %p BufferLength = (%d) StringLength = %p\n",
2293 Attribute
, Value
, BufferLength
, StringLength
);
2295 if (Value
== NULL
) {
2296 WARN("Unexpected NULL in Value return address\n");
2297 iResult
= SQL_ERROR
;
2299 } else if (StringLength == NULL) {
2300 WARN("Unexpected NULL in StringLength return address\n");
2301 iResult = SQL_ERROR;
2304 if (!pSQLGetStmtAttrW
) return SQL_ERROR
;
2305 iResult
= pSQLGetStmtAttrW(StatementHandle
, Attribute
, Value
, BufferLength
, StringLength
);
2306 TRACE("returning %d...\n", iResult
);
2311 /*************************************************************************
2312 * SQLSetConnectAttrW [ODBC32.139]
2314 SQLRETURN WINAPI
SQLSetConnectAttrW(SQLHDBC ConnectionHandle
, SQLINTEGER Attribute
,
2315 SQLPOINTER Value
, SQLINTEGER StringLength
)
2319 if (!pSQLSetConnectAttrW
) return SQL_ERROR
;
2320 return pSQLSetConnectAttrW(ConnectionHandle
, Attribute
, Value
, StringLength
);
2323 /*************************************************************************
2324 * SQLColumnsW [ODBC32.140]
2326 SQLRETURN WINAPI
SQLColumnsW(SQLHSTMT StatementHandle
,
2327 WCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
2328 WCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
2329 WCHAR
*TableName
, SQLSMALLINT NameLength3
,
2330 WCHAR
*ColumnName
, SQLSMALLINT NameLength4
)
2334 if (!pSQLColumnsW
) return SQL_ERROR
;
2335 return pSQLColumnsW(StatementHandle
, CatalogName
, NameLength1
,
2336 SchemaName
, NameLength2
, TableName
, NameLength3
, ColumnName
, NameLength4
);
2339 /*************************************************************************
2340 * SQLDriverConnectW [ODBC32.141]
2342 SQLRETURN WINAPI
SQLDriverConnectW(
2346 SQLSMALLINT len_conn_str_in
,
2347 WCHAR
*conn_str_out
,
2348 SQLSMALLINT conn_str_out_max
,
2349 SQLSMALLINT
*ptr_conn_str_out
,
2350 SQLUSMALLINT driver_completion
)
2352 TRACE("ConnStrIn (%d bytes) --> %s\n", len_conn_str_in
, debugstr_w(conn_str_in
));
2354 if (!pSQLDriverConnectW
) return SQL_ERROR
;
2355 return pSQLDriverConnectW(hdbc
, hwnd
, conn_str_in
, len_conn_str_in
, conn_str_out
,
2356 conn_str_out_max
, ptr_conn_str_out
, driver_completion
);
2359 /*************************************************************************
2360 * SQLGetConnectOptionW [ODBC32.142]
2362 SQLRETURN WINAPI
SQLGetConnectOptionW(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLPOINTER Value
)
2366 if (!pSQLGetConnectOptionW
) return SQL_ERROR
;
2367 return pSQLGetConnectOptionW(ConnectionHandle
, Option
, Value
);
2370 /*************************************************************************
2371 * SQLGetInfoW [ODBC32.145]
2373 SQLRETURN WINAPI
SQLGetInfoW(SQLHDBC ConnectionHandle
,
2374 SQLUSMALLINT InfoType
, SQLPOINTER InfoValue
,
2375 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
)
2379 TRACE("InfoType = (%02u), InfoValue = %p, BufferLength = %d bytes\n", InfoType
, InfoValue
, BufferLength
);
2380 if (InfoValue
== NULL
) {
2381 WARN("Unexpected NULL in InfoValue address\n");
2382 iResult
= SQL_ERROR
;
2384 if (!pSQLGetInfoW
) return SQL_ERROR
;
2385 iResult
= pSQLGetInfoW(ConnectionHandle
, InfoType
, InfoValue
, BufferLength
, StringLength
);
2386 TRACE("returning %d...\n", iResult
);
2391 /*************************************************************************
2392 * SQLGetTypeInfoW [ODBC32.147]
2394 SQLRETURN WINAPI
SQLGetTypeInfoW(SQLHSTMT StatementHandle
, SQLSMALLINT DataType
)
2398 if (!pSQLGetTypeInfoW
) return SQL_ERROR
;
2399 return pSQLGetTypeInfoW(StatementHandle
, DataType
);
2402 /*************************************************************************
2403 * SQLSetConnectOptionW [ODBC32.150]
2405 SQLRETURN WINAPI
SQLSetConnectOptionW(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLULEN Value
)
2409 if (!pSQLSetConnectOptionW
) return SQL_ERROR
;
2410 return pSQLSetConnectOptionW(ConnectionHandle
, Option
, Value
);
2413 /*************************************************************************
2414 * SQLSpecialColumnsW [ODBC32.152]
2416 SQLRETURN WINAPI
SQLSpecialColumnsW(SQLHSTMT StatementHandle
,
2417 SQLUSMALLINT IdentifierType
, SQLWCHAR
*CatalogName
,
2418 SQLSMALLINT NameLength1
, SQLWCHAR
*SchemaName
,
2419 SQLSMALLINT NameLength2
, SQLWCHAR
*TableName
,
2420 SQLSMALLINT NameLength3
, SQLUSMALLINT Scope
,
2421 SQLUSMALLINT Nullable
)
2423 if (!pSQLSpecialColumnsW
) return SQL_ERROR
;
2424 return pSQLSpecialColumnsW(StatementHandle
, IdentifierType
, CatalogName
, NameLength1
, SchemaName
,
2425 NameLength2
, TableName
, NameLength3
, Scope
, Nullable
);
2428 /*************************************************************************
2429 * SQLStatisticsW [ODBC32.153]
2431 SQLRETURN WINAPI
SQLStatisticsW(SQLHSTMT StatementHandle
,
2432 SQLWCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
2433 SQLWCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
2434 SQLWCHAR
*TableName
, SQLSMALLINT NameLength3
,
2435 SQLUSMALLINT Unique
, SQLUSMALLINT Reserved
)
2439 if (!pSQLStatisticsW
) return SQL_ERROR
;
2440 return pSQLStatisticsW(StatementHandle
, CatalogName
, NameLength1
, SchemaName
, NameLength2
,
2441 TableName
, NameLength3
, Unique
, Reserved
);
2444 /*************************************************************************
2445 * SQLTablesW [ODBC32.154]
2447 SQLRETURN WINAPI
SQLTablesW(SQLHSTMT StatementHandle
,
2448 SQLWCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
2449 SQLWCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
2450 SQLWCHAR
*TableName
, SQLSMALLINT NameLength3
,
2451 SQLWCHAR
*TableType
, SQLSMALLINT NameLength4
)
2455 if (!pSQLTablesW
) return SQL_ERROR
;
2456 return pSQLTablesW(StatementHandle
, CatalogName
, NameLength1
,
2457 SchemaName
, NameLength2
, TableName
, NameLength3
, TableType
, NameLength4
);
2460 /*************************************************************************
2461 * SQLBrowseConnectW [ODBC32.155]
2463 SQLRETURN WINAPI
SQLBrowseConnectW(
2465 SQLWCHAR
*szConnStrIn
,
2466 SQLSMALLINT cbConnStrIn
,
2467 SQLWCHAR
*szConnStrOut
,
2468 SQLSMALLINT cbConnStrOutMax
,
2469 SQLSMALLINT
*pcbConnStrOut
)
2473 if (!pSQLBrowseConnectW
) return SQL_ERROR
;
2474 return pSQLBrowseConnectW(hdbc
, szConnStrIn
, cbConnStrIn
, szConnStrOut
,
2475 cbConnStrOutMax
, pcbConnStrOut
);
2478 /*************************************************************************
2479 * SQLColumnPrivilegesW [ODBC32.156]
2481 SQLRETURN WINAPI
SQLColumnPrivilegesW(
2483 SQLWCHAR
*szCatalogName
,
2484 SQLSMALLINT cbCatalogName
,
2485 SQLWCHAR
*szSchemaName
,
2486 SQLSMALLINT cbSchemaName
,
2487 SQLWCHAR
*szTableName
,
2488 SQLSMALLINT cbTableName
,
2489 SQLWCHAR
*szColumnName
,
2490 SQLSMALLINT cbColumnName
)
2494 if (!pSQLColumnPrivilegesW
) return SQL_ERROR
;
2495 return pSQLColumnPrivilegesW(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
2496 szTableName
, cbTableName
, szColumnName
, cbColumnName
);
2499 /*************************************************************************
2500 * SQLDataSourcesW [ODBC32.157]
2502 SQLRETURN WINAPI
SQLDataSourcesW(SQLHENV EnvironmentHandle
,
2503 SQLUSMALLINT Direction
, WCHAR
*ServerName
,
2504 SQLSMALLINT BufferLength1
, SQLSMALLINT
*NameLength1
,
2505 WCHAR
*Description
, SQLSMALLINT BufferLength2
,
2506 SQLSMALLINT
*NameLength2
)
2510 TRACE("EnvironmentHandle = %p\n", EnvironmentHandle
);
2512 if (!pSQLDataSourcesW
) return SQL_ERROR
;
2514 ret
= pSQLDataSourcesW(EnvironmentHandle
, Direction
, ServerName
,
2515 BufferLength1
, NameLength1
, Description
, BufferLength2
, NameLength2
);
2519 TRACE("returns: %d \t", ret
);
2520 if (*NameLength1
> 0)
2521 TRACE("DataSource = %s,", debugstr_w(ServerName
));
2522 if (*NameLength2
> 0)
2523 TRACE(" Description = %s", debugstr_w(Description
));
2530 /*************************************************************************
2531 * SQLForeignKeysW [ODBC32.160]
2533 SQLRETURN WINAPI
SQLForeignKeysW(
2535 SQLWCHAR
*szPkCatalogName
,
2536 SQLSMALLINT cbPkCatalogName
,
2537 SQLWCHAR
*szPkSchemaName
,
2538 SQLSMALLINT cbPkSchemaName
,
2539 SQLWCHAR
*szPkTableName
,
2540 SQLSMALLINT cbPkTableName
,
2541 SQLWCHAR
*szFkCatalogName
,
2542 SQLSMALLINT cbFkCatalogName
,
2543 SQLWCHAR
*szFkSchemaName
,
2544 SQLSMALLINT cbFkSchemaName
,
2545 SQLWCHAR
*szFkTableName
,
2546 SQLSMALLINT cbFkTableName
)
2550 if (!pSQLForeignKeysW
) return SQL_ERROR
;
2551 return pSQLForeignKeysW(hstmt
, szPkCatalogName
, cbPkCatalogName
, szPkSchemaName
, cbPkSchemaName
,
2552 szPkTableName
, cbPkTableName
, szFkCatalogName
, cbFkCatalogName
,
2553 szFkSchemaName
, cbFkSchemaName
, szFkTableName
, cbFkTableName
);
2556 /*************************************************************************
2557 * SQLNativeSqlW [ODBC32.162]
2559 SQLRETURN WINAPI
SQLNativeSqlW(
2561 SQLWCHAR
*szSqlStrIn
,
2562 SQLINTEGER cbSqlStrIn
,
2564 SQLINTEGER cbSqlStrMax
,
2565 SQLINTEGER
*pcbSqlStr
)
2569 if (!pSQLNativeSqlW
) return SQL_ERROR
;
2570 return pSQLNativeSqlW(hdbc
, szSqlStrIn
, cbSqlStrIn
, szSqlStr
, cbSqlStrMax
, pcbSqlStr
);
2573 /*************************************************************************
2574 * SQLPrimaryKeysW [ODBC32.165]
2576 SQLRETURN WINAPI
SQLPrimaryKeysW(
2578 SQLWCHAR
*szCatalogName
,
2579 SQLSMALLINT cbCatalogName
,
2580 SQLWCHAR
*szSchemaName
,
2581 SQLSMALLINT cbSchemaName
,
2582 SQLWCHAR
*szTableName
,
2583 SQLSMALLINT cbTableName
)
2587 if (!pSQLPrimaryKeysW
) return SQL_ERROR
;
2588 return pSQLPrimaryKeysW(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
2589 szTableName
, cbTableName
);
2592 /*************************************************************************
2593 * SQLProcedureColumnsW [ODBC32.166]
2595 SQLRETURN WINAPI
SQLProcedureColumnsW(
2597 SQLWCHAR
*szCatalogName
,
2598 SQLSMALLINT cbCatalogName
,
2599 SQLWCHAR
*szSchemaName
,
2600 SQLSMALLINT cbSchemaName
,
2601 SQLWCHAR
*szProcName
,
2602 SQLSMALLINT cbProcName
,
2603 SQLWCHAR
*szColumnName
,
2604 SQLSMALLINT cbColumnName
)
2608 if (!pSQLProcedureColumnsW
) return SQL_ERROR
;
2609 return pSQLProcedureColumnsW(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
2610 szProcName
, cbProcName
, szColumnName
, cbColumnName
);
2613 /*************************************************************************
2614 * SQLProceduresW [ODBC32.167]
2616 SQLRETURN WINAPI
SQLProceduresW(
2618 SQLWCHAR
*szCatalogName
,
2619 SQLSMALLINT cbCatalogName
,
2620 SQLWCHAR
*szSchemaName
,
2621 SQLSMALLINT cbSchemaName
,
2622 SQLWCHAR
*szProcName
,
2623 SQLSMALLINT cbProcName
)
2627 if (!pSQLProceduresW
) return SQL_ERROR
;
2628 return pSQLProceduresW(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
2629 szProcName
, cbProcName
);
2632 /*************************************************************************
2633 * SQLTablePrivilegesW [ODBC32.170]
2635 SQLRETURN WINAPI
SQLTablePrivilegesW(
2637 SQLWCHAR
*szCatalogName
,
2638 SQLSMALLINT cbCatalogName
,
2639 SQLWCHAR
*szSchemaName
,
2640 SQLSMALLINT cbSchemaName
,
2641 SQLWCHAR
*szTableName
,
2642 SQLSMALLINT cbTableName
)
2646 if (!pSQLTablePrivilegesW
) return SQL_ERROR
;
2647 return pSQLTablePrivilegesW(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
2648 szTableName
, cbTableName
);
2651 /*************************************************************************
2652 * SQLDriversW [ODBC32.171]
2654 SQLRETURN WINAPI
SQLDriversW(
2656 SQLUSMALLINT fDirection
,
2657 SQLWCHAR
*szDriverDesc
,
2658 SQLSMALLINT cbDriverDescMax
,
2659 SQLSMALLINT
*pcbDriverDesc
,
2660 SQLWCHAR
*szDriverAttributes
,
2661 SQLSMALLINT cbDriverAttrMax
,
2662 SQLSMALLINT
*pcbDriverAttr
)
2666 TRACE("direction=%d\n", fDirection
);
2668 if (!pSQLDriversW
) return SQL_ERROR
;
2669 ret
= pSQLDriversW(henv
, fDirection
, szDriverDesc
, cbDriverDescMax
, pcbDriverDesc
,
2670 szDriverAttributes
, cbDriverAttrMax
, pcbDriverAttr
);
2672 if (ret
== SQL_NO_DATA
&& fDirection
== SQL_FETCH_FIRST
)
2673 ERR_(winediag
)("No ODBC drivers could be found. "
2674 "Check the settings for your libodbc provider.\n");
2679 /*************************************************************************
2680 * SQLSetDescFieldW [ODBC32.173]
2682 SQLRETURN WINAPI
SQLSetDescFieldW(SQLHDESC DescriptorHandle
,
2683 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
2684 SQLPOINTER Value
, SQLINTEGER BufferLength
)
2688 if (!pSQLSetDescFieldW
) return SQL_ERROR
;
2689 return pSQLSetDescFieldW(DescriptorHandle
, RecNumber
, FieldIdentifier
, Value
, BufferLength
);
2692 /*************************************************************************
2693 * SQLSetStmtAttrW [ODBC32.176]
2695 SQLRETURN WINAPI
SQLSetStmtAttrW(SQLHSTMT StatementHandle
,
2696 SQLINTEGER Attribute
, SQLPOINTER Value
,
2697 SQLINTEGER StringLength
)
2700 TRACE("Attribute = (%02d) Value = %p StringLength = (%d)\n",
2701 Attribute
, Value
, StringLength
);
2703 if (!pSQLSetStmtAttrW
) return SQL_ERROR
;
2704 iResult
= pSQLSetStmtAttrW(StatementHandle
, Attribute
, Value
, StringLength
);
2705 if (iResult
== SQL_ERROR
&& (Attribute
== SQL_ROWSET_SIZE
|| Attribute
== SQL_ATTR_ROW_ARRAY_SIZE
)) {
2706 TRACE("CHEAT: returning SQL_SUCCESS to ADO...\n");
2707 iResult
= SQL_SUCCESS
;
2709 TRACE("returning %d...\n", iResult
);