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