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.
29 #include "wine/port.h"
40 #include "wine/debug.h"
41 #include "wine/library.h"
42 #include "wine/unicode.h"
48 static BOOL
ODBC_LoadDriverManager(void);
49 static BOOL
ODBC_LoadDMFunctions(void);
51 WINE_DEFAULT_DEBUG_CHANNEL(odbc
);
53 static SQLRETURN (*pSQLAllocConnect
)(SQLHENV
,SQLHDBC
*);
54 static SQLRETURN (*pSQLAllocEnv
)(SQLHENV
*);
55 static SQLRETURN (*pSQLAllocHandle
)(SQLSMALLINT
,SQLHANDLE
,SQLHANDLE
*);
56 static SQLRETURN (*pSQLAllocHandleStd
)(SQLSMALLINT
,SQLHANDLE
,SQLHANDLE
*);
57 static SQLRETURN (*pSQLAllocStmt
)(SQLHDBC
,SQLHSTMT
*);
58 static SQLRETURN (*pSQLBindCol
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
59 static SQLRETURN (*pSQLBindParam
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
,SQLSMALLINT
,SQLUINTEGER
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
*);
60 static SQLRETURN (*pSQLBindParameter
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
,SQLSMALLINT
,SQLSMALLINT
,SQLUINTEGER
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
61 static SQLRETURN (*pSQLBrowseConnect
)(SQLHDBC
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
62 static SQLRETURN (*pSQLBrowseConnectW
)(SQLHDBC
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
63 static SQLRETURN (*pSQLBulkOperations
)(SQLHSTMT
,SQLSMALLINT
);
64 static SQLRETURN (*pSQLCancel
)(SQLHSTMT
);
65 static SQLRETURN (*pSQLCloseCursor
)(SQLHSTMT
);
66 static SQLRETURN (*pSQLColAttribute
)(SQLHSTMT
,SQLUSMALLINT
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*,SQLPOINTER
);
67 static SQLRETURN (*pSQLColAttributeW
)(SQLHSTMT
,SQLUSMALLINT
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*,SQLPOINTER
);
68 static SQLRETURN (*pSQLColAttributes
)(SQLHSTMT
,SQLUSMALLINT
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*,SQLINTEGER
*);
69 static SQLRETURN (*pSQLColAttributesW
)(SQLHSTMT
,SQLUSMALLINT
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*,SQLPOINTER
);
70 static SQLRETURN (*pSQLColumnPrivileges
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
71 static SQLRETURN (*pSQLColumnPrivilegesW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
72 static SQLRETURN (*pSQLColumns
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
73 static SQLRETURN (*pSQLColumnsW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
74 static SQLRETURN (*pSQLConnect
)(SQLHDBC
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
75 static SQLRETURN (*pSQLConnectW
)(SQLHDBC
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
76 static SQLRETURN (*pSQLCopyDesc
)(SQLHDESC
,SQLHDESC
);
77 static SQLRETURN (*pSQLDataSources
)(SQLHENV
,SQLUSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
78 static SQLRETURN (*pSQLDataSourcesW
)(SQLHENV
,SQLUSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
79 static SQLRETURN (*pSQLDescribeCol
)(SQLHSTMT
,SQLUSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLSMALLINT
*,SQLUINTEGER
*,SQLSMALLINT
*,SQLSMALLINT
*);
80 static SQLRETURN (*pSQLDescribeColW
)(SQLHSTMT
,SQLUSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLSMALLINT
*,SQLULEN
*,SQLSMALLINT
*,SQLSMALLINT
*);
81 static SQLRETURN (*pSQLDescribeParam
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
*,SQLUINTEGER
*,SQLSMALLINT
*,SQLSMALLINT
*);
82 static SQLRETURN (*pSQLDisconnect
)(SQLHDBC
);
83 static SQLRETURN (*pSQLDriverConnect
)(SQLHDBC
,SQLHWND
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLUSMALLINT
);
84 static SQLRETURN (*pSQLDriverConnectW
)(SQLHDBC
,SQLHWND
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLUSMALLINT
);
85 static SQLRETURN (*pSQLDrivers
)(SQLHENV
,SQLUSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
86 static SQLRETURN (*pSQLDriversW
)(SQLHENV
,SQLUSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
87 static SQLRETURN (*pSQLEndTran
)(SQLSMALLINT
,SQLHANDLE
,SQLSMALLINT
);
88 static SQLRETURN (*pSQLError
)(SQLHENV
,SQLHDBC
,SQLHSTMT
,SQLCHAR
*,SQLINTEGER
*,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
89 static SQLRETURN (*pSQLErrorW
)(SQLHENV
,SQLHDBC
,SQLHSTMT
,SQLWCHAR
*,SQLINTEGER
*,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
90 static SQLRETURN (*pSQLExecDirect
)(SQLHSTMT
,SQLCHAR
*,SQLINTEGER
);
91 static SQLRETURN (*pSQLExecDirectW
)(SQLHSTMT
,SQLWCHAR
*,SQLINTEGER
);
92 static SQLRETURN (*pSQLExecute
)(SQLHSTMT
);
93 static SQLRETURN (*pSQLExtendedFetch
)(SQLHSTMT
,SQLUSMALLINT
,SQLINTEGER
,SQLUINTEGER
*,SQLUSMALLINT
*);
94 static SQLRETURN (*pSQLFetch
)(SQLHSTMT
);
95 static SQLRETURN (*pSQLFetchScroll
)(SQLHSTMT
,SQLSMALLINT
,SQLINTEGER
);
96 static SQLRETURN (*pSQLForeignKeys
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
97 static SQLRETURN (*pSQLForeignKeysW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
98 static SQLRETURN (*pSQLFreeConnect
)(SQLHDBC
);
99 static SQLRETURN (*pSQLFreeEnv
)(SQLHENV
);
100 static SQLRETURN (*pSQLFreeHandle
)(SQLSMALLINT
,SQLHANDLE
);
101 static SQLRETURN (*pSQLFreeStmt
)(SQLHSTMT
,SQLUSMALLINT
);
102 static SQLRETURN (*pSQLGetConnectAttr
)(SQLHDBC
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
103 static SQLRETURN (*pSQLGetConnectAttrW
)(SQLHDBC
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
104 static SQLRETURN (*pSQLGetConnectOption
)(SQLHDBC
,SQLUSMALLINT
,SQLPOINTER
);
105 static SQLRETURN (*pSQLGetConnectOptionW
)(SQLHDBC
,SQLUSMALLINT
,SQLPOINTER
);
106 static SQLRETURN (*pSQLGetCursorName
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
107 static SQLRETURN (*pSQLGetCursorNameW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
108 static SQLRETURN (*pSQLGetData
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
109 static SQLRETURN (*pSQLGetDescField
)(SQLHDESC
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
110 static SQLRETURN (*pSQLGetDescFieldW
)(SQLHDESC
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
111 static SQLRETURN (*pSQLGetDescRec
)(SQLHDESC
,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLSMALLINT
*,SQLSMALLINT
*,SQLINTEGER
*,SQLSMALLINT
*,SQLSMALLINT
*,SQLSMALLINT
*);
112 static SQLRETURN (*pSQLGetDescRecW
)(SQLHDESC
,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*,SQLSMALLINT
*,SQLSMALLINT
*,SQLLEN
*,SQLSMALLINT
*,SQLSMALLINT
*,SQLSMALLINT
*);
113 static SQLRETURN (*pSQLGetDiagField
)(SQLSMALLINT
,SQLHANDLE
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*);
114 static SQLRETURN (*pSQLGetDiagFieldW
)(SQLSMALLINT
,SQLHANDLE
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*);
115 static SQLRETURN (*pSQLGetDiagRec
)(SQLSMALLINT
,SQLHANDLE
,SQLSMALLINT
,SQLCHAR
*,SQLINTEGER
*,SQLCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
116 static SQLRETURN (*pSQLGetDiagRecW
)(SQLSMALLINT
,SQLHANDLE
,SQLSMALLINT
,SQLWCHAR
*,SQLINTEGER
*,SQLWCHAR
*,SQLSMALLINT
,SQLSMALLINT
*);
117 static SQLRETURN (*pSQLGetEnvAttr
)(SQLHENV
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
118 static SQLRETURN (*pSQLGetFunctions
)(SQLHDBC
,SQLUSMALLINT
,SQLUSMALLINT
*);
119 static SQLRETURN (*pSQLGetInfo
)(SQLHDBC
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*);
120 static SQLRETURN (*pSQLGetInfoW
)(SQLHDBC
,SQLUSMALLINT
,SQLPOINTER
,SQLSMALLINT
,SQLSMALLINT
*);
121 static SQLRETURN (*pSQLGetStmtAttr
)(SQLHSTMT
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
122 static SQLRETURN (*pSQLGetStmtAttrW
)(SQLHSTMT
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
,SQLINTEGER
*);
123 static SQLRETURN (*pSQLGetStmtOption
)(SQLHSTMT
,SQLUSMALLINT
,SQLPOINTER
);
124 static SQLRETURN (*pSQLGetTypeInfo
)(SQLHSTMT
,SQLSMALLINT
);
125 static SQLRETURN (*pSQLGetTypeInfoW
)(SQLHSTMT
,SQLSMALLINT
);
126 static SQLRETURN (*pSQLMoreResults
)(SQLHSTMT
);
127 static SQLRETURN (*pSQLNativeSql
)(SQLHDBC
,SQLCHAR
*,SQLINTEGER
,SQLCHAR
*,SQLINTEGER
,SQLINTEGER
*);
128 static SQLRETURN (*pSQLNativeSqlW
)(SQLHDBC
,SQLWCHAR
*,SQLINTEGER
,SQLWCHAR
*,SQLINTEGER
,SQLINTEGER
*);
129 static SQLRETURN (*pSQLNumParams
)(SQLHSTMT
,SQLSMALLINT
*);
130 static SQLRETURN (*pSQLNumResultCols
)(SQLHSTMT
,SQLSMALLINT
*);
131 static SQLRETURN (*pSQLParamData
)(SQLHSTMT
,SQLPOINTER
*);
132 static SQLRETURN (*pSQLParamOptions
)(SQLHSTMT
,SQLUINTEGER
,SQLUINTEGER
*);
133 static SQLRETURN (*pSQLPrepare
)(SQLHSTMT
,SQLCHAR
*,SQLINTEGER
);
134 static SQLRETURN (*pSQLPrepareW
)(SQLHSTMT
,SQLWCHAR
*,SQLINTEGER
);
135 static SQLRETURN (*pSQLPrimaryKeys
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
136 static SQLRETURN (*pSQLPrimaryKeysW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
137 static SQLRETURN (*pSQLProcedureColumns
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
138 static SQLRETURN (*pSQLProcedureColumnsW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
139 static SQLRETURN (*pSQLProcedures
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
140 static SQLRETURN (*pSQLProceduresW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
141 static SQLRETURN (*pSQLPutData
)(SQLHSTMT
,SQLPOINTER
,SQLINTEGER
);
142 static SQLRETURN (*pSQLRowCount
)(SQLHSTMT
,SQLINTEGER
*);
143 static SQLRETURN (*pSQLSetConnectAttr
)(SQLHDBC
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
);
144 static SQLRETURN (*pSQLSetConnectAttrW
)(SQLHDBC
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
);
145 static SQLRETURN (*pSQLSetConnectOption
)(SQLHDBC
,SQLUSMALLINT
,SQLUINTEGER
);
146 static SQLRETURN (*pSQLSetConnectOptionW
)(SQLHDBC
,SQLUSMALLINT
,SQLULEN
);
147 static SQLRETURN (*pSQLSetCursorName
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
);
148 static SQLRETURN (*pSQLSetCursorNameW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
);
149 static SQLRETURN (*pSQLSetDescField
)(SQLHDESC
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
);
150 static SQLRETURN (*pSQLSetDescFieldW
)(SQLHDESC
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
);
151 static SQLRETURN (*pSQLSetDescRec
)(SQLHDESC
,SQLSMALLINT
,SQLSMALLINT
,SQLSMALLINT
,SQLINTEGER
,SQLSMALLINT
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
*,SQLINTEGER
*);
152 static SQLRETURN (*pSQLSetEnvAttr
)(SQLHENV
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
);
153 static SQLRETURN (*pSQLSetParam
)(SQLHSTMT
,SQLUSMALLINT
,SQLSMALLINT
,SQLSMALLINT
,SQLUINTEGER
,SQLSMALLINT
,SQLPOINTER
,SQLINTEGER
*);
154 static SQLRETURN (*pSQLSetPos
)(SQLHSTMT
,SQLUSMALLINT
,SQLUSMALLINT
,SQLUSMALLINT
);
155 static SQLRETURN (*pSQLSetScrollOptions
)(SQLHSTMT
,SQLUSMALLINT
,SQLINTEGER
,SQLUSMALLINT
);
156 static SQLRETURN (*pSQLSetStmtAttr
)(SQLHSTMT
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
);
157 static SQLRETURN (*pSQLSetStmtAttrW
)(SQLHSTMT
,SQLINTEGER
,SQLPOINTER
,SQLINTEGER
);
158 static SQLRETURN (*pSQLSetStmtOption
)(SQLHSTMT
,SQLUSMALLINT
,SQLUINTEGER
);
159 static SQLRETURN (*pSQLSpecialColumns
)(SQLHSTMT
,SQLUSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLUSMALLINT
,SQLUSMALLINT
);
160 static SQLRETURN (*pSQLSpecialColumnsW
)(SQLHSTMT
,SQLUSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLUSMALLINT
,SQLUSMALLINT
);
161 static SQLRETURN (*pSQLStatistics
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLUSMALLINT
,SQLUSMALLINT
);
162 static SQLRETURN (*pSQLStatisticsW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLUSMALLINT
,SQLUSMALLINT
);
163 static SQLRETURN (*pSQLTablePrivileges
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
164 static SQLRETURN (*pSQLTablePrivilegesW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
165 static SQLRETURN (*pSQLTables
)(SQLHSTMT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
,SQLCHAR
*,SQLSMALLINT
);
166 static SQLRETURN (*pSQLTablesW
)(SQLHSTMT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
,SQLWCHAR
*,SQLSMALLINT
);
167 static SQLRETURN (*pSQLTransact
)(SQLHENV
,SQLHDBC
,SQLUSMALLINT
);
170 #define ERROR_SQLERROR 1
171 #define ERROR_LIBRARY_NOT_FOUND 2
173 static void *dmHandle
;
174 static int nErrorType
;
176 /***********************************************************************
177 * ODBC_ReplicateODBCInstToRegistry
183 * Utility to ODBC_ReplicateToRegistry to replicate the drivers of the
184 * ODBCINST.INI settings
186 * The driver settings are not replicated to the registry. If we were to
187 * replicate them we would need to decide whether to replicate all settings
188 * or to do some translation; whether to remove any entries present only in
189 * the windows registry, etc.
192 static void ODBC_ReplicateODBCInstToRegistry (SQLHENV hEnv
)
199 TRACE ("Driver settings are not currently replicated to the registry\n");
200 if ((reg_ret
= RegCreateKeyExA (HKEY_LOCAL_MACHINE
,
201 "Software\\ODBC\\ODBCINST.INI", 0, NULL
,
202 REG_OPTION_NON_VOLATILE
,
203 KEY_ALL_ACCESS
/* a couple more than we need */, NULL
,
204 &hODBCInst
, NULL
)) == ERROR_SUCCESS
)
207 if ((reg_ret
= RegCreateKeyExA (hODBCInst
, "ODBC Drivers", 0,
208 NULL
, REG_OPTION_NON_VOLATILE
,
209 KEY_ALL_ACCESS
/* overkill */, NULL
, &hDrivers
, NULL
))
215 SQLSMALLINT sizedesc
;
218 dirn
= SQL_FETCH_FIRST
;
219 while ((sql_ret
= SQLDrivers (hEnv
, dirn
, (SQLCHAR
*)desc
, sizeof(desc
),
220 &sizedesc
, NULL
, 0, NULL
)) == SQL_SUCCESS
||
221 sql_ret
== SQL_SUCCESS_WITH_INFO
)
223 /* FIXME Do some proper handling of the SUCCESS_WITH_INFO */
224 dirn
= SQL_FETCH_NEXT
;
225 if (sizedesc
== lstrlenA(desc
))
228 if ((reg_ret
= RegQueryValueExA (hDrivers
, desc
, NULL
,
229 NULL
, NULL
, NULL
)) == ERROR_FILE_NOT_FOUND
)
231 if ((reg_ret
= RegSetValueExA (hDrivers
, desc
, 0,
232 REG_SZ
, (const BYTE
*)"Installed", 10)) != ERROR_SUCCESS
)
234 TRACE ("Error %d replicating driver %s\n",
239 else if (reg_ret
!= ERROR_SUCCESS
)
241 TRACE ("Error %d checking for %s in drivers\n",
245 if ((reg_ret
= RegCreateKeyExA (hODBCInst
, desc
, 0,
246 NULL
, REG_OPTION_NON_VOLATILE
,
247 KEY_ALL_ACCESS
, NULL
, &hThis
, NULL
))
250 /* FIXME This is where the settings go.
251 * I suggest that if the disposition says it
252 * exists then we leave it alone. Alternatively
253 * include an extra value to flag that it is
254 * a replication of the unixODBC/iODBC/...
256 if ((reg_ret
= RegCloseKey (hThis
)) !=
258 TRACE ("Error %d closing %s key\n", reg_ret
,
263 TRACE ("Error %d ensuring driver key %s\n",
270 WARN ("Unusually long driver name %s not replicated\n",
275 if (sql_ret
!= SQL_NO_DATA
)
277 TRACE ("Error %d enumerating drivers\n", (int)sql_ret
);
280 if ((reg_ret
= RegCloseKey (hDrivers
)) != ERROR_SUCCESS
)
282 TRACE ("Error %d closing hDrivers\n", reg_ret
);
287 TRACE ("Error %d opening HKLM\\S\\O\\OI\\Drivers\n", reg_ret
);
289 if ((reg_ret
= RegCloseKey (hODBCInst
)) != ERROR_SUCCESS
)
291 TRACE ("Error %d closing HKLM\\S\\O\\ODBCINST.INI\n", reg_ret
);
296 TRACE ("Error %d opening HKLM\\S\\O\\ODBCINST.INI\n", reg_ret
);
300 WARN ("May not have replicated all ODBC drivers to the registry\n");
304 /***********************************************************************
305 * ODBC_ReplicateODBCToRegistry
311 * Utility to ODBC_ReplicateToRegistry to replicate either the USER or
314 * For now simply place the "Driver description" (as returned by SQLDataSources)
315 * into the registry as the driver. This is enough to satisfy Crystal's
316 * requirement that there be a driver entry. (It doesn't seem to care what
318 * A slightly more accurate setting would be to access the registry to find
319 * the actual driver library for the given description (which appears to map
320 * to one of the HKLM/Software/ODBC/ODBCINST.INI keys). (If you do this note
321 * that this will add a requirement that this function be called after
322 * ODBC_ReplicateODBCInstToRegistry)
324 static void ODBC_ReplicateODBCToRegistry (int is_user
, SQLHENV hEnv
)
330 CHAR dsn
[SQL_MAX_DSN_LENGTH
+ 1];
333 SQLSMALLINT sizedesc
;
335 const char *which
= is_user
? "user" : "system";
338 if ((reg_ret
= RegCreateKeyExA (
339 is_user
? HKEY_CURRENT_USER
: HKEY_LOCAL_MACHINE
,
340 "Software\\ODBC\\ODBC.INI", 0, NULL
, REG_OPTION_NON_VOLATILE
,
341 KEY_ALL_ACCESS
/* a couple more than we need */, NULL
, &hODBC
,
342 NULL
)) == ERROR_SUCCESS
)
345 dirn
= is_user
? SQL_FETCH_FIRST_USER
: SQL_FETCH_FIRST_SYSTEM
;
346 while ((sql_ret
= SQLDataSources (hEnv
, dirn
,
347 (SQLCHAR
*)dsn
, sizeof(dsn
), &sizedsn
,
348 (SQLCHAR
*)desc
, sizeof(desc
), &sizedesc
)) == SQL_SUCCESS
349 || sql_ret
== SQL_SUCCESS_WITH_INFO
)
351 /* FIXME Do some proper handling of the SUCCESS_WITH_INFO */
352 dirn
= SQL_FETCH_NEXT
;
353 if (sizedsn
== lstrlenA(dsn
) && sizedesc
== lstrlenA(desc
))
356 if ((reg_ret
= RegCreateKeyExA (hODBC
, dsn
, 0,
357 NULL
, REG_OPTION_NON_VOLATILE
,
358 KEY_ALL_ACCESS
, NULL
, &hDSN
, NULL
))
361 static const char DRIVERKEY
[] = "Driver";
362 if ((reg_ret
= RegQueryValueExA (hDSN
, DRIVERKEY
,
363 NULL
, NULL
, NULL
, NULL
))
364 == ERROR_FILE_NOT_FOUND
)
366 if ((reg_ret
= RegSetValueExA (hDSN
, DRIVERKEY
, 0,
367 REG_SZ
, (LPBYTE
)desc
, sizedesc
)) != ERROR_SUCCESS
)
369 TRACE ("Error %d replicating description of "
370 "%s(%s)\n", reg_ret
, dsn
, desc
);
374 else if (reg_ret
!= ERROR_SUCCESS
)
376 TRACE ("Error %d checking for description of %s\n",
380 if ((reg_ret
= RegCloseKey (hDSN
)) != ERROR_SUCCESS
)
382 TRACE ("Error %d closing %s DSN key %s\n",
383 reg_ret
, which
, dsn
);
388 TRACE ("Error %d opening %s DSN key %s\n",
389 reg_ret
, which
, dsn
);
395 WARN ("Unusually long %s data source name %s (%s) not "
396 "replicated\n", which
, dsn
, desc
);
400 if (sql_ret
!= SQL_NO_DATA
)
402 TRACE ("Error %d enumerating %s datasources\n",
403 (int)sql_ret
, which
);
406 if ((reg_ret
= RegCloseKey (hODBC
)) != ERROR_SUCCESS
)
408 TRACE ("Error %d closing %s ODBC.INI registry key\n", reg_ret
,
414 TRACE ("Error %d creating/opening %s ODBC.INI registry key\n",
419 WARN ("May not have replicated all %s ODBC DSNs to the registry\n",
424 /***********************************************************************
425 * ODBC_ReplicateToRegistry
431 * Unfortunately some of the functions that Windows documents as being part
432 * of the ODBC API it implements directly during compilation or something
433 * in terms of registry access functions.
434 * e.g. SQLGetInstalledDrivers queries the list at
435 * HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers
437 * This function is called when the driver manager is loaded and is used
438 * to replicate the appropriate details into the Wine registry
441 static void ODBC_ReplicateToRegistry (void)
446 if ((sql_ret
= SQLAllocEnv (&hEnv
)) == SQL_SUCCESS
)
448 ODBC_ReplicateODBCInstToRegistry (hEnv
);
449 ODBC_ReplicateODBCToRegistry (0 /* system dsns */, hEnv
);
450 ODBC_ReplicateODBCToRegistry (1 /* user dsns */, hEnv
);
452 if ((sql_ret
= SQLFreeEnv (hEnv
)) != SQL_SUCCESS
)
454 TRACE ("Error %d freeing the SQL environment.\n", (int)sql_ret
);
459 TRACE ("Error %d opening an SQL environment.\n", (int)sql_ret
);
460 WARN ("The external ODBC settings have not been replicated to the"
465 /***********************************************************************
466 * DllMain [Internal] Initializes the internal 'ODBC32.DLL'.
469 * hinstDLL [I] handle to the DLL's instance
471 * lpvReserved [I] reserved, must be NULL
478 BOOL WINAPI
DllMain(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
480 TRACE("Initializing or Finalizing proxy ODBC: %p,%x,%p\n", hinstDLL
, fdwReason
, lpvReserved
);
482 if (fdwReason
== DLL_PROCESS_ATTACH
)
484 TRACE("Loading ODBC...\n");
485 DisableThreadLibraryCalls(hinstDLL
);
486 if (ODBC_LoadDriverManager())
488 ODBC_LoadDMFunctions();
489 ODBC_ReplicateToRegistry();
492 else if (fdwReason
== DLL_PROCESS_DETACH
)
494 TRACE("Unloading ODBC...\n");
497 wine_dlclose(dmHandle
,NULL
,0);
505 /***********************************************************************
506 * ODBC_LoadDriverManager [Internal] Load ODBC library.
515 static BOOL
ODBC_LoadDriverManager(void)
517 const char *s
= getenv("LIB_ODBC_DRIVER_MANAGER");
522 #ifdef SONAME_LIBODBC
523 if (!s
|| !s
[0]) s
= SONAME_LIBODBC
;
525 if (!s
|| !s
[0]) goto failed
;
527 dmHandle
= wine_dlopen(s
, RTLD_LAZY
| RTLD_GLOBAL
, error
, sizeof(error
));
529 if (dmHandle
!= NULL
)
531 nErrorType
= ERROR_FREE
;
535 WARN("failed to open library %s: %s\n", debugstr_a(s
), error
);
536 nErrorType
= ERROR_LIBRARY_NOT_FOUND
;
541 /***********************************************************************
542 * ODBC_LoadDMFunctions [Internal] Populate function table.
551 static BOOL
ODBC_LoadDMFunctions(void)
555 if (dmHandle
== NULL
)
558 #define LOAD_FUNC(name) \
559 if ((p##name = wine_dlsym( dmHandle, #name, error, sizeof(error) ))); \
560 else WARN( "Failed to load %s: %s\n", #name, error )
562 LOAD_FUNC(SQLAllocConnect
);
563 LOAD_FUNC(SQLAllocEnv
);
564 LOAD_FUNC(SQLAllocHandle
);
565 LOAD_FUNC(SQLAllocHandleStd
);
566 LOAD_FUNC(SQLAllocStmt
);
567 LOAD_FUNC(SQLBindCol
);
568 LOAD_FUNC(SQLBindParam
);
569 LOAD_FUNC(SQLBindParameter
);
570 LOAD_FUNC(SQLBrowseConnect
);
571 LOAD_FUNC(SQLBrowseConnectW
);
572 LOAD_FUNC(SQLBulkOperations
);
573 LOAD_FUNC(SQLCancel
);
574 LOAD_FUNC(SQLCloseCursor
);
575 LOAD_FUNC(SQLColAttribute
);
576 LOAD_FUNC(SQLColAttributeW
);
577 LOAD_FUNC(SQLColAttributes
);
578 LOAD_FUNC(SQLColAttributesW
);
579 LOAD_FUNC(SQLColumnPrivileges
);
580 LOAD_FUNC(SQLColumnPrivilegesW
);
581 LOAD_FUNC(SQLColumns
);
582 LOAD_FUNC(SQLColumnsW
);
583 LOAD_FUNC(SQLConnect
);
584 LOAD_FUNC(SQLConnectW
);
585 LOAD_FUNC(SQLCopyDesc
);
586 LOAD_FUNC(SQLDataSources
);
587 LOAD_FUNC(SQLDataSourcesW
);
588 LOAD_FUNC(SQLDescribeCol
);
589 LOAD_FUNC(SQLDescribeColW
);
590 LOAD_FUNC(SQLDescribeParam
);
591 LOAD_FUNC(SQLDisconnect
);
592 LOAD_FUNC(SQLDriverConnect
);
593 LOAD_FUNC(SQLDriverConnectW
);
594 LOAD_FUNC(SQLDrivers
);
595 LOAD_FUNC(SQLDriversW
);
596 LOAD_FUNC(SQLEndTran
);
598 LOAD_FUNC(SQLErrorW
);
599 LOAD_FUNC(SQLExecDirect
);
600 LOAD_FUNC(SQLExecDirectW
);
601 LOAD_FUNC(SQLExecute
);
602 LOAD_FUNC(SQLExtendedFetch
);
604 LOAD_FUNC(SQLFetchScroll
);
605 LOAD_FUNC(SQLForeignKeys
);
606 LOAD_FUNC(SQLForeignKeysW
);
607 LOAD_FUNC(SQLFreeConnect
);
608 LOAD_FUNC(SQLFreeEnv
);
609 LOAD_FUNC(SQLFreeHandle
);
610 LOAD_FUNC(SQLFreeStmt
);
611 LOAD_FUNC(SQLGetConnectAttr
);
612 LOAD_FUNC(SQLGetConnectAttrW
);
613 LOAD_FUNC(SQLGetConnectOption
);
614 LOAD_FUNC(SQLGetConnectOptionW
);
615 LOAD_FUNC(SQLGetCursorName
);
616 LOAD_FUNC(SQLGetCursorNameW
);
617 LOAD_FUNC(SQLGetData
);
618 LOAD_FUNC(SQLGetDescField
);
619 LOAD_FUNC(SQLGetDescFieldW
);
620 LOAD_FUNC(SQLGetDescRec
);
621 LOAD_FUNC(SQLGetDescRecW
);
622 LOAD_FUNC(SQLGetDiagField
);
623 LOAD_FUNC(SQLGetDiagFieldW
);
624 LOAD_FUNC(SQLGetDiagRec
);
625 LOAD_FUNC(SQLGetDiagRecW
);
626 LOAD_FUNC(SQLGetEnvAttr
);
627 LOAD_FUNC(SQLGetFunctions
);
628 LOAD_FUNC(SQLGetInfo
);
629 LOAD_FUNC(SQLGetInfoW
);
630 LOAD_FUNC(SQLGetStmtAttr
);
631 LOAD_FUNC(SQLGetStmtAttrW
);
632 LOAD_FUNC(SQLGetStmtOption
);
633 LOAD_FUNC(SQLGetTypeInfo
);
634 LOAD_FUNC(SQLGetTypeInfoW
);
635 LOAD_FUNC(SQLMoreResults
);
636 LOAD_FUNC(SQLNativeSql
);
637 LOAD_FUNC(SQLNativeSqlW
);
638 LOAD_FUNC(SQLNumParams
);
639 LOAD_FUNC(SQLNumResultCols
);
640 LOAD_FUNC(SQLParamData
);
641 LOAD_FUNC(SQLParamOptions
);
642 LOAD_FUNC(SQLPrepare
);
643 LOAD_FUNC(SQLPrepareW
);
644 LOAD_FUNC(SQLPrimaryKeys
);
645 LOAD_FUNC(SQLPrimaryKeysW
);
646 LOAD_FUNC(SQLProcedureColumns
);
647 LOAD_FUNC(SQLProcedureColumnsW
);
648 LOAD_FUNC(SQLProcedures
);
649 LOAD_FUNC(SQLProceduresW
);
650 LOAD_FUNC(SQLPutData
);
651 LOAD_FUNC(SQLRowCount
);
652 LOAD_FUNC(SQLSetConnectAttr
);
653 LOAD_FUNC(SQLSetConnectAttrW
);
654 LOAD_FUNC(SQLSetConnectOption
);
655 LOAD_FUNC(SQLSetConnectOptionW
);
656 LOAD_FUNC(SQLSetCursorName
);
657 LOAD_FUNC(SQLSetCursorNameW
);
658 LOAD_FUNC(SQLSetDescField
);
659 LOAD_FUNC(SQLSetDescFieldW
);
660 LOAD_FUNC(SQLSetDescRec
);
661 LOAD_FUNC(SQLSetEnvAttr
);
662 LOAD_FUNC(SQLSetParam
);
663 LOAD_FUNC(SQLSetPos
);
664 LOAD_FUNC(SQLSetScrollOptions
);
665 LOAD_FUNC(SQLSetStmtAttr
);
666 LOAD_FUNC(SQLSetStmtAttrW
);
667 LOAD_FUNC(SQLSetStmtOption
);
668 LOAD_FUNC(SQLSpecialColumns
);
669 LOAD_FUNC(SQLSpecialColumnsW
);
670 LOAD_FUNC(SQLStatistics
);
671 LOAD_FUNC(SQLStatisticsW
);
672 LOAD_FUNC(SQLTablePrivileges
);
673 LOAD_FUNC(SQLTablePrivilegesW
);
674 LOAD_FUNC(SQLTables
);
675 LOAD_FUNC(SQLTablesW
);
676 LOAD_FUNC(SQLTransact
);
683 /*************************************************************************
684 * SQLAllocConnect [ODBC32.001]
686 SQLRETURN WINAPI
SQLAllocConnect(SQLHENV EnvironmentHandle
, SQLHDBC
*ConnectionHandle
)
689 TRACE("Env=%lx\n",EnvironmentHandle
);
691 if (!pSQLAllocConnect
)
693 *ConnectionHandle
= SQL_NULL_HDBC
;
694 TRACE("Not ready\n");
698 ret
= pSQLAllocConnect(EnvironmentHandle
, ConnectionHandle
);
699 TRACE("Returns ret=%d, Handle %lx\n",ret
, *ConnectionHandle
);
704 /*************************************************************************
705 * SQLAllocEnv [ODBC32.002]
707 SQLRETURN WINAPI
SQLAllocEnv(SQLHENV
*EnvironmentHandle
)
714 *EnvironmentHandle
= SQL_NULL_HENV
;
715 TRACE("Not ready\n");
719 ret
= pSQLAllocEnv(EnvironmentHandle
);
720 TRACE("Returns ret=%d, Env=%lx\n",ret
, *EnvironmentHandle
);
725 /*************************************************************************
726 * SQLAllocHandle [ODBC32.024]
728 SQLRETURN WINAPI
SQLAllocHandle(SQLSMALLINT HandleType
, SQLHANDLE InputHandle
, SQLHANDLE
*OutputHandle
)
731 TRACE("(Type=%d, Handle=%lx)\n",HandleType
,InputHandle
);
733 if (!pSQLAllocHandle
)
735 if (nErrorType
== ERROR_LIBRARY_NOT_FOUND
)
736 WARN("ProxyODBC: Cannot load ODBC driver manager library.\n");
738 if (HandleType
== SQL_HANDLE_ENV
)
739 *OutputHandle
= SQL_NULL_HENV
;
740 else if (HandleType
== SQL_HANDLE_DBC
)
741 *OutputHandle
= SQL_NULL_HDBC
;
742 else if (HandleType
== SQL_HANDLE_STMT
)
743 *OutputHandle
= SQL_NULL_HSTMT
;
744 else if (HandleType
== SQL_HANDLE_DESC
)
745 *OutputHandle
= SQL_NULL_HDESC
;
747 TRACE ("Not ready\n");
751 ret
= pSQLAllocHandle(HandleType
, InputHandle
, OutputHandle
);
752 TRACE("Returns ret=%d, Handle=%lx\n",ret
, *OutputHandle
);
757 /*************************************************************************
758 * SQLAllocStmt [ODBC32.003]
760 SQLRETURN WINAPI
SQLAllocStmt(SQLHDBC ConnectionHandle
, SQLHSTMT
*StatementHandle
)
764 TRACE("(Connection=%lx)\n",ConnectionHandle
);
768 *StatementHandle
= SQL_NULL_HSTMT
;
769 TRACE ("Not ready\n");
773 ret
= pSQLAllocStmt(ConnectionHandle
, StatementHandle
);
774 TRACE ("Returns ret=%d, Handle=%lx\n", ret
, *StatementHandle
);
779 /*************************************************************************
780 * SQLAllocHandleStd [ODBC32.077]
782 SQLRETURN WINAPI
SQLAllocHandleStd( SQLSMALLINT HandleType
,
783 SQLHANDLE InputHandle
, SQLHANDLE
*OutputHandle
)
785 TRACE("ProxyODBC: SQLAllocHandleStd.\n");
787 if (!pSQLAllocHandleStd
)
789 if (nErrorType
== ERROR_LIBRARY_NOT_FOUND
)
790 WARN("ProxyODBC: Cannot load ODBC driver manager library.\n");
792 if (HandleType
== SQL_HANDLE_ENV
)
793 *OutputHandle
= SQL_NULL_HENV
;
794 else if (HandleType
== SQL_HANDLE_DBC
)
795 *OutputHandle
= SQL_NULL_HDBC
;
796 else if (HandleType
== SQL_HANDLE_STMT
)
797 *OutputHandle
= SQL_NULL_HSTMT
;
798 else if (HandleType
== SQL_HANDLE_DESC
)
799 *OutputHandle
= SQL_NULL_HDESC
;
804 return pSQLAllocHandleStd(HandleType
, InputHandle
, OutputHandle
);
808 /*************************************************************************
809 * SQLBindCol [ODBC32.004]
811 SQLRETURN WINAPI
SQLBindCol(SQLHSTMT StatementHandle
,
812 SQLUSMALLINT ColumnNumber
, SQLSMALLINT TargetType
,
813 SQLPOINTER TargetValue
, SQLINTEGER BufferLength
,
814 SQLINTEGER
*StrLen_or_Ind
)
820 TRACE ("Not ready\n");
824 return pSQLBindCol(StatementHandle
, ColumnNumber
, TargetType
,
825 TargetValue
, BufferLength
, StrLen_or_Ind
);
829 /*************************************************************************
830 * SQLBindParam [ODBC32.025]
832 SQLRETURN WINAPI
SQLBindParam(SQLHSTMT StatementHandle
,
833 SQLUSMALLINT ParameterNumber
, SQLSMALLINT ValueType
,
834 SQLSMALLINT ParameterType
, SQLUINTEGER LengthPrecision
,
835 SQLSMALLINT ParameterScale
, SQLPOINTER ParameterValue
,
836 SQLINTEGER
*StrLen_or_Ind
)
840 if (!pSQLBindParam
) return SQL_ERROR
;
841 return pSQLBindParam(StatementHandle
, ParameterNumber
, ValueType
,
842 ParameterType
, LengthPrecision
, ParameterScale
,
843 ParameterValue
, StrLen_or_Ind
);
847 /*************************************************************************
848 * SQLCancel [ODBC32.005]
850 SQLRETURN WINAPI
SQLCancel(SQLHSTMT StatementHandle
)
854 if (!pSQLCancel
) return SQL_ERROR
;
855 return pSQLCancel(StatementHandle
);
859 /*************************************************************************
860 * SQLCloseCursor [ODBC32.026]
862 SQLRETURN WINAPI
SQLCloseCursor(SQLHSTMT StatementHandle
)
865 TRACE("(Handle=%lx)\n",StatementHandle
);
867 if (!pSQLCloseCursor
) return SQL_ERROR
;
869 ret
= pSQLCloseCursor(StatementHandle
);
870 TRACE("returns %d\n",ret
);
875 /*************************************************************************
876 * SQLColAttribute [ODBC32.027]
878 SQLRETURN WINAPI
SQLColAttribute (SQLHSTMT StatementHandle
,
879 SQLUSMALLINT ColumnNumber
, SQLUSMALLINT FieldIdentifier
,
880 SQLPOINTER CharacterAttribute
, SQLSMALLINT BufferLength
,
881 SQLSMALLINT
*StringLength
, SQLPOINTER NumericAttribute
)
885 if (!pSQLColAttribute
) return SQL_ERROR
;
886 return pSQLColAttribute(StatementHandle
, ColumnNumber
, FieldIdentifier
,
887 CharacterAttribute
, BufferLength
, StringLength
, NumericAttribute
);
891 /*************************************************************************
892 * SQLColumns [ODBC32.040]
894 SQLRETURN WINAPI
SQLColumns(SQLHSTMT StatementHandle
,
895 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
896 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
897 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
898 SQLCHAR
*ColumnName
, SQLSMALLINT NameLength4
)
902 if (!pSQLColumns
) return SQL_ERROR
;
903 return pSQLColumns(StatementHandle
, CatalogName
, NameLength1
,
904 SchemaName
, NameLength2
, TableName
, NameLength3
, ColumnName
, NameLength4
);
908 /*************************************************************************
909 * SQLConnect [ODBC32.007]
911 SQLRETURN WINAPI
SQLConnect(SQLHDBC ConnectionHandle
,
912 SQLCHAR
*ServerName
, SQLSMALLINT NameLength1
,
913 SQLCHAR
*UserName
, SQLSMALLINT NameLength2
,
914 SQLCHAR
*Authentication
, SQLSMALLINT NameLength3
)
917 TRACE("(Server=%.*s)\n",NameLength1
, ServerName
);
919 if (!pSQLConnect
) return SQL_ERROR
;
921 ret
= pSQLConnect(ConnectionHandle
, ServerName
, NameLength1
,
922 UserName
, NameLength2
, Authentication
, NameLength3
);
924 TRACE("returns %d\n",ret
);
929 /*************************************************************************
930 * SQLCopyDesc [ODBC32.028]
932 SQLRETURN WINAPI
SQLCopyDesc(SQLHDESC SourceDescHandle
, SQLHDESC TargetDescHandle
)
936 if (!pSQLCopyDesc
) return SQL_ERROR
;
937 return pSQLCopyDesc(SourceDescHandle
, TargetDescHandle
);
941 /*************************************************************************
942 * SQLDataSources [ODBC32.057]
944 SQLRETURN WINAPI
SQLDataSources(SQLHENV EnvironmentHandle
,
945 SQLUSMALLINT Direction
, SQLCHAR
*ServerName
,
946 SQLSMALLINT BufferLength1
, SQLSMALLINT
*NameLength1
,
947 SQLCHAR
*Description
, SQLSMALLINT BufferLength2
,
948 SQLSMALLINT
*NameLength2
)
952 TRACE("EnvironmentHandle = %p\n", (LPVOID
)EnvironmentHandle
);
954 if (!pSQLDataSources
) return SQL_ERROR
;
956 ret
= pSQLDataSources(EnvironmentHandle
, Direction
, ServerName
,
957 BufferLength1
, NameLength1
, Description
, BufferLength2
, NameLength2
);
961 TRACE("returns: %d \t", ret
);
962 if (*NameLength1
> 0)
963 TRACE("DataSource = %s,", ServerName
);
964 if (*NameLength2
> 0)
965 TRACE(" Description = %s", Description
);
973 /*************************************************************************
974 * SQLDescribeCol [ODBC32.008]
976 SQLRETURN WINAPI
SQLDescribeCol(SQLHSTMT StatementHandle
,
977 SQLUSMALLINT ColumnNumber
, SQLCHAR
*ColumnName
,
978 SQLSMALLINT BufferLength
, SQLSMALLINT
*NameLength
,
979 SQLSMALLINT
*DataType
, SQLUINTEGER
*ColumnSize
,
980 SQLSMALLINT
*DecimalDigits
, SQLSMALLINT
*Nullable
)
984 if (!pSQLDescribeCol
) return SQL_ERROR
;
985 return pSQLDescribeCol(StatementHandle
, ColumnNumber
, ColumnName
,
986 BufferLength
, NameLength
, DataType
, ColumnSize
, DecimalDigits
, Nullable
);
990 /*************************************************************************
991 * SQLDisconnect [ODBC32.009]
993 SQLRETURN WINAPI
SQLDisconnect(SQLHDBC ConnectionHandle
)
996 TRACE("(Handle=%lx)\n", ConnectionHandle
);
998 if (!pSQLDisconnect
) return SQL_ERROR
;
1000 ret
= pSQLDisconnect(ConnectionHandle
);
1001 TRACE("returns %d\n",ret
);
1006 /*************************************************************************
1007 * SQLEndTran [ODBC32.029]
1009 SQLRETURN WINAPI
SQLEndTran(SQLSMALLINT HandleType
, SQLHANDLE Handle
, SQLSMALLINT CompletionType
)
1013 if (!pSQLEndTran
) return SQL_ERROR
;
1014 return pSQLEndTran(HandleType
, Handle
, CompletionType
);
1018 /*************************************************************************
1019 * SQLError [ODBC32.010]
1021 SQLRETURN WINAPI
SQLError(SQLHENV EnvironmentHandle
,
1022 SQLHDBC ConnectionHandle
, SQLHSTMT StatementHandle
,
1023 SQLCHAR
*Sqlstate
, SQLINTEGER
*NativeError
,
1024 SQLCHAR
*MessageText
, SQLSMALLINT BufferLength
,
1025 SQLSMALLINT
*TextLength
)
1029 if (!pSQLError
) return SQL_ERROR
;
1030 return pSQLError(EnvironmentHandle
, ConnectionHandle
, StatementHandle
,
1031 Sqlstate
, NativeError
, MessageText
, BufferLength
, TextLength
);
1035 /*************************************************************************
1036 * SQLExecDirect [ODBC32.011]
1038 SQLRETURN WINAPI
SQLExecDirect(SQLHSTMT StatementHandle
, SQLCHAR
*StatementText
, SQLINTEGER TextLength
)
1042 if (!pSQLExecDirect
) return SQL_ERROR
;
1043 return pSQLExecDirect(StatementHandle
, StatementText
, TextLength
);
1047 /*************************************************************************
1048 * SQLExecute [ODBC32.012]
1050 SQLRETURN WINAPI
SQLExecute(SQLHSTMT StatementHandle
)
1054 if (!pSQLExecute
) return SQL_ERROR
;
1055 return pSQLExecute(StatementHandle
);
1059 /*************************************************************************
1060 * SQLFetch [ODBC32.013]
1062 SQLRETURN WINAPI
SQLFetch(SQLHSTMT StatementHandle
)
1066 if (!pSQLFetch
) return SQL_ERROR
;
1067 return pSQLFetch(StatementHandle
);
1071 /*************************************************************************
1072 * SQLFetchScroll [ODBC32.030]
1074 SQLRETURN WINAPI
SQLFetchScroll(SQLHSTMT StatementHandle
, SQLSMALLINT FetchOrientation
, SQLINTEGER FetchOffset
)
1078 if (!pSQLFetchScroll
) return SQL_ERROR
;
1079 return pSQLFetchScroll(StatementHandle
, FetchOrientation
, FetchOffset
);
1083 /*************************************************************************
1084 * SQLFreeConnect [ODBC32.014]
1086 SQLRETURN WINAPI
SQLFreeConnect(SQLHDBC ConnectionHandle
)
1089 TRACE("(Handle=%lx)\n",ConnectionHandle
);
1091 if (!pSQLFreeConnect
) return SQL_ERROR
;
1093 ret
= pSQLFreeConnect(ConnectionHandle
);
1094 TRACE("Returns %d\n",ret
);
1099 /*************************************************************************
1100 * SQLFreeEnv [ODBC32.015]
1102 SQLRETURN WINAPI
SQLFreeEnv(SQLHENV EnvironmentHandle
)
1105 TRACE("(Env=%lx)\n",EnvironmentHandle
);
1107 if (!pSQLFreeEnv
) return SQL_ERROR
;
1109 ret
= pSQLFreeEnv(EnvironmentHandle
);
1110 TRACE("Returns %d\n",ret
);
1115 /*************************************************************************
1116 * SQLFreeHandle [ODBC32.031]
1118 SQLRETURN WINAPI
SQLFreeHandle(SQLSMALLINT HandleType
, SQLHANDLE Handle
)
1121 TRACE("(Type=%d, Handle=%lx)\n",HandleType
,Handle
);
1123 if (!pSQLFreeHandle
) return SQL_ERROR
;
1125 ret
= pSQLFreeHandle(HandleType
, Handle
);
1126 TRACE ("Returns %d\n",ret
);
1131 /*************************************************************************
1132 * SQLFreeStmt [ODBC32.016]
1134 SQLRETURN WINAPI
SQLFreeStmt(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
)
1137 TRACE("(Handle %lx, Option=%d)\n",StatementHandle
, Option
);
1139 if (!pSQLFreeStmt
) return SQL_ERROR
;
1141 ret
= pSQLFreeStmt(StatementHandle
, Option
);
1142 TRACE("Returns %d\n",ret
);
1147 /*************************************************************************
1148 * SQLGetConnectAttr [ODBC32.032]
1150 SQLRETURN WINAPI
SQLGetConnectAttr(SQLHDBC ConnectionHandle
,
1151 SQLINTEGER Attribute
, SQLPOINTER Value
,
1152 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
1156 if (!pSQLGetConnectAttr
) return SQL_ERROR
;
1157 return pSQLGetConnectAttr(ConnectionHandle
, Attribute
, Value
,
1158 BufferLength
, StringLength
);
1162 /*************************************************************************
1163 * SQLGetConnectOption [ODBC32.042]
1165 SQLRETURN WINAPI
SQLGetConnectOption(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLPOINTER Value
)
1169 if (!pSQLGetConnectOption
) return SQL_ERROR
;
1170 return pSQLGetConnectOption(ConnectionHandle
, Option
, Value
);
1174 /*************************************************************************
1175 * SQLGetCursorName [ODBC32.017]
1177 SQLRETURN WINAPI
SQLGetCursorName(SQLHSTMT StatementHandle
,
1178 SQLCHAR
*CursorName
, SQLSMALLINT BufferLength
,
1179 SQLSMALLINT
*NameLength
)
1183 if (!pSQLGetCursorName
) return SQL_ERROR
;
1184 return pSQLGetCursorName(StatementHandle
, CursorName
, BufferLength
, NameLength
);
1188 /*************************************************************************
1189 * SQLGetData [ODBC32.043]
1191 SQLRETURN WINAPI
SQLGetData(SQLHSTMT StatementHandle
,
1192 SQLUSMALLINT ColumnNumber
, SQLSMALLINT TargetType
,
1193 SQLPOINTER TargetValue
, SQLINTEGER BufferLength
,
1194 SQLINTEGER
*StrLen_or_Ind
)
1198 if (!pSQLGetData
) return SQL_ERROR
;
1199 return pSQLGetData(StatementHandle
, ColumnNumber
, TargetType
,
1200 TargetValue
, BufferLength
, StrLen_or_Ind
);
1204 /*************************************************************************
1205 * SQLGetDescField [ODBC32.033]
1207 SQLRETURN WINAPI
SQLGetDescField(SQLHDESC DescriptorHandle
,
1208 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
1209 SQLPOINTER Value
, SQLINTEGER BufferLength
,
1210 SQLINTEGER
*StringLength
)
1214 if (!pSQLGetDescField
) return SQL_ERROR
;
1215 return pSQLGetDescField(DescriptorHandle
, RecNumber
, FieldIdentifier
,
1216 Value
, BufferLength
, StringLength
);
1220 /*************************************************************************
1221 * SQLGetDescRec [ODBC32.034]
1223 SQLRETURN WINAPI
SQLGetDescRec(SQLHDESC DescriptorHandle
,
1224 SQLSMALLINT RecNumber
, SQLCHAR
*Name
,
1225 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
,
1226 SQLSMALLINT
*Type
, SQLSMALLINT
*SubType
,
1227 SQLINTEGER
*Length
, SQLSMALLINT
*Precision
,
1228 SQLSMALLINT
*Scale
, SQLSMALLINT
*Nullable
)
1232 if (!pSQLGetDescRec
) return SQL_ERROR
;
1233 return pSQLGetDescRec(DescriptorHandle
, RecNumber
, Name
, BufferLength
,
1234 StringLength
, Type
, SubType
, Length
, Precision
, Scale
, Nullable
);
1238 /*************************************************************************
1239 * SQLGetDiagField [ODBC32.035]
1241 SQLRETURN WINAPI
SQLGetDiagField(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
1242 SQLSMALLINT RecNumber
, SQLSMALLINT DiagIdentifier
,
1243 SQLPOINTER DiagInfo
, SQLSMALLINT BufferLength
,
1244 SQLSMALLINT
*StringLength
)
1248 if (!pSQLGetDiagField
) return SQL_ERROR
;
1249 return pSQLGetDiagField(HandleType
, Handle
, RecNumber
, DiagIdentifier
,
1250 DiagInfo
, BufferLength
, StringLength
);
1254 /*************************************************************************
1255 * SQLGetDiagRec [ODBC32.036]
1257 SQLRETURN WINAPI
SQLGetDiagRec(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
1258 SQLSMALLINT RecNumber
, SQLCHAR
*Sqlstate
,
1259 SQLINTEGER
*NativeError
, SQLCHAR
*MessageText
,
1260 SQLSMALLINT BufferLength
, SQLSMALLINT
*TextLength
)
1264 if (!pSQLGetDiagRec
) return SQL_ERROR
;
1265 return pSQLGetDiagRec(HandleType
, Handle
, RecNumber
, Sqlstate
, NativeError
,
1266 MessageText
, BufferLength
, TextLength
);
1270 /*************************************************************************
1271 * SQLGetEnvAttr [ODBC32.037]
1273 SQLRETURN WINAPI
SQLGetEnvAttr(SQLHENV EnvironmentHandle
,
1274 SQLINTEGER Attribute
, SQLPOINTER Value
,
1275 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
1279 if (!pSQLGetEnvAttr
) return SQL_ERROR
;
1280 return pSQLGetEnvAttr(EnvironmentHandle
, Attribute
, Value
, BufferLength
, StringLength
);
1284 /*************************************************************************
1285 * SQLGetFunctions [ODBC32.044]
1287 SQLRETURN WINAPI
SQLGetFunctions(SQLHDBC ConnectionHandle
, SQLUSMALLINT FunctionId
, SQLUSMALLINT
*Supported
)
1291 if (!pSQLGetFunctions
) return SQL_ERROR
;
1292 return pSQLGetFunctions(ConnectionHandle
, FunctionId
, Supported
);
1296 /*************************************************************************
1297 * SQLGetInfo [ODBC32.045]
1299 SQLRETURN WINAPI
SQLGetInfo(SQLHDBC ConnectionHandle
,
1300 SQLUSMALLINT InfoType
, SQLPOINTER InfoValue
,
1301 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
)
1305 if (!pSQLGetInfo
) return SQL_ERROR
;
1306 return pSQLGetInfo(ConnectionHandle
, InfoType
, InfoValue
, BufferLength
, StringLength
);
1310 /*************************************************************************
1311 * SQLGetStmtAttr [ODBC32.038]
1313 SQLRETURN WINAPI
SQLGetStmtAttr(SQLHSTMT StatementHandle
,
1314 SQLINTEGER Attribute
, SQLPOINTER Value
,
1315 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
1319 if (!pSQLGetStmtAttr
) return SQL_ERROR
;
1320 return pSQLGetStmtAttr(StatementHandle
, Attribute
, Value
, BufferLength
, StringLength
);
1324 /*************************************************************************
1325 * SQLGetStmtOption [ODBC32.046]
1327 SQLRETURN WINAPI
SQLGetStmtOption(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
, SQLPOINTER Value
)
1331 if (!pSQLGetStmtOption
) return SQL_ERROR
;
1332 return pSQLGetStmtOption(StatementHandle
, Option
, Value
);
1336 /*************************************************************************
1337 * SQLGetTypeInfo [ODBC32.047]
1339 SQLRETURN WINAPI
SQLGetTypeInfo(SQLHSTMT StatementHandle
, SQLSMALLINT DataType
)
1343 if (!pSQLGetTypeInfo
) return SQL_ERROR
;
1344 return pSQLGetTypeInfo(StatementHandle
, DataType
);
1348 /*************************************************************************
1349 * SQLNumResultCols [ODBC32.018]
1351 SQLRETURN WINAPI
SQLNumResultCols(SQLHSTMT StatementHandle
, SQLSMALLINT
*ColumnCount
)
1355 if (!pSQLNumResultCols
) return SQL_ERROR
;
1356 return pSQLNumResultCols(StatementHandle
, ColumnCount
);
1360 /*************************************************************************
1361 * SQLParamData [ODBC32.048]
1363 SQLRETURN WINAPI
SQLParamData(SQLHSTMT StatementHandle
, SQLPOINTER
*Value
)
1367 if (!pSQLParamData
) return SQL_ERROR
;
1368 return pSQLParamData(StatementHandle
, Value
);
1372 /*************************************************************************
1373 * SQLPrepare [ODBC32.019]
1375 SQLRETURN WINAPI
SQLPrepare(SQLHSTMT StatementHandle
, SQLCHAR
*StatementText
, SQLINTEGER TextLength
)
1379 if (!pSQLPrepare
) return SQL_ERROR
;
1380 return pSQLPrepare(StatementHandle
, StatementText
, TextLength
);
1384 /*************************************************************************
1385 * SQLPutData [ODBC32.049]
1387 SQLRETURN WINAPI
SQLPutData(SQLHSTMT StatementHandle
, SQLPOINTER Data
, SQLINTEGER StrLen_or_Ind
)
1391 if (!pSQLPutData
) return SQL_ERROR
;
1392 return pSQLPutData(StatementHandle
, Data
, StrLen_or_Ind
);
1396 /*************************************************************************
1397 * SQLRowCount [ODBC32.020]
1399 SQLRETURN WINAPI
SQLRowCount(SQLHSTMT StatementHandle
, SQLINTEGER
*RowCount
)
1403 if (!pSQLRowCount
) return SQL_ERROR
;
1404 return pSQLRowCount(StatementHandle
, RowCount
);
1408 /*************************************************************************
1409 * SQLSetConnectAttr [ODBC32.039]
1411 SQLRETURN WINAPI
SQLSetConnectAttr(SQLHDBC ConnectionHandle
, SQLINTEGER Attribute
,
1412 SQLPOINTER Value
, SQLINTEGER StringLength
)
1416 if (!pSQLSetConnectAttr
) return SQL_ERROR
;
1417 return pSQLSetConnectAttr(ConnectionHandle
, Attribute
, Value
, StringLength
);
1421 /*************************************************************************
1422 * SQLSetConnectOption [ODBC32.050]
1424 SQLRETURN WINAPI
SQLSetConnectOption(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLUINTEGER Value
)
1428 if (!pSQLSetConnectOption
) return SQL_ERROR
;
1429 return pSQLSetConnectOption(ConnectionHandle
, Option
, Value
);
1433 /*************************************************************************
1434 * SQLSetCursorName [ODBC32.021]
1436 SQLRETURN WINAPI
SQLSetCursorName(SQLHSTMT StatementHandle
, SQLCHAR
*CursorName
, SQLSMALLINT NameLength
)
1440 if (!pSQLSetCursorName
) return SQL_ERROR
;
1441 return pSQLSetCursorName(StatementHandle
, CursorName
, NameLength
);
1445 /*************************************************************************
1446 * SQLSetDescField [ODBC32.073]
1448 SQLRETURN WINAPI
SQLSetDescField(SQLHDESC DescriptorHandle
,
1449 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
1450 SQLPOINTER Value
, SQLINTEGER BufferLength
)
1454 if (!pSQLSetDescField
) return SQL_ERROR
;
1455 return pSQLSetDescField(DescriptorHandle
, RecNumber
, FieldIdentifier
, Value
, BufferLength
);
1459 /*************************************************************************
1460 * SQLSetDescRec [ODBC32.074]
1462 SQLRETURN WINAPI
SQLSetDescRec(SQLHDESC DescriptorHandle
,
1463 SQLSMALLINT RecNumber
, SQLSMALLINT Type
,
1464 SQLSMALLINT SubType
, SQLINTEGER Length
,
1465 SQLSMALLINT Precision
, SQLSMALLINT Scale
,
1466 SQLPOINTER Data
, SQLINTEGER
*StringLength
,
1467 SQLINTEGER
*Indicator
)
1471 if (!pSQLSetDescRec
) return SQL_ERROR
;
1472 return pSQLSetDescRec(DescriptorHandle
, RecNumber
, Type
, SubType
, Length
,
1473 Precision
, Scale
, Data
, StringLength
, Indicator
);
1477 /*************************************************************************
1478 * SQLSetEnvAttr [ODBC32.075]
1480 SQLRETURN WINAPI
SQLSetEnvAttr(SQLHENV EnvironmentHandle
,
1481 SQLINTEGER Attribute
, SQLPOINTER Value
,
1482 SQLINTEGER StringLength
)
1486 if (!pSQLSetEnvAttr
) return SQL_ERROR
;
1487 return pSQLSetEnvAttr(EnvironmentHandle
, Attribute
, Value
, StringLength
);
1491 /*************************************************************************
1492 * SQLSetParam [ODBC32.022]
1494 SQLRETURN WINAPI
SQLSetParam(SQLHSTMT StatementHandle
,
1495 SQLUSMALLINT ParameterNumber
, SQLSMALLINT ValueType
,
1496 SQLSMALLINT ParameterType
, SQLUINTEGER LengthPrecision
,
1497 SQLSMALLINT ParameterScale
, SQLPOINTER ParameterValue
,
1498 SQLINTEGER
*StrLen_or_Ind
)
1502 if (!pSQLSetParam
) return SQL_ERROR
;
1503 return pSQLSetParam(StatementHandle
, ParameterNumber
, ValueType
, ParameterType
, LengthPrecision
,
1504 ParameterScale
, ParameterValue
, StrLen_or_Ind
);
1508 /*************************************************************************
1509 * SQLSetStmtAttr [ODBC32.076]
1511 SQLRETURN WINAPI
SQLSetStmtAttr(SQLHSTMT StatementHandle
,
1512 SQLINTEGER Attribute
, SQLPOINTER Value
,
1513 SQLINTEGER StringLength
)
1517 if (!pSQLSetStmtAttr
) return SQL_ERROR
;
1518 return pSQLSetStmtAttr(StatementHandle
, Attribute
, Value
, StringLength
);
1522 /*************************************************************************
1523 * SQLSetStmtOption [ODBC32.051]
1525 SQLRETURN WINAPI
SQLSetStmtOption(SQLHSTMT StatementHandle
, SQLUSMALLINT Option
, SQLUINTEGER Value
)
1529 if (!pSQLSetStmtOption
) return SQL_ERROR
;
1530 return pSQLSetStmtOption(StatementHandle
, Option
, Value
);
1534 /*************************************************************************
1535 * SQLSpecialColumns [ODBC32.052]
1537 SQLRETURN WINAPI
SQLSpecialColumns(SQLHSTMT StatementHandle
,
1538 SQLUSMALLINT IdentifierType
, SQLCHAR
*CatalogName
,
1539 SQLSMALLINT NameLength1
, SQLCHAR
*SchemaName
,
1540 SQLSMALLINT NameLength2
, SQLCHAR
*TableName
,
1541 SQLSMALLINT NameLength3
, SQLUSMALLINT Scope
,
1542 SQLUSMALLINT Nullable
)
1545 if (!pSQLSpecialColumns
) return SQL_ERROR
;
1546 return pSQLSpecialColumns(StatementHandle
, IdentifierType
, CatalogName
, NameLength1
, SchemaName
,
1547 NameLength2
, TableName
, NameLength3
, Scope
, Nullable
);
1551 /*************************************************************************
1552 * SQLStatistics [ODBC32.053]
1554 SQLRETURN WINAPI
SQLStatistics(SQLHSTMT StatementHandle
,
1555 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
1556 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
1557 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
1558 SQLUSMALLINT Unique
, SQLUSMALLINT Reserved
)
1562 if (!pSQLStatistics
) return SQL_ERROR
;
1563 return pSQLStatistics(StatementHandle
, CatalogName
, NameLength1
, SchemaName
, NameLength2
,
1564 TableName
, NameLength3
, Unique
, Reserved
);
1568 /*************************************************************************
1569 * SQLTables [ODBC32.054]
1571 SQLRETURN WINAPI
SQLTables(SQLHSTMT StatementHandle
,
1572 SQLCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
1573 SQLCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
1574 SQLCHAR
*TableName
, SQLSMALLINT NameLength3
,
1575 SQLCHAR
*TableType
, SQLSMALLINT NameLength4
)
1579 if (!pSQLTables
) return SQL_ERROR
;
1580 return pSQLTables(StatementHandle
, CatalogName
, NameLength1
,
1581 SchemaName
, NameLength2
, TableName
, NameLength3
, TableType
, NameLength4
);
1585 /*************************************************************************
1586 * SQLTransact [ODBC32.023]
1588 SQLRETURN WINAPI
SQLTransact(SQLHENV EnvironmentHandle
, SQLHDBC ConnectionHandle
,
1589 SQLUSMALLINT CompletionType
)
1593 if (!pSQLTransact
) return SQL_ERROR
;
1594 return pSQLTransact(EnvironmentHandle
, ConnectionHandle
, CompletionType
);
1598 /*************************************************************************
1599 * SQLBrowseConnect [ODBC32.055]
1601 SQLRETURN WINAPI
SQLBrowseConnect(
1603 SQLCHAR
*szConnStrIn
,
1604 SQLSMALLINT cbConnStrIn
,
1605 SQLCHAR
*szConnStrOut
,
1606 SQLSMALLINT cbConnStrOutMax
,
1607 SQLSMALLINT
*pcbConnStrOut
)
1611 if (!pSQLBrowseConnect
) return SQL_ERROR
;
1612 return pSQLBrowseConnect(hdbc
, szConnStrIn
, cbConnStrIn
, szConnStrOut
, cbConnStrOutMax
, pcbConnStrOut
);
1616 /*************************************************************************
1617 * SQLBulkOperations [ODBC32.078]
1619 SQLRETURN WINAPI
SQLBulkOperations(
1620 SQLHSTMT StatementHandle
,
1621 SQLSMALLINT Operation
)
1625 if (!pSQLBulkOperations
) return SQL_ERROR
;
1626 return pSQLBulkOperations(StatementHandle
, Operation
);
1630 /*************************************************************************
1631 * SQLColAttributes [ODBC32.006]
1633 SQLRETURN WINAPI
SQLColAttributes(
1636 SQLUSMALLINT fDescType
,
1638 SQLSMALLINT cbDescMax
,
1639 SQLSMALLINT
*pcbDesc
,
1644 if (!pSQLColAttributes
) return SQL_ERROR
;
1645 return pSQLColAttributes(hstmt
, icol
, fDescType
, rgbDesc
, cbDescMax
, pcbDesc
, pfDesc
);
1649 /*************************************************************************
1650 * SQLColumnPrivileges [ODBC32.056]
1652 SQLRETURN WINAPI
SQLColumnPrivileges(
1654 SQLCHAR
*szCatalogName
,
1655 SQLSMALLINT cbCatalogName
,
1656 SQLCHAR
*szSchemaName
,
1657 SQLSMALLINT cbSchemaName
,
1658 SQLCHAR
*szTableName
,
1659 SQLSMALLINT cbTableName
,
1660 SQLCHAR
*szColumnName
,
1661 SQLSMALLINT cbColumnName
)
1665 if (!pSQLColumnPrivileges
) return SQL_ERROR
;
1666 return pSQLColumnPrivileges(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1667 szTableName
, cbTableName
, szColumnName
, cbColumnName
);
1671 /*************************************************************************
1672 * SQLDescribeParam [ODBC32.058]
1674 SQLRETURN WINAPI
SQLDescribeParam(
1677 SQLSMALLINT
*pfSqlType
,
1678 SQLUINTEGER
*pcbParamDef
,
1679 SQLSMALLINT
*pibScale
,
1680 SQLSMALLINT
*pfNullable
)
1684 if (!pSQLDescribeParam
) return SQL_ERROR
;
1685 return pSQLDescribeParam(hstmt
, ipar
, pfSqlType
, pcbParamDef
, pibScale
, pfNullable
);
1689 /*************************************************************************
1690 * SQLExtendedFetch [ODBC32.059]
1692 SQLRETURN WINAPI
SQLExtendedFetch(
1694 SQLUSMALLINT fFetchType
,
1697 SQLUSMALLINT
*rgfRowStatus
)
1701 if (!pSQLExtendedFetch
) return SQL_ERROR
;
1702 return pSQLExtendedFetch(hstmt
, fFetchType
, irow
, pcrow
, rgfRowStatus
);
1706 /*************************************************************************
1707 * SQLForeignKeys [ODBC32.060]
1709 SQLRETURN WINAPI
SQLForeignKeys(
1711 SQLCHAR
*szPkCatalogName
,
1712 SQLSMALLINT cbPkCatalogName
,
1713 SQLCHAR
*szPkSchemaName
,
1714 SQLSMALLINT cbPkSchemaName
,
1715 SQLCHAR
*szPkTableName
,
1716 SQLSMALLINT cbPkTableName
,
1717 SQLCHAR
*szFkCatalogName
,
1718 SQLSMALLINT cbFkCatalogName
,
1719 SQLCHAR
*szFkSchemaName
,
1720 SQLSMALLINT cbFkSchemaName
,
1721 SQLCHAR
*szFkTableName
,
1722 SQLSMALLINT cbFkTableName
)
1726 if (!pSQLForeignKeys
) return SQL_ERROR
;
1727 return pSQLForeignKeys(hstmt
, szPkCatalogName
, cbPkCatalogName
, szPkSchemaName
, cbPkSchemaName
,
1728 szPkTableName
, cbPkTableName
, szFkCatalogName
, cbFkCatalogName
,
1729 szFkSchemaName
, cbFkSchemaName
, szFkTableName
, cbFkTableName
);
1733 /*************************************************************************
1734 * SQLMoreResults [ODBC32.061]
1736 SQLRETURN WINAPI
SQLMoreResults(SQLHSTMT hstmt
)
1740 if (!pSQLMoreResults
) return SQL_ERROR
;
1741 return pSQLMoreResults(hstmt
);
1745 /*************************************************************************
1746 * SQLNativeSql [ODBC32.062]
1748 SQLRETURN WINAPI
SQLNativeSql(
1750 SQLCHAR
*szSqlStrIn
,
1751 SQLINTEGER cbSqlStrIn
,
1753 SQLINTEGER cbSqlStrMax
,
1754 SQLINTEGER
*pcbSqlStr
)
1758 if (!pSQLNativeSql
) return SQL_ERROR
;
1759 return pSQLNativeSql(hdbc
, szSqlStrIn
, cbSqlStrIn
, szSqlStr
, cbSqlStrMax
, pcbSqlStr
);
1763 /*************************************************************************
1764 * SQLNumParams [ODBC32.063]
1766 SQLRETURN WINAPI
SQLNumParams(
1772 if (!pSQLNumParams
) return SQL_ERROR
;
1773 return pSQLNumParams(hstmt
, pcpar
);
1777 /*************************************************************************
1778 * SQLParamOptions [ODBC32.064]
1780 SQLRETURN WINAPI
SQLParamOptions(
1787 if (!pSQLParamOptions
) return SQL_ERROR
;
1788 return pSQLParamOptions(hstmt
, crow
, pirow
);
1792 /*************************************************************************
1793 * SQLPrimaryKeys [ODBC32.065]
1795 SQLRETURN WINAPI
SQLPrimaryKeys(
1797 SQLCHAR
*szCatalogName
,
1798 SQLSMALLINT cbCatalogName
,
1799 SQLCHAR
*szSchemaName
,
1800 SQLSMALLINT cbSchemaName
,
1801 SQLCHAR
*szTableName
,
1802 SQLSMALLINT cbTableName
)
1806 if (!pSQLPrimaryKeys
) return SQL_ERROR
;
1807 return pSQLPrimaryKeys(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1808 szTableName
, cbTableName
);
1812 /*************************************************************************
1813 * SQLProcedureColumns [ODBC32.066]
1815 SQLRETURN WINAPI
SQLProcedureColumns(
1817 SQLCHAR
*szCatalogName
,
1818 SQLSMALLINT cbCatalogName
,
1819 SQLCHAR
*szSchemaName
,
1820 SQLSMALLINT cbSchemaName
,
1821 SQLCHAR
*szProcName
,
1822 SQLSMALLINT cbProcName
,
1823 SQLCHAR
*szColumnName
,
1824 SQLSMALLINT cbColumnName
)
1828 if (!pSQLProcedureColumns
) return SQL_ERROR
;
1829 return pSQLProcedureColumns(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1830 szProcName
, cbProcName
, szColumnName
, cbColumnName
);
1834 /*************************************************************************
1835 * SQLProcedures [ODBC32.067]
1837 SQLRETURN WINAPI
SQLProcedures(
1839 SQLCHAR
*szCatalogName
,
1840 SQLSMALLINT cbCatalogName
,
1841 SQLCHAR
*szSchemaName
,
1842 SQLSMALLINT cbSchemaName
,
1843 SQLCHAR
*szProcName
,
1844 SQLSMALLINT cbProcName
)
1848 if (!pSQLProcedures
) return SQL_ERROR
;
1849 return pSQLProcedures(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1850 szProcName
, cbProcName
);
1854 /*************************************************************************
1855 * SQLSetPos [ODBC32.068]
1857 SQLRETURN WINAPI
SQLSetPos(
1860 SQLUSMALLINT fOption
,
1865 if (!pSQLSetPos
) return SQL_ERROR
;
1866 return pSQLSetPos(hstmt
, irow
, fOption
, fLock
);
1870 /*************************************************************************
1871 * SQLTablePrivileges [ODBC32.070]
1873 SQLRETURN WINAPI
SQLTablePrivileges(
1875 SQLCHAR
*szCatalogName
,
1876 SQLSMALLINT cbCatalogName
,
1877 SQLCHAR
*szSchemaName
,
1878 SQLSMALLINT cbSchemaName
,
1879 SQLCHAR
*szTableName
,
1880 SQLSMALLINT cbTableName
)
1884 if (!pSQLTablePrivileges
) return SQL_ERROR
;
1885 return pSQLTablePrivileges(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
1886 szTableName
, cbTableName
);
1890 /*************************************************************************
1891 * SQLDrivers [ODBC32.071]
1893 SQLRETURN WINAPI
SQLDrivers(
1895 SQLUSMALLINT fDirection
,
1896 SQLCHAR
*szDriverDesc
,
1897 SQLSMALLINT cbDriverDescMax
,
1898 SQLSMALLINT
*pcbDriverDesc
,
1899 SQLCHAR
*szDriverAttributes
,
1900 SQLSMALLINT cbDriverAttrMax
,
1901 SQLSMALLINT
*pcbDriverAttr
)
1905 if (!pSQLDrivers
) return SQL_ERROR
;
1906 return pSQLDrivers(henv
, fDirection
, szDriverDesc
, cbDriverDescMax
, pcbDriverDesc
,
1907 szDriverAttributes
, cbDriverAttrMax
, pcbDriverAttr
);
1911 /*************************************************************************
1912 * SQLBindParameter [ODBC32.072]
1914 SQLRETURN WINAPI
SQLBindParameter(
1917 SQLSMALLINT fParamType
,
1919 SQLSMALLINT fSqlType
,
1920 SQLUINTEGER cbColDef
,
1921 SQLSMALLINT ibScale
,
1922 SQLPOINTER rgbValue
,
1923 SQLINTEGER cbValueMax
,
1924 SQLINTEGER
*pcbValue
)
1928 if (!pSQLBindParameter
) return SQL_ERROR
;
1929 return pSQLBindParameter(hstmt
, ipar
, fParamType
, fCType
, fSqlType
, cbColDef
, ibScale
,
1930 rgbValue
, cbValueMax
, pcbValue
);
1934 /*************************************************************************
1935 * SQLDriverConnect [ODBC32.041]
1937 SQLRETURN WINAPI
SQLDriverConnect(
1940 SQLCHAR
*conn_str_in
,
1941 SQLSMALLINT len_conn_str_in
,
1942 SQLCHAR
*conn_str_out
,
1943 SQLSMALLINT conn_str_out_max
,
1944 SQLSMALLINT
*ptr_conn_str_out
,
1945 SQLUSMALLINT driver_completion
)
1949 if (!pSQLDriverConnect
) return SQL_ERROR
;
1950 return pSQLDriverConnect(hdbc
, hwnd
, conn_str_in
, len_conn_str_in
, conn_str_out
,
1951 conn_str_out_max
, ptr_conn_str_out
, driver_completion
);
1955 /*************************************************************************
1956 * SQLSetScrollOptions [ODBC32.069]
1958 SQLRETURN WINAPI
SQLSetScrollOptions(
1959 SQLHSTMT statement_handle
,
1960 SQLUSMALLINT f_concurrency
,
1961 SQLINTEGER crow_keyset
,
1962 SQLUSMALLINT crow_rowset
)
1966 if (!pSQLSetScrollOptions
) return SQL_ERROR
;
1967 return pSQLSetScrollOptions(statement_handle
, f_concurrency
, crow_keyset
, crow_rowset
);
1970 static int SQLColAttributes_KnownStringAttribute(SQLUSMALLINT fDescType
)
1972 static const SQLUSMALLINT attrList
[] =
1974 SQL_COLUMN_OWNER_NAME
,
1975 SQL_COLUMN_QUALIFIER_NAME
,
1978 SQL_COLUMN_TABLE_NAME
,
1979 SQL_COLUMN_TYPE_NAME
,
1980 SQL_DESC_BASE_COLUMN_NAME
,
1981 SQL_DESC_BASE_TABLE_NAME
,
1982 SQL_DESC_CATALOG_NAME
,
1984 SQL_DESC_LITERAL_PREFIX
,
1985 SQL_DESC_LITERAL_SUFFIX
,
1986 SQL_DESC_LOCAL_TYPE_NAME
,
1988 SQL_DESC_SCHEMA_NAME
,
1989 SQL_DESC_TABLE_NAME
,
1994 for (i
= 0; i
< sizeof(attrList
) / sizeof(SQLUSMALLINT
); i
++) {
1995 if (attrList
[i
] == fDescType
) return 1;
2000 /*************************************************************************
2001 * SQLColAttributesW [ODBC32.106]
2003 SQLRETURN WINAPI
SQLColAttributesW(
2006 SQLUSMALLINT fDescType
,
2008 SQLSMALLINT cbDescMax
,
2009 SQLSMALLINT
*pcbDesc
,
2014 TRACE("hstmt=0x%08lx icol=%d fDescType=%d rgbDesc=%p cbDescMax=%d pcbDesc=%p pfDesc=%p\n",
2015 hstmt
, icol
, fDescType
, rgbDesc
, cbDescMax
, pcbDesc
, pfDesc
);
2017 if (!pSQLColAttributesW
) return SQL_ERROR
;
2019 iResult
= pSQLColAttributesW(hstmt
, icol
, fDescType
, rgbDesc
, cbDescMax
, pcbDesc
, pfDesc
);
2020 if (iResult
== SQL_SUCCESS
&& rgbDesc
!= NULL
&& SQLColAttributes_KnownStringAttribute(fDescType
)) {
2022 TRACE("Dumping values fetched via SQLColAttributesW:\n");
2023 TRACE(" Attribute name : %s\n", debugstr_w(rgbDesc));
2024 TRACE(" Declared length: %d\n", *pcbDesc);
2026 if (*pcbDesc
!= lstrlenW(rgbDesc
) * 2) {
2027 TRACE("CHEAT: resetting name length for ADO\n");
2028 *pcbDesc
= lstrlenW(rgbDesc
) * 2;
2034 /*************************************************************************
2035 * SQLConnectW [ODBC32.107]
2037 SQLRETURN WINAPI
SQLConnectW(SQLHDBC ConnectionHandle
,
2038 WCHAR
*ServerName
, SQLSMALLINT NameLength1
,
2039 WCHAR
*UserName
, SQLSMALLINT NameLength2
,
2040 WCHAR
*Authentication
, SQLSMALLINT NameLength3
)
2043 TRACE("(Server=%.*s)\n",NameLength1
+3, debugstr_w(ServerName
));
2045 if (!pSQLConnectW
) return SQL_ERROR
;
2047 ret
= pSQLConnectW(ConnectionHandle
, ServerName
, NameLength1
,
2048 UserName
, NameLength2
, Authentication
, NameLength3
);
2050 TRACE("returns %d\n",ret
);
2054 /*************************************************************************
2055 * SQLDescribeColW [ODBC32.108]
2057 SQLRETURN WINAPI
SQLDescribeColW(SQLHSTMT StatementHandle
,
2058 SQLUSMALLINT ColumnNumber
, WCHAR
*ColumnName
,
2059 SQLSMALLINT BufferLength
, SQLSMALLINT
*NameLength
,
2060 SQLSMALLINT
*DataType
, SQLUINTEGER
*ColumnSize
,
2061 SQLSMALLINT
*DecimalDigits
, SQLSMALLINT
*Nullable
)
2066 if (!pSQLDescribeColW
) return SQL_ERROR
;
2068 iResult
= pSQLDescribeColW(StatementHandle
, ColumnNumber
, ColumnName
,
2069 BufferLength
, NameLength
, DataType
, ColumnSize
,
2070 DecimalDigits
, Nullable
);
2072 TRACE("Successfully recovered the following column information:\n");
2073 TRACE("\tRequested column index: %d\n", ColumnNumber
);
2074 TRACE("\tAvailable length for column name: %d\n", BufferLength
);
2075 if (NameLength
!= NULL
)
2076 TRACE("\tActual length for column name: %d\n", *NameLength
);
2077 else TRACE("\tActual length for column name: (null)\n");
2078 TRACE("\tReturned column name: %s\n", debugstr_w(ColumnName
));
2083 /*************************************************************************
2084 * SQLErrorW [ODBC32.110]
2086 SQLRETURN WINAPI
SQLErrorW(SQLHENV EnvironmentHandle
,
2087 SQLHDBC ConnectionHandle
, SQLHSTMT StatementHandle
,
2088 WCHAR
*Sqlstate
, SQLINTEGER
*NativeError
,
2089 WCHAR
*MessageText
, SQLSMALLINT BufferLength
,
2090 SQLSMALLINT
*TextLength
)
2094 if (!pSQLErrorW
) return SQL_ERROR
;
2095 return pSQLErrorW(EnvironmentHandle
, ConnectionHandle
, StatementHandle
,
2096 Sqlstate
, NativeError
, MessageText
, BufferLength
, TextLength
);
2099 /*************************************************************************
2100 * SQLExecDirectW [ODBC32.111]
2102 SQLRETURN WINAPI
SQLExecDirectW(SQLHSTMT StatementHandle
,
2103 WCHAR
*StatementText
, SQLINTEGER TextLength
)
2107 if (!pSQLExecDirectW
) return SQL_ERROR
;
2108 return pSQLExecDirectW(StatementHandle
, StatementText
, TextLength
);
2111 /*************************************************************************
2112 * SQLGetCursorNameW [ODBC32.117]
2114 SQLRETURN WINAPI
SQLGetCursorNameW(SQLHSTMT StatementHandle
,
2115 WCHAR
*CursorName
, SQLSMALLINT BufferLength
,
2116 SQLSMALLINT
*NameLength
)
2120 if (!pSQLGetCursorNameW
) return SQL_ERROR
;
2121 return pSQLGetCursorNameW(StatementHandle
, CursorName
, BufferLength
, NameLength
);
2124 /*************************************************************************
2125 * SQLPrepareW [ODBC32.119]
2127 SQLRETURN WINAPI
SQLPrepareW(SQLHSTMT StatementHandle
,
2128 WCHAR
*StatementText
, SQLINTEGER TextLength
)
2132 if (!pSQLPrepareW
) return SQL_ERROR
;
2133 return pSQLPrepareW(StatementHandle
, StatementText
, TextLength
);
2136 /*************************************************************************
2137 * SQLSetCursorNameW [ODBC32.121]
2139 SQLRETURN WINAPI
SQLSetCursorNameW(SQLHSTMT StatementHandle
, WCHAR
*CursorName
, SQLSMALLINT NameLength
)
2143 if (!pSQLSetCursorNameW
) return SQL_ERROR
;
2144 return pSQLSetCursorNameW(StatementHandle
, CursorName
, NameLength
);
2147 /*************************************************************************
2148 * SQLColAttributeW [ODBC32.127]
2150 SQLRETURN WINAPI
SQLColAttributeW (SQLHSTMT StatementHandle
,
2151 SQLUSMALLINT ColumnNumber
, SQLUSMALLINT FieldIdentifier
,
2152 SQLPOINTER CharacterAttribute
, SQLSMALLINT BufferLength
,
2153 SQLSMALLINT
*StringLength
, SQLPOINTER NumericAttribute
)
2157 TRACE("StatementHandle=0x%08lx ColumnNumber=%d FieldIdentifier=%d CharacterAttribute=%p BufferLength=%d StringLength=%p NumericAttribute=%p\n",
2158 StatementHandle
, ColumnNumber
, FieldIdentifier
,
2159 CharacterAttribute
, BufferLength
, StringLength
, NumericAttribute
);
2161 if (!pSQLColAttributeW
) return SQL_ERROR
;
2163 iResult
= pSQLColAttributeW(StatementHandle
, ColumnNumber
, FieldIdentifier
,
2164 CharacterAttribute
, BufferLength
, StringLength
, NumericAttribute
);
2165 if (iResult
== SQL_SUCCESS
&& CharacterAttribute
!= NULL
&& SQLColAttributes_KnownStringAttribute(FieldIdentifier
)) {
2167 TRACE("Dumping values fetched via SQLColAttributeW:\n");
2168 TRACE(" Attribute name : %s\n", debugstr_w(rgbDesc));
2169 TRACE(" Declared length: %d\n", *pcbDesc);
2171 if (*StringLength
!= lstrlenW(CharacterAttribute
) * 2) {
2172 TRACE("CHEAT: resetting name length for ADO\n");
2173 *StringLength
= lstrlenW(CharacterAttribute
) * 2;
2179 /*************************************************************************
2180 * SQLGetConnectAttrW [ODBC32.132]
2182 SQLRETURN WINAPI
SQLGetConnectAttrW(SQLHDBC ConnectionHandle
,
2183 SQLINTEGER Attribute
, SQLPOINTER Value
,
2184 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
2188 if (!pSQLGetConnectAttrW
) return SQL_ERROR
;
2189 return pSQLGetConnectAttrW(ConnectionHandle
, Attribute
, Value
,
2190 BufferLength
, StringLength
);
2193 /*************************************************************************
2194 * SQLGetDescFieldW [ODBC32.133]
2196 SQLRETURN WINAPI
SQLGetDescFieldW(SQLHDESC DescriptorHandle
,
2197 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
2198 SQLPOINTER Value
, SQLINTEGER BufferLength
,
2199 SQLINTEGER
*StringLength
)
2203 if (!pSQLGetDescFieldW
) return SQL_ERROR
;
2204 return pSQLGetDescFieldW(DescriptorHandle
, RecNumber
, FieldIdentifier
,
2205 Value
, BufferLength
, StringLength
);
2208 /*************************************************************************
2209 * SQLGetDescRecW [ODBC32.134]
2211 SQLRETURN WINAPI
SQLGetDescRecW(SQLHDESC DescriptorHandle
,
2212 SQLSMALLINT RecNumber
, WCHAR
*Name
,
2213 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
,
2214 SQLSMALLINT
*Type
, SQLSMALLINT
*SubType
,
2215 SQLINTEGER
*Length
, SQLSMALLINT
*Precision
,
2216 SQLSMALLINT
*Scale
, SQLSMALLINT
*Nullable
)
2220 if (!pSQLGetDescRecW
) return SQL_ERROR
;
2221 return pSQLGetDescRecW(DescriptorHandle
, RecNumber
, Name
, BufferLength
,
2222 StringLength
, Type
, SubType
, Length
, Precision
, Scale
, Nullable
);
2225 /*************************************************************************
2226 * SQLGetDiagFieldW [ODBC32.135]
2228 SQLRETURN WINAPI
SQLGetDiagFieldW(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
2229 SQLSMALLINT RecNumber
, SQLSMALLINT DiagIdentifier
,
2230 SQLPOINTER DiagInfo
, SQLSMALLINT BufferLength
,
2231 SQLSMALLINT
*StringLength
)
2235 if (!pSQLGetDiagFieldW
) return SQL_ERROR
;
2236 return pSQLGetDiagFieldW(HandleType
, Handle
, RecNumber
, DiagIdentifier
,
2237 DiagInfo
, BufferLength
, StringLength
);
2240 /*************************************************************************
2241 * SQLGetDiagRecW [ODBC32.136]
2243 SQLRETURN WINAPI
SQLGetDiagRecW(SQLSMALLINT HandleType
, SQLHANDLE Handle
,
2244 SQLSMALLINT RecNumber
, WCHAR
*Sqlstate
,
2245 SQLINTEGER
*NativeError
, WCHAR
*MessageText
,
2246 SQLSMALLINT BufferLength
, SQLSMALLINT
*TextLength
)
2250 if (!pSQLGetDiagRecW
) return SQL_ERROR
;
2251 return pSQLGetDiagRecW(HandleType
, Handle
, RecNumber
, Sqlstate
, NativeError
,
2252 MessageText
, BufferLength
, TextLength
);
2255 /*************************************************************************
2256 * SQLGetStmtAttrW [ODBC32.138]
2258 SQLRETURN WINAPI
SQLGetStmtAttrW(SQLHSTMT StatementHandle
,
2259 SQLINTEGER Attribute
, SQLPOINTER Value
,
2260 SQLINTEGER BufferLength
, SQLINTEGER
*StringLength
)
2264 TRACE("Attribute = (%02ld) Value = %p BufferLength = (%ld) StringLength = %p\n",
2265 Attribute
, Value
, BufferLength
, StringLength
);
2267 if (Value
== NULL
) {
2268 WARN("Unexpected NULL in Value return address\n");
2269 iResult
= SQL_ERROR
;
2271 } else if (StringLength == NULL) {
2272 WARN("Unexpected NULL in StringLength return address\n");
2273 iResult = SQL_ERROR;
2276 if (!pSQLGetStmtAttrW
) return SQL_ERROR
;
2277 iResult
= pSQLGetStmtAttrW(StatementHandle
, Attribute
, Value
, BufferLength
, StringLength
);
2278 TRACE("returning %d...\n", iResult
);
2283 /*************************************************************************
2284 * SQLSetConnectAttrW [ODBC32.139]
2286 SQLRETURN WINAPI
SQLSetConnectAttrW(SQLHDBC ConnectionHandle
, SQLINTEGER Attribute
,
2287 SQLPOINTER Value
, SQLINTEGER StringLength
)
2291 if (!pSQLSetConnectAttrW
) return SQL_ERROR
;
2292 return pSQLSetConnectAttrW(ConnectionHandle
, Attribute
, Value
, StringLength
);
2295 /*************************************************************************
2296 * SQLColumnsW [ODBC32.140]
2298 SQLRETURN WINAPI
SQLColumnsW(SQLHSTMT StatementHandle
,
2299 WCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
2300 WCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
2301 WCHAR
*TableName
, SQLSMALLINT NameLength3
,
2302 WCHAR
*ColumnName
, SQLSMALLINT NameLength4
)
2306 if (!pSQLColumnsW
) return SQL_ERROR
;
2307 return pSQLColumnsW(StatementHandle
, CatalogName
, NameLength1
,
2308 SchemaName
, NameLength2
, TableName
, NameLength3
, ColumnName
, NameLength4
);
2311 /*************************************************************************
2312 * SQLDriverConnectW [ODBC32.141]
2314 SQLRETURN WINAPI
SQLDriverConnectW(
2318 SQLSMALLINT len_conn_str_in
,
2319 WCHAR
*conn_str_out
,
2320 SQLSMALLINT conn_str_out_max
,
2321 SQLSMALLINT
*ptr_conn_str_out
,
2322 SQLUSMALLINT driver_completion
)
2324 TRACE("ConnStrIn (%d bytes) --> %s\n", len_conn_str_in
, debugstr_w(conn_str_in
));
2326 if (!pSQLDriverConnectW
) return SQL_ERROR
;
2327 return pSQLDriverConnectW(hdbc
, hwnd
, conn_str_in
, len_conn_str_in
, conn_str_out
,
2328 conn_str_out_max
, ptr_conn_str_out
, driver_completion
);
2331 /*************************************************************************
2332 * SQLGetConnectOptionW [ODBC32.142]
2334 SQLRETURN WINAPI
SQLGetConnectOptionW(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLPOINTER Value
)
2338 if (!pSQLGetConnectOptionW
) return SQL_ERROR
;
2339 return pSQLGetConnectOptionW(ConnectionHandle
, Option
, Value
);
2342 /*************************************************************************
2343 * SQLGetInfoW [ODBC32.145]
2345 SQLRETURN WINAPI
SQLGetInfoW(SQLHDBC ConnectionHandle
,
2346 SQLUSMALLINT InfoType
, SQLPOINTER InfoValue
,
2347 SQLSMALLINT BufferLength
, SQLSMALLINT
*StringLength
)
2351 TRACE("InfoType = (%02u), InfoValue = %p, BufferLength = %d bytes\n", InfoType
, InfoValue
, BufferLength
);
2352 if (InfoValue
== NULL
) {
2353 WARN("Unexpected NULL in InfoValue address\n");
2354 iResult
= SQL_ERROR
;
2356 if (!pSQLGetInfoW
) return SQL_ERROR
;
2357 iResult
= pSQLGetInfoW(ConnectionHandle
, InfoType
, InfoValue
, BufferLength
, StringLength
);
2358 TRACE("returning %d...\n", iResult
);
2363 /*************************************************************************
2364 * SQLGetTypeInfoW [ODBC32.147]
2366 SQLRETURN WINAPI
SQLGetTypeInfoW(SQLHSTMT StatementHandle
, SQLSMALLINT DataType
)
2370 if (!pSQLGetTypeInfoW
) return SQL_ERROR
;
2371 return pSQLGetTypeInfoW(StatementHandle
, DataType
);
2374 /*************************************************************************
2375 * SQLSetConnectOptionW [ODBC32.150]
2377 SQLRETURN WINAPI
SQLSetConnectOptionW(SQLHDBC ConnectionHandle
, SQLUSMALLINT Option
, SQLUINTEGER Value
)
2381 if (!pSQLSetConnectOptionW
) return SQL_ERROR
;
2382 return pSQLSetConnectOptionW(ConnectionHandle
, Option
, Value
);
2385 /*************************************************************************
2386 * SQLSpecialColumnsW [ODBC32.152]
2388 SQLRETURN WINAPI
SQLSpecialColumnsW(SQLHSTMT StatementHandle
,
2389 SQLUSMALLINT IdentifierType
, SQLWCHAR
*CatalogName
,
2390 SQLSMALLINT NameLength1
, SQLWCHAR
*SchemaName
,
2391 SQLSMALLINT NameLength2
, SQLWCHAR
*TableName
,
2392 SQLSMALLINT NameLength3
, SQLUSMALLINT Scope
,
2393 SQLUSMALLINT Nullable
)
2395 if (!pSQLSpecialColumnsW
) return SQL_ERROR
;
2396 return pSQLSpecialColumnsW(StatementHandle
, IdentifierType
, CatalogName
, NameLength1
, SchemaName
,
2397 NameLength2
, TableName
, NameLength3
, Scope
, Nullable
);
2400 /*************************************************************************
2401 * SQLStatisticsW [ODBC32.153]
2403 SQLRETURN WINAPI
SQLStatisticsW(SQLHSTMT StatementHandle
,
2404 SQLWCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
2405 SQLWCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
2406 SQLWCHAR
*TableName
, SQLSMALLINT NameLength3
,
2407 SQLUSMALLINT Unique
, SQLUSMALLINT Reserved
)
2411 if (!pSQLStatisticsW
) return SQL_ERROR
;
2412 return pSQLStatisticsW(StatementHandle
, CatalogName
, NameLength1
, SchemaName
, NameLength2
,
2413 TableName
, NameLength3
, Unique
, Reserved
);
2416 /*************************************************************************
2417 * SQLTablesW [ODBC32.154]
2419 SQLRETURN WINAPI
SQLTablesW(SQLHSTMT StatementHandle
,
2420 SQLWCHAR
*CatalogName
, SQLSMALLINT NameLength1
,
2421 SQLWCHAR
*SchemaName
, SQLSMALLINT NameLength2
,
2422 SQLWCHAR
*TableName
, SQLSMALLINT NameLength3
,
2423 SQLWCHAR
*TableType
, SQLSMALLINT NameLength4
)
2427 if (!pSQLTablesW
) return SQL_ERROR
;
2428 return pSQLTablesW(StatementHandle
, CatalogName
, NameLength1
,
2429 SchemaName
, NameLength2
, TableName
, NameLength3
, TableType
, NameLength4
);
2432 /*************************************************************************
2433 * SQLBrowseConnectW [ODBC32.155]
2435 SQLRETURN WINAPI
SQLBrowseConnectW(
2437 SQLWCHAR
*szConnStrIn
,
2438 SQLSMALLINT cbConnStrIn
,
2439 SQLWCHAR
*szConnStrOut
,
2440 SQLSMALLINT cbConnStrOutMax
,
2441 SQLSMALLINT
*pcbConnStrOut
)
2445 if (!pSQLBrowseConnectW
) return SQL_ERROR
;
2446 return pSQLBrowseConnectW(hdbc
, szConnStrIn
, cbConnStrIn
, szConnStrOut
,
2447 cbConnStrOutMax
, pcbConnStrOut
);
2450 /*************************************************************************
2451 * SQLColumnPrivilegesW [ODBC32.156]
2453 SQLRETURN WINAPI
SQLColumnPrivilegesW(
2455 SQLWCHAR
*szCatalogName
,
2456 SQLSMALLINT cbCatalogName
,
2457 SQLWCHAR
*szSchemaName
,
2458 SQLSMALLINT cbSchemaName
,
2459 SQLWCHAR
*szTableName
,
2460 SQLSMALLINT cbTableName
,
2461 SQLWCHAR
*szColumnName
,
2462 SQLSMALLINT cbColumnName
)
2466 if (!pSQLColumnPrivilegesW
) return SQL_ERROR
;
2467 return pSQLColumnPrivilegesW(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
2468 szTableName
, cbTableName
, szColumnName
, cbColumnName
);
2471 /*************************************************************************
2472 * SQLDataSourcesW [ODBC32.157]
2474 SQLRETURN WINAPI
SQLDataSourcesW(SQLHENV EnvironmentHandle
,
2475 SQLUSMALLINT Direction
, WCHAR
*ServerName
,
2476 SQLSMALLINT BufferLength1
, SQLSMALLINT
*NameLength1
,
2477 WCHAR
*Description
, SQLSMALLINT BufferLength2
,
2478 SQLSMALLINT
*NameLength2
)
2482 TRACE("EnvironmentHandle = %p\n", (LPVOID
)EnvironmentHandle
);
2484 if (!pSQLDataSourcesW
) return SQL_ERROR
;
2486 ret
= pSQLDataSourcesW(EnvironmentHandle
, Direction
, ServerName
,
2487 BufferLength1
, NameLength1
, Description
, BufferLength2
, NameLength2
);
2491 TRACE("returns: %d \t", ret
);
2492 if (*NameLength1
> 0)
2493 TRACE("DataSource = %s,", debugstr_w(ServerName
));
2494 if (*NameLength2
> 0)
2495 TRACE(" Description = %s", debugstr_w(Description
));
2502 /*************************************************************************
2503 * SQLForeignKeysW [ODBC32.160]
2505 SQLRETURN WINAPI
SQLForeignKeysW(
2507 SQLWCHAR
*szPkCatalogName
,
2508 SQLSMALLINT cbPkCatalogName
,
2509 SQLWCHAR
*szPkSchemaName
,
2510 SQLSMALLINT cbPkSchemaName
,
2511 SQLWCHAR
*szPkTableName
,
2512 SQLSMALLINT cbPkTableName
,
2513 SQLWCHAR
*szFkCatalogName
,
2514 SQLSMALLINT cbFkCatalogName
,
2515 SQLWCHAR
*szFkSchemaName
,
2516 SQLSMALLINT cbFkSchemaName
,
2517 SQLWCHAR
*szFkTableName
,
2518 SQLSMALLINT cbFkTableName
)
2522 if (!pSQLForeignKeysW
) return SQL_ERROR
;
2523 return pSQLForeignKeysW(hstmt
, szPkCatalogName
, cbPkCatalogName
, szPkSchemaName
, cbPkSchemaName
,
2524 szPkTableName
, cbPkTableName
, szFkCatalogName
, cbFkCatalogName
,
2525 szFkSchemaName
, cbFkSchemaName
, szFkTableName
, cbFkTableName
);
2528 /*************************************************************************
2529 * SQLNativeSqlW [ODBC32.162]
2531 SQLRETURN WINAPI
SQLNativeSqlW(
2533 SQLWCHAR
*szSqlStrIn
,
2534 SQLINTEGER cbSqlStrIn
,
2536 SQLINTEGER cbSqlStrMax
,
2537 SQLINTEGER
*pcbSqlStr
)
2541 if (!pSQLNativeSqlW
) return SQL_ERROR
;
2542 return pSQLNativeSqlW(hdbc
, szSqlStrIn
, cbSqlStrIn
, szSqlStr
, cbSqlStrMax
, pcbSqlStr
);
2545 /*************************************************************************
2546 * SQLPrimaryKeysW [ODBC32.165]
2548 SQLRETURN WINAPI
SQLPrimaryKeysW(
2550 SQLWCHAR
*szCatalogName
,
2551 SQLSMALLINT cbCatalogName
,
2552 SQLWCHAR
*szSchemaName
,
2553 SQLSMALLINT cbSchemaName
,
2554 SQLWCHAR
*szTableName
,
2555 SQLSMALLINT cbTableName
)
2559 if (!pSQLPrimaryKeysW
) return SQL_ERROR
;
2560 return pSQLPrimaryKeysW(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
2561 szTableName
, cbTableName
);
2564 /*************************************************************************
2565 * SQLProcedureColumnsW [ODBC32.166]
2567 SQLRETURN WINAPI
SQLProcedureColumnsW(
2569 SQLWCHAR
*szCatalogName
,
2570 SQLSMALLINT cbCatalogName
,
2571 SQLWCHAR
*szSchemaName
,
2572 SQLSMALLINT cbSchemaName
,
2573 SQLWCHAR
*szProcName
,
2574 SQLSMALLINT cbProcName
,
2575 SQLWCHAR
*szColumnName
,
2576 SQLSMALLINT cbColumnName
)
2580 if (!pSQLProcedureColumnsW
) return SQL_ERROR
;
2581 return pSQLProcedureColumnsW(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
2582 szProcName
, cbProcName
, szColumnName
, cbColumnName
);
2585 /*************************************************************************
2586 * SQLProceduresW [ODBC32.167]
2588 SQLRETURN WINAPI
SQLProceduresW(
2590 SQLWCHAR
*szCatalogName
,
2591 SQLSMALLINT cbCatalogName
,
2592 SQLWCHAR
*szSchemaName
,
2593 SQLSMALLINT cbSchemaName
,
2594 SQLWCHAR
*szProcName
,
2595 SQLSMALLINT cbProcName
)
2599 if (!pSQLProceduresW
) return SQL_ERROR
;
2600 return pSQLProceduresW(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
2601 szProcName
, cbProcName
);
2604 /*************************************************************************
2605 * SQLTablePrivilegesW [ODBC32.170]
2607 SQLRETURN WINAPI
SQLTablePrivilegesW(
2609 SQLWCHAR
*szCatalogName
,
2610 SQLSMALLINT cbCatalogName
,
2611 SQLWCHAR
*szSchemaName
,
2612 SQLSMALLINT cbSchemaName
,
2613 SQLWCHAR
*szTableName
,
2614 SQLSMALLINT cbTableName
)
2618 if (!pSQLTablePrivilegesW
) return SQL_ERROR
;
2619 return pSQLTablePrivilegesW(hstmt
, szCatalogName
, cbCatalogName
, szSchemaName
, cbSchemaName
,
2620 szTableName
, cbTableName
);
2623 /*************************************************************************
2624 * SQLDriversW [ODBC32.171]
2626 SQLRETURN WINAPI
SQLDriversW(
2628 SQLUSMALLINT fDirection
,
2629 SQLWCHAR
*szDriverDesc
,
2630 SQLSMALLINT cbDriverDescMax
,
2631 SQLSMALLINT
*pcbDriverDesc
,
2632 SQLWCHAR
*szDriverAttributes
,
2633 SQLSMALLINT cbDriverAttrMax
,
2634 SQLSMALLINT
*pcbDriverAttr
)
2638 if (!pSQLDriversW
) return SQL_ERROR
;
2639 return pSQLDriversW(henv
, fDirection
, szDriverDesc
, cbDriverDescMax
, pcbDriverDesc
,
2640 szDriverAttributes
, cbDriverAttrMax
, pcbDriverAttr
);
2643 /*************************************************************************
2644 * SQLSetDescFieldW [ODBC32.173]
2646 SQLRETURN WINAPI
SQLSetDescFieldW(SQLHDESC DescriptorHandle
,
2647 SQLSMALLINT RecNumber
, SQLSMALLINT FieldIdentifier
,
2648 SQLPOINTER Value
, SQLINTEGER BufferLength
)
2652 if (!pSQLSetDescFieldW
) return SQL_ERROR
;
2653 return pSQLSetDescFieldW(DescriptorHandle
, RecNumber
, FieldIdentifier
, Value
, BufferLength
);
2656 /*************************************************************************
2657 * SQLSetStmtAttrW [ODBC32.176]
2659 SQLRETURN WINAPI
SQLSetStmtAttrW(SQLHSTMT StatementHandle
,
2660 SQLINTEGER Attribute
, SQLPOINTER Value
,
2661 SQLINTEGER StringLength
)
2664 TRACE("Attribute = (%02ld) Value = %p StringLength = (%ld)\n",
2665 Attribute
, Value
, StringLength
);
2667 if (!pSQLSetStmtAttrW
) return SQL_ERROR
;
2668 iResult
= pSQLSetStmtAttrW(StatementHandle
, Attribute
, Value
, StringLength
);
2669 if (iResult
== SQL_ERROR
&& (Attribute
== SQL_ROWSET_SIZE
|| Attribute
== SQL_ATTR_ROW_ARRAY_SIZE
)) {
2670 TRACE("CHEAT: returning SQL_SUCCESS to ADO...\n");
2671 iResult
= SQL_SUCCESS
;
2673 TRACE("returning %d...\n", iResult
);