xref: /trunk/main/connectivity/source/drivers/odbc/ORealDriver.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_connectivity.hxx"
30 #include "ORealDriver.hxx"
31 #include "odbc/ODriver.hxx"
32 #include "odbc/OTools.hxx"
33 #include "odbc/OFunctions.hxx"
34 #include "diagnose_ex.h"
35 
36 namespace connectivity
37 {
38     sal_Bool LoadFunctions(oslModule pODBCso);
39     sal_Bool LoadLibrary_ODBC3(::rtl::OUString &_rPath);
40     // extern declaration of the function pointer
41     extern T3SQLAllocHandle pODBC3SQLAllocHandle;
42     extern T3SQLConnect pODBC3SQLConnect;
43     extern T3SQLDriverConnect pODBC3SQLDriverConnect;
44     extern T3SQLBrowseConnect pODBC3SQLBrowseConnect;
45     extern T3SQLDataSources pODBC3SQLDataSources;
46     extern T3SQLDrivers pODBC3SQLDrivers;
47     extern T3SQLGetInfo pODBC3SQLGetInfo;
48     extern T3SQLGetFunctions pODBC3SQLGetFunctions;
49     extern T3SQLGetTypeInfo pODBC3SQLGetTypeInfo;
50     extern T3SQLSetConnectAttr pODBC3SQLSetConnectAttr;
51     extern T3SQLGetConnectAttr pODBC3SQLGetConnectAttr;
52     extern T3SQLSetEnvAttr pODBC3SQLSetEnvAttr;
53     extern T3SQLGetEnvAttr pODBC3SQLGetEnvAttr;
54     extern T3SQLSetStmtAttr pODBC3SQLSetStmtAttr;
55     extern T3SQLGetStmtAttr pODBC3SQLGetStmtAttr;
56     //extern T3SQLSetDescField pODBC3SQLSetDescField;
57     //extern T3SQLGetDescField pODBC3SQLGetDescField;
58     //extern T3SQLGetDescRec pODBC3SQLGetDescRec;
59     //extern T3SQLSetDescRec pODBC3SQLSetDescRec;
60     extern T3SQLPrepare pODBC3SQLPrepare;
61     extern T3SQLBindParameter pODBC3SQLBindParameter;
62     //extern T3SQLGetCursorName pODBC3SQLGetCursorName;
63     extern T3SQLSetCursorName pODBC3SQLSetCursorName;
64     extern T3SQLExecute pODBC3SQLExecute;
65     extern T3SQLExecDirect pODBC3SQLExecDirect;
66     //extern T3SQLNativeSql pODBC3SQLNativeSql;
67     extern T3SQLDescribeParam pODBC3SQLDescribeParam;
68     extern T3SQLNumParams pODBC3SQLNumParams;
69     extern T3SQLParamData pODBC3SQLParamData;
70     extern T3SQLPutData pODBC3SQLPutData;
71     extern T3SQLRowCount pODBC3SQLRowCount;
72     extern T3SQLNumResultCols pODBC3SQLNumResultCols;
73     extern T3SQLDescribeCol pODBC3SQLDescribeCol;
74     extern T3SQLColAttribute pODBC3SQLColAttribute;
75     extern T3SQLBindCol pODBC3SQLBindCol;
76     extern T3SQLFetch pODBC3SQLFetch;
77     extern T3SQLFetchScroll pODBC3SQLFetchScroll;
78     extern T3SQLGetData pODBC3SQLGetData;
79     extern T3SQLSetPos pODBC3SQLSetPos;
80     extern T3SQLBulkOperations pODBC3SQLBulkOperations;
81     extern T3SQLMoreResults pODBC3SQLMoreResults;
82     //extern T3SQLGetDiagField pODBC3SQLGetDiagField;
83     extern T3SQLGetDiagRec pODBC3SQLGetDiagRec;
84     extern T3SQLColumnPrivileges pODBC3SQLColumnPrivileges;
85     extern T3SQLColumns pODBC3SQLColumns;
86     extern T3SQLForeignKeys pODBC3SQLForeignKeys;
87     extern T3SQLPrimaryKeys pODBC3SQLPrimaryKeys;
88     extern T3SQLProcedureColumns pODBC3SQLProcedureColumns;
89     extern T3SQLProcedures pODBC3SQLProcedures;
90     extern T3SQLSpecialColumns pODBC3SQLSpecialColumns;
91     extern T3SQLStatistics pODBC3SQLStatistics;
92     extern T3SQLTablePrivileges pODBC3SQLTablePrivileges;
93     extern T3SQLTables pODBC3SQLTables;
94     extern T3SQLFreeStmt pODBC3SQLFreeStmt;
95     extern T3SQLCloseCursor pODBC3SQLCloseCursor;
96     extern T3SQLCancel pODBC3SQLCancel;
97     extern T3SQLEndTran pODBC3SQLEndTran;
98     extern T3SQLDisconnect pODBC3SQLDisconnect;
99     extern T3SQLFreeHandle pODBC3SQLFreeHandle;
100     extern T3SQLGetCursorName pODBC3SQLGetCursorName;
101     extern T3SQLNativeSql pODBC3SQLNativeSql;
102 
103 
104     namespace odbc
105     {
106         class ORealObdcDriver : public ODBCDriver
107         {
108         protected:
109             virtual oslGenericFunction  getOdbcFunction(sal_Int32 _nIndex)  const;
110             virtual SQLHANDLE   EnvironmentHandle(::rtl::OUString &_rPath);
111         public:
112             ORealObdcDriver(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) : ODBCDriver(_rxFactory) {}
113         };
114 
115         //------------------------------------------------------------------
116 oslGenericFunction ORealObdcDriver::getOdbcFunction(sal_Int32 _nIndex) const
117 {
118     oslGenericFunction pFunction = NULL;
119     switch(_nIndex)
120     {
121         case ODBC3SQLAllocHandle:
122             pFunction = (oslGenericFunction)pODBC3SQLAllocHandle;
123             break;
124         case ODBC3SQLConnect:
125             pFunction = (oslGenericFunction)pODBC3SQLConnect;
126             break;
127         case ODBC3SQLDriverConnect:
128             pFunction = (oslGenericFunction)pODBC3SQLDriverConnect;
129             break;
130         case ODBC3SQLBrowseConnect:
131             pFunction = (oslGenericFunction)pODBC3SQLBrowseConnect;
132             break;
133         case ODBC3SQLDataSources:
134             pFunction = (oslGenericFunction)pODBC3SQLDataSources;
135             break;
136         case ODBC3SQLDrivers:
137             pFunction = (oslGenericFunction)pODBC3SQLDrivers;
138             break;
139         case ODBC3SQLGetInfo:
140 
141             pFunction = (oslGenericFunction)pODBC3SQLGetInfo;
142             break;
143         case ODBC3SQLGetFunctions:
144 
145             pFunction = (oslGenericFunction)pODBC3SQLGetFunctions;
146             break;
147         case ODBC3SQLGetTypeInfo:
148 
149             pFunction = (oslGenericFunction)pODBC3SQLGetTypeInfo;
150             break;
151         case ODBC3SQLSetConnectAttr:
152 
153             pFunction = (oslGenericFunction)pODBC3SQLSetConnectAttr;
154             break;
155         case ODBC3SQLGetConnectAttr:
156 
157             pFunction = (oslGenericFunction)pODBC3SQLGetConnectAttr;
158             break;
159         case ODBC3SQLSetEnvAttr:
160 
161             pFunction = (oslGenericFunction)pODBC3SQLSetEnvAttr;
162             break;
163         case ODBC3SQLGetEnvAttr:
164 
165             pFunction = (oslGenericFunction)pODBC3SQLGetEnvAttr;
166             break;
167         case ODBC3SQLSetStmtAttr:
168 
169             pFunction = (oslGenericFunction)pODBC3SQLSetStmtAttr;
170             break;
171         case ODBC3SQLGetStmtAttr:
172 
173             pFunction = (oslGenericFunction)pODBC3SQLGetStmtAttr;
174             break;
175         case ODBC3SQLPrepare:
176 
177             pFunction = (oslGenericFunction)pODBC3SQLPrepare;
178             break;
179         case ODBC3SQLBindParameter:
180 
181             pFunction = (oslGenericFunction)pODBC3SQLBindParameter;
182             break;
183         case ODBC3SQLSetCursorName:
184 
185             pFunction = (oslGenericFunction)pODBC3SQLSetCursorName;
186             break;
187         case ODBC3SQLExecute:
188 
189             pFunction = (oslGenericFunction)pODBC3SQLExecute;
190             break;
191         case ODBC3SQLExecDirect:
192 
193             pFunction = (oslGenericFunction)pODBC3SQLExecDirect;
194             break;
195         case ODBC3SQLDescribeParam:
196 
197             pFunction = (oslGenericFunction)pODBC3SQLDescribeParam;
198             break;
199         case ODBC3SQLNumParams:
200 
201             pFunction = (oslGenericFunction)pODBC3SQLNumParams;
202             break;
203         case ODBC3SQLParamData:
204 
205             pFunction = (oslGenericFunction)pODBC3SQLParamData;
206             break;
207         case ODBC3SQLPutData:
208 
209             pFunction = (oslGenericFunction)pODBC3SQLPutData;
210             break;
211         case ODBC3SQLRowCount:
212 
213             pFunction = (oslGenericFunction)pODBC3SQLRowCount;
214             break;
215         case ODBC3SQLNumResultCols:
216 
217             pFunction = (oslGenericFunction)pODBC3SQLNumResultCols;
218             break;
219         case ODBC3SQLDescribeCol:
220 
221             pFunction = (oslGenericFunction)pODBC3SQLDescribeCol;
222             break;
223         case ODBC3SQLColAttribute:
224 
225             pFunction = (oslGenericFunction)pODBC3SQLColAttribute;
226             break;
227         case ODBC3SQLBindCol:
228 
229             pFunction = (oslGenericFunction)pODBC3SQLBindCol;
230             break;
231         case ODBC3SQLFetch:
232 
233             pFunction = (oslGenericFunction)pODBC3SQLFetch;
234             break;
235         case ODBC3SQLFetchScroll:
236 
237             pFunction = (oslGenericFunction)pODBC3SQLFetchScroll;
238             break;
239         case ODBC3SQLGetData:
240 
241             pFunction = (oslGenericFunction)pODBC3SQLGetData;
242             break;
243         case ODBC3SQLSetPos:
244 
245             pFunction = (oslGenericFunction)pODBC3SQLSetPos;
246             break;
247         case ODBC3SQLBulkOperations:
248 
249             pFunction = (oslGenericFunction)pODBC3SQLBulkOperations;
250             break;
251         case ODBC3SQLMoreResults:
252 
253             pFunction = (oslGenericFunction)pODBC3SQLMoreResults;
254             break;
255         case ODBC3SQLGetDiagRec:
256 
257             pFunction = (oslGenericFunction)pODBC3SQLGetDiagRec;
258             break;
259         case ODBC3SQLColumnPrivileges:
260 
261             pFunction = (oslGenericFunction)pODBC3SQLColumnPrivileges;
262             break;
263         case ODBC3SQLColumns:
264 
265             pFunction = (oslGenericFunction)pODBC3SQLColumns;
266             break;
267         case ODBC3SQLForeignKeys:
268 
269             pFunction = (oslGenericFunction)pODBC3SQLForeignKeys;
270             break;
271         case ODBC3SQLPrimaryKeys:
272 
273             pFunction = (oslGenericFunction)pODBC3SQLPrimaryKeys;
274             break;
275         case ODBC3SQLProcedureColumns:
276 
277             pFunction = (oslGenericFunction)pODBC3SQLProcedureColumns;
278             break;
279         case ODBC3SQLProcedures:
280 
281             pFunction = (oslGenericFunction)pODBC3SQLProcedures;
282             break;
283         case ODBC3SQLSpecialColumns:
284 
285             pFunction = (oslGenericFunction)pODBC3SQLSpecialColumns;
286             break;
287         case ODBC3SQLStatistics:
288 
289             pFunction = (oslGenericFunction)pODBC3SQLStatistics;
290             break;
291         case ODBC3SQLTablePrivileges:
292 
293             pFunction = (oslGenericFunction)pODBC3SQLTablePrivileges;
294             break;
295         case ODBC3SQLTables:
296 
297             pFunction = (oslGenericFunction)pODBC3SQLTables;
298             break;
299         case ODBC3SQLFreeStmt:
300 
301             pFunction = (oslGenericFunction)pODBC3SQLFreeStmt;
302             break;
303         case ODBC3SQLCloseCursor:
304 
305             pFunction = (oslGenericFunction)pODBC3SQLCloseCursor;
306             break;
307         case ODBC3SQLCancel:
308 
309             pFunction = (oslGenericFunction)pODBC3SQLCancel;
310             break;
311         case ODBC3SQLEndTran:
312 
313             pFunction = (oslGenericFunction)pODBC3SQLEndTran;
314             break;
315         case ODBC3SQLDisconnect:
316 
317             pFunction = (oslGenericFunction)pODBC3SQLDisconnect;
318             break;
319         case ODBC3SQLFreeHandle:
320 
321             pFunction = (oslGenericFunction)pODBC3SQLFreeHandle;
322             break;
323         case ODBC3SQLGetCursorName:
324 
325             pFunction = (oslGenericFunction)pODBC3SQLGetCursorName;
326             break;
327         case ODBC3SQLNativeSql:
328 
329             pFunction = (oslGenericFunction)pODBC3SQLNativeSql;
330             break;
331         default:
332             OSL_ENSURE(0,"Function unknown!");
333     }
334     return pFunction;
335 }
336 
337 //------------------------------------------------------------------
338 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >  SAL_CALL ODBCDriver_CreateInstance(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) throw( ::com::sun::star::uno::Exception )
339 {
340     return *(new ORealObdcDriver(_rxFactory));
341 }
342 // -----------------------------------------------------------------------------
343 // ODBC Environment (gemeinsam fuer alle Connections):
344 SQLHANDLE ORealObdcDriver::EnvironmentHandle(::rtl::OUString &_rPath)
345 {
346     // Ist (fuer diese Instanz) bereits ein Environment erzeugt worden?
347     if (!m_pDriverHandle)
348     {
349         SQLHANDLE h = SQL_NULL_HANDLE;
350         // Environment allozieren
351 
352         // ODBC-DLL jetzt laden:
353         if (!LoadLibrary_ODBC3(_rPath) || N3SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&h) != SQL_SUCCESS)
354             return SQL_NULL_HANDLE;
355 
356         // In globaler Struktur merken ...
357         m_pDriverHandle = h;
358         SQLRETURN nError = N3SQLSetEnvAttr(h, SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER);
359         OSL_UNUSED( nError );
360         //N3SQLSetEnvAttr(h, SQL_ATTR_CONNECTION_POOLING,(SQLPOINTER) SQL_CP_ONE_PER_HENV, SQL_IS_INTEGER);
361     }
362 
363     return m_pDriverHandle;
364 }
365 // -----------------------------------------------------------------------------
366 
367     }
368 }
369 
370