xref: /trunk/main/connectivity/source/inc/odbc/OTools.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
1*caf5cd79SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*caf5cd79SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*caf5cd79SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*caf5cd79SAndrew Rist  * distributed with this work for additional information
6*caf5cd79SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*caf5cd79SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*caf5cd79SAndrew Rist  * "License"); you may not use this file except in compliance
9*caf5cd79SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*caf5cd79SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*caf5cd79SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*caf5cd79SAndrew Rist  * software distributed under the License is distributed on an
15*caf5cd79SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*caf5cd79SAndrew Rist  * KIND, either express or implied.  See the License for the
17*caf5cd79SAndrew Rist  * specific language governing permissions and limitations
18*caf5cd79SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*caf5cd79SAndrew Rist  *************************************************************/
21*caf5cd79SAndrew Rist 
22*caf5cd79SAndrew Rist 
23cdf0e10cSrcweir #ifndef _CONNECTIVITY_OTOOLS_HXX_
24cdf0e10cSrcweir #define _CONNECTIVITY_OTOOLS_HXX_
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include "odbc/OFunctiondefs.hxx"
27cdf0e10cSrcweir #include "odbc/odbcbasedllapi.hxx"
28cdf0e10cSrcweir #include <com/sun/star/sdbc/SQLException.hpp>
29cdf0e10cSrcweir #include <com/sun/star/util/Date.hpp>
30cdf0e10cSrcweir #include <com/sun/star/util/Time.hpp>
31cdf0e10cSrcweir #include <com/sun/star/util/DateTime.hpp>
32cdf0e10cSrcweir #include <osl/thread.h>
33cdf0e10cSrcweir #include <rtl/ustring.hxx>
34cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx>
35cdf0e10cSrcweir #include <rtl/textenc.h>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #define ODBC3SQLAllocHandle         1
38cdf0e10cSrcweir #define ODBC3SQLConnect             2
39cdf0e10cSrcweir #define ODBC3SQLDriverConnect       3
40cdf0e10cSrcweir #define ODBC3SQLBrowseConnect       4
41cdf0e10cSrcweir #define ODBC3SQLDataSources         5
42cdf0e10cSrcweir #define ODBC3SQLDrivers             6
43cdf0e10cSrcweir #define ODBC3SQLGetInfo             7
44cdf0e10cSrcweir #define ODBC3SQLGetFunctions        8
45cdf0e10cSrcweir #define ODBC3SQLGetTypeInfo         9
46cdf0e10cSrcweir #define ODBC3SQLSetConnectAttr      10
47cdf0e10cSrcweir #define ODBC3SQLGetConnectAttr      11
48cdf0e10cSrcweir #define ODBC3SQLSetEnvAttr          12
49cdf0e10cSrcweir #define ODBC3SQLGetEnvAttr          13
50cdf0e10cSrcweir #define ODBC3SQLSetStmtAttr         14
51cdf0e10cSrcweir #define ODBC3SQLGetStmtAttr         15
52cdf0e10cSrcweir #define ODBC3SQLPrepare             16
53cdf0e10cSrcweir #define ODBC3SQLBindParameter       17
54cdf0e10cSrcweir #define ODBC3SQLSetCursorName       18
55cdf0e10cSrcweir #define ODBC3SQLExecute             19
56cdf0e10cSrcweir #define ODBC3SQLExecDirect          20
57cdf0e10cSrcweir #define ODBC3SQLDescribeParam       21
58cdf0e10cSrcweir #define ODBC3SQLNumParams           22
59cdf0e10cSrcweir #define ODBC3SQLParamData           23
60cdf0e10cSrcweir #define ODBC3SQLPutData             24
61cdf0e10cSrcweir #define ODBC3SQLRowCount            25
62cdf0e10cSrcweir #define ODBC3SQLNumResultCols       26
63cdf0e10cSrcweir #define ODBC3SQLDescribeCol         27
64cdf0e10cSrcweir #define ODBC3SQLColAttribute        28
65cdf0e10cSrcweir #define ODBC3SQLBindCol             29
66cdf0e10cSrcweir #define ODBC3SQLFetch               30
67cdf0e10cSrcweir #define ODBC3SQLFetchScroll         31
68cdf0e10cSrcweir #define ODBC3SQLGetData             32
69cdf0e10cSrcweir #define ODBC3SQLSetPos              33
70cdf0e10cSrcweir #define ODBC3SQLBulkOperations      34
71cdf0e10cSrcweir #define ODBC3SQLMoreResults         35
72cdf0e10cSrcweir #define ODBC3SQLGetDiagRec          36
73cdf0e10cSrcweir #define ODBC3SQLColumnPrivileges    37
74cdf0e10cSrcweir #define ODBC3SQLColumns             38
75cdf0e10cSrcweir #define ODBC3SQLForeignKeys         39
76cdf0e10cSrcweir #define ODBC3SQLPrimaryKeys         40
77cdf0e10cSrcweir #define ODBC3SQLProcedureColumns    41
78cdf0e10cSrcweir #define ODBC3SQLProcedures          42
79cdf0e10cSrcweir #define ODBC3SQLSpecialColumns      43
80cdf0e10cSrcweir #define ODBC3SQLStatistics          44
81cdf0e10cSrcweir #define ODBC3SQLTablePrivileges     45
82cdf0e10cSrcweir #define ODBC3SQLTables              46
83cdf0e10cSrcweir #define ODBC3SQLFreeStmt            47
84cdf0e10cSrcweir #define ODBC3SQLCloseCursor         48
85cdf0e10cSrcweir #define ODBC3SQLCancel              49
86cdf0e10cSrcweir #define ODBC3SQLEndTran             50
87cdf0e10cSrcweir #define ODBC3SQLDisconnect          51
88cdf0e10cSrcweir #define ODBC3SQLFreeHandle          52
89cdf0e10cSrcweir #define ODBC3SQLGetCursorName       53
90cdf0e10cSrcweir #define ODBC3SQLNativeSql           54
91cdf0e10cSrcweir 
92cdf0e10cSrcweir namespace connectivity
93cdf0e10cSrcweir {
94cdf0e10cSrcweir     namespace odbc
95cdf0e10cSrcweir     {
96cdf0e10cSrcweir         class OConnection;
97cdf0e10cSrcweir 
98cdf0e10cSrcweir         const sal_uInt32 ODBC_FRACTION_UNITS_PER_HSECOND = 10000000L;
99cdf0e10cSrcweir         const sal_Int32 MAX_PUT_DATA_LENGTH = 2000;
100cdf0e10cSrcweir 
101cdf0e10cSrcweir         class OOO_DLLPUBLIC_ODBCBASE OTools
102cdf0e10cSrcweir         {
103cdf0e10cSrcweir         public:
104cdf0e10cSrcweir             static void ThrowException( OConnection* _pConnection,
105cdf0e10cSrcweir                                         SQLRETURN _rRetCode,
106cdf0e10cSrcweir                                         SQLHANDLE _pContext,
107cdf0e10cSrcweir                                         SQLSMALLINT _nHandleType,
108cdf0e10cSrcweir                                         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface,
109cdf0e10cSrcweir                                         sal_Bool _bNoFound=sal_True,
110cdf0e10cSrcweir                                         rtl_TextEncoding _nTextEncoding = RTL_TEXTENCODING_MS_1252)
111cdf0e10cSrcweir                                         throw(::com::sun::star::sdbc::SQLException);
112cdf0e10cSrcweir 
113cdf0e10cSrcweir             static void GetInfo(OConnection* _pConnection,
114cdf0e10cSrcweir                                 SQLHANDLE _aConnectionHandle,
115cdf0e10cSrcweir                                 SQLUSMALLINT _nInfo,
116cdf0e10cSrcweir                                 ::rtl::OUString &_rValue,
117cdf0e10cSrcweir                                 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface,
118cdf0e10cSrcweir                                 rtl_TextEncoding _nTextEncoding)
119cdf0e10cSrcweir                                 throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
120cdf0e10cSrcweir 
121cdf0e10cSrcweir             static void GetInfo(OConnection* _pConnection,
122cdf0e10cSrcweir                                 SQLHANDLE _aConnectionHandle,
123cdf0e10cSrcweir                                 SQLUSMALLINT _nInfo,
124cdf0e10cSrcweir                                 sal_Int32 &_rValue,
125cdf0e10cSrcweir                                 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
126cdf0e10cSrcweir 
127cdf0e10cSrcweir             static void GetInfo(OConnection* _pConnection,
128cdf0e10cSrcweir                                 SQLHANDLE _aConnectionHandle,
129cdf0e10cSrcweir                                 SQLUSMALLINT _nInfo,
130cdf0e10cSrcweir                                 SQLUSMALLINT &_rValue,
131cdf0e10cSrcweir                                 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
132cdf0e10cSrcweir 
133cdf0e10cSrcweir             static void GetInfo(OConnection* _pConnection,
134cdf0e10cSrcweir                                 SQLHANDLE _aConnectionHandle,
135cdf0e10cSrcweir                                 SQLUSMALLINT _nInfo,
136cdf0e10cSrcweir                                 SQLUINTEGER &_rValue,
137cdf0e10cSrcweir                                 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
138cdf0e10cSrcweir 
139cdf0e10cSrcweir             static void GetInfo(OConnection* _pConnection,
140cdf0e10cSrcweir                                 SQLHANDLE _aConnectionHandle,
141cdf0e10cSrcweir                                 SQLUSMALLINT _nInfo,
142cdf0e10cSrcweir                                 sal_Bool &_rValue,
143cdf0e10cSrcweir                                 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
144cdf0e10cSrcweir 
145cdf0e10cSrcweir             static sal_Int32 MapOdbcType2Jdbc(sal_Int32 _nType);
146cdf0e10cSrcweir             static sal_Int32 jdbcTypeToOdbc(sal_Int32 jdbcType);
147cdf0e10cSrcweir 
DateToOdbcDate(const::com::sun::star::util::Date & x)148cdf0e10cSrcweir             static DATE_STRUCT DateToOdbcDate(const ::com::sun::star::util::Date& x)
149cdf0e10cSrcweir             {
150cdf0e10cSrcweir                 DATE_STRUCT aVal;
151cdf0e10cSrcweir                 aVal.year   = x.Year;
152cdf0e10cSrcweir                 aVal.month  = x.Month;
153cdf0e10cSrcweir                 aVal.day    = x.Day;
154cdf0e10cSrcweir                 return aVal;
155cdf0e10cSrcweir             }
TimeToOdbcTime(const::com::sun::star::util::Time & x)156cdf0e10cSrcweir             static TIME_STRUCT TimeToOdbcTime(const ::com::sun::star::util::Time& x)
157cdf0e10cSrcweir             {
158cdf0e10cSrcweir                 TIME_STRUCT aVal;
159cdf0e10cSrcweir                 aVal.hour   = x.Hours;
160cdf0e10cSrcweir                 aVal.minute = x.Minutes;
161cdf0e10cSrcweir                 aVal.second = x.Seconds;
162cdf0e10cSrcweir                 return aVal;
163cdf0e10cSrcweir             }
DateTimeToTimestamp(const::com::sun::star::util::DateTime & x)164cdf0e10cSrcweir             static TIMESTAMP_STRUCT DateTimeToTimestamp(const ::com::sun::star::util::DateTime& x)
165cdf0e10cSrcweir             {
166cdf0e10cSrcweir                 TIMESTAMP_STRUCT aVal;
167cdf0e10cSrcweir                 aVal.year       = x.Year;
168cdf0e10cSrcweir                 aVal.month      = x.Month;
169cdf0e10cSrcweir                 aVal.day        = x.Day;
170cdf0e10cSrcweir                 aVal.hour       = x.Hours;
171cdf0e10cSrcweir                 aVal.minute     = x.Minutes;
172cdf0e10cSrcweir                 aVal.second     = x.Seconds;
173cdf0e10cSrcweir                 aVal.fraction   = x.HundredthSeconds * ODBC_FRACTION_UNITS_PER_HSECOND;
174cdf0e10cSrcweir                 return aVal;
175cdf0e10cSrcweir             }
176cdf0e10cSrcweir             /**
177cdf0e10cSrcweir                 getBindTypes set the ODBC type for C
178cdf0e10cSrcweir                 @param  _bUseWChar          true when Unicode should be used
179cdf0e10cSrcweir                 @param  _bUseOldTimeDate    true when the old datetime format should be used
180cdf0e10cSrcweir                 @param  _nOdbcType          the ODBC sql type
181cdf0e10cSrcweir                 @param  fCType              the C type for the ODBC type
182cdf0e10cSrcweir                 @param  fSqlType            the SQL type for the ODBC type
183cdf0e10cSrcweir             */
184cdf0e10cSrcweir             static void getBindTypes(sal_Bool _bUseWChar,
185cdf0e10cSrcweir                                      sal_Bool _bUseOldTimeDate,
186cdf0e10cSrcweir                                      SQLSMALLINT _nOdbcType,
187cdf0e10cSrcweir                                      SQLSMALLINT& fCType,
188cdf0e10cSrcweir                                      SQLSMALLINT& fSqlType);
189cdf0e10cSrcweir 
190cdf0e10cSrcweir             static ::rtl::OUString getStringValue(  OConnection* _pConnection,
191cdf0e10cSrcweir                                                     SQLHANDLE _aStatementHandle,
192cdf0e10cSrcweir                                                     sal_Int32 columnIndex,
193cdf0e10cSrcweir                                                     SQLSMALLINT _fSqlType,
194cdf0e10cSrcweir                                                     sal_Bool &_bWasNull,
195cdf0e10cSrcweir                                                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface,
196cdf0e10cSrcweir                                                     rtl_TextEncoding _nTextEncoding) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
197cdf0e10cSrcweir 
198cdf0e10cSrcweir             static  ::com::sun::star::uno::Sequence<sal_Int8> getBytesValue(OConnection* _pConnection,
199cdf0e10cSrcweir                                                                             SQLHANDLE _aStatementHandle,
200cdf0e10cSrcweir                                                                             sal_Int32 columnIndex,
201cdf0e10cSrcweir                                                                             SQLSMALLINT _fSqlType,
202cdf0e10cSrcweir                                                                             sal_Bool &_bWasNull,
203cdf0e10cSrcweir                                                                             const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
204cdf0e10cSrcweir             static void getValue(   OConnection* _pConnection,
205cdf0e10cSrcweir                                     SQLHANDLE _aStatementHandle,
206cdf0e10cSrcweir                                     sal_Int32 columnIndex,
207cdf0e10cSrcweir                                     SQLSMALLINT _nType,
208cdf0e10cSrcweir                                     sal_Bool &_bWasNull,
209cdf0e10cSrcweir                                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface,
210cdf0e10cSrcweir                                     void* _pValue,
211cdf0e10cSrcweir                                     SQLLEN _nSize) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
212cdf0e10cSrcweir 
213cdf0e10cSrcweir             /**
214cdf0e10cSrcweir                 bindData copies the from pValue to pData
215cdf0e10cSrcweir                 @param  _nOdbcType          the ODBC sql type
216cdf0e10cSrcweir                 @param  _bUseWChar          true when Unicode should be used
217cdf0e10cSrcweir                 @param  _pData              contains a copy of the data to be set
218cdf0e10cSrcweir                 @param  _pValue             contains the data to be copied
219cdf0e10cSrcweir                 @param  _nTextEncoding      the text encoding
220cdf0e10cSrcweir                 @param  _nColumnSize        the columnsize which is a out param
221cdf0e10cSrcweir             */
222cdf0e10cSrcweir             static void bindData(   SQLSMALLINT _nOdbcType,
223cdf0e10cSrcweir                                     sal_Bool _bUseWChar,
224cdf0e10cSrcweir                                     sal_Int8 *&_pData,
225cdf0e10cSrcweir                                     SQLLEN*& pLen,
226cdf0e10cSrcweir                                     const void* _pValue,
227cdf0e10cSrcweir                                     rtl_TextEncoding _nTextEncoding,
228cdf0e10cSrcweir                                     SQLULEN& _nColumnSize);
229cdf0e10cSrcweir 
230cdf0e10cSrcweir             static void bindParameter(  OConnection* _pConnection,
231cdf0e10cSrcweir                                         SQLHANDLE _hStmt,
232cdf0e10cSrcweir                                         sal_Int32 nPos,
233cdf0e10cSrcweir                                         sal_Int8*& pDataBuffer,
234cdf0e10cSrcweir                                         sal_Int8* pLenBuffer,
235cdf0e10cSrcweir                                         SQLSMALLINT _nJDBCtype,
236cdf0e10cSrcweir                                         sal_Bool _bUseWChar,
237cdf0e10cSrcweir                                         sal_Bool _bUseOldTimeDate,
238cdf0e10cSrcweir                                         const void* _pValue,
239cdf0e10cSrcweir                                         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface,
240cdf0e10cSrcweir                                         rtl_TextEncoding _nTextEncoding)
241cdf0e10cSrcweir                                          throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
242cdf0e10cSrcweir 
243cdf0e10cSrcweir             static void bindValue(  OConnection* _pConnection,
244cdf0e10cSrcweir                                     SQLHANDLE _aStatementHandle,
245cdf0e10cSrcweir                                     sal_Int32 columnIndex,
246cdf0e10cSrcweir                                     SQLSMALLINT _nType,
247cdf0e10cSrcweir                                     SQLSMALLINT _nMaxLen,
248cdf0e10cSrcweir                                     const void* _pValue,
249cdf0e10cSrcweir                                     void*       _pData,
250cdf0e10cSrcweir                                     SQLLEN *pLen,
251cdf0e10cSrcweir                                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface,
252cdf0e10cSrcweir                                     rtl_TextEncoding _nTextEncoding,
253cdf0e10cSrcweir                                     sal_Bool _bUseOldTimeDate) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
254cdf0e10cSrcweir         };
255cdf0e10cSrcweir 
getValue(OConnection * _pConnection,SQLHANDLE _aStatementHandle,sal_Int32 columnIndex,SQLSMALLINT _nType,sal_Bool & _bWasNull,const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & _xInterface,T & _rValue)256cdf0e10cSrcweir         template <class T> void getValue(   OConnection* _pConnection,
257cdf0e10cSrcweir                                             SQLHANDLE _aStatementHandle,
258cdf0e10cSrcweir                                             sal_Int32 columnIndex,
259cdf0e10cSrcweir                                             SQLSMALLINT _nType,
260cdf0e10cSrcweir                                             sal_Bool &_bWasNull,
261cdf0e10cSrcweir                                             const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface,
262cdf0e10cSrcweir                                             T& _rValue) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException)
263cdf0e10cSrcweir         {
264cdf0e10cSrcweir             OTools::getValue(_pConnection,_aStatementHandle,columnIndex,_nType,_bWasNull,_xInterface,&_rValue,sizeof _rValue);
265cdf0e10cSrcweir         }
266cdf0e10cSrcweir         //-----------------------------------------------------------------------------
267cdf0e10cSrcweir 
268cdf0e10cSrcweir 
269cdf0e10cSrcweir     }
270cdf0e10cSrcweir }
271cdf0e10cSrcweir #endif // _CONNECTIVITY_OTOOLS_HXX_
272