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_ > 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 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 93 XRow_impl::~XRow_impl() 94 { 95 } 96 97 98 void SAL_CALL 99 XRow_impl::acquire( 100 void ) 101 throw() 102 { 103 OWeakObject::acquire(); 104 } 105 106 void SAL_CALL 107 XRow_impl::release( 108 void ) 109 throw() 110 { 111 OWeakObject::release(); 112 } 113 114 115 uno::Any SAL_CALL 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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