xref: /AOO41X/main/connectivity/inc/connectivity/dbconversion.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 
24 #ifndef _DBHELPER_DBCONVERSION_HXX_
25 #define _DBHELPER_DBCONVERSION_HXX_
26 
27 #include <com/sun/star/lang/IllegalArgumentException.hpp>
28 #include <com/sun/star/util/Date.hpp>
29 #include <com/sun/star/uno/Reference.hxx>
30 #include "connectivity/dbtoolsdllapi.hxx"
31 
32 // forward declarations
33 namespace rtl
34 {
35     class OUString;
36 }
37 namespace com
38 {
39     namespace sun
40     {
41         namespace star
42         {
43             namespace lang
44             {
45                 struct Locale;
46             }
47             namespace sdb
48             {
49                 class XColumn;
50                 class XColumnUpdate;
51             }
52             namespace sdbc
53             {
54                 class SQLException;
55             }
56             namespace beans
57             {
58                 class XPropertySet;
59             }
60             namespace util
61             {
62                 class XNumberFormatter;
63                 class XNumberFormatsSupplier;
64                 struct Time;
65                 struct DateTime;
66             }
67             namespace script
68             {
69                 class XTypeConverter;
70             }
71         }
72     }
73 }
74 
75 //.........................................................................
76 namespace dbtools
77 {
78 //.........................................................................
79 
80     class OOO_DLLPUBLIC_DBTOOLS DBTypeConversion
81     {
82     public:
83         static ::com::sun::star::util::Date getStandardDate();
84         static void setValue(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumnUpdate>& xVariant,
85                                     const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter>& xFormatter,
86                                     const ::com::sun::star::util::Date& rNullDate,
87                                     const ::rtl::OUString& rString,
88                                     sal_Int32 nKey,
89                                     sal_Int16 nFieldType,
90                                     sal_Int16 nKeyType) throw(::com::sun::star::lang::IllegalArgumentException);
91 
92         static void setValue(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumnUpdate>& xVariant,
93                              const ::com::sun::star::util::Date& rNullDate,
94                              const double& rValue,
95                              sal_Int16 nKeyType) throw(::com::sun::star::lang::IllegalArgumentException);
96 
97         static double getValue( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn>& xVariant, const ::com::sun::star::util::Date& rNullDate );
98 
99         // get the columnvalue as string with a default format given by the column or a default format
100         // for the type
101         static ::rtl::OUString getFormattedValue(
102                                         const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn,
103                                         const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter>& xFormatter,
104                                         const ::com::sun::star::lang::Locale& _rLocale,
105                                         const ::com::sun::star::util::Date& rNullDate);
106 
107         static ::rtl::OUString getFormattedValue(
108                                         const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn>& _xColumn,
109                                         const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter>& xFormatter,
110                                         const ::com::sun::star::util::Date& rNullDate,
111                                         sal_Int32 nKey,
112                                         sal_Int16 nKeyType);
113 
114         static ::com::sun::star::util::Date     toDate(double dVal, const ::com::sun::star::util::Date& _rNullDate = getStandardDate());
115         static ::com::sun::star::util::Date     toDate(const ::rtl::OUString& _sSQLDate);
116         static ::com::sun::star::util::Time     toTime(double dVal);
117         static ::com::sun::star::util::Time     toTime(const ::rtl::OUString& _sSQLDate);
118         static ::com::sun::star::util::DateTime toDateTime(double dVal, const ::com::sun::star::util::Date& _rNullDate = getStandardDate());
119         static ::com::sun::star::util::DateTime toDateTime(const ::rtl::OUString& _sSQLDate);
120 
121 
122         /** return the given DateTime as JDBC compliant 64 bit value
123         */
124         static sal_Int64 toINT64(const ::com::sun::star::util::DateTime& rVal);
125         static sal_Int32 getMsFromTime(const ::com::sun::star::util::Time& rVal);
126 
127         static sal_Int32 toDays(const ::com::sun::star::util::Date& _rVal, const ::com::sun::star::util::Date& _rNullDate = getStandardDate());
128 
129         static double   toDouble(const ::com::sun::star::util::Date& rVal, const ::com::sun::star::util::Date& _rNullDate = getStandardDate());
130         static double   toDouble(const ::com::sun::star::util::Time& rVal);
131         static double   toDouble(const ::com::sun::star::util::DateTime& rVal, const ::com::sun::star::util::Date& _rNullDate = getStandardDate());
132 
133         static sal_Int32    toINT32(const ::com::sun::star::util::Date& rVal);
134         static sal_Int32    toINT32(const ::com::sun::star::util::Time& rVal);
135 
136         static ::com::sun::star::util::Date toDate(sal_Int32 _nVal);
137         static ::com::sun::star::util::Time toTime(sal_Int32 _nVal);
138 
139         /** convert a double which is a date value relative to a given fixed date into a date value relative
140             to the standard db null date.
141         */
toStandardDbDate(const::com::sun::star::util::Date & _rNullDate,double _rVal)142         static double toStandardDbDate(const ::com::sun::star::util::Date& _rNullDate, double _rVal) { return _rVal + toDays(_rNullDate); }
143         /** convert a double which is a date value relative to the standard db null date into a date value relative
144             to a given fixed date.
145         */
toNullDate(const::com::sun::star::util::Date & _rNullDate,double _rVal)146         static double toNullDate(const ::com::sun::star::util::Date& _rNullDate, double _rVal) { return _rVal - toDays(_rNullDate); }
147 
148         // return the date from the numberformatsupplier or the STANDARD_DATE (1900,1,1)
149         static ::com::sun::star::util::Date getNULLDate(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > &xSupplier);
150 
151         // return the date in the format %04d-%02d-%02d
152         static ::rtl::OUString toDateString(const ::com::sun::star::util::Date& rDate);
153         // return the time in the format %02d:%02d:%02d
154         static ::rtl::OUString toTimeString(const ::com::sun::star::util::Time& rTime);
155         // return the DateTime in the format %04d-%02d-%02d %02d:%02d:%02d
156         static ::rtl::OUString toDateTimeString(const ::com::sun::star::util::DateTime& _rDateTime);
157         // return the any in an sql standard format
158         static ::rtl::OUString toSQLString(sal_Int32 eType, const ::com::sun::star::uno::Any& _rVal, sal_Bool bQuote,
159             const ::com::sun::star::uno::Reference< ::com::sun::star::script::XTypeConverter >&  _rxTypeConverter);
160 
161         /** converts a Unicode string into a 8-bit string, using the given encoding
162 
163             @param _rSource
164                 the source string to convert
165             @param _rDest
166                 the destination string
167             @param _eEncoding
168                 the encoding to use for the conversion
169 
170             @throws com::sun::star::sdbc::SQLException
171                 if the given string contains characters which are not convertible using the given encoding
172                 The SQLState of the exception will be set to 22018 ("Invalid character value for cast specification")
173 
174             @return
175                 the length of the converted string
176         */
177         static sal_Int32 convertUnicodeString(
178             const ::rtl::OUString& _rSource,
179             ::rtl::OString&  _rDest,
180             rtl_TextEncoding _eEncoding
181         )
182             SAL_THROW((::com::sun::star::sdbc::SQLException));
183 
184         /** converts a Unicode string into a 8-bit string, using the given encoding
185 
186             @param _rSource
187                 the source string to convert
188 
189             @param _rDest
190                 the destination string
191 
192             @param _nMaxLen
193                 the maximum length of the destination string
194 
195             @param _eEncoding
196                 the encoding to use for the conversion
197 
198             @throws com::sun::star::sdbc::SQLException
199                 if convertUnicodeString, which is called internally, throws such an exception
200 
201             @throws com::sun::star::sdbc::SQLException
202                 if the conversion results in a string which is longer than _nMaxLen
203 
204             @return
205                 the length of the converted string
206         */
207         static sal_Int32 convertUnicodeStringToLength(
208             const ::rtl::OUString& _rSource,
209             ::rtl::OString&  _rDest,
210             sal_Int32 _nMaxLen,
211             rtl_TextEncoding _eEncoding
212        )
213             SAL_THROW((::com::sun::star::sdbc::SQLException));
214     };
215 
216 //.........................................................................
217 }   // namespace dbtools
218 //.........................................................................
219 
220 #endif // _DBHELPER_DBCONVERSION_HXX_
221 
222