xref: /AOO41X/main/ucb/source/ucp/file/filrow.cxx (revision 2f86921c33504fdff5a030df6c0b258927045abb)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_ucb.hxx"
26 #include "filrow.hxx"
27 #include "shell.hxx"
28 #include "prov.hxx"
29 
30 using namespace fileaccess;
31 using namespace com::sun::star;
32 using namespace com::sun::star::uno;
33 //using namespace com::sun::star::ucb;
34 
35 
36 // Funktion for TypeConverting
37 
38 
39 template< class _type_ >
convert(shell * pShell,uno::Reference<script::XTypeConverter> & xConverter,uno::Any & rValue,_type_ & aReturn)40 sal_Bool convert( shell* pShell,
41                   uno::Reference< script::XTypeConverter >& xConverter,
42                   uno::Any& rValue,
43                   _type_& aReturn  )
44 {
45     // Try first without converting
46     sal_Bool no_success = ! ( rValue >>= aReturn );
47 
48     if ( no_success )
49     {
50         if( ! xConverter.is() )
51         {
52             xConverter = uno::Reference< script::XTypeConverter >(
53                 pShell->m_xMultiServiceFactory->createInstance(
54                     rtl::OUString::createFromAscii( "com.sun.star.script.Converter" ) ),uno::UNO_QUERY );
55 
56 /*          DBG_ASSERT( m_xTypeConverter.is(),
57                         "PropertyValueSet::getTypeConverter() - "
58                         "Service 'com.sun.star.script.Converter' n/a!" );*/
59         }
60 
61         try
62         {
63             if( rValue.hasValue() )
64             {
65                 uno::Any aConvertedValue
66                     = xConverter->convertTo( rValue,getCppuType( static_cast< const _type_* >(0) ) );
67                 no_success = ! ( aConvertedValue >>= aReturn );
68             }
69             else
70                 no_success = sal_True;
71         }
72         catch ( lang::IllegalArgumentException )
73         {
74             no_success = sal_True;
75         }
76         catch ( script::CannotConvertException )
77         {
78             no_success = sal_True;
79         }
80     }
81     return no_success;
82 }
83 
84 
XRow_impl(shell * pMyShell,const uno::Sequence<uno::Any> & seq)85 XRow_impl::XRow_impl( shell* pMyShell,const uno::Sequence< uno::Any >& seq )
86     : m_aValueMap( seq ),
87       m_pMyShell( pMyShell ),
88       m_xProvider( pMyShell->m_pProvider ),
89       m_xTypeConverter( 0 )
90 {
91 }
92 
~XRow_impl()93 XRow_impl::~XRow_impl()
94 {
95 }
96 
97 
98 void SAL_CALL
acquire(void)99 XRow_impl::acquire(
100            void )
101   throw()
102 {
103   OWeakObject::acquire();
104 }
105 
106 void SAL_CALL
release(void)107 XRow_impl::release(
108            void )
109   throw()
110 {
111   OWeakObject::release();
112 }
113 
114 
115 uno::Any SAL_CALL
queryInterface(const uno::Type & rType)116 XRow_impl::queryInterface(
117               const uno::Type& rType )
118   throw( uno::RuntimeException )
119 {
120   uno::Any aRet = cppu::queryInterface( rType,
121                     SAL_STATIC_CAST( lang::XTypeProvider*,this),
122                     SAL_STATIC_CAST( sdbc::XRow*,this) );
123   return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
124 }
125 
126 
XTYPEPROVIDER_IMPL_2(XRow_impl,lang::XTypeProvider,sdbc::XRow)127 XTYPEPROVIDER_IMPL_2( XRow_impl,
128                       lang::XTypeProvider,
129                       sdbc::XRow )
130 
131 
132 sal_Bool SAL_CALL
133 XRow_impl::wasNull(
134            void )
135   throw( sdbc::SQLException,
136      uno::RuntimeException)
137 {
138   return m_nWasNull;
139 }
140 
141 
142 rtl::OUString SAL_CALL
getString(sal_Int32 columnIndex)143 XRow_impl::getString(
144              sal_Int32 columnIndex )
145   throw( sdbc::SQLException,
146      uno::RuntimeException)
147 {
148   if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
149     throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
150   rtl::OUString  Value;
151   osl::MutexGuard aGuard( m_aMutex );
152   m_nWasNull = ::convert<rtl::OUString>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
153   return Value;
154 }
155 
156 sal_Bool SAL_CALL
getBoolean(sal_Int32 columnIndex)157 XRow_impl::getBoolean(
158     sal_Int32 columnIndex )
159     throw( sdbc::SQLException,
160            uno::RuntimeException)
161 {
162     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
163         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
164     sal_Bool  Value( false );
165     osl::MutexGuard aGuard( m_aMutex );
166     m_nWasNull = ::convert<sal_Bool>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
167     return Value;
168 }
169 
170 
171 sal_Int8 SAL_CALL
getByte(sal_Int32 columnIndex)172 XRow_impl::getByte(
173     sal_Int32 columnIndex )
174     throw( sdbc::SQLException,
175            uno::RuntimeException)
176 {
177     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
178         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
179     sal_Int8  Value( 0 );
180     osl::MutexGuard aGuard( m_aMutex );
181     m_nWasNull = ::convert<sal_Int8>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
182     return Value;
183 }
184 
185 sal_Int16 SAL_CALL
getShort(sal_Int32 columnIndex)186 XRow_impl::getShort(
187     sal_Int32 columnIndex )
188     throw( sdbc::SQLException,
189            uno::RuntimeException)
190 {
191     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
192         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
193     sal_Int16  Value( 0 );
194     osl::MutexGuard aGuard( m_aMutex );
195     m_nWasNull = ::convert<sal_Int16>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
196     return Value;
197 }
198 
199 
200 sal_Int32 SAL_CALL
getInt(sal_Int32 columnIndex)201 XRow_impl::getInt(
202           sal_Int32 columnIndex )
203     throw( sdbc::SQLException,
204            uno::RuntimeException)
205 {
206     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
207         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
208     sal_Int32  Value( 0 );
209     osl::MutexGuard aGuard( m_aMutex );
210     m_nWasNull = ::convert<sal_Int32>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
211     return Value;
212 }
213 
214 sal_Int64 SAL_CALL
getLong(sal_Int32 columnIndex)215 XRow_impl::getLong(
216            sal_Int32 columnIndex )
217   throw( sdbc::SQLException,
218      uno::RuntimeException)
219 {
220     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
221         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
222     sal_Int64  Value( 0 );
223     osl::MutexGuard aGuard( m_aMutex );
224     m_nWasNull = ::convert<sal_Int64>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
225     return Value;
226 }
227 
228 float SAL_CALL
getFloat(sal_Int32 columnIndex)229 XRow_impl::getFloat(
230     sal_Int32 columnIndex )
231     throw( sdbc::SQLException,
232            uno::RuntimeException)
233 {
234     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
235         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
236     float  Value( 0 );
237     osl::MutexGuard aGuard( m_aMutex );
238     m_nWasNull = ::convert<float>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
239     return Value;
240 }
241 
242 double SAL_CALL
getDouble(sal_Int32 columnIndex)243 XRow_impl::getDouble(
244     sal_Int32 columnIndex )
245     throw( sdbc::SQLException,
246            uno::RuntimeException)
247 {
248     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
249         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
250     double  Value( 0 );
251     osl::MutexGuard aGuard( m_aMutex );
252     m_nWasNull = ::convert<double>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
253     return Value;
254 }
255 
256 uno::Sequence< sal_Int8 > SAL_CALL
getBytes(sal_Int32 columnIndex)257 XRow_impl::getBytes(
258     sal_Int32 columnIndex )
259     throw( sdbc::SQLException,
260            uno::RuntimeException)
261 {
262     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
263         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
264     uno::Sequence< sal_Int8 >  Value(0);
265     osl::MutexGuard aGuard( m_aMutex );
266     m_nWasNull = ::convert<uno::Sequence< sal_Int8 > >( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
267     return Value;
268 }
269 
270 util::Date SAL_CALL
getDate(sal_Int32 columnIndex)271 XRow_impl::getDate(
272     sal_Int32 columnIndex )
273     throw( sdbc::SQLException,
274            uno::RuntimeException)
275 {
276     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
277         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
278     util::Date  Value;
279     osl::MutexGuard aGuard( m_aMutex );
280     m_nWasNull = ::convert<util::Date>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
281     return Value;
282 }
283 
284 util::Time SAL_CALL
getTime(sal_Int32 columnIndex)285 XRow_impl::getTime(
286     sal_Int32 columnIndex )
287   throw( sdbc::SQLException,
288          uno::RuntimeException)
289 {
290     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
291         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
292     util::Time  Value;
293     osl::MutexGuard aGuard( m_aMutex );
294     m_nWasNull = ::convert<util::Time>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
295     return Value;
296 }
297 
298 util::DateTime SAL_CALL
getTimestamp(sal_Int32 columnIndex)299 XRow_impl::getTimestamp(
300             sal_Int32 columnIndex )
301   throw( sdbc::SQLException,
302      uno::RuntimeException)
303 {
304   if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
305     throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
306   util::DateTime  Value;
307   osl::MutexGuard aGuard( m_aMutex );
308   m_nWasNull = ::convert<util::DateTime>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
309   return Value;
310 }
311 
312 
313 uno::Reference< io::XInputStream > SAL_CALL
getBinaryStream(sal_Int32 columnIndex)314 XRow_impl::getBinaryStream(
315                sal_Int32 columnIndex )
316   throw( sdbc::SQLException,
317      uno::RuntimeException)
318 {
319   if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
320     throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
321   uno::Reference< io::XInputStream >  Value;
322   osl::MutexGuard aGuard( m_aMutex );
323   m_nWasNull = ::convert<uno::Reference< io::XInputStream > >( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
324   return Value;
325 }
326 
327 
328 uno::Reference< io::XInputStream > SAL_CALL
getCharacterStream(sal_Int32 columnIndex)329 XRow_impl::getCharacterStream(
330                   sal_Int32 columnIndex )
331     throw( sdbc::SQLException,
332            uno::RuntimeException)
333 {
334   if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
335       throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
336   uno::Reference< io::XInputStream > Value;
337   osl::MutexGuard aGuard( m_aMutex );
338   m_nWasNull = ::convert< uno::Reference< io::XInputStream> >( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
339   return Value;
340 }
341 
342 
343 uno::Any SAL_CALL
getObject(sal_Int32 columnIndex,const uno::Reference<container::XNameAccess> &)344 XRow_impl::getObject(
345     sal_Int32 columnIndex,
346     const uno::Reference< container::XNameAccess >& )
347     throw( sdbc::SQLException,
348            uno::RuntimeException)
349 {
350     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
351         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
352     uno::Any  Value;
353     osl::MutexGuard aGuard( m_aMutex );
354     m_nWasNull = ::convert<uno::Any>( m_pMyShell,m_xTypeConverter,m_aValueMap[ --columnIndex ],Value );
355     return Value;
356 }
357 
358 uno::Reference< sdbc::XRef > SAL_CALL
getRef(sal_Int32 columnIndex)359 XRow_impl::getRef(
360     sal_Int32 columnIndex )
361     throw( sdbc::SQLException,
362            uno::RuntimeException)
363 {
364     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
365         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
366     uno::Reference< sdbc::XRef > Value;
367     osl::MutexGuard aGuard( m_aMutex );
368     m_nWasNull = ::convert<uno::Reference< sdbc::XRef> >( m_pMyShell,
369                                                           m_xTypeConverter,
370                                                           m_aValueMap[ --columnIndex ],
371                                                           Value );
372     return Value;
373 }
374 
375 uno::Reference< sdbc::XBlob > SAL_CALL
getBlob(sal_Int32 columnIndex)376 XRow_impl::getBlob(
377            sal_Int32 columnIndex )
378   throw( sdbc::SQLException,
379      uno::RuntimeException)
380 {
381     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
382         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
383     uno::Reference< sdbc::XBlob > Value;
384     osl::MutexGuard aGuard( m_aMutex );
385     m_nWasNull = ::convert<uno::Reference< sdbc::XBlob> >( m_pMyShell,
386                                                            m_xTypeConverter,
387                                                            m_aValueMap[ --columnIndex ],
388                                                            Value );
389     return Value;
390 }
391 
392 uno::Reference< sdbc::XClob > SAL_CALL
getClob(sal_Int32 columnIndex)393 XRow_impl::getClob(
394            sal_Int32 columnIndex )
395   throw( sdbc::SQLException,
396      uno::RuntimeException)
397 {
398     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
399         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
400     uno::Reference< sdbc::XClob > Value;
401     osl::MutexGuard aGuard( m_aMutex );
402     m_nWasNull = ::convert<uno::Reference< sdbc::XClob> >( m_pMyShell,
403                                                            m_xTypeConverter,
404                                                            m_aValueMap[ --columnIndex ],
405                                                            Value );
406     return Value;
407 }
408 
409 
410 uno::Reference< sdbc::XArray > SAL_CALL
getArray(sal_Int32 columnIndex)411 XRow_impl::getArray(
412     sal_Int32 columnIndex )
413     throw( sdbc::SQLException,
414            uno::RuntimeException)
415 {
416     if( columnIndex < 1 || columnIndex > m_aValueMap.getLength() )
417         throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
418     uno::Reference< sdbc::XArray > Value;
419     osl::MutexGuard aGuard( m_aMutex );
420     m_nWasNull = ::convert<uno::Reference< sdbc::XArray> >( m_pMyShell,
421                                                             m_xTypeConverter,
422                                                             m_aValueMap[ --columnIndex ],
423                                                             Value );
424     return Value;
425 }
426