1cdf0e10cSrcweir /************************************************************************* 2cdf0e10cSrcweir * 3cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4cdf0e10cSrcweir * 5cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6cdf0e10cSrcweir * 7cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8cdf0e10cSrcweir * 9cdf0e10cSrcweir * This file is part of OpenOffice.org. 10cdf0e10cSrcweir * 11cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14cdf0e10cSrcweir * 15cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20cdf0e10cSrcweir * 21cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25cdf0e10cSrcweir * 26cdf0e10cSrcweir ************************************************************************/ 27cdf0e10cSrcweir 28cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29cdf0e10cSrcweir #include "precompiled_connectivity.hxx" 30cdf0e10cSrcweir 31cdf0e10cSrcweir #include <stdio.h> 32cdf0e10cSrcweir #include "connectivity/FValue.hxx" 33cdf0e10cSrcweir #include "connectivity/CommonTools.hxx" 34cdf0e10cSrcweir #include <connectivity/dbconversion.hxx> 35cdf0e10cSrcweir #include <comphelper/extract.hxx> 36cdf0e10cSrcweir #include <com/sun/star/io/XInputStream.hpp> 37cdf0e10cSrcweir #include <rtl/ustrbuf.hxx> 38cdf0e10cSrcweir #include <rtl/logfile.hxx> 39cdf0e10cSrcweir 40cdf0e10cSrcweir using namespace ::dbtools; 41cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 42cdf0e10cSrcweir using namespace ::com::sun::star::sdb; 43cdf0e10cSrcweir using namespace ::com::sun::star::uno; 44cdf0e10cSrcweir using namespace ::com::sun::star::util; 45cdf0e10cSrcweir using namespace ::com::sun::star::io; 46cdf0e10cSrcweir 47cdf0e10cSrcweir namespace connectivity 48cdf0e10cSrcweir { 49cdf0e10cSrcweir 50cdf0e10cSrcweir namespace { 51cdf0e10cSrcweir static sal_Bool isStorageCompatible(sal_Int32 _eType1, sal_Int32 _eType2) 52cdf0e10cSrcweir { 53cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::isStorageCompatible" ); 54cdf0e10cSrcweir sal_Bool bIsCompatible = sal_True; 55cdf0e10cSrcweir 56cdf0e10cSrcweir if (_eType1 != _eType2) 57cdf0e10cSrcweir { 58cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_TRACE( aLogger, "ORowSetValue::isStorageCompatible _eType1 != _eType2" ); 59cdf0e10cSrcweir switch (_eType1) 60cdf0e10cSrcweir { 61cdf0e10cSrcweir case DataType::CHAR: 62cdf0e10cSrcweir case DataType::VARCHAR: 63cdf0e10cSrcweir case DataType::DECIMAL: 64cdf0e10cSrcweir case DataType::NUMERIC: 65cdf0e10cSrcweir case DataType::LONGVARCHAR: 66cdf0e10cSrcweir bIsCompatible = (DataType::CHAR == _eType2) 67cdf0e10cSrcweir || (DataType::VARCHAR == _eType2) 68cdf0e10cSrcweir || (DataType::DECIMAL == _eType2) 69cdf0e10cSrcweir || (DataType::NUMERIC == _eType2) 70cdf0e10cSrcweir || (DataType::LONGVARCHAR == _eType2); 71cdf0e10cSrcweir break; 72cdf0e10cSrcweir 73cdf0e10cSrcweir case DataType::DOUBLE: 74cdf0e10cSrcweir case DataType::REAL: 75cdf0e10cSrcweir bIsCompatible = (DataType::DOUBLE == _eType2) 76cdf0e10cSrcweir || (DataType::REAL == _eType2); 77cdf0e10cSrcweir break; 78cdf0e10cSrcweir 79cdf0e10cSrcweir case DataType::BINARY: 80cdf0e10cSrcweir case DataType::VARBINARY: 81cdf0e10cSrcweir case DataType::LONGVARBINARY: 82cdf0e10cSrcweir bIsCompatible = (DataType::BINARY == _eType2) 83cdf0e10cSrcweir || (DataType::VARBINARY == _eType2) 84cdf0e10cSrcweir || (DataType::LONGVARBINARY == _eType2); 85cdf0e10cSrcweir break; 86cdf0e10cSrcweir 87cdf0e10cSrcweir case DataType::INTEGER: 88cdf0e10cSrcweir bIsCompatible = (DataType::SMALLINT == _eType2) 89cdf0e10cSrcweir || (DataType::TINYINT == _eType2) 90cdf0e10cSrcweir || (DataType::BIT == _eType2) 91cdf0e10cSrcweir || (DataType::BOOLEAN == _eType2); 92cdf0e10cSrcweir break; 93cdf0e10cSrcweir case DataType::SMALLINT: 94cdf0e10cSrcweir bIsCompatible = (DataType::TINYINT == _eType2) 95cdf0e10cSrcweir || (DataType::BIT == _eType2) 96cdf0e10cSrcweir || (DataType::BOOLEAN == _eType2); 97cdf0e10cSrcweir break; 98cdf0e10cSrcweir case DataType::TINYINT: 99cdf0e10cSrcweir bIsCompatible = (DataType::BIT == _eType2) 100cdf0e10cSrcweir || (DataType::BOOLEAN == _eType2); 101cdf0e10cSrcweir break; 102cdf0e10cSrcweir 103cdf0e10cSrcweir case DataType::BLOB: 104cdf0e10cSrcweir case DataType::CLOB: 105cdf0e10cSrcweir case DataType::OBJECT: 106cdf0e10cSrcweir bIsCompatible = (DataType::BLOB == _eType2) 107cdf0e10cSrcweir || (DataType::CLOB == _eType2) 108cdf0e10cSrcweir || (DataType::OBJECT == _eType2); 109cdf0e10cSrcweir break; 110cdf0e10cSrcweir 111cdf0e10cSrcweir default: 112cdf0e10cSrcweir bIsCompatible = sal_False; 113cdf0e10cSrcweir } 114cdf0e10cSrcweir } 115cdf0e10cSrcweir return bIsCompatible; 116cdf0e10cSrcweir } 117cdf0e10cSrcweir } 118cdf0e10cSrcweir 119cdf0e10cSrcweir // ----------------------------------------------------------------------------- 120cdf0e10cSrcweir #ifdef DBG_UTIL 121cdf0e10cSrcweir 122cdf0e10cSrcweir #include <vector> 123cdf0e10cSrcweir #include <rtl/string.h> 124cdf0e10cSrcweir 125cdf0e10cSrcweir namespace tracing 126cdf0e10cSrcweir { 127cdf0e10cSrcweir struct AllocationType 128cdf0e10cSrcweir { 129cdf0e10cSrcweir const sal_Char* pName; 130cdf0e10cSrcweir sal_Int32 nAllocatedUnits; 131cdf0e10cSrcweir 132cdf0e10cSrcweir AllocationType( ) : pName( NULL ), nAllocatedUnits( 0 ) { } 133cdf0e10cSrcweir }; 134cdf0e10cSrcweir 135cdf0e10cSrcweir // ============================================================================= 136cdf0e10cSrcweir class AllocationTracer 137cdf0e10cSrcweir { 138cdf0e10cSrcweir public: 139cdf0e10cSrcweir typedef ::std::vector< AllocationType > AllocationState; 140cdf0e10cSrcweir static AllocationState s_aAllocated; 141cdf0e10cSrcweir static ::osl::Mutex s_aMutex; 142cdf0e10cSrcweir 143cdf0e10cSrcweir public: 144cdf0e10cSrcweir static void registerUnit( const sal_Char* _pName ); 145cdf0e10cSrcweir static void revokeUnit( const sal_Char* _pName ); 146cdf0e10cSrcweir 147cdf0e10cSrcweir private: 148cdf0e10cSrcweir static AllocationState::iterator getLocation( const sal_Char* _pName ); 149cdf0e10cSrcweir }; 150cdf0e10cSrcweir 151cdf0e10cSrcweir // ============================================================================= 152cdf0e10cSrcweir AllocationTracer::AllocationState::iterator AllocationTracer::getLocation( const sal_Char* _pName ) 153cdf0e10cSrcweir { 154cdf0e10cSrcweir AllocationState::iterator aLookFor = s_aAllocated.begin(); 155cdf0e10cSrcweir for ( ; 156cdf0e10cSrcweir aLookFor != s_aAllocated.end(); 157cdf0e10cSrcweir ++aLookFor 158cdf0e10cSrcweir ) 159cdf0e10cSrcweir { 160cdf0e10cSrcweir if ( 0 == rtl_str_compare( aLookFor->pName, _pName ) ) 161cdf0e10cSrcweir // found 162cdf0e10cSrcweir return aLookFor; 163cdf0e10cSrcweir } 164cdf0e10cSrcweir // not found 165cdf0e10cSrcweir s_aAllocated.push_back( AllocationType() ); 166cdf0e10cSrcweir aLookFor = s_aAllocated.end(); --aLookFor; 167cdf0e10cSrcweir aLookFor->pName = _pName; // note that this assumes that _pName is a constant string .... 168cdf0e10cSrcweir return aLookFor; 169cdf0e10cSrcweir } 170cdf0e10cSrcweir 171cdf0e10cSrcweir // ============================================================================= 172cdf0e10cSrcweir AllocationTracer::AllocationState AllocationTracer::s_aAllocated; 173cdf0e10cSrcweir ::osl::Mutex AllocationTracer::s_aMutex; 174cdf0e10cSrcweir 175cdf0e10cSrcweir // ============================================================================= 176cdf0e10cSrcweir void AllocationTracer::registerUnit( const sal_Char* _pName ) 177cdf0e10cSrcweir { 178cdf0e10cSrcweir ::osl::MutexGuard aGuard( s_aMutex ); 179cdf0e10cSrcweir 180cdf0e10cSrcweir AllocationState::iterator aPos = getLocation( _pName ); 181cdf0e10cSrcweir ++aPos->nAllocatedUnits; 182cdf0e10cSrcweir } 183cdf0e10cSrcweir 184cdf0e10cSrcweir // ============================================================================= 185cdf0e10cSrcweir void AllocationTracer::revokeUnit( const sal_Char* _pName ) 186cdf0e10cSrcweir { 187cdf0e10cSrcweir ::osl::MutexGuard aGuard( s_aMutex ); 188cdf0e10cSrcweir 189cdf0e10cSrcweir AllocationState::iterator aPos = getLocation( _pName ); 190cdf0e10cSrcweir --aPos->nAllocatedUnits; 191cdf0e10cSrcweir } 192cdf0e10cSrcweir 193cdf0e10cSrcweir #define TRACE_ALLOC( type ) tracing::AllocationTracer::registerUnit( #type ); 194cdf0e10cSrcweir #define TRACE_FREE( type ) tracing::AllocationTracer::revokeUnit( #type ); 195cdf0e10cSrcweir } 196cdf0e10cSrcweir #else 197cdf0e10cSrcweir #define TRACE_ALLOC( type ) 198cdf0e10cSrcweir #define TRACE_FREE( type ) 199cdf0e10cSrcweir #endif 200cdf0e10cSrcweir 201cdf0e10cSrcweir // ----------------------------------------------------------------------------- 202cdf0e10cSrcweir void ORowSetValue::setTypeKind(sal_Int32 _eType) 203cdf0e10cSrcweir { 204cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::setTypeKind" ); 205cdf0e10cSrcweir if ( !m_bNull && !isStorageCompatible(_eType, m_eTypeKind) ) 206cdf0e10cSrcweir { 207cdf0e10cSrcweir switch(_eType) 208cdf0e10cSrcweir { 209cdf0e10cSrcweir case DataType::VARCHAR: 210cdf0e10cSrcweir case DataType::CHAR: 211cdf0e10cSrcweir case DataType::DECIMAL: 212cdf0e10cSrcweir case DataType::NUMERIC: 213cdf0e10cSrcweir case DataType::LONGVARCHAR: 214cdf0e10cSrcweir (*this) = getString(); 215cdf0e10cSrcweir break; 216cdf0e10cSrcweir case DataType::BIGINT: 217cdf0e10cSrcweir (*this) = getLong(); 218cdf0e10cSrcweir break; 219cdf0e10cSrcweir 220cdf0e10cSrcweir case DataType::FLOAT: 221cdf0e10cSrcweir (*this) = getFloat(); 222cdf0e10cSrcweir break; 223cdf0e10cSrcweir case DataType::DOUBLE: 224cdf0e10cSrcweir case DataType::REAL: 225cdf0e10cSrcweir (*this) = getDouble(); 226cdf0e10cSrcweir break; 227cdf0e10cSrcweir case DataType::TINYINT: 228cdf0e10cSrcweir (*this) = getInt8(); 229cdf0e10cSrcweir break; 230cdf0e10cSrcweir case DataType::SMALLINT: 231cdf0e10cSrcweir (*this) = getInt16(); 232cdf0e10cSrcweir break; 233cdf0e10cSrcweir case DataType::INTEGER: 234cdf0e10cSrcweir (*this) = getInt32(); 235cdf0e10cSrcweir break; 236cdf0e10cSrcweir case DataType::BIT: 237cdf0e10cSrcweir case DataType::BOOLEAN: 238cdf0e10cSrcweir (*this) = getBool(); 239cdf0e10cSrcweir break; 240cdf0e10cSrcweir case DataType::DATE: 241cdf0e10cSrcweir (*this) = getDate(); 242cdf0e10cSrcweir break; 243cdf0e10cSrcweir case DataType::TIME: 244cdf0e10cSrcweir (*this) = getTime(); 245cdf0e10cSrcweir break; 246cdf0e10cSrcweir case DataType::TIMESTAMP: 247cdf0e10cSrcweir (*this) = getDateTime(); 248cdf0e10cSrcweir break; 249cdf0e10cSrcweir case DataType::BINARY: 250cdf0e10cSrcweir case DataType::VARBINARY: 251cdf0e10cSrcweir case DataType::LONGVARBINARY: 252cdf0e10cSrcweir (*this) = getSequence(); 253cdf0e10cSrcweir break; 254cdf0e10cSrcweir case DataType::BLOB: 255cdf0e10cSrcweir case DataType::CLOB: 256cdf0e10cSrcweir case DataType::OBJECT: 257cdf0e10cSrcweir case DataType::OTHER: 258cdf0e10cSrcweir (*this) = getAny(); 259cdf0e10cSrcweir break; 260cdf0e10cSrcweir default: 261cdf0e10cSrcweir (*this) = getAny(); 262cdf0e10cSrcweir OSL_ENSURE(0,"ORowSetValue:operator==(): UNSPUPPORTED TYPE!"); 263cdf0e10cSrcweir } 264cdf0e10cSrcweir } 265cdf0e10cSrcweir 266cdf0e10cSrcweir m_eTypeKind = _eType; 267cdf0e10cSrcweir } 268cdf0e10cSrcweir 269cdf0e10cSrcweir // ----------------------------------------------------------------------------- 270cdf0e10cSrcweir void ORowSetValue::free() 271cdf0e10cSrcweir { 272cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::free" ); 273cdf0e10cSrcweir if(!m_bNull) 274cdf0e10cSrcweir { 275cdf0e10cSrcweir switch(m_eTypeKind) 276cdf0e10cSrcweir { 277cdf0e10cSrcweir case DataType::CHAR: 278cdf0e10cSrcweir case DataType::VARCHAR: 279cdf0e10cSrcweir case DataType::DECIMAL: 280cdf0e10cSrcweir case DataType::NUMERIC: 281cdf0e10cSrcweir case DataType::LONGVARCHAR: 282cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pString,"String pointer is null!"); 283cdf0e10cSrcweir rtl_uString_release(m_aValue.m_pString); 284cdf0e10cSrcweir m_aValue.m_pString = NULL; 285cdf0e10cSrcweir break; 286cdf0e10cSrcweir case DataType::INTEGER: 287cdf0e10cSrcweir if ( !m_bSigned ) 288cdf0e10cSrcweir { 289cdf0e10cSrcweir delete (sal_Int64*)m_aValue.m_pValue; 290cdf0e10cSrcweir TRACE_FREE( sal_Int64 ) 291cdf0e10cSrcweir m_aValue.m_pValue = NULL; 292cdf0e10cSrcweir } 293cdf0e10cSrcweir break; 294cdf0e10cSrcweir case DataType::BIGINT: 295cdf0e10cSrcweir if ( m_bSigned ) 296cdf0e10cSrcweir { 297cdf0e10cSrcweir delete (sal_Int64*)m_aValue.m_pValue; 298cdf0e10cSrcweir TRACE_FREE( sal_Int64 ) 299cdf0e10cSrcweir m_aValue.m_pValue = NULL; 300cdf0e10cSrcweir } 301cdf0e10cSrcweir else 302cdf0e10cSrcweir { 303cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pString,"String pointer is null!"); 304cdf0e10cSrcweir rtl_uString_release(m_aValue.m_pString); 305cdf0e10cSrcweir m_aValue.m_pString = NULL; 306cdf0e10cSrcweir } 307cdf0e10cSrcweir break; 308cdf0e10cSrcweir case DataType::FLOAT: 309cdf0e10cSrcweir delete (float*)m_aValue.m_pValue; 310cdf0e10cSrcweir TRACE_FREE( float ) 311cdf0e10cSrcweir m_aValue.m_pValue = NULL; 312cdf0e10cSrcweir break; 313cdf0e10cSrcweir case DataType::DOUBLE: 314cdf0e10cSrcweir case DataType::REAL: 315cdf0e10cSrcweir delete (double*)m_aValue.m_pValue; 316cdf0e10cSrcweir TRACE_FREE( double ) 317cdf0e10cSrcweir m_aValue.m_pValue = NULL; 318cdf0e10cSrcweir break; 319cdf0e10cSrcweir case DataType::DATE: 320cdf0e10cSrcweir delete (::com::sun::star::util::Date*)m_aValue.m_pValue; 321cdf0e10cSrcweir TRACE_FREE( Date ) 322cdf0e10cSrcweir m_aValue.m_pValue = NULL; 323cdf0e10cSrcweir break; 324cdf0e10cSrcweir case DataType::TIME: 325cdf0e10cSrcweir delete (::com::sun::star::util::Time*)m_aValue.m_pValue; 326cdf0e10cSrcweir TRACE_FREE( Time ) 327cdf0e10cSrcweir m_aValue.m_pValue = NULL; 328cdf0e10cSrcweir break; 329cdf0e10cSrcweir case DataType::TIMESTAMP: 330cdf0e10cSrcweir delete (::com::sun::star::util::DateTime*)m_aValue.m_pValue; 331cdf0e10cSrcweir TRACE_FREE( DateTime ) 332cdf0e10cSrcweir m_aValue.m_pValue = NULL; 333cdf0e10cSrcweir break; 334cdf0e10cSrcweir case DataType::BINARY: 335cdf0e10cSrcweir case DataType::VARBINARY: 336cdf0e10cSrcweir case DataType::LONGVARBINARY: 337cdf0e10cSrcweir delete (Sequence<sal_Int8>*)m_aValue.m_pValue; 338cdf0e10cSrcweir TRACE_FREE( Sequence_sal_Int8 ) 339cdf0e10cSrcweir m_aValue.m_pValue = NULL; 340cdf0e10cSrcweir break; 341cdf0e10cSrcweir case DataType::BLOB: 342cdf0e10cSrcweir case DataType::CLOB: 343cdf0e10cSrcweir case DataType::OBJECT: 344cdf0e10cSrcweir delete (Any*)m_aValue.m_pValue; 345cdf0e10cSrcweir TRACE_FREE( Any ) 346cdf0e10cSrcweir m_aValue.m_pValue = NULL; 347cdf0e10cSrcweir break; 348cdf0e10cSrcweir case DataType::BIT: 349cdf0e10cSrcweir case DataType::TINYINT: 350cdf0e10cSrcweir case DataType::SMALLINT: 351cdf0e10cSrcweir case DataType::BOOLEAN: 352cdf0e10cSrcweir break; 353cdf0e10cSrcweir default: 354cdf0e10cSrcweir if ( m_aValue.m_pValue ) 355cdf0e10cSrcweir { 356cdf0e10cSrcweir delete (Any*)m_aValue.m_pValue; 357cdf0e10cSrcweir TRACE_FREE( Any ) 358cdf0e10cSrcweir m_aValue.m_pValue = NULL; 359cdf0e10cSrcweir } 360cdf0e10cSrcweir break; 361cdf0e10cSrcweir 362cdf0e10cSrcweir } 363cdf0e10cSrcweir m_bNull = sal_True; 364cdf0e10cSrcweir } 365cdf0e10cSrcweir } 366cdf0e10cSrcweir // ----------------------------------------------------------------------------- 367cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const ORowSetValue& _rRH) 368cdf0e10cSrcweir { 369cdf0e10cSrcweir if(&_rRH == this) 370cdf0e10cSrcweir return *this; 371cdf0e10cSrcweir 372cdf0e10cSrcweir if ( m_eTypeKind != _rRH.m_eTypeKind || (_rRH.m_bNull && !m_bNull) || m_bSigned != _rRH.m_bSigned) 373cdf0e10cSrcweir free(); 374cdf0e10cSrcweir 375cdf0e10cSrcweir m_bBound = _rRH.m_bBound; 376cdf0e10cSrcweir m_eTypeKind = _rRH.m_eTypeKind; 377cdf0e10cSrcweir m_bSigned = _rRH.m_bSigned; 378cdf0e10cSrcweir 379cdf0e10cSrcweir if(m_bNull && !_rRH.m_bNull) 380cdf0e10cSrcweir { 381cdf0e10cSrcweir switch(_rRH.m_eTypeKind) 382cdf0e10cSrcweir { 383cdf0e10cSrcweir case DataType::CHAR: 384cdf0e10cSrcweir case DataType::VARCHAR: 385cdf0e10cSrcweir case DataType::DECIMAL: 386cdf0e10cSrcweir case DataType::NUMERIC: 387cdf0e10cSrcweir case DataType::LONGVARCHAR: 388cdf0e10cSrcweir rtl_uString_acquire(_rRH.m_aValue.m_pString); 389cdf0e10cSrcweir m_aValue.m_pString = _rRH.m_aValue.m_pString; 390cdf0e10cSrcweir break; 391cdf0e10cSrcweir case DataType::BIGINT: 392cdf0e10cSrcweir if ( _rRH.m_bSigned ) 393cdf0e10cSrcweir { 394cdf0e10cSrcweir m_aValue.m_pValue = new sal_Int64(*(sal_Int64*)_rRH.m_aValue.m_pValue); 395cdf0e10cSrcweir TRACE_ALLOC( sal_Int64 ) 396cdf0e10cSrcweir } 397cdf0e10cSrcweir else 398cdf0e10cSrcweir { 399cdf0e10cSrcweir rtl_uString_acquire(_rRH.m_aValue.m_pString); 400cdf0e10cSrcweir m_aValue.m_pString = _rRH.m_aValue.m_pString; 401cdf0e10cSrcweir } 402cdf0e10cSrcweir break; 403cdf0e10cSrcweir case DataType::FLOAT: 404cdf0e10cSrcweir m_aValue.m_pValue = new float(*(float*)_rRH.m_aValue.m_pValue); 405cdf0e10cSrcweir TRACE_ALLOC( float ) 406cdf0e10cSrcweir break; 407cdf0e10cSrcweir case DataType::DOUBLE: 408cdf0e10cSrcweir case DataType::REAL: 409cdf0e10cSrcweir m_aValue.m_pValue = new double(*(double*)_rRH.m_aValue.m_pValue); 410cdf0e10cSrcweir TRACE_ALLOC( double ) 411cdf0e10cSrcweir break; 412cdf0e10cSrcweir case DataType::DATE: 413cdf0e10cSrcweir m_aValue.m_pValue = new Date(*(Date*)_rRH.m_aValue.m_pValue); 414cdf0e10cSrcweir TRACE_ALLOC( Date ) 415cdf0e10cSrcweir break; 416cdf0e10cSrcweir case DataType::TIME: 417cdf0e10cSrcweir m_aValue.m_pValue = new Time(*(Time*)_rRH.m_aValue.m_pValue); 418cdf0e10cSrcweir TRACE_ALLOC( Time ) 419cdf0e10cSrcweir break; 420cdf0e10cSrcweir case DataType::TIMESTAMP: 421cdf0e10cSrcweir m_aValue.m_pValue = new DateTime(*(DateTime*)_rRH.m_aValue.m_pValue); 422cdf0e10cSrcweir TRACE_ALLOC( DateTime ) 423cdf0e10cSrcweir break; 424cdf0e10cSrcweir case DataType::BINARY: 425cdf0e10cSrcweir case DataType::VARBINARY: 426cdf0e10cSrcweir case DataType::LONGVARBINARY: 427cdf0e10cSrcweir m_aValue.m_pValue = new Sequence<sal_Int8>(*(Sequence<sal_Int8>*)_rRH.m_aValue.m_pValue); 428cdf0e10cSrcweir TRACE_ALLOC( Sequence_sal_Int8 ) 429cdf0e10cSrcweir break; 430cdf0e10cSrcweir case DataType::BIT: 431cdf0e10cSrcweir case DataType::BOOLEAN: 432cdf0e10cSrcweir m_aValue.m_bBool = _rRH.m_aValue.m_bBool; 433cdf0e10cSrcweir break; 434cdf0e10cSrcweir case DataType::TINYINT: 435cdf0e10cSrcweir if ( _rRH.m_bSigned ) 436cdf0e10cSrcweir m_aValue.m_nInt8 = _rRH.m_aValue.m_nInt8; 437cdf0e10cSrcweir else 438cdf0e10cSrcweir m_aValue.m_nInt16 = _rRH.m_aValue.m_nInt16; 439cdf0e10cSrcweir break; 440cdf0e10cSrcweir case DataType::SMALLINT: 441cdf0e10cSrcweir if ( _rRH.m_bSigned ) 442cdf0e10cSrcweir m_aValue.m_nInt16 = _rRH.m_aValue.m_nInt16; 443cdf0e10cSrcweir else 444cdf0e10cSrcweir m_aValue.m_nInt32 = _rRH.m_aValue.m_nInt32; 445cdf0e10cSrcweir break; 446cdf0e10cSrcweir case DataType::INTEGER: 447cdf0e10cSrcweir if ( _rRH.m_bSigned ) 448cdf0e10cSrcweir m_aValue.m_nInt32 = _rRH.m_aValue.m_nInt32; 449cdf0e10cSrcweir else 450cdf0e10cSrcweir { 451cdf0e10cSrcweir m_aValue.m_pValue = new sal_Int64(*(sal_Int64*)_rRH.m_aValue.m_pValue); 452cdf0e10cSrcweir TRACE_ALLOC( sal_Int64 ) 453cdf0e10cSrcweir } 454cdf0e10cSrcweir break; 455cdf0e10cSrcweir default: 456cdf0e10cSrcweir m_aValue.m_pValue = new Any(*(Any*)_rRH.m_aValue.m_pValue); 457cdf0e10cSrcweir TRACE_ALLOC( Any ) 458cdf0e10cSrcweir } 459cdf0e10cSrcweir } 460cdf0e10cSrcweir else if(!_rRH.m_bNull) 461cdf0e10cSrcweir { 462cdf0e10cSrcweir switch(_rRH.m_eTypeKind) 463cdf0e10cSrcweir { 464cdf0e10cSrcweir case DataType::CHAR: 465cdf0e10cSrcweir case DataType::VARCHAR: 466cdf0e10cSrcweir case DataType::DECIMAL: 467cdf0e10cSrcweir case DataType::NUMERIC: 468cdf0e10cSrcweir case DataType::LONGVARCHAR: 469cdf0e10cSrcweir (*this) = ::rtl::OUString(_rRH.m_aValue.m_pString); 470cdf0e10cSrcweir break; 471cdf0e10cSrcweir case DataType::BIGINT: 472cdf0e10cSrcweir if ( _rRH.m_bSigned ) 473cdf0e10cSrcweir (*this) = *(sal_Int64*)_rRH.m_aValue.m_pValue; 474cdf0e10cSrcweir else 475cdf0e10cSrcweir (*this) = ::rtl::OUString(_rRH.m_aValue.m_pString); 476cdf0e10cSrcweir break; 477cdf0e10cSrcweir case DataType::FLOAT: 478cdf0e10cSrcweir (*this) = *(float*)_rRH.m_aValue.m_pValue; 479cdf0e10cSrcweir break; 480cdf0e10cSrcweir case DataType::DOUBLE: 481cdf0e10cSrcweir case DataType::REAL: 482cdf0e10cSrcweir (*this) = *(double*)_rRH.m_aValue.m_pValue; 483cdf0e10cSrcweir break; 484cdf0e10cSrcweir case DataType::DATE: 485cdf0e10cSrcweir (*this) = *(Date*)_rRH.m_aValue.m_pValue; 486cdf0e10cSrcweir break; 487cdf0e10cSrcweir case DataType::TIME: 488cdf0e10cSrcweir (*this) = *(Time*)_rRH.m_aValue.m_pValue; 489cdf0e10cSrcweir break; 490cdf0e10cSrcweir case DataType::TIMESTAMP: 491cdf0e10cSrcweir (*this) = *(DateTime*)_rRH.m_aValue.m_pValue; 492cdf0e10cSrcweir break; 493cdf0e10cSrcweir case DataType::BINARY: 494cdf0e10cSrcweir case DataType::VARBINARY: 495cdf0e10cSrcweir case DataType::LONGVARBINARY: 496cdf0e10cSrcweir (*this) = *(Sequence<sal_Int8>*)_rRH.m_aValue.m_pValue; 497cdf0e10cSrcweir break; 498cdf0e10cSrcweir case DataType::BIT: 499cdf0e10cSrcweir case DataType::BOOLEAN: 500cdf0e10cSrcweir m_aValue.m_bBool = _rRH.m_aValue.m_bBool; 501cdf0e10cSrcweir break; 502cdf0e10cSrcweir case DataType::TINYINT: 503cdf0e10cSrcweir if ( _rRH.m_bSigned ) 504cdf0e10cSrcweir m_aValue.m_nInt8 = _rRH.m_aValue.m_nInt8; 505cdf0e10cSrcweir else 506cdf0e10cSrcweir m_aValue.m_nInt16 = _rRH.m_aValue.m_nInt16; 507cdf0e10cSrcweir break; 508cdf0e10cSrcweir case DataType::SMALLINT: 509cdf0e10cSrcweir if ( _rRH.m_bSigned ) 510cdf0e10cSrcweir m_aValue.m_nInt16 = _rRH.m_aValue.m_nInt16; 511cdf0e10cSrcweir else 512cdf0e10cSrcweir m_aValue.m_nInt32 = _rRH.m_aValue.m_nInt32; 513cdf0e10cSrcweir break; 514cdf0e10cSrcweir case DataType::INTEGER: 515cdf0e10cSrcweir if ( _rRH.m_bSigned ) 516cdf0e10cSrcweir m_aValue.m_nInt32 = _rRH.m_aValue.m_nInt32; 517cdf0e10cSrcweir else 518cdf0e10cSrcweir *static_cast<sal_Int64*>(m_aValue.m_pValue) = *(sal_Int64*)_rRH.m_aValue.m_pValue; 519cdf0e10cSrcweir break; 520cdf0e10cSrcweir default: 521cdf0e10cSrcweir (*(Any*)m_aValue.m_pValue) = (*(Any*)_rRH.m_aValue.m_pValue); 522cdf0e10cSrcweir } 523cdf0e10cSrcweir } 524cdf0e10cSrcweir 525cdf0e10cSrcweir m_bNull = _rRH.m_bNull; 526cdf0e10cSrcweir // OJ: BUGID: 96277 527cdf0e10cSrcweir m_eTypeKind = _rRH.m_eTypeKind; 528cdf0e10cSrcweir 529cdf0e10cSrcweir return *this; 530cdf0e10cSrcweir } 531cdf0e10cSrcweir // ------------------------------------------------------------------------- 532cdf0e10cSrcweir 533cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const Date& _rRH) 534cdf0e10cSrcweir { 535cdf0e10cSrcweir if(m_eTypeKind != DataType::DATE) 536cdf0e10cSrcweir free(); 537cdf0e10cSrcweir 538cdf0e10cSrcweir if(m_bNull) 539cdf0e10cSrcweir { 540cdf0e10cSrcweir m_aValue.m_pValue = new Date(_rRH); 541cdf0e10cSrcweir TRACE_ALLOC( Date ) 542cdf0e10cSrcweir m_eTypeKind = DataType::DATE; 543cdf0e10cSrcweir m_bNull = sal_False; 544cdf0e10cSrcweir } 545cdf0e10cSrcweir else 546cdf0e10cSrcweir *(Date*)m_aValue.m_pValue = _rRH; 547cdf0e10cSrcweir 548cdf0e10cSrcweir return *this; 549cdf0e10cSrcweir } 550cdf0e10cSrcweir // ------------------------------------------------------------------------- 551cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const Time& _rRH) 552cdf0e10cSrcweir { 553cdf0e10cSrcweir if(m_eTypeKind != DataType::TIME) 554cdf0e10cSrcweir free(); 555cdf0e10cSrcweir 556cdf0e10cSrcweir if(m_bNull) 557cdf0e10cSrcweir { 558cdf0e10cSrcweir m_aValue.m_pValue = new Time(_rRH); 559cdf0e10cSrcweir TRACE_ALLOC( Time ) 560cdf0e10cSrcweir m_eTypeKind = DataType::TIME; 561cdf0e10cSrcweir m_bNull = sal_False; 562cdf0e10cSrcweir } 563cdf0e10cSrcweir else 564cdf0e10cSrcweir *(Time*)m_aValue.m_pValue = _rRH; 565cdf0e10cSrcweir 566cdf0e10cSrcweir return *this; 567cdf0e10cSrcweir } 568cdf0e10cSrcweir // ------------------------------------------------------------------------- 569cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const DateTime& _rRH) 570cdf0e10cSrcweir { 571cdf0e10cSrcweir if(m_eTypeKind != DataType::TIMESTAMP) 572cdf0e10cSrcweir free(); 573cdf0e10cSrcweir if(m_bNull) 574cdf0e10cSrcweir { 575cdf0e10cSrcweir m_aValue.m_pValue = new DateTime(_rRH); 576cdf0e10cSrcweir TRACE_ALLOC( DateTime ) 577cdf0e10cSrcweir m_eTypeKind = DataType::TIMESTAMP; 578cdf0e10cSrcweir m_bNull = sal_False; 579cdf0e10cSrcweir } 580cdf0e10cSrcweir else 581cdf0e10cSrcweir *(DateTime*)m_aValue.m_pValue = _rRH; 582cdf0e10cSrcweir 583cdf0e10cSrcweir return *this; 584cdf0e10cSrcweir } 585cdf0e10cSrcweir // ------------------------------------------------------------------------- 586cdf0e10cSrcweir 587cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const ::rtl::OUString& _rRH) 588cdf0e10cSrcweir { 589cdf0e10cSrcweir if(m_eTypeKind != DataType::VARCHAR || m_aValue.m_pString != _rRH.pData) 590cdf0e10cSrcweir { 591cdf0e10cSrcweir free(); 592cdf0e10cSrcweir m_bNull = sal_False; 593cdf0e10cSrcweir 594cdf0e10cSrcweir m_aValue.m_pString = _rRH.pData; 595cdf0e10cSrcweir rtl_uString_acquire(m_aValue.m_pString); 596cdf0e10cSrcweir m_eTypeKind = DataType::VARCHAR; 597cdf0e10cSrcweir } 598cdf0e10cSrcweir 599cdf0e10cSrcweir return *this; 600cdf0e10cSrcweir } 601cdf0e10cSrcweir // ------------------------------------------------------------------------- 602cdf0e10cSrcweir 603cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const double& _rRH) 604cdf0e10cSrcweir { 605cdf0e10cSrcweir if( !isStorageCompatible(m_eTypeKind,DataType::DOUBLE) ) 606cdf0e10cSrcweir free(); 607cdf0e10cSrcweir 608cdf0e10cSrcweir if(m_bNull) 609cdf0e10cSrcweir { 610cdf0e10cSrcweir m_aValue.m_pValue = new double(_rRH); 611cdf0e10cSrcweir TRACE_ALLOC( double ) 612cdf0e10cSrcweir m_eTypeKind = DataType::DOUBLE; 613cdf0e10cSrcweir m_bNull = sal_False; 614cdf0e10cSrcweir } 615cdf0e10cSrcweir else 616cdf0e10cSrcweir *(double*)m_aValue.m_pValue = _rRH; 617cdf0e10cSrcweir 618cdf0e10cSrcweir return *this; 619cdf0e10cSrcweir } 620cdf0e10cSrcweir // ----------------------------------------------------------------------------- 621cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const float& _rRH) 622cdf0e10cSrcweir { 623cdf0e10cSrcweir if(m_eTypeKind != DataType::FLOAT) 624cdf0e10cSrcweir free(); 625cdf0e10cSrcweir 626cdf0e10cSrcweir if(m_bNull) 627cdf0e10cSrcweir { 628cdf0e10cSrcweir m_aValue.m_pValue = new float(_rRH); 629cdf0e10cSrcweir TRACE_ALLOC( float ) 630cdf0e10cSrcweir m_eTypeKind = DataType::FLOAT; 631cdf0e10cSrcweir m_bNull = sal_False; 632cdf0e10cSrcweir } 633cdf0e10cSrcweir else 634cdf0e10cSrcweir *(float*)m_aValue.m_pValue = _rRH; 635cdf0e10cSrcweir 636cdf0e10cSrcweir return *this; 637cdf0e10cSrcweir } 638cdf0e10cSrcweir // ------------------------------------------------------------------------- 639cdf0e10cSrcweir 640cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const sal_Int8& _rRH) 641cdf0e10cSrcweir { 642cdf0e10cSrcweir if(m_eTypeKind != DataType::TINYINT ) 643cdf0e10cSrcweir free(); 644cdf0e10cSrcweir 645cdf0e10cSrcweir m_aValue.m_nInt8 = _rRH; 646cdf0e10cSrcweir m_eTypeKind = DataType::TINYINT; 647cdf0e10cSrcweir m_bNull = sal_False; 648cdf0e10cSrcweir return *this; 649cdf0e10cSrcweir } 650cdf0e10cSrcweir // ------------------------------------------------------------------------- 651cdf0e10cSrcweir 652cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const sal_Int16& _rRH) 653cdf0e10cSrcweir { 654cdf0e10cSrcweir if(m_eTypeKind != DataType::SMALLINT ) 655cdf0e10cSrcweir free(); 656cdf0e10cSrcweir 657cdf0e10cSrcweir m_aValue.m_nInt16 = _rRH; 658cdf0e10cSrcweir m_eTypeKind = DataType::SMALLINT; 659cdf0e10cSrcweir m_bNull = sal_False; 660cdf0e10cSrcweir 661cdf0e10cSrcweir return *this; 662cdf0e10cSrcweir } 663cdf0e10cSrcweir // ------------------------------------------------------------------------- 664cdf0e10cSrcweir 665cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const sal_Int32& _rRH) 666cdf0e10cSrcweir { 667cdf0e10cSrcweir if(m_eTypeKind != DataType::INTEGER ) 668cdf0e10cSrcweir free(); 669cdf0e10cSrcweir 670cdf0e10cSrcweir if ( m_bSigned ) 671cdf0e10cSrcweir m_aValue.m_nInt32 = _rRH; 672cdf0e10cSrcweir else 673cdf0e10cSrcweir { 674cdf0e10cSrcweir if ( m_bNull ) 675cdf0e10cSrcweir { 676cdf0e10cSrcweir m_aValue.m_pValue = new sal_Int64(_rRH); 677cdf0e10cSrcweir TRACE_ALLOC( sal_Int64 ) 678cdf0e10cSrcweir } 679cdf0e10cSrcweir else 680cdf0e10cSrcweir *static_cast<sal_Int64*>(m_aValue.m_pValue) = static_cast<sal_Int64>(_rRH); 681cdf0e10cSrcweir } 682cdf0e10cSrcweir 683cdf0e10cSrcweir m_eTypeKind = DataType::INTEGER; 684cdf0e10cSrcweir m_bNull = sal_False; 685cdf0e10cSrcweir 686cdf0e10cSrcweir return *this; 687cdf0e10cSrcweir } 688cdf0e10cSrcweir // ------------------------------------------------------------------------- 689cdf0e10cSrcweir 690cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const sal_Bool _rRH) 691cdf0e10cSrcweir { 692cdf0e10cSrcweir if(m_eTypeKind != DataType::BIT && DataType::BOOLEAN != m_eTypeKind ) 693cdf0e10cSrcweir free(); 694cdf0e10cSrcweir 695cdf0e10cSrcweir m_aValue.m_bBool = _rRH; 696cdf0e10cSrcweir m_eTypeKind = DataType::BIT; 697cdf0e10cSrcweir m_bNull = sal_False; 698cdf0e10cSrcweir 699cdf0e10cSrcweir return *this; 700cdf0e10cSrcweir } 701cdf0e10cSrcweir // ------------------------------------------------------------------------- 702cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const sal_Int64& _rRH) 703cdf0e10cSrcweir { 704cdf0e10cSrcweir if ( DataType::BIGINT != m_eTypeKind || !m_bSigned ) 705cdf0e10cSrcweir free(); 706cdf0e10cSrcweir 707cdf0e10cSrcweir if ( m_bSigned ) 708cdf0e10cSrcweir { 709cdf0e10cSrcweir if(m_bNull) 710cdf0e10cSrcweir { 711cdf0e10cSrcweir m_aValue.m_pValue = new sal_Int64(_rRH); 712cdf0e10cSrcweir TRACE_ALLOC( sal_Int64 ) 713cdf0e10cSrcweir } 714cdf0e10cSrcweir else 715cdf0e10cSrcweir *static_cast<sal_Int64*>(m_aValue.m_pValue) = _rRH; 716cdf0e10cSrcweir } 717cdf0e10cSrcweir else 718cdf0e10cSrcweir { 719cdf0e10cSrcweir ::rtl::OUString aVal = ::rtl::OUString::valueOf(_rRH); 720cdf0e10cSrcweir m_aValue.m_pString = aVal.pData; 721cdf0e10cSrcweir rtl_uString_acquire(m_aValue.m_pString); 722cdf0e10cSrcweir } 723cdf0e10cSrcweir 724cdf0e10cSrcweir m_eTypeKind = DataType::BIGINT; 725cdf0e10cSrcweir m_bNull = sal_False; 726cdf0e10cSrcweir 727cdf0e10cSrcweir return *this; 728cdf0e10cSrcweir } 729cdf0e10cSrcweir // ------------------------------------------------------------------------- 730cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const Sequence<sal_Int8>& _rRH) 731cdf0e10cSrcweir { 732cdf0e10cSrcweir if (!isStorageCompatible(DataType::LONGVARBINARY,m_eTypeKind)) 733cdf0e10cSrcweir free(); 734cdf0e10cSrcweir 735cdf0e10cSrcweir if (m_bNull) 736cdf0e10cSrcweir { 737cdf0e10cSrcweir m_aValue.m_pValue = new Sequence<sal_Int8>(_rRH); 738cdf0e10cSrcweir TRACE_ALLOC( Sequence_sal_Int8 ) 739cdf0e10cSrcweir } 740cdf0e10cSrcweir else 741cdf0e10cSrcweir *static_cast< Sequence< sal_Int8 >* >(m_aValue.m_pValue) = _rRH; 742cdf0e10cSrcweir 743cdf0e10cSrcweir m_eTypeKind = DataType::LONGVARBINARY; 744cdf0e10cSrcweir m_bNull = sal_False; 745cdf0e10cSrcweir 746cdf0e10cSrcweir return *this; 747cdf0e10cSrcweir } 748cdf0e10cSrcweir // ------------------------------------------------------------------------- 749cdf0e10cSrcweir ORowSetValue& ORowSetValue::operator=(const Any& _rAny) 750cdf0e10cSrcweir { 751cdf0e10cSrcweir if (!isStorageCompatible(DataType::OBJECT,m_eTypeKind)) 752cdf0e10cSrcweir free(); 753cdf0e10cSrcweir 754cdf0e10cSrcweir if ( m_bNull ) 755cdf0e10cSrcweir { 756cdf0e10cSrcweir m_aValue.m_pValue = new Any(_rAny); 757cdf0e10cSrcweir TRACE_ALLOC( Any ) 758cdf0e10cSrcweir } 759cdf0e10cSrcweir else 760cdf0e10cSrcweir *static_cast<Any*>(m_aValue.m_pValue) = _rAny; 761cdf0e10cSrcweir 762cdf0e10cSrcweir m_eTypeKind = DataType::OBJECT; 763cdf0e10cSrcweir m_bNull = sal_False; 764cdf0e10cSrcweir 765cdf0e10cSrcweir return *this; 766cdf0e10cSrcweir } 767cdf0e10cSrcweir // ------------------------------------------------------------------------- 768cdf0e10cSrcweir 769cdf0e10cSrcweir sal_Bool operator==(const Date& _rLH,const Date& _rRH) 770cdf0e10cSrcweir { 771cdf0e10cSrcweir return _rLH.Day == _rRH.Day && _rLH.Month == _rRH.Month && _rLH.Year == _rRH.Year; 772cdf0e10cSrcweir } 773cdf0e10cSrcweir // ------------------------------------------------------------------------- 774cdf0e10cSrcweir 775cdf0e10cSrcweir sal_Bool operator==(const Time& _rLH,const Time& _rRH) 776cdf0e10cSrcweir { 777cdf0e10cSrcweir return _rLH.Minutes == _rRH.Minutes && _rLH.Hours == _rRH.Hours && _rLH.Seconds == _rRH.Seconds && _rLH.HundredthSeconds == _rRH.HundredthSeconds; 778cdf0e10cSrcweir } 779cdf0e10cSrcweir // ------------------------------------------------------------------------- 780cdf0e10cSrcweir 781cdf0e10cSrcweir sal_Bool operator==(const DateTime& _rLH,const DateTime& _rRH) 782cdf0e10cSrcweir { 783cdf0e10cSrcweir return _rLH.Day == _rRH.Day && _rLH.Month == _rRH.Month && _rLH.Year == _rRH.Year && 784cdf0e10cSrcweir _rLH.Minutes == _rRH.Minutes && _rLH.Hours == _rRH.Hours && _rLH.Seconds == _rRH.Seconds && _rLH.HundredthSeconds == _rRH.HundredthSeconds; 785cdf0e10cSrcweir } 786cdf0e10cSrcweir // ------------------------------------------------------------------------- 787cdf0e10cSrcweir 788cdf0e10cSrcweir bool ORowSetValue::operator==(const ORowSetValue& _rRH) const 789cdf0e10cSrcweir { 790*619a211cSMichael Stahl if ( m_bNull != _rRH.isNull() ) 791*619a211cSMichael Stahl return false; 792*619a211cSMichael Stahl 793*619a211cSMichael Stahl if(m_bNull && _rRH.isNull()) 794*619a211cSMichael Stahl return true; 795*619a211cSMichael Stahl 796cdf0e10cSrcweir if ( m_eTypeKind != _rRH.m_eTypeKind ) 797cdf0e10cSrcweir { 798cdf0e10cSrcweir switch(m_eTypeKind) 799cdf0e10cSrcweir { 800cdf0e10cSrcweir case DataType::FLOAT: 801cdf0e10cSrcweir case DataType::DOUBLE: 802cdf0e10cSrcweir case DataType::REAL: 803cdf0e10cSrcweir return getDouble() == _rRH.getDouble(); 804cdf0e10cSrcweir default: 805cdf0e10cSrcweir switch(_rRH.m_eTypeKind) 806cdf0e10cSrcweir { 807cdf0e10cSrcweir case DataType::FLOAT: 808cdf0e10cSrcweir case DataType::DOUBLE: 809cdf0e10cSrcweir case DataType::REAL: 810cdf0e10cSrcweir return getDouble() == _rRH.getDouble(); 811cdf0e10cSrcweir default: 812cdf0e10cSrcweir break; 813cdf0e10cSrcweir } 814cdf0e10cSrcweir break; 815cdf0e10cSrcweir } 816cdf0e10cSrcweir return false; 817cdf0e10cSrcweir } 818cdf0e10cSrcweir 819cdf0e10cSrcweir bool bRet = false; 820cdf0e10cSrcweir OSL_ENSURE(!m_bNull,"SHould not be null!"); 821cdf0e10cSrcweir switch(m_eTypeKind) 822cdf0e10cSrcweir { 823cdf0e10cSrcweir case DataType::VARCHAR: 824cdf0e10cSrcweir case DataType::CHAR: 825cdf0e10cSrcweir case DataType::LONGVARCHAR: 826cdf0e10cSrcweir { 827cdf0e10cSrcweir ::rtl::OUString aVal1(m_aValue.m_pString); 828cdf0e10cSrcweir ::rtl::OUString aVal2(_rRH.m_aValue.m_pString); 829cdf0e10cSrcweir return aVal1 == aVal2; 830cdf0e10cSrcweir } 831cdf0e10cSrcweir default: 832cdf0e10cSrcweir if ( m_bSigned != _rRH.m_bSigned ) 833cdf0e10cSrcweir return false; 834cdf0e10cSrcweir break; 835cdf0e10cSrcweir } 836cdf0e10cSrcweir 837cdf0e10cSrcweir switch(m_eTypeKind) 838cdf0e10cSrcweir { 839cdf0e10cSrcweir case DataType::DECIMAL: 840cdf0e10cSrcweir case DataType::NUMERIC: 841cdf0e10cSrcweir { 842cdf0e10cSrcweir ::rtl::OUString aVal1(m_aValue.m_pString); 843cdf0e10cSrcweir ::rtl::OUString aVal2(_rRH.m_aValue.m_pString); 844cdf0e10cSrcweir bRet = aVal1 == aVal2; 845cdf0e10cSrcweir } 846cdf0e10cSrcweir break; 847cdf0e10cSrcweir case DataType::FLOAT: 848cdf0e10cSrcweir bRet = *(float*)m_aValue.m_pValue == *(float*)_rRH.m_aValue.m_pValue; 849cdf0e10cSrcweir break; 850cdf0e10cSrcweir case DataType::DOUBLE: 851cdf0e10cSrcweir case DataType::REAL: 852cdf0e10cSrcweir bRet = *(double*)m_aValue.m_pValue == *(double*)_rRH.m_aValue.m_pValue; 853cdf0e10cSrcweir break; 854cdf0e10cSrcweir case DataType::TINYINT: 855cdf0e10cSrcweir bRet = m_bSigned ? ( m_aValue.m_nInt8 == _rRH.m_aValue.m_nInt8 ) : (m_aValue.m_nInt16 == _rRH.m_aValue.m_nInt16); 856cdf0e10cSrcweir break; 857cdf0e10cSrcweir case DataType::SMALLINT: 858cdf0e10cSrcweir bRet = m_bSigned ? ( m_aValue.m_nInt16 == _rRH.m_aValue.m_nInt16 ) : (m_aValue.m_nInt32 == _rRH.m_aValue.m_nInt32); 859cdf0e10cSrcweir break; 860cdf0e10cSrcweir case DataType::INTEGER: 861cdf0e10cSrcweir bRet = m_bSigned ? ( m_aValue.m_nInt32 == _rRH.m_aValue.m_nInt32 ) : (*(sal_Int64*)m_aValue.m_pValue == *(sal_Int64*)_rRH.m_aValue.m_pValue); 862cdf0e10cSrcweir break; 863cdf0e10cSrcweir case DataType::BIGINT: 864cdf0e10cSrcweir if ( m_bSigned ) 865cdf0e10cSrcweir bRet = *(sal_Int64*)m_aValue.m_pValue == *(sal_Int64*)_rRH.m_aValue.m_pValue; 866cdf0e10cSrcweir else 867cdf0e10cSrcweir { 868cdf0e10cSrcweir ::rtl::OUString aVal1(m_aValue.m_pString); 869cdf0e10cSrcweir ::rtl::OUString aVal2(_rRH.m_aValue.m_pString); 870cdf0e10cSrcweir bRet = aVal1 == aVal2; 871cdf0e10cSrcweir } 872cdf0e10cSrcweir break; 873cdf0e10cSrcweir case DataType::BIT: 874cdf0e10cSrcweir case DataType::BOOLEAN: 875cdf0e10cSrcweir bRet = m_aValue.m_bBool == _rRH.m_aValue.m_bBool; 876cdf0e10cSrcweir break; 877cdf0e10cSrcweir case DataType::DATE: 878cdf0e10cSrcweir bRet = *(Date*)m_aValue.m_pValue == *(Date*)_rRH.m_aValue.m_pValue; 879cdf0e10cSrcweir break; 880cdf0e10cSrcweir case DataType::TIME: 881cdf0e10cSrcweir bRet = *(Time*)m_aValue.m_pValue == *(Time*)_rRH.m_aValue.m_pValue; 882cdf0e10cSrcweir break; 883cdf0e10cSrcweir case DataType::TIMESTAMP: 884cdf0e10cSrcweir bRet = *(DateTime*)m_aValue.m_pValue == *(DateTime*)_rRH.m_aValue.m_pValue; 885cdf0e10cSrcweir break; 886cdf0e10cSrcweir case DataType::BINARY: 887cdf0e10cSrcweir case DataType::VARBINARY: 888cdf0e10cSrcweir case DataType::LONGVARBINARY: 889cdf0e10cSrcweir bRet = false; 890cdf0e10cSrcweir break; 891cdf0e10cSrcweir case DataType::BLOB: 892cdf0e10cSrcweir case DataType::CLOB: 893cdf0e10cSrcweir case DataType::OBJECT: 894cdf0e10cSrcweir case DataType::OTHER: 895cdf0e10cSrcweir bRet = false; 896cdf0e10cSrcweir break; 897cdf0e10cSrcweir default: 898cdf0e10cSrcweir bRet = false; 899cdf0e10cSrcweir OSL_ENSURE(0,"ORowSetValue::operator==(): UNSPUPPORTED TYPE!"); 900cdf0e10cSrcweir break; 901cdf0e10cSrcweir } 902cdf0e10cSrcweir return bRet; 903cdf0e10cSrcweir } 904cdf0e10cSrcweir // ------------------------------------------------------------------------- 905cdf0e10cSrcweir Any ORowSetValue::makeAny() const 906cdf0e10cSrcweir { 907cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::makeAny" ); 908cdf0e10cSrcweir Any rValue; 909cdf0e10cSrcweir if(isBound() && !isNull()) 910cdf0e10cSrcweir { 911cdf0e10cSrcweir switch(getTypeKind()) 912cdf0e10cSrcweir { 913cdf0e10cSrcweir case DataType::CHAR: 914cdf0e10cSrcweir case DataType::VARCHAR: 915cdf0e10cSrcweir case DataType::DECIMAL: 916cdf0e10cSrcweir case DataType::NUMERIC: 917cdf0e10cSrcweir case DataType::LONGVARCHAR: 918cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pString,"Value is null!"); 919cdf0e10cSrcweir rValue <<= (::rtl::OUString)m_aValue.m_pString; 920cdf0e10cSrcweir break; 921cdf0e10cSrcweir case DataType::BIGINT: 922cdf0e10cSrcweir if ( m_bSigned ) 923cdf0e10cSrcweir { 924cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pValue,"Value is null!"); 925cdf0e10cSrcweir rValue <<= *(sal_Int64*)m_aValue.m_pValue; 926cdf0e10cSrcweir } 927cdf0e10cSrcweir else 928cdf0e10cSrcweir { 929cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pString,"Value is null!"); 930cdf0e10cSrcweir rValue <<= (::rtl::OUString)m_aValue.m_pString; 931cdf0e10cSrcweir } 932cdf0e10cSrcweir break; 933cdf0e10cSrcweir case DataType::FLOAT: 934cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pValue,"Value is null!"); 935cdf0e10cSrcweir rValue <<= *(float*)m_aValue.m_pValue; 936cdf0e10cSrcweir break; 937cdf0e10cSrcweir case DataType::DOUBLE: 938cdf0e10cSrcweir case DataType::REAL: 939cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pValue,"Value is null!"); 940cdf0e10cSrcweir rValue <<= *(double*)m_aValue.m_pValue; 941cdf0e10cSrcweir break; 942cdf0e10cSrcweir case DataType::DATE: 943cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pValue,"Value is null!"); 944cdf0e10cSrcweir rValue <<= *(Date*)m_aValue.m_pValue; 945cdf0e10cSrcweir break; 946cdf0e10cSrcweir case DataType::TIME: 947cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pValue,"Value is null!"); 948cdf0e10cSrcweir rValue <<= *(Time*)m_aValue.m_pValue; 949cdf0e10cSrcweir break; 950cdf0e10cSrcweir case DataType::TIMESTAMP: 951cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pValue,"Value is null!"); 952cdf0e10cSrcweir rValue <<= *(DateTime*)m_aValue.m_pValue; 953cdf0e10cSrcweir break; 954cdf0e10cSrcweir case DataType::BINARY: 955cdf0e10cSrcweir case DataType::VARBINARY: 956cdf0e10cSrcweir case DataType::LONGVARBINARY: 957cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pValue,"Value is null!"); 958cdf0e10cSrcweir rValue <<= *(Sequence<sal_Int8>*)m_aValue.m_pValue; 959cdf0e10cSrcweir break; 960cdf0e10cSrcweir case DataType::BLOB: 961cdf0e10cSrcweir case DataType::CLOB: 962cdf0e10cSrcweir case DataType::OBJECT: 963cdf0e10cSrcweir case DataType::OTHER: 964cdf0e10cSrcweir rValue = getAny(); 965cdf0e10cSrcweir break; 966cdf0e10cSrcweir case DataType::BIT: 967cdf0e10cSrcweir case DataType::BOOLEAN: 968cdf0e10cSrcweir rValue.setValue( &m_aValue.m_bBool, ::getCppuBooleanType() ); 969cdf0e10cSrcweir break; 970cdf0e10cSrcweir case DataType::TINYINT: 971cdf0e10cSrcweir if ( m_bSigned ) 972cdf0e10cSrcweir rValue <<= m_aValue.m_nInt8; 973cdf0e10cSrcweir else 974cdf0e10cSrcweir rValue <<= m_aValue.m_nInt16; 975cdf0e10cSrcweir break; 976cdf0e10cSrcweir case DataType::SMALLINT: 977cdf0e10cSrcweir if ( m_bSigned ) 978cdf0e10cSrcweir rValue <<= m_aValue.m_nInt16; 979cdf0e10cSrcweir else 980cdf0e10cSrcweir rValue <<= m_aValue.m_nInt32; 981cdf0e10cSrcweir break; 982cdf0e10cSrcweir case DataType::INTEGER: 983cdf0e10cSrcweir if ( m_bSigned ) 984cdf0e10cSrcweir rValue <<= m_aValue.m_nInt32; 985cdf0e10cSrcweir else 986cdf0e10cSrcweir { 987cdf0e10cSrcweir OSL_ENSURE(m_aValue.m_pValue,"Value is null!"); 988cdf0e10cSrcweir rValue <<= *(sal_Int64*)m_aValue.m_pValue; 989cdf0e10cSrcweir } 990cdf0e10cSrcweir break; 991cdf0e10cSrcweir default: 992cdf0e10cSrcweir OSL_ENSURE(0,"ORowSetValue::makeAny(): UNSPUPPORTED TYPE!"); 993cdf0e10cSrcweir rValue = getAny(); 994cdf0e10cSrcweir break; 995cdf0e10cSrcweir } 996cdf0e10cSrcweir } 997cdf0e10cSrcweir return rValue; 998cdf0e10cSrcweir } 999cdf0e10cSrcweir // ------------------------------------------------------------------------- 1000cdf0e10cSrcweir ::rtl::OUString ORowSetValue::getString( ) const 1001cdf0e10cSrcweir { 1002cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getString" ); 1003cdf0e10cSrcweir ::rtl::OUString aRet; 1004cdf0e10cSrcweir if(!m_bNull) 1005cdf0e10cSrcweir { 1006cdf0e10cSrcweir switch(getTypeKind()) 1007cdf0e10cSrcweir { 1008cdf0e10cSrcweir case DataType::CHAR: 1009cdf0e10cSrcweir case DataType::VARCHAR: 1010cdf0e10cSrcweir case DataType::DECIMAL: 1011cdf0e10cSrcweir case DataType::NUMERIC: 1012cdf0e10cSrcweir case DataType::LONGVARCHAR: 1013cdf0e10cSrcweir aRet = m_aValue.m_pString; 1014cdf0e10cSrcweir break; 1015cdf0e10cSrcweir case DataType::BIGINT: 1016cdf0e10cSrcweir if ( m_bSigned ) 1017cdf0e10cSrcweir aRet = ::rtl::OUString::valueOf((sal_Int64)*this); 1018cdf0e10cSrcweir else 1019cdf0e10cSrcweir aRet = m_aValue.m_pString; 1020cdf0e10cSrcweir break; 1021cdf0e10cSrcweir case DataType::FLOAT: 1022cdf0e10cSrcweir aRet = ::rtl::OUString::valueOf((float)*this); 1023cdf0e10cSrcweir break; 1024cdf0e10cSrcweir case DataType::DOUBLE: 1025cdf0e10cSrcweir case DataType::REAL: 1026cdf0e10cSrcweir aRet = ::rtl::OUString::valueOf((double)*this); 1027cdf0e10cSrcweir break; 1028cdf0e10cSrcweir case DataType::DATE: 1029cdf0e10cSrcweir aRet = connectivity::toDateString(*this); 1030cdf0e10cSrcweir break; 1031cdf0e10cSrcweir case DataType::TIME: 1032cdf0e10cSrcweir aRet = connectivity::toTimeString(*this); 1033cdf0e10cSrcweir break; 1034cdf0e10cSrcweir case DataType::TIMESTAMP: 1035cdf0e10cSrcweir aRet = connectivity::toDateTimeString(*this); 1036cdf0e10cSrcweir break; 1037cdf0e10cSrcweir case DataType::BINARY: 1038cdf0e10cSrcweir case DataType::VARBINARY: 1039cdf0e10cSrcweir case DataType::LONGVARBINARY: 1040cdf0e10cSrcweir { 1041cdf0e10cSrcweir ::rtl::OUStringBuffer sVal = ::rtl::OUString::createFromAscii("0x"); 1042cdf0e10cSrcweir Sequence<sal_Int8> aSeq(getSequence()); 1043cdf0e10cSrcweir const sal_Int8* pBegin = aSeq.getConstArray(); 1044cdf0e10cSrcweir const sal_Int8* pEnd = pBegin + aSeq.getLength(); 1045cdf0e10cSrcweir for(;pBegin != pEnd;++pBegin) 1046cdf0e10cSrcweir sVal.append((sal_Int32)*pBegin,16); 1047cdf0e10cSrcweir aRet = sVal.makeStringAndClear(); 1048cdf0e10cSrcweir } 1049cdf0e10cSrcweir break; 1050cdf0e10cSrcweir case DataType::BIT: 1051cdf0e10cSrcweir case DataType::BOOLEAN: 1052cdf0e10cSrcweir aRet = ::rtl::OUString::valueOf((sal_Int32)(sal_Bool)*this); 1053cdf0e10cSrcweir break; 1054cdf0e10cSrcweir case DataType::TINYINT: 1055cdf0e10cSrcweir if ( m_bSigned ) 1056cdf0e10cSrcweir aRet = ::rtl::OUString::valueOf((sal_Int32)(sal_Int8)*this); 1057cdf0e10cSrcweir else 1058cdf0e10cSrcweir aRet = ::rtl::OUString::valueOf((sal_Int32)(sal_Int16)*this); 1059cdf0e10cSrcweir break; 1060cdf0e10cSrcweir case DataType::SMALLINT: 1061cdf0e10cSrcweir if ( m_bSigned ) 1062cdf0e10cSrcweir aRet = ::rtl::OUString::valueOf((sal_Int32)(sal_Int16)*this); 1063cdf0e10cSrcweir else 1064cdf0e10cSrcweir aRet = ::rtl::OUString::valueOf((sal_Int32)*this); 1065cdf0e10cSrcweir break; 1066cdf0e10cSrcweir case DataType::INTEGER: 1067cdf0e10cSrcweir if ( m_bSigned ) 1068cdf0e10cSrcweir aRet = ::rtl::OUString::valueOf((sal_Int32)*this); 1069cdf0e10cSrcweir else 1070cdf0e10cSrcweir aRet = ::rtl::OUString::valueOf((sal_Int64)*this); 1071cdf0e10cSrcweir break; 1072cdf0e10cSrcweir case DataType::CLOB: 1073cdf0e10cSrcweir { 1074cdf0e10cSrcweir Any aValue( getAny() ); 1075cdf0e10cSrcweir Reference< XClob > xClob; 1076cdf0e10cSrcweir if ( aValue >>= xClob ) 1077cdf0e10cSrcweir { 1078cdf0e10cSrcweir if ( xClob.is() ) 1079cdf0e10cSrcweir { 1080cdf0e10cSrcweir aRet = xClob->getSubString(1,(sal_Int32)xClob->length() ); 1081cdf0e10cSrcweir } 1082cdf0e10cSrcweir } 1083cdf0e10cSrcweir } 1084cdf0e10cSrcweir break; 1085cdf0e10cSrcweir default: 1086cdf0e10cSrcweir { 1087cdf0e10cSrcweir Any aValue = getAny(); 1088cdf0e10cSrcweir aValue >>= aRet; 1089cdf0e10cSrcweir break; 1090cdf0e10cSrcweir } 1091cdf0e10cSrcweir } 1092cdf0e10cSrcweir } 1093cdf0e10cSrcweir return aRet; 1094cdf0e10cSrcweir } 1095cdf0e10cSrcweir // ------------------------------------------------------------------------- 1096cdf0e10cSrcweir sal_Bool ORowSetValue::getBool() const 1097cdf0e10cSrcweir { 1098cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getBool" ); 1099cdf0e10cSrcweir sal_Bool bRet = sal_False; 1100cdf0e10cSrcweir if(!m_bNull) 1101cdf0e10cSrcweir { 1102cdf0e10cSrcweir switch(getTypeKind()) 1103cdf0e10cSrcweir { 1104cdf0e10cSrcweir case DataType::CHAR: 1105cdf0e10cSrcweir case DataType::VARCHAR: 1106cdf0e10cSrcweir case DataType::LONGVARCHAR: 1107cdf0e10cSrcweir { 1108cdf0e10cSrcweir const ::rtl::OUString sValue(m_aValue.m_pString); 1109cdf0e10cSrcweir const static ::rtl::OUString s_sTrue(RTL_CONSTASCII_USTRINGPARAM("true")); 1110cdf0e10cSrcweir const static ::rtl::OUString s_sFalse(RTL_CONSTASCII_USTRINGPARAM("false")); 1111cdf0e10cSrcweir if ( sValue.equalsIgnoreAsciiCase(s_sTrue) ) 1112cdf0e10cSrcweir { 1113cdf0e10cSrcweir bRet = sal_True; 1114cdf0e10cSrcweir break; 1115cdf0e10cSrcweir } 1116cdf0e10cSrcweir else if ( sValue.equalsIgnoreAsciiCase(s_sFalse) ) 1117cdf0e10cSrcweir { 1118cdf0e10cSrcweir bRet = sal_False; 1119cdf0e10cSrcweir break; 1120cdf0e10cSrcweir } 1121cdf0e10cSrcweir } 1122cdf0e10cSrcweir // run through 1123cdf0e10cSrcweir case DataType::DECIMAL: 1124cdf0e10cSrcweir case DataType::NUMERIC: 1125cdf0e10cSrcweir 1126cdf0e10cSrcweir bRet = ::rtl::OUString(m_aValue.m_pString).toInt32() != 0; 1127cdf0e10cSrcweir break; 1128cdf0e10cSrcweir case DataType::BIGINT: 1129cdf0e10cSrcweir if ( m_bSigned ) 1130cdf0e10cSrcweir bRet = *(sal_Int64*)m_aValue.m_pValue != 0; 1131cdf0e10cSrcweir else 1132cdf0e10cSrcweir bRet = ::rtl::OUString(m_aValue.m_pString).toInt64() != 0; 1133cdf0e10cSrcweir break; 1134cdf0e10cSrcweir case DataType::FLOAT: 1135cdf0e10cSrcweir bRet = *(float*)m_aValue.m_pValue != 0.0; 1136cdf0e10cSrcweir break; 1137cdf0e10cSrcweir case DataType::DOUBLE: 1138cdf0e10cSrcweir case DataType::REAL: 1139cdf0e10cSrcweir bRet = *(double*)m_aValue.m_pValue != 0.0; 1140cdf0e10cSrcweir break; 1141cdf0e10cSrcweir case DataType::DATE: 1142cdf0e10cSrcweir case DataType::TIME: 1143cdf0e10cSrcweir case DataType::TIMESTAMP: 1144cdf0e10cSrcweir case DataType::BINARY: 1145cdf0e10cSrcweir case DataType::VARBINARY: 1146cdf0e10cSrcweir case DataType::LONGVARBINARY: 1147cdf0e10cSrcweir OSL_ASSERT(!"getBool() for this type is not allowed!"); 1148cdf0e10cSrcweir break; 1149cdf0e10cSrcweir case DataType::BIT: 1150cdf0e10cSrcweir case DataType::BOOLEAN: 1151cdf0e10cSrcweir bRet = m_aValue.m_bBool; 1152cdf0e10cSrcweir break; 1153cdf0e10cSrcweir case DataType::TINYINT: 1154cdf0e10cSrcweir bRet = m_bSigned ? (m_aValue.m_nInt8 != 0) : (m_aValue.m_nInt16 != 0); 1155cdf0e10cSrcweir break; 1156cdf0e10cSrcweir case DataType::SMALLINT: 1157cdf0e10cSrcweir bRet = m_bSigned ? (m_aValue.m_nInt16 != 0) : (m_aValue.m_nInt32 != 0); 1158cdf0e10cSrcweir break; 1159cdf0e10cSrcweir case DataType::INTEGER: 1160cdf0e10cSrcweir bRet = m_bSigned ? (m_aValue.m_nInt32 != 0) : (*static_cast<sal_Int64*>(m_aValue.m_pValue) != sal_Int64(0)); 1161cdf0e10cSrcweir break; 1162cdf0e10cSrcweir default: 1163cdf0e10cSrcweir { 1164cdf0e10cSrcweir Any aValue = getAny(); 1165cdf0e10cSrcweir aValue >>= bRet; 1166cdf0e10cSrcweir break; 1167cdf0e10cSrcweir } 1168cdf0e10cSrcweir } 1169cdf0e10cSrcweir } 1170cdf0e10cSrcweir return bRet; 1171cdf0e10cSrcweir } 1172cdf0e10cSrcweir // ------------------------------------------------------------------------- 1173cdf0e10cSrcweir sal_Int8 ORowSetValue::getInt8() const 1174cdf0e10cSrcweir { 1175cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getInt8" ); 1176cdf0e10cSrcweir 1177cdf0e10cSrcweir 1178cdf0e10cSrcweir sal_Int8 nRet = 0; 1179cdf0e10cSrcweir if(!m_bNull) 1180cdf0e10cSrcweir { 1181cdf0e10cSrcweir switch(getTypeKind()) 1182cdf0e10cSrcweir { 1183cdf0e10cSrcweir case DataType::CHAR: 1184cdf0e10cSrcweir case DataType::VARCHAR: 1185cdf0e10cSrcweir case DataType::DECIMAL: 1186cdf0e10cSrcweir case DataType::NUMERIC: 1187cdf0e10cSrcweir case DataType::LONGVARCHAR: 1188cdf0e10cSrcweir nRet = sal_Int8(::rtl::OUString(m_aValue.m_pString).toInt32()); 1189cdf0e10cSrcweir break; 1190cdf0e10cSrcweir case DataType::BIGINT: 1191cdf0e10cSrcweir if ( m_bSigned ) 1192cdf0e10cSrcweir nRet = sal_Int8(*(sal_Int64*)m_aValue.m_pValue); 1193cdf0e10cSrcweir else 1194cdf0e10cSrcweir nRet = sal_Int8(::rtl::OUString(m_aValue.m_pString).toInt32()); 1195cdf0e10cSrcweir break; 1196cdf0e10cSrcweir case DataType::FLOAT: 1197cdf0e10cSrcweir nRet = sal_Int8(*(float*)m_aValue.m_pValue); 1198cdf0e10cSrcweir break; 1199cdf0e10cSrcweir case DataType::DOUBLE: 1200cdf0e10cSrcweir case DataType::REAL: 1201cdf0e10cSrcweir nRet = sal_Int8(*(double*)m_aValue.m_pValue); 1202cdf0e10cSrcweir break; 1203cdf0e10cSrcweir case DataType::DATE: 1204cdf0e10cSrcweir case DataType::TIME: 1205cdf0e10cSrcweir case DataType::TIMESTAMP: 1206cdf0e10cSrcweir case DataType::BINARY: 1207cdf0e10cSrcweir case DataType::VARBINARY: 1208cdf0e10cSrcweir case DataType::LONGVARBINARY: 1209cdf0e10cSrcweir case DataType::BLOB: 1210cdf0e10cSrcweir case DataType::CLOB: 1211cdf0e10cSrcweir OSL_ASSERT(!"getInt8() for this type is not allowed!"); 1212cdf0e10cSrcweir break; 1213cdf0e10cSrcweir case DataType::BIT: 1214cdf0e10cSrcweir case DataType::BOOLEAN: 1215cdf0e10cSrcweir nRet = m_aValue.m_bBool; 1216cdf0e10cSrcweir break; 1217cdf0e10cSrcweir case DataType::TINYINT: 1218cdf0e10cSrcweir if ( m_bSigned ) 1219cdf0e10cSrcweir nRet = m_aValue.m_nInt8; 1220cdf0e10cSrcweir else 1221cdf0e10cSrcweir nRet = static_cast<sal_Int8>(m_aValue.m_nInt16); 1222cdf0e10cSrcweir break; 1223cdf0e10cSrcweir case DataType::SMALLINT: 1224cdf0e10cSrcweir if ( m_bSigned ) 1225cdf0e10cSrcweir nRet = static_cast<sal_Int8>(m_aValue.m_nInt16); 1226cdf0e10cSrcweir else 1227cdf0e10cSrcweir nRet = static_cast<sal_Int8>(m_aValue.m_nInt32); 1228cdf0e10cSrcweir break; 1229cdf0e10cSrcweir case DataType::INTEGER: 1230cdf0e10cSrcweir if ( m_bSigned ) 1231cdf0e10cSrcweir nRet = static_cast<sal_Int8>(m_aValue.m_nInt32); 1232cdf0e10cSrcweir else 1233cdf0e10cSrcweir nRet = static_cast<sal_Int8>(*static_cast<sal_Int64*>(m_aValue.m_pValue)); 1234cdf0e10cSrcweir break; 1235cdf0e10cSrcweir default: 1236cdf0e10cSrcweir { 1237cdf0e10cSrcweir Any aValue = getAny(); 1238cdf0e10cSrcweir aValue >>= nRet; 1239cdf0e10cSrcweir break; 1240cdf0e10cSrcweir } 1241cdf0e10cSrcweir } 1242cdf0e10cSrcweir } 1243cdf0e10cSrcweir return nRet; 1244cdf0e10cSrcweir } 1245cdf0e10cSrcweir // ------------------------------------------------------------------------- 1246cdf0e10cSrcweir sal_Int16 ORowSetValue::getInt16() const 1247cdf0e10cSrcweir { 1248cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getInt16" ); 1249cdf0e10cSrcweir 1250cdf0e10cSrcweir 1251cdf0e10cSrcweir sal_Int16 nRet = 0; 1252cdf0e10cSrcweir if(!m_bNull) 1253cdf0e10cSrcweir { 1254cdf0e10cSrcweir switch(getTypeKind()) 1255cdf0e10cSrcweir { 1256cdf0e10cSrcweir case DataType::CHAR: 1257cdf0e10cSrcweir case DataType::VARCHAR: 1258cdf0e10cSrcweir case DataType::DECIMAL: 1259cdf0e10cSrcweir case DataType::NUMERIC: 1260cdf0e10cSrcweir case DataType::LONGVARCHAR: 1261cdf0e10cSrcweir nRet = sal_Int16(::rtl::OUString(m_aValue.m_pString).toInt32()); 1262cdf0e10cSrcweir break; 1263cdf0e10cSrcweir case DataType::BIGINT: 1264cdf0e10cSrcweir if ( m_bSigned ) 1265cdf0e10cSrcweir nRet = sal_Int16(*(sal_Int64*)m_aValue.m_pValue); 1266cdf0e10cSrcweir else 1267cdf0e10cSrcweir nRet = sal_Int16(::rtl::OUString(m_aValue.m_pString).toInt32()); 1268cdf0e10cSrcweir break; 1269cdf0e10cSrcweir case DataType::FLOAT: 1270cdf0e10cSrcweir nRet = sal_Int16(*(float*)m_aValue.m_pValue); 1271cdf0e10cSrcweir break; 1272cdf0e10cSrcweir case DataType::DOUBLE: 1273cdf0e10cSrcweir case DataType::REAL: 1274cdf0e10cSrcweir nRet = sal_Int16(*(double*)m_aValue.m_pValue); 1275cdf0e10cSrcweir break; 1276cdf0e10cSrcweir case DataType::DATE: 1277cdf0e10cSrcweir case DataType::TIME: 1278cdf0e10cSrcweir case DataType::TIMESTAMP: 1279cdf0e10cSrcweir case DataType::BINARY: 1280cdf0e10cSrcweir case DataType::VARBINARY: 1281cdf0e10cSrcweir case DataType::LONGVARBINARY: 1282cdf0e10cSrcweir case DataType::BLOB: 1283cdf0e10cSrcweir case DataType::CLOB: 1284cdf0e10cSrcweir OSL_ASSERT(!"getInt16() for this type is not allowed!"); 1285cdf0e10cSrcweir break; 1286cdf0e10cSrcweir case DataType::BIT: 1287cdf0e10cSrcweir case DataType::BOOLEAN: 1288cdf0e10cSrcweir nRet = m_aValue.m_bBool; 1289cdf0e10cSrcweir break; 1290cdf0e10cSrcweir case DataType::TINYINT: 1291cdf0e10cSrcweir if ( m_bSigned ) 1292cdf0e10cSrcweir nRet = m_aValue.m_nInt8; 1293cdf0e10cSrcweir else 1294cdf0e10cSrcweir nRet = m_aValue.m_nInt16; 1295cdf0e10cSrcweir break; 1296cdf0e10cSrcweir case DataType::SMALLINT: 1297cdf0e10cSrcweir if ( m_bSigned ) 1298cdf0e10cSrcweir nRet = m_aValue.m_nInt16; 1299cdf0e10cSrcweir else 1300cdf0e10cSrcweir nRet = static_cast<sal_Int16>(m_aValue.m_nInt32); 1301cdf0e10cSrcweir break; 1302cdf0e10cSrcweir case DataType::INTEGER: 1303cdf0e10cSrcweir if ( m_bSigned ) 1304cdf0e10cSrcweir nRet = static_cast<sal_Int16>(m_aValue.m_nInt32); 1305cdf0e10cSrcweir else 1306cdf0e10cSrcweir nRet = static_cast<sal_Int16>(*static_cast<sal_Int64*>(m_aValue.m_pValue)); 1307cdf0e10cSrcweir break; 1308cdf0e10cSrcweir default: 1309cdf0e10cSrcweir { 1310cdf0e10cSrcweir Any aValue = getAny(); 1311cdf0e10cSrcweir aValue >>= nRet; 1312cdf0e10cSrcweir break; 1313cdf0e10cSrcweir } 1314cdf0e10cSrcweir } 1315cdf0e10cSrcweir } 1316cdf0e10cSrcweir return nRet; 1317cdf0e10cSrcweir } 1318cdf0e10cSrcweir // ------------------------------------------------------------------------- 1319cdf0e10cSrcweir sal_Int32 ORowSetValue::getInt32() const 1320cdf0e10cSrcweir { 1321cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getInt32" ); 1322cdf0e10cSrcweir sal_Int32 nRet = 0; 1323cdf0e10cSrcweir if(!m_bNull) 1324cdf0e10cSrcweir { 1325cdf0e10cSrcweir switch(getTypeKind()) 1326cdf0e10cSrcweir { 1327cdf0e10cSrcweir case DataType::CHAR: 1328cdf0e10cSrcweir case DataType::VARCHAR: 1329cdf0e10cSrcweir case DataType::DECIMAL: 1330cdf0e10cSrcweir case DataType::NUMERIC: 1331cdf0e10cSrcweir case DataType::LONGVARCHAR: 1332cdf0e10cSrcweir nRet = ::rtl::OUString(m_aValue.m_pString).toInt32(); 1333cdf0e10cSrcweir break; 1334cdf0e10cSrcweir case DataType::BIGINT: 1335cdf0e10cSrcweir if ( m_bSigned ) 1336cdf0e10cSrcweir nRet = sal_Int32(*(sal_Int64*)m_aValue.m_pValue); 1337cdf0e10cSrcweir else 1338cdf0e10cSrcweir nRet = ::rtl::OUString(m_aValue.m_pString).toInt32(); 1339cdf0e10cSrcweir break; 1340cdf0e10cSrcweir case DataType::FLOAT: 1341cdf0e10cSrcweir nRet = sal_Int32(*(float*)m_aValue.m_pValue); 1342cdf0e10cSrcweir break; 1343cdf0e10cSrcweir case DataType::DOUBLE: 1344cdf0e10cSrcweir case DataType::REAL: 1345cdf0e10cSrcweir nRet = sal_Int32(*(double*)m_aValue.m_pValue); 1346cdf0e10cSrcweir break; 1347cdf0e10cSrcweir case DataType::DATE: 1348cdf0e10cSrcweir nRet = dbtools::DBTypeConversion::toDays(*(::com::sun::star::util::Date*)m_aValue.m_pValue); 1349cdf0e10cSrcweir break; 1350cdf0e10cSrcweir case DataType::TIME: 1351cdf0e10cSrcweir case DataType::TIMESTAMP: 1352cdf0e10cSrcweir case DataType::BINARY: 1353cdf0e10cSrcweir case DataType::VARBINARY: 1354cdf0e10cSrcweir case DataType::LONGVARBINARY: 1355cdf0e10cSrcweir case DataType::BLOB: 1356cdf0e10cSrcweir case DataType::CLOB: 1357cdf0e10cSrcweir OSL_ASSERT(!"getInt32() for this type is not allowed!"); 1358cdf0e10cSrcweir break; 1359cdf0e10cSrcweir case DataType::BIT: 1360cdf0e10cSrcweir case DataType::BOOLEAN: 1361cdf0e10cSrcweir nRet = m_aValue.m_bBool; 1362cdf0e10cSrcweir break; 1363cdf0e10cSrcweir case DataType::TINYINT: 1364cdf0e10cSrcweir if ( m_bSigned ) 1365cdf0e10cSrcweir nRet = m_aValue.m_nInt8; 1366cdf0e10cSrcweir else 1367cdf0e10cSrcweir nRet = m_aValue.m_nInt16; 1368cdf0e10cSrcweir break; 1369cdf0e10cSrcweir case DataType::SMALLINT: 1370cdf0e10cSrcweir if ( m_bSigned ) 1371cdf0e10cSrcweir nRet = m_aValue.m_nInt16; 1372cdf0e10cSrcweir else 1373cdf0e10cSrcweir nRet = m_aValue.m_nInt32; 1374cdf0e10cSrcweir break; 1375cdf0e10cSrcweir case DataType::INTEGER: 1376cdf0e10cSrcweir if ( m_bSigned ) 1377cdf0e10cSrcweir nRet = m_aValue.m_nInt32; 1378cdf0e10cSrcweir else 1379cdf0e10cSrcweir nRet = static_cast<sal_Int32>(*static_cast<sal_Int64*>(m_aValue.m_pValue)); 1380cdf0e10cSrcweir break; 1381cdf0e10cSrcweir default: 1382cdf0e10cSrcweir { 1383cdf0e10cSrcweir Any aValue = getAny(); 1384cdf0e10cSrcweir aValue >>= nRet; 1385cdf0e10cSrcweir break; 1386cdf0e10cSrcweir } 1387cdf0e10cSrcweir } 1388cdf0e10cSrcweir } 1389cdf0e10cSrcweir return nRet; 1390cdf0e10cSrcweir } 1391cdf0e10cSrcweir // ------------------------------------------------------------------------- 1392cdf0e10cSrcweir sal_Int64 ORowSetValue::getLong() const 1393cdf0e10cSrcweir { 1394cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getLong" ); 1395cdf0e10cSrcweir sal_Int64 nRet = 0; 1396cdf0e10cSrcweir if(!m_bNull) 1397cdf0e10cSrcweir { 1398cdf0e10cSrcweir switch(getTypeKind()) 1399cdf0e10cSrcweir { 1400cdf0e10cSrcweir case DataType::CHAR: 1401cdf0e10cSrcweir case DataType::VARCHAR: 1402cdf0e10cSrcweir case DataType::DECIMAL: 1403cdf0e10cSrcweir case DataType::NUMERIC: 1404cdf0e10cSrcweir case DataType::LONGVARCHAR: 1405cdf0e10cSrcweir nRet = ::rtl::OUString(m_aValue.m_pString).toInt64(); 1406cdf0e10cSrcweir break; 1407cdf0e10cSrcweir case DataType::BIGINT: 1408cdf0e10cSrcweir if ( m_bSigned ) 1409cdf0e10cSrcweir nRet = *(sal_Int64*)m_aValue.m_pValue; 1410cdf0e10cSrcweir else 1411cdf0e10cSrcweir nRet = ::rtl::OUString(m_aValue.m_pString).toInt64(); 1412cdf0e10cSrcweir break; 1413cdf0e10cSrcweir case DataType::FLOAT: 1414cdf0e10cSrcweir nRet = sal_Int64(*(float*)m_aValue.m_pValue); 1415cdf0e10cSrcweir break; 1416cdf0e10cSrcweir case DataType::DOUBLE: 1417cdf0e10cSrcweir case DataType::REAL: 1418cdf0e10cSrcweir nRet = sal_Int64(*(double*)m_aValue.m_pValue); 1419cdf0e10cSrcweir break; 1420cdf0e10cSrcweir case DataType::DATE: 1421cdf0e10cSrcweir nRet = dbtools::DBTypeConversion::toDays(*(::com::sun::star::util::Date*)m_aValue.m_pValue); 1422cdf0e10cSrcweir break; 1423cdf0e10cSrcweir case DataType::TIME: 1424cdf0e10cSrcweir case DataType::TIMESTAMP: 1425cdf0e10cSrcweir case DataType::BINARY: 1426cdf0e10cSrcweir case DataType::VARBINARY: 1427cdf0e10cSrcweir case DataType::LONGVARBINARY: 1428cdf0e10cSrcweir case DataType::BLOB: 1429cdf0e10cSrcweir case DataType::CLOB: 1430cdf0e10cSrcweir OSL_ASSERT(!"getInt32() for this type is not allowed!"); 1431cdf0e10cSrcweir break; 1432cdf0e10cSrcweir case DataType::BIT: 1433cdf0e10cSrcweir case DataType::BOOLEAN: 1434cdf0e10cSrcweir nRet = m_aValue.m_bBool; 1435cdf0e10cSrcweir break; 1436cdf0e10cSrcweir case DataType::TINYINT: 1437cdf0e10cSrcweir if ( m_bSigned ) 1438cdf0e10cSrcweir nRet = m_aValue.m_nInt8; 1439cdf0e10cSrcweir else 1440cdf0e10cSrcweir nRet = m_aValue.m_nInt16; 1441cdf0e10cSrcweir break; 1442cdf0e10cSrcweir case DataType::SMALLINT: 1443cdf0e10cSrcweir if ( m_bSigned ) 1444cdf0e10cSrcweir nRet = m_aValue.m_nInt16; 1445cdf0e10cSrcweir else 1446cdf0e10cSrcweir nRet = m_aValue.m_nInt32; 1447cdf0e10cSrcweir break; 1448cdf0e10cSrcweir case DataType::INTEGER: 1449cdf0e10cSrcweir if ( m_bSigned ) 1450cdf0e10cSrcweir nRet = m_aValue.m_nInt32; 1451cdf0e10cSrcweir else 1452cdf0e10cSrcweir nRet = *(sal_Int64*)m_aValue.m_pValue; 1453cdf0e10cSrcweir break; 1454cdf0e10cSrcweir default: 1455cdf0e10cSrcweir { 1456cdf0e10cSrcweir Any aValue = getAny(); 1457cdf0e10cSrcweir aValue >>= nRet; 1458cdf0e10cSrcweir break; 1459cdf0e10cSrcweir } 1460cdf0e10cSrcweir } 1461cdf0e10cSrcweir } 1462cdf0e10cSrcweir return nRet; 1463cdf0e10cSrcweir } 1464cdf0e10cSrcweir // ------------------------------------------------------------------------- 1465cdf0e10cSrcweir float ORowSetValue::getFloat() const 1466cdf0e10cSrcweir { 1467cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getFloat" ); 1468cdf0e10cSrcweir float nRet = 0; 1469cdf0e10cSrcweir if(!m_bNull) 1470cdf0e10cSrcweir { 1471cdf0e10cSrcweir switch(getTypeKind()) 1472cdf0e10cSrcweir { 1473cdf0e10cSrcweir case DataType::CHAR: 1474cdf0e10cSrcweir case DataType::VARCHAR: 1475cdf0e10cSrcweir case DataType::DECIMAL: 1476cdf0e10cSrcweir case DataType::NUMERIC: 1477cdf0e10cSrcweir case DataType::LONGVARCHAR: 1478cdf0e10cSrcweir nRet = ::rtl::OUString(m_aValue.m_pString).toFloat(); 1479cdf0e10cSrcweir break; 1480cdf0e10cSrcweir case DataType::BIGINT: 1481cdf0e10cSrcweir if ( m_bSigned ) 1482cdf0e10cSrcweir nRet = float(*(sal_Int64*)m_aValue.m_pValue); 1483cdf0e10cSrcweir else 1484cdf0e10cSrcweir nRet = ::rtl::OUString(m_aValue.m_pString).toFloat(); 1485cdf0e10cSrcweir break; 1486cdf0e10cSrcweir case DataType::FLOAT: 1487cdf0e10cSrcweir nRet = *(float*)m_aValue.m_pValue; 1488cdf0e10cSrcweir break; 1489cdf0e10cSrcweir case DataType::DOUBLE: 1490cdf0e10cSrcweir case DataType::REAL: 1491cdf0e10cSrcweir nRet = (float)*(double*)m_aValue.m_pValue; 1492cdf0e10cSrcweir break; 1493cdf0e10cSrcweir case DataType::DATE: 1494cdf0e10cSrcweir nRet = (float)dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::Date*)m_aValue.m_pValue); 1495cdf0e10cSrcweir break; 1496cdf0e10cSrcweir case DataType::TIME: 1497cdf0e10cSrcweir nRet = (float)dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::Time*)m_aValue.m_pValue); 1498cdf0e10cSrcweir break; 1499cdf0e10cSrcweir case DataType::TIMESTAMP: 1500cdf0e10cSrcweir nRet = (float)dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::DateTime*)m_aValue.m_pValue); 1501cdf0e10cSrcweir break; 1502cdf0e10cSrcweir case DataType::BINARY: 1503cdf0e10cSrcweir case DataType::VARBINARY: 1504cdf0e10cSrcweir case DataType::LONGVARBINARY: 1505cdf0e10cSrcweir case DataType::BLOB: 1506cdf0e10cSrcweir case DataType::CLOB: 1507cdf0e10cSrcweir OSL_ASSERT(!"getDouble() for this type is not allowed!"); 1508cdf0e10cSrcweir break; 1509cdf0e10cSrcweir case DataType::BIT: 1510cdf0e10cSrcweir case DataType::BOOLEAN: 1511cdf0e10cSrcweir nRet = m_aValue.m_bBool; 1512cdf0e10cSrcweir break; 1513cdf0e10cSrcweir case DataType::TINYINT: 1514cdf0e10cSrcweir if ( m_bSigned ) 1515cdf0e10cSrcweir nRet = m_aValue.m_nInt8; 1516cdf0e10cSrcweir else 1517cdf0e10cSrcweir nRet = m_aValue.m_nInt16; 1518cdf0e10cSrcweir break; 1519cdf0e10cSrcweir case DataType::SMALLINT: 1520cdf0e10cSrcweir if ( m_bSigned ) 1521cdf0e10cSrcweir nRet = m_aValue.m_nInt16; 1522cdf0e10cSrcweir else 1523cdf0e10cSrcweir nRet = (float)m_aValue.m_nInt32; 1524cdf0e10cSrcweir break; 1525cdf0e10cSrcweir case DataType::INTEGER: 1526cdf0e10cSrcweir if ( m_bSigned ) 1527cdf0e10cSrcweir nRet = (float)m_aValue.m_nInt32; 1528cdf0e10cSrcweir else 1529cdf0e10cSrcweir nRet = float(*(sal_Int64*)m_aValue.m_pValue); 1530cdf0e10cSrcweir break; 1531cdf0e10cSrcweir default: 1532cdf0e10cSrcweir { 1533cdf0e10cSrcweir Any aValue = getAny(); 1534cdf0e10cSrcweir aValue >>= nRet; 1535cdf0e10cSrcweir break; 1536cdf0e10cSrcweir } 1537cdf0e10cSrcweir } 1538cdf0e10cSrcweir } 1539cdf0e10cSrcweir return nRet; 1540cdf0e10cSrcweir } 1541cdf0e10cSrcweir // ------------------------------------------------------------------------- 1542cdf0e10cSrcweir double ORowSetValue::getDouble() const 1543cdf0e10cSrcweir { 1544cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getDouble" ); 1545cdf0e10cSrcweir 1546cdf0e10cSrcweir 1547cdf0e10cSrcweir double nRet = 0; 1548cdf0e10cSrcweir if(!m_bNull) 1549cdf0e10cSrcweir { 1550cdf0e10cSrcweir switch(getTypeKind()) 1551cdf0e10cSrcweir { 1552cdf0e10cSrcweir case DataType::CHAR: 1553cdf0e10cSrcweir case DataType::VARCHAR: 1554cdf0e10cSrcweir case DataType::DECIMAL: 1555cdf0e10cSrcweir case DataType::NUMERIC: 1556cdf0e10cSrcweir case DataType::LONGVARCHAR: 1557cdf0e10cSrcweir nRet = ::rtl::OUString(m_aValue.m_pString).toDouble(); 1558cdf0e10cSrcweir break; 1559cdf0e10cSrcweir case DataType::BIGINT: 1560cdf0e10cSrcweir if ( m_bSigned ) 1561cdf0e10cSrcweir nRet = double(*(sal_Int64*)m_aValue.m_pValue); 1562cdf0e10cSrcweir else 1563cdf0e10cSrcweir nRet = ::rtl::OUString(m_aValue.m_pString).toDouble(); 1564cdf0e10cSrcweir break; 1565cdf0e10cSrcweir case DataType::FLOAT: 1566cdf0e10cSrcweir nRet = *(float*)m_aValue.m_pValue; 1567cdf0e10cSrcweir break; 1568cdf0e10cSrcweir case DataType::DOUBLE: 1569cdf0e10cSrcweir case DataType::REAL: 1570cdf0e10cSrcweir nRet = *(double*)m_aValue.m_pValue; 1571cdf0e10cSrcweir break; 1572cdf0e10cSrcweir case DataType::DATE: 1573cdf0e10cSrcweir nRet = dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::Date*)m_aValue.m_pValue); 1574cdf0e10cSrcweir break; 1575cdf0e10cSrcweir case DataType::TIME: 1576cdf0e10cSrcweir nRet = dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::Time*)m_aValue.m_pValue); 1577cdf0e10cSrcweir break; 1578cdf0e10cSrcweir case DataType::TIMESTAMP: 1579cdf0e10cSrcweir nRet = dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::DateTime*)m_aValue.m_pValue); 1580cdf0e10cSrcweir break; 1581cdf0e10cSrcweir case DataType::BINARY: 1582cdf0e10cSrcweir case DataType::VARBINARY: 1583cdf0e10cSrcweir case DataType::LONGVARBINARY: 1584cdf0e10cSrcweir case DataType::BLOB: 1585cdf0e10cSrcweir case DataType::CLOB: 1586cdf0e10cSrcweir OSL_ASSERT(!"getDouble() for this type is not allowed!"); 1587cdf0e10cSrcweir break; 1588cdf0e10cSrcweir case DataType::BIT: 1589cdf0e10cSrcweir case DataType::BOOLEAN: 1590cdf0e10cSrcweir nRet = m_aValue.m_bBool; 1591cdf0e10cSrcweir break; 1592cdf0e10cSrcweir case DataType::TINYINT: 1593cdf0e10cSrcweir if ( m_bSigned ) 1594cdf0e10cSrcweir nRet = m_aValue.m_nInt8; 1595cdf0e10cSrcweir else 1596cdf0e10cSrcweir nRet = m_aValue.m_nInt16; 1597cdf0e10cSrcweir break; 1598cdf0e10cSrcweir case DataType::SMALLINT: 1599cdf0e10cSrcweir if ( m_bSigned ) 1600cdf0e10cSrcweir nRet = m_aValue.m_nInt16; 1601cdf0e10cSrcweir else 1602cdf0e10cSrcweir nRet = m_aValue.m_nInt32; 1603cdf0e10cSrcweir break; 1604cdf0e10cSrcweir case DataType::INTEGER: 1605cdf0e10cSrcweir if ( m_bSigned ) 1606cdf0e10cSrcweir nRet = m_aValue.m_nInt32; 1607cdf0e10cSrcweir else 1608cdf0e10cSrcweir nRet = double(*(sal_Int64*)m_aValue.m_pValue); 1609cdf0e10cSrcweir break; 1610cdf0e10cSrcweir default: 1611cdf0e10cSrcweir { 1612cdf0e10cSrcweir Any aValue = getAny(); 1613cdf0e10cSrcweir aValue >>= nRet; 1614cdf0e10cSrcweir break; 1615cdf0e10cSrcweir } 1616cdf0e10cSrcweir } 1617cdf0e10cSrcweir } 1618cdf0e10cSrcweir return nRet; 1619cdf0e10cSrcweir } 1620cdf0e10cSrcweir // ------------------------------------------------------------------------- 1621cdf0e10cSrcweir void ORowSetValue::setFromDouble(const double& _rVal,sal_Int32 _nDatatype) 1622cdf0e10cSrcweir { 1623cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::setFromDouble" ); 1624cdf0e10cSrcweir free(); 1625cdf0e10cSrcweir 1626cdf0e10cSrcweir m_bNull = sal_False; 1627cdf0e10cSrcweir switch(_nDatatype) 1628cdf0e10cSrcweir { 1629cdf0e10cSrcweir case DataType::CHAR: 1630cdf0e10cSrcweir case DataType::VARCHAR: 1631cdf0e10cSrcweir case DataType::DECIMAL: 1632cdf0e10cSrcweir case DataType::NUMERIC: 1633cdf0e10cSrcweir case DataType::LONGVARCHAR: 1634cdf0e10cSrcweir { 1635cdf0e10cSrcweir ::rtl::OUString aVal = ::rtl::OUString::valueOf(_rVal); 1636cdf0e10cSrcweir m_aValue.m_pString = aVal.pData; 1637cdf0e10cSrcweir rtl_uString_acquire(m_aValue.m_pString); 1638cdf0e10cSrcweir } 1639cdf0e10cSrcweir break; 1640cdf0e10cSrcweir case DataType::BIGINT: 1641cdf0e10cSrcweir if ( m_bSigned ) 1642cdf0e10cSrcweir { 1643cdf0e10cSrcweir m_aValue.m_pValue = new sal_Int64((sal_Int64)_rVal); 1644cdf0e10cSrcweir TRACE_ALLOC( sal_Int64 ) 1645cdf0e10cSrcweir } 1646cdf0e10cSrcweir else 1647cdf0e10cSrcweir { 1648cdf0e10cSrcweir ::rtl::OUString aVal = ::rtl::OUString::valueOf(_rVal); 1649cdf0e10cSrcweir m_aValue.m_pString = aVal.pData; 1650cdf0e10cSrcweir rtl_uString_acquire(m_aValue.m_pString); 1651cdf0e10cSrcweir } 1652cdf0e10cSrcweir break; 1653cdf0e10cSrcweir case DataType::FLOAT: 1654cdf0e10cSrcweir m_aValue.m_pValue = new float((float)_rVal); 1655cdf0e10cSrcweir TRACE_ALLOC( float ) 1656cdf0e10cSrcweir break; 1657cdf0e10cSrcweir case DataType::DOUBLE: 1658cdf0e10cSrcweir case DataType::REAL: 1659cdf0e10cSrcweir m_aValue.m_pValue = new double(_rVal); 1660cdf0e10cSrcweir TRACE_ALLOC( double ) 1661cdf0e10cSrcweir break; 1662cdf0e10cSrcweir case DataType::DATE: 1663cdf0e10cSrcweir m_aValue.m_pValue = new Date(dbtools::DBTypeConversion::toDate(_rVal)); 1664cdf0e10cSrcweir TRACE_ALLOC( Date ) 1665cdf0e10cSrcweir break; 1666cdf0e10cSrcweir case DataType::TIME: 1667cdf0e10cSrcweir m_aValue.m_pValue = new Time(dbtools::DBTypeConversion::toTime(_rVal)); 1668cdf0e10cSrcweir TRACE_ALLOC( Time ) 1669cdf0e10cSrcweir break; 1670cdf0e10cSrcweir case DataType::TIMESTAMP: 1671cdf0e10cSrcweir m_aValue.m_pValue = new DateTime(dbtools::DBTypeConversion::toDateTime(_rVal)); 1672cdf0e10cSrcweir TRACE_ALLOC( DateTime ) 1673cdf0e10cSrcweir break; 1674cdf0e10cSrcweir case DataType::BINARY: 1675cdf0e10cSrcweir case DataType::VARBINARY: 1676cdf0e10cSrcweir case DataType::LONGVARBINARY: 1677cdf0e10cSrcweir case DataType::BLOB: 1678cdf0e10cSrcweir case DataType::CLOB: 1679cdf0e10cSrcweir OSL_ASSERT(!"setFromDouble() for this type is not allowed!"); 1680cdf0e10cSrcweir break; 1681cdf0e10cSrcweir case DataType::BIT: 1682cdf0e10cSrcweir case DataType::BOOLEAN: 1683cdf0e10cSrcweir m_aValue.m_bBool = _rVal != 0.0; 1684cdf0e10cSrcweir break; 1685cdf0e10cSrcweir case DataType::TINYINT: 1686cdf0e10cSrcweir if ( m_bSigned ) 1687cdf0e10cSrcweir m_aValue.m_nInt8 = sal_Int8(_rVal); 1688cdf0e10cSrcweir else 1689cdf0e10cSrcweir m_aValue.m_nInt16 = sal_Int16(_rVal); 1690cdf0e10cSrcweir break; 1691cdf0e10cSrcweir case DataType::SMALLINT: 1692cdf0e10cSrcweir if ( m_bSigned ) 1693cdf0e10cSrcweir m_aValue.m_nInt16 = sal_Int16(_rVal); 1694cdf0e10cSrcweir else 1695cdf0e10cSrcweir m_aValue.m_nInt32 = sal_Int32(_rVal); 1696cdf0e10cSrcweir break; 1697cdf0e10cSrcweir case DataType::INTEGER: 1698cdf0e10cSrcweir if ( m_bSigned ) 1699cdf0e10cSrcweir m_aValue.m_nInt32 = sal_Int32(_rVal); 1700cdf0e10cSrcweir else 1701cdf0e10cSrcweir { 1702cdf0e10cSrcweir m_aValue.m_pValue = new sal_Int64((sal_Int64)_rVal); 1703cdf0e10cSrcweir TRACE_ALLOC( sal_Int64 ) 1704cdf0e10cSrcweir } 1705cdf0e10cSrcweir break; 1706cdf0e10cSrcweir default: 1707cdf0e10cSrcweir { 1708cdf0e10cSrcweir m_aValue.m_pValue = new Any(_rVal); 1709cdf0e10cSrcweir break; 1710cdf0e10cSrcweir } 1711cdf0e10cSrcweir } 1712cdf0e10cSrcweir m_eTypeKind = _nDatatype; 1713cdf0e10cSrcweir } 1714cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1715cdf0e10cSrcweir Sequence<sal_Int8> ORowSetValue::getSequence() const 1716cdf0e10cSrcweir { 1717cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getSequence" ); 1718cdf0e10cSrcweir Sequence<sal_Int8> aSeq; 1719cdf0e10cSrcweir if (!m_bNull) 1720cdf0e10cSrcweir { 1721cdf0e10cSrcweir switch(m_eTypeKind) 1722cdf0e10cSrcweir { 1723cdf0e10cSrcweir case DataType::OBJECT: 1724cdf0e10cSrcweir case DataType::CLOB: 1725cdf0e10cSrcweir case DataType::BLOB: 1726cdf0e10cSrcweir { 1727cdf0e10cSrcweir Reference<XInputStream> xStream; 1728cdf0e10cSrcweir const Any aValue = makeAny(); 1729cdf0e10cSrcweir if(aValue.hasValue()) 1730cdf0e10cSrcweir { 1731cdf0e10cSrcweir Reference<XBlob> xBlob(aValue,UNO_QUERY); 1732cdf0e10cSrcweir if ( xBlob.is() ) 1733cdf0e10cSrcweir xStream = xBlob->getBinaryStream(); 1734cdf0e10cSrcweir else 1735cdf0e10cSrcweir { 1736cdf0e10cSrcweir Reference<XClob> xClob(aValue,UNO_QUERY); 1737cdf0e10cSrcweir if ( xClob.is() ) 1738cdf0e10cSrcweir xStream = xClob->getCharacterStream(); 1739cdf0e10cSrcweir } 1740cdf0e10cSrcweir if(xStream.is()) 1741cdf0e10cSrcweir { 1742cdf0e10cSrcweir const sal_uInt32 nBytesToRead = 65535; 1743cdf0e10cSrcweir sal_uInt32 nRead; 1744cdf0e10cSrcweir 1745cdf0e10cSrcweir do 1746cdf0e10cSrcweir { 1747cdf0e10cSrcweir ::com::sun::star::uno::Sequence< sal_Int8 > aReadSeq; 1748cdf0e10cSrcweir 1749cdf0e10cSrcweir nRead = xStream->readSomeBytes( aReadSeq, nBytesToRead ); 1750cdf0e10cSrcweir 1751cdf0e10cSrcweir if( nRead ) 1752cdf0e10cSrcweir { 1753cdf0e10cSrcweir const sal_uInt32 nOldLength = aSeq.getLength(); 1754cdf0e10cSrcweir aSeq.realloc( nOldLength + nRead ); 1755cdf0e10cSrcweir rtl_copyMemory( aSeq.getArray() + nOldLength, aReadSeq.getConstArray(), aReadSeq.getLength() ); 1756cdf0e10cSrcweir } 1757cdf0e10cSrcweir } 1758cdf0e10cSrcweir while( nBytesToRead == nRead ); 1759cdf0e10cSrcweir xStream->closeInput(); 1760cdf0e10cSrcweir } 1761cdf0e10cSrcweir } 1762cdf0e10cSrcweir } 1763cdf0e10cSrcweir break; 1764cdf0e10cSrcweir case DataType::VARCHAR: 1765cdf0e10cSrcweir case DataType::LONGVARCHAR: 1766cdf0e10cSrcweir { 1767cdf0e10cSrcweir ::rtl::OUString sVal(m_aValue.m_pString); 1768cdf0e10cSrcweir aSeq = Sequence<sal_Int8>(reinterpret_cast<const sal_Int8*>(sVal.getStr()),sizeof(sal_Unicode)*sVal.getLength()); 1769cdf0e10cSrcweir } 1770cdf0e10cSrcweir break; 1771cdf0e10cSrcweir case DataType::BINARY: 1772cdf0e10cSrcweir case DataType::VARBINARY: 1773cdf0e10cSrcweir case DataType::LONGVARBINARY: 1774cdf0e10cSrcweir aSeq = *static_cast< Sequence<sal_Int8>*>(m_aValue.m_pValue); 1775cdf0e10cSrcweir break; 1776cdf0e10cSrcweir default: 1777cdf0e10cSrcweir { 1778cdf0e10cSrcweir Any aValue = getAny(); 1779cdf0e10cSrcweir aValue >>= aSeq; 1780cdf0e10cSrcweir break; 1781cdf0e10cSrcweir } 1782cdf0e10cSrcweir } 1783cdf0e10cSrcweir } 1784cdf0e10cSrcweir return aSeq; 1785cdf0e10cSrcweir 1786cdf0e10cSrcweir } 1787cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1788cdf0e10cSrcweir ::com::sun::star::util::Date ORowSetValue::getDate() const 1789cdf0e10cSrcweir { 1790cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getDate" ); 1791cdf0e10cSrcweir ::com::sun::star::util::Date aValue; 1792cdf0e10cSrcweir if(!m_bNull) 1793cdf0e10cSrcweir { 1794cdf0e10cSrcweir switch(m_eTypeKind) 1795cdf0e10cSrcweir { 1796cdf0e10cSrcweir case DataType::CHAR: 1797cdf0e10cSrcweir case DataType::VARCHAR: 1798cdf0e10cSrcweir case DataType::LONGVARCHAR: 1799cdf0e10cSrcweir aValue = DBTypeConversion::toDate(getString()); 1800cdf0e10cSrcweir break; 1801cdf0e10cSrcweir case DataType::DECIMAL: 1802cdf0e10cSrcweir case DataType::NUMERIC: 1803cdf0e10cSrcweir case DataType::FLOAT: 1804cdf0e10cSrcweir case DataType::DOUBLE: 1805cdf0e10cSrcweir case DataType::REAL: 1806cdf0e10cSrcweir aValue = DBTypeConversion::toDate((double)*this); 1807cdf0e10cSrcweir break; 1808cdf0e10cSrcweir 1809cdf0e10cSrcweir case DataType::DATE: 1810cdf0e10cSrcweir aValue = *static_cast< ::com::sun::star::util::Date*>(m_aValue.m_pValue); 1811cdf0e10cSrcweir break; 1812cdf0e10cSrcweir case DataType::TIMESTAMP: 1813cdf0e10cSrcweir { 1814cdf0e10cSrcweir ::com::sun::star::util::DateTime* pDateTime = static_cast< ::com::sun::star::util::DateTime*>(m_aValue.m_pValue); 1815cdf0e10cSrcweir aValue.Day = pDateTime->Day; 1816cdf0e10cSrcweir aValue.Month = pDateTime->Month; 1817cdf0e10cSrcweir aValue.Year = pDateTime->Year; 1818cdf0e10cSrcweir } 1819cdf0e10cSrcweir break; 1820cdf0e10cSrcweir case DataType::BIT: 1821cdf0e10cSrcweir case DataType::BOOLEAN: 1822cdf0e10cSrcweir case DataType::TINYINT: 1823cdf0e10cSrcweir case DataType::SMALLINT: 1824cdf0e10cSrcweir case DataType::INTEGER: 1825cdf0e10cSrcweir case DataType::BIGINT: 1826cdf0e10cSrcweir aValue = DBTypeConversion::toDate( double( sal_Int64( *this ) ) ); 1827cdf0e10cSrcweir break; 1828cdf0e10cSrcweir 1829cdf0e10cSrcweir case DataType::BLOB: 1830cdf0e10cSrcweir case DataType::CLOB: 1831cdf0e10cSrcweir case DataType::OBJECT: 1832cdf0e10cSrcweir default: 1833cdf0e10cSrcweir OSL_ENSURE( false, "ORowSetValue::getDate: cannot retrieve the data!" ); 1834cdf0e10cSrcweir // NO break! 1835cdf0e10cSrcweir 1836cdf0e10cSrcweir case DataType::BINARY: 1837cdf0e10cSrcweir case DataType::VARBINARY: 1838cdf0e10cSrcweir case DataType::LONGVARBINARY: 1839cdf0e10cSrcweir case DataType::TIME: 1840cdf0e10cSrcweir aValue = DBTypeConversion::toDate( (double)0 ); 1841cdf0e10cSrcweir break; 1842cdf0e10cSrcweir } 1843cdf0e10cSrcweir } 1844cdf0e10cSrcweir return aValue; 1845cdf0e10cSrcweir } 1846cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1847cdf0e10cSrcweir ::com::sun::star::util::Time ORowSetValue::getTime() const 1848cdf0e10cSrcweir { 1849cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getTime" ); 1850cdf0e10cSrcweir ::com::sun::star::util::Time aValue; 1851cdf0e10cSrcweir if(!m_bNull) 1852cdf0e10cSrcweir { 1853cdf0e10cSrcweir switch(m_eTypeKind) 1854cdf0e10cSrcweir { 1855cdf0e10cSrcweir case DataType::CHAR: 1856cdf0e10cSrcweir case DataType::VARCHAR: 1857cdf0e10cSrcweir case DataType::LONGVARCHAR: 1858cdf0e10cSrcweir aValue = DBTypeConversion::toTime(getString()); 1859cdf0e10cSrcweir break; 1860cdf0e10cSrcweir case DataType::DECIMAL: 1861cdf0e10cSrcweir case DataType::NUMERIC: 1862cdf0e10cSrcweir aValue = DBTypeConversion::toTime((double)*this); 1863cdf0e10cSrcweir break; 1864cdf0e10cSrcweir case DataType::FLOAT: 1865cdf0e10cSrcweir case DataType::DOUBLE: 1866cdf0e10cSrcweir case DataType::REAL: 1867cdf0e10cSrcweir aValue = DBTypeConversion::toTime((double)*this); 1868cdf0e10cSrcweir break; 1869cdf0e10cSrcweir case DataType::TIMESTAMP: 1870cdf0e10cSrcweir { 1871cdf0e10cSrcweir ::com::sun::star::util::DateTime* pDateTime = static_cast< ::com::sun::star::util::DateTime*>(m_aValue.m_pValue); 1872cdf0e10cSrcweir aValue.HundredthSeconds = pDateTime->HundredthSeconds; 1873cdf0e10cSrcweir aValue.Seconds = pDateTime->Seconds; 1874cdf0e10cSrcweir aValue.Minutes = pDateTime->Minutes; 1875cdf0e10cSrcweir aValue.Hours = pDateTime->Hours; 1876cdf0e10cSrcweir } 1877cdf0e10cSrcweir break; 1878cdf0e10cSrcweir case DataType::TIME: 1879cdf0e10cSrcweir aValue = *static_cast< ::com::sun::star::util::Time*>(m_aValue.m_pValue); 1880cdf0e10cSrcweir break; 1881cdf0e10cSrcweir default: 1882cdf0e10cSrcweir { 1883cdf0e10cSrcweir Any aAnyValue = getAny(); 1884cdf0e10cSrcweir aAnyValue >>= aValue; 1885cdf0e10cSrcweir break; 1886cdf0e10cSrcweir } 1887cdf0e10cSrcweir } 1888cdf0e10cSrcweir } 1889cdf0e10cSrcweir return aValue; 1890cdf0e10cSrcweir } 1891cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1892cdf0e10cSrcweir ::com::sun::star::util::DateTime ORowSetValue::getDateTime() const 1893cdf0e10cSrcweir { 1894cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getDateTime" ); 1895cdf0e10cSrcweir ::com::sun::star::util::DateTime aValue; 1896cdf0e10cSrcweir if(!m_bNull) 1897cdf0e10cSrcweir { 1898cdf0e10cSrcweir switch(m_eTypeKind) 1899cdf0e10cSrcweir { 1900cdf0e10cSrcweir case DataType::CHAR: 1901cdf0e10cSrcweir case DataType::VARCHAR: 1902cdf0e10cSrcweir case DataType::LONGVARCHAR: 1903cdf0e10cSrcweir aValue = DBTypeConversion::toDateTime(getString()); 1904cdf0e10cSrcweir break; 1905cdf0e10cSrcweir case DataType::DECIMAL: 1906cdf0e10cSrcweir case DataType::NUMERIC: 1907cdf0e10cSrcweir aValue = DBTypeConversion::toDateTime((double)*this); 1908cdf0e10cSrcweir break; 1909cdf0e10cSrcweir case DataType::FLOAT: 1910cdf0e10cSrcweir case DataType::DOUBLE: 1911cdf0e10cSrcweir case DataType::REAL: 1912cdf0e10cSrcweir aValue = DBTypeConversion::toDateTime((double)*this); 1913cdf0e10cSrcweir break; 1914cdf0e10cSrcweir case DataType::DATE: 1915cdf0e10cSrcweir { 1916cdf0e10cSrcweir ::com::sun::star::util::Date* pDate = static_cast< ::com::sun::star::util::Date*>(m_aValue.m_pValue); 1917cdf0e10cSrcweir aValue.Day = pDate->Day; 1918cdf0e10cSrcweir aValue.Month = pDate->Month; 1919cdf0e10cSrcweir aValue.Year = pDate->Year; 1920cdf0e10cSrcweir } 1921cdf0e10cSrcweir break; 1922cdf0e10cSrcweir case DataType::TIME: 1923cdf0e10cSrcweir { 1924cdf0e10cSrcweir ::com::sun::star::util::Time* pTime = static_cast< ::com::sun::star::util::Time*>(m_aValue.m_pValue); 1925cdf0e10cSrcweir aValue.HundredthSeconds = pTime->HundredthSeconds; 1926cdf0e10cSrcweir aValue.Seconds = pTime->Seconds; 1927cdf0e10cSrcweir aValue.Minutes = pTime->Minutes; 1928cdf0e10cSrcweir aValue.Hours = pTime->Hours; 1929cdf0e10cSrcweir } 1930cdf0e10cSrcweir break; 1931cdf0e10cSrcweir case DataType::TIMESTAMP: 1932cdf0e10cSrcweir aValue = *static_cast< ::com::sun::star::util::DateTime*>(m_aValue.m_pValue); 1933cdf0e10cSrcweir break; 1934cdf0e10cSrcweir default: 1935cdf0e10cSrcweir { 1936cdf0e10cSrcweir Any aAnyValue = getAny(); 1937cdf0e10cSrcweir aAnyValue >>= aValue; 1938cdf0e10cSrcweir break; 1939cdf0e10cSrcweir } 1940cdf0e10cSrcweir } 1941cdf0e10cSrcweir } 1942cdf0e10cSrcweir return aValue; 1943cdf0e10cSrcweir } 1944cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1945cdf0e10cSrcweir void ORowSetValue::setSigned(sal_Bool _bMod) 1946cdf0e10cSrcweir { 1947cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::setSigned" ); 1948cdf0e10cSrcweir if ( m_bSigned != _bMod ) 1949cdf0e10cSrcweir { 1950cdf0e10cSrcweir m_bSigned = _bMod; 1951cdf0e10cSrcweir if ( !m_bNull ) 1952cdf0e10cSrcweir { 1953cdf0e10cSrcweir sal_Int32 nType = m_eTypeKind; 1954cdf0e10cSrcweir switch(m_eTypeKind) 1955cdf0e10cSrcweir { 1956cdf0e10cSrcweir case DataType::BIGINT: 1957cdf0e10cSrcweir if ( m_bSigned ) // now we are signed, so we were unsigned and need to call getString() 1958cdf0e10cSrcweir { 1959cdf0e10cSrcweir m_bSigned = !m_bSigned; 1960cdf0e10cSrcweir const ::rtl::OUString sValue = getString(); 1961cdf0e10cSrcweir free(); 1962cdf0e10cSrcweir m_bSigned = !m_bSigned; 1963cdf0e10cSrcweir (*this) = sValue; 1964cdf0e10cSrcweir } 1965cdf0e10cSrcweir else 1966cdf0e10cSrcweir { 1967cdf0e10cSrcweir m_bSigned = !m_bSigned; 1968cdf0e10cSrcweir const sal_Int64 nValue = getLong(); 1969cdf0e10cSrcweir free(); 1970cdf0e10cSrcweir m_bSigned = !m_bSigned; 1971cdf0e10cSrcweir (*this) = nValue; 1972cdf0e10cSrcweir } 1973cdf0e10cSrcweir break; 1974cdf0e10cSrcweir case DataType::TINYINT: 1975cdf0e10cSrcweir if ( m_bSigned ) 1976cdf0e10cSrcweir (*this) = getInt8(); 1977cdf0e10cSrcweir else 1978cdf0e10cSrcweir { 1979cdf0e10cSrcweir m_bSigned = !m_bSigned; 1980cdf0e10cSrcweir (*this) = getInt16(); 1981cdf0e10cSrcweir m_bSigned = !m_bSigned; 1982cdf0e10cSrcweir } 1983cdf0e10cSrcweir break; 1984cdf0e10cSrcweir case DataType::SMALLINT: 1985cdf0e10cSrcweir if ( m_bSigned ) 1986cdf0e10cSrcweir (*this) = getInt16(); 1987cdf0e10cSrcweir else 1988cdf0e10cSrcweir { 1989cdf0e10cSrcweir m_bSigned = !m_bSigned; 1990cdf0e10cSrcweir (*this) = getInt32(); 1991cdf0e10cSrcweir m_bSigned = !m_bSigned; 1992cdf0e10cSrcweir } 1993cdf0e10cSrcweir break; 1994cdf0e10cSrcweir case DataType::INTEGER: 1995cdf0e10cSrcweir if ( m_bSigned ) 1996cdf0e10cSrcweir (*this) = getInt32(); 1997cdf0e10cSrcweir else 1998cdf0e10cSrcweir { 1999cdf0e10cSrcweir m_bSigned = !m_bSigned; 2000cdf0e10cSrcweir (*this) = getLong(); 2001cdf0e10cSrcweir m_bSigned = !m_bSigned; 2002cdf0e10cSrcweir } 2003cdf0e10cSrcweir break; 2004cdf0e10cSrcweir } 2005cdf0e10cSrcweir m_eTypeKind = nType; 2006cdf0e10cSrcweir } 2007cdf0e10cSrcweir } 2008cdf0e10cSrcweir } 2009cdf0e10cSrcweir 2010cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2011cdf0e10cSrcweir namespace detail 2012cdf0e10cSrcweir { 2013cdf0e10cSrcweir class SAL_NO_VTABLE IValueSource 2014cdf0e10cSrcweir { 2015cdf0e10cSrcweir public: 2016cdf0e10cSrcweir virtual ::rtl::OUString getString() const = 0; 2017cdf0e10cSrcweir virtual sal_Bool getBoolean() const = 0; 2018cdf0e10cSrcweir virtual sal_Int8 getByte() const = 0; 2019cdf0e10cSrcweir virtual sal_Int16 getShort() const = 0; 2020cdf0e10cSrcweir virtual sal_Int32 getInt() const = 0; 2021cdf0e10cSrcweir virtual sal_Int64 getLong() const = 0; 2022cdf0e10cSrcweir virtual float getFloat() const = 0; 2023cdf0e10cSrcweir virtual double getDouble() const = 0; 2024cdf0e10cSrcweir virtual Date getDate() const = 0; 2025cdf0e10cSrcweir virtual Time getTime() const = 0; 2026cdf0e10cSrcweir virtual DateTime getTimestamp() const = 0; 2027cdf0e10cSrcweir virtual Sequence< sal_Int8 > getBytes() const = 0; 2028cdf0e10cSrcweir virtual Reference< XInputStream > getBinaryStream() const = 0; 2029cdf0e10cSrcweir virtual Reference< XInputStream > getCharacterStream() const = 0; 2030cdf0e10cSrcweir virtual Reference< XBlob > getBlob() const = 0; 2031cdf0e10cSrcweir virtual Reference< XClob > getClob() const = 0; 2032cdf0e10cSrcweir virtual Any getObject() const = 0; 2033cdf0e10cSrcweir virtual sal_Bool wasNull() const = 0; 2034cdf0e10cSrcweir 2035cdf0e10cSrcweir virtual ~IValueSource() { } 2036cdf0e10cSrcweir }; 2037cdf0e10cSrcweir 2038cdf0e10cSrcweir class RowValue : public IValueSource 2039cdf0e10cSrcweir { 2040cdf0e10cSrcweir public: 2041cdf0e10cSrcweir RowValue( const Reference< XRow >& _xRow, const sal_Int32 _nPos ) 2042cdf0e10cSrcweir :m_xRow( _xRow ) 2043cdf0e10cSrcweir ,m_nPos( _nPos ) 2044cdf0e10cSrcweir { 2045cdf0e10cSrcweir } 2046cdf0e10cSrcweir 2047cdf0e10cSrcweir // IValueSource 2048cdf0e10cSrcweir virtual ::rtl::OUString getString() const { return m_xRow->getString( m_nPos ); }; 2049cdf0e10cSrcweir virtual sal_Bool getBoolean() const { return m_xRow->getBoolean( m_nPos ); }; 2050cdf0e10cSrcweir virtual sal_Int8 getByte() const { return m_xRow->getByte( m_nPos ); }; 2051cdf0e10cSrcweir virtual sal_Int16 getShort() const { return m_xRow->getShort( m_nPos ); } 2052cdf0e10cSrcweir virtual sal_Int32 getInt() const { return m_xRow->getInt( m_nPos ); } 2053cdf0e10cSrcweir virtual sal_Int64 getLong() const { return m_xRow->getLong( m_nPos ); } 2054cdf0e10cSrcweir virtual float getFloat() const { return m_xRow->getFloat( m_nPos ); }; 2055cdf0e10cSrcweir virtual double getDouble() const { return m_xRow->getDouble( m_nPos ); }; 2056cdf0e10cSrcweir virtual Date getDate() const { return m_xRow->getDate( m_nPos ); }; 2057cdf0e10cSrcweir virtual Time getTime() const { return m_xRow->getTime( m_nPos ); }; 2058cdf0e10cSrcweir virtual DateTime getTimestamp() const { return m_xRow->getTimestamp( m_nPos ); }; 2059cdf0e10cSrcweir virtual Sequence< sal_Int8 > getBytes() const { return m_xRow->getBytes( m_nPos ); }; 2060cdf0e10cSrcweir virtual Reference< XInputStream > getBinaryStream() const { return m_xRow->getBinaryStream( m_nPos ); }; 2061cdf0e10cSrcweir virtual Reference< XInputStream > getCharacterStream() const { return m_xRow->getCharacterStream( m_nPos ); }; 2062cdf0e10cSrcweir virtual Reference< XBlob > getBlob() const { return m_xRow->getBlob( m_nPos ); }; 2063cdf0e10cSrcweir virtual Reference< XClob > getClob() const { return m_xRow->getClob( m_nPos ); }; 2064cdf0e10cSrcweir virtual Any getObject() const { return m_xRow->getObject( m_nPos ,NULL); }; 2065cdf0e10cSrcweir virtual sal_Bool wasNull() const { return m_xRow->wasNull( ); }; 2066cdf0e10cSrcweir 2067cdf0e10cSrcweir private: 2068cdf0e10cSrcweir const Reference< XRow > m_xRow; 2069cdf0e10cSrcweir const sal_Int32 m_nPos; 2070cdf0e10cSrcweir }; 2071cdf0e10cSrcweir 2072cdf0e10cSrcweir class ColumnValue : public IValueSource 2073cdf0e10cSrcweir { 2074cdf0e10cSrcweir public: 2075cdf0e10cSrcweir ColumnValue( const Reference< XColumn >& _rxColumn ) 2076cdf0e10cSrcweir :m_xColumn( _rxColumn ) 2077cdf0e10cSrcweir { 2078cdf0e10cSrcweir } 2079cdf0e10cSrcweir 2080cdf0e10cSrcweir // IValueSource 2081cdf0e10cSrcweir virtual ::rtl::OUString getString() const { return m_xColumn->getString(); }; 2082cdf0e10cSrcweir virtual sal_Bool getBoolean() const { return m_xColumn->getBoolean(); }; 2083cdf0e10cSrcweir virtual sal_Int8 getByte() const { return m_xColumn->getByte(); }; 2084cdf0e10cSrcweir virtual sal_Int16 getShort() const { return m_xColumn->getShort(); } 2085cdf0e10cSrcweir virtual sal_Int32 getInt() const { return m_xColumn->getInt(); } 2086cdf0e10cSrcweir virtual sal_Int64 getLong() const { return m_xColumn->getLong(); } 2087cdf0e10cSrcweir virtual float getFloat() const { return m_xColumn->getFloat(); }; 2088cdf0e10cSrcweir virtual double getDouble() const { return m_xColumn->getDouble(); }; 2089cdf0e10cSrcweir virtual Date getDate() const { return m_xColumn->getDate(); }; 2090cdf0e10cSrcweir virtual Time getTime() const { return m_xColumn->getTime(); }; 2091cdf0e10cSrcweir virtual DateTime getTimestamp() const { return m_xColumn->getTimestamp(); }; 2092cdf0e10cSrcweir virtual Sequence< sal_Int8 > getBytes() const { return m_xColumn->getBytes(); }; 2093cdf0e10cSrcweir virtual Reference< XInputStream > getBinaryStream() const { return m_xColumn->getBinaryStream(); }; 2094cdf0e10cSrcweir virtual Reference< XInputStream > getCharacterStream() const { return m_xColumn->getCharacterStream(); }; 2095cdf0e10cSrcweir virtual Reference< XBlob > getBlob() const { return m_xColumn->getBlob(); }; 2096cdf0e10cSrcweir virtual Reference< XClob > getClob() const { return m_xColumn->getClob(); }; 2097cdf0e10cSrcweir virtual Any getObject() const { return m_xColumn->getObject( NULL ); }; 2098cdf0e10cSrcweir virtual sal_Bool wasNull() const { return m_xColumn->wasNull( ); }; 2099cdf0e10cSrcweir 2100cdf0e10cSrcweir private: 2101cdf0e10cSrcweir const Reference< XColumn > m_xColumn; 2102cdf0e10cSrcweir }; 2103cdf0e10cSrcweir } 2104cdf0e10cSrcweir 2105cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2106cdf0e10cSrcweir void ORowSetValue::fill( const sal_Int32 _nType, const Reference< XColumn >& _rxColumn ) 2107cdf0e10cSrcweir { 2108cdf0e10cSrcweir detail::ColumnValue aColumnValue( _rxColumn ); 2109cdf0e10cSrcweir impl_fill( _nType, sal_True, aColumnValue ); 2110cdf0e10cSrcweir } 2111cdf0e10cSrcweir 2112cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2113cdf0e10cSrcweir void ORowSetValue::fill( sal_Int32 _nPos, sal_Int32 _nType, sal_Bool _bNullable, const Reference< XRow>& _xRow ) 2114cdf0e10cSrcweir { 2115cdf0e10cSrcweir detail::RowValue aRowValue( _xRow, _nPos ); 2116cdf0e10cSrcweir impl_fill( _nType, _bNullable, aRowValue ); 2117cdf0e10cSrcweir } 2118cdf0e10cSrcweir 2119cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2120cdf0e10cSrcweir void ORowSetValue::fill(sal_Int32 _nPos, 2121cdf0e10cSrcweir sal_Int32 _nType, 2122cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow>& _xRow) 2123cdf0e10cSrcweir { 2124cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::fill (1)" ); 2125cdf0e10cSrcweir fill(_nPos,_nType,sal_True,_xRow); 2126cdf0e10cSrcweir } 2127cdf0e10cSrcweir 2128cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2129cdf0e10cSrcweir void ORowSetValue::impl_fill( const sal_Int32 _nType, sal_Bool _bNullable, const detail::IValueSource& _rValueSource ) 2130cdf0e10cSrcweir 2131cdf0e10cSrcweir { 2132cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::fill (2)" ); 2133cdf0e10cSrcweir sal_Bool bReadData = sal_True; 2134cdf0e10cSrcweir switch(_nType) 2135cdf0e10cSrcweir { 2136cdf0e10cSrcweir case DataType::CHAR: 2137cdf0e10cSrcweir case DataType::VARCHAR: 2138cdf0e10cSrcweir case DataType::DECIMAL: 2139cdf0e10cSrcweir case DataType::NUMERIC: 2140cdf0e10cSrcweir case DataType::LONGVARCHAR: 2141cdf0e10cSrcweir (*this) = _rValueSource.getString(); 2142cdf0e10cSrcweir break; 2143cdf0e10cSrcweir case DataType::BIGINT: 2144cdf0e10cSrcweir if ( isSigned() ) 2145cdf0e10cSrcweir (*this) = _rValueSource.getLong(); 2146cdf0e10cSrcweir else 2147cdf0e10cSrcweir (*this) = _rValueSource.getString(); 2148cdf0e10cSrcweir break; 2149cdf0e10cSrcweir case DataType::FLOAT: 2150cdf0e10cSrcweir (*this) = _rValueSource.getFloat(); 2151cdf0e10cSrcweir break; 2152cdf0e10cSrcweir case DataType::DOUBLE: 2153cdf0e10cSrcweir case DataType::REAL: 2154cdf0e10cSrcweir (*this) = _rValueSource.getDouble(); 2155cdf0e10cSrcweir break; 2156cdf0e10cSrcweir case DataType::DATE: 2157cdf0e10cSrcweir (*this) = _rValueSource.getDate(); 2158cdf0e10cSrcweir break; 2159cdf0e10cSrcweir case DataType::TIME: 2160cdf0e10cSrcweir (*this) = _rValueSource.getTime(); 2161cdf0e10cSrcweir break; 2162cdf0e10cSrcweir case DataType::TIMESTAMP: 2163cdf0e10cSrcweir (*this) = _rValueSource.getTimestamp(); 2164cdf0e10cSrcweir break; 2165cdf0e10cSrcweir case DataType::BINARY: 2166cdf0e10cSrcweir case DataType::VARBINARY: 2167cdf0e10cSrcweir case DataType::LONGVARBINARY: 2168cdf0e10cSrcweir (*this) = _rValueSource.getBytes(); 2169cdf0e10cSrcweir break; 2170cdf0e10cSrcweir case DataType::BIT: 2171cdf0e10cSrcweir case DataType::BOOLEAN: 2172cdf0e10cSrcweir (*this) = _rValueSource.getBoolean(); 2173cdf0e10cSrcweir break; 2174cdf0e10cSrcweir case DataType::TINYINT: 2175cdf0e10cSrcweir if ( isSigned() ) 2176cdf0e10cSrcweir (*this) = _rValueSource.getByte(); 2177cdf0e10cSrcweir else 2178cdf0e10cSrcweir (*this) = _rValueSource.getShort(); 2179cdf0e10cSrcweir break; 2180cdf0e10cSrcweir case DataType::SMALLINT: 2181cdf0e10cSrcweir if ( isSigned() ) 2182cdf0e10cSrcweir (*this) = _rValueSource.getShort(); 2183cdf0e10cSrcweir else 2184cdf0e10cSrcweir (*this) = _rValueSource.getInt(); 2185cdf0e10cSrcweir break; 2186cdf0e10cSrcweir case DataType::INTEGER: 2187cdf0e10cSrcweir if ( isSigned() ) 2188cdf0e10cSrcweir (*this) = _rValueSource.getInt(); 2189cdf0e10cSrcweir else 2190cdf0e10cSrcweir (*this) = _rValueSource.getLong(); 2191cdf0e10cSrcweir break; 2192cdf0e10cSrcweir case DataType::CLOB: 2193cdf0e10cSrcweir (*this) = ::com::sun::star::uno::makeAny(_rValueSource.getClob()); 2194cdf0e10cSrcweir setTypeKind(DataType::CLOB); 2195cdf0e10cSrcweir break; 2196cdf0e10cSrcweir case DataType::BLOB: 2197cdf0e10cSrcweir (*this) = ::com::sun::star::uno::makeAny(_rValueSource.getBlob()); 2198cdf0e10cSrcweir setTypeKind(DataType::BLOB); 2199cdf0e10cSrcweir break; 2200cdf0e10cSrcweir case DataType::OTHER: 2201cdf0e10cSrcweir (*this) = _rValueSource.getObject(); 2202cdf0e10cSrcweir setTypeKind(DataType::OTHER); 2203cdf0e10cSrcweir break; 2204cdf0e10cSrcweir default: 2205cdf0e10cSrcweir OSL_ENSURE( false, "ORowSetValue::fill: unsupported type!" ); 2206cdf0e10cSrcweir (*this) = _rValueSource.getObject(); 2207cdf0e10cSrcweir break; 2208cdf0e10cSrcweir } 2209cdf0e10cSrcweir if ( bReadData && _bNullable && _rValueSource.wasNull() ) 2210cdf0e10cSrcweir setNull(); 2211cdf0e10cSrcweir setTypeKind(_nType); 2212cdf0e10cSrcweir } 2213cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2214cdf0e10cSrcweir void ORowSetValue::fill(const Any& _rValue) 2215cdf0e10cSrcweir { 2216cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::fill (3)" ); 2217cdf0e10cSrcweir switch (_rValue.getValueType().getTypeClass()) 2218cdf0e10cSrcweir { 2219cdf0e10cSrcweir case TypeClass_VOID: 2220cdf0e10cSrcweir setNull(); 2221cdf0e10cSrcweir break; 2222cdf0e10cSrcweir case TypeClass_BOOLEAN: 2223cdf0e10cSrcweir { 2224cdf0e10cSrcweir sal_Bool bValue( sal_False ); 2225cdf0e10cSrcweir _rValue >>= bValue; 2226cdf0e10cSrcweir (*this) = bValue; 2227cdf0e10cSrcweir break; 2228cdf0e10cSrcweir } 2229cdf0e10cSrcweir case TypeClass_CHAR: 2230cdf0e10cSrcweir { 2231cdf0e10cSrcweir sal_Unicode aDummy(0); 2232cdf0e10cSrcweir _rValue >>= aDummy; 2233cdf0e10cSrcweir (*this) = ::rtl::OUString(aDummy); 2234cdf0e10cSrcweir break; 2235cdf0e10cSrcweir } 2236cdf0e10cSrcweir case TypeClass_STRING: 2237cdf0e10cSrcweir { 2238cdf0e10cSrcweir ::rtl::OUString sDummy; 2239cdf0e10cSrcweir _rValue >>= sDummy; 2240cdf0e10cSrcweir (*this) = sDummy; 2241cdf0e10cSrcweir break; 2242cdf0e10cSrcweir } 2243cdf0e10cSrcweir case TypeClass_FLOAT: 2244cdf0e10cSrcweir { 2245cdf0e10cSrcweir float aDummy(0.0); 2246cdf0e10cSrcweir _rValue >>= aDummy; 2247cdf0e10cSrcweir (*this) = aDummy; 2248cdf0e10cSrcweir break; 2249cdf0e10cSrcweir } 2250cdf0e10cSrcweir case TypeClass_DOUBLE: 2251cdf0e10cSrcweir { 2252cdf0e10cSrcweir double aDummy(0.0); 2253cdf0e10cSrcweir _rValue >>= aDummy; 2254cdf0e10cSrcweir (*this) = aDummy; 2255cdf0e10cSrcweir break; 2256cdf0e10cSrcweir } 2257cdf0e10cSrcweir case TypeClass_BYTE: 2258cdf0e10cSrcweir { 2259cdf0e10cSrcweir sal_Int8 aDummy(0); 2260cdf0e10cSrcweir _rValue >>= aDummy; 2261cdf0e10cSrcweir (*this) = aDummy; 2262cdf0e10cSrcweir break; 2263cdf0e10cSrcweir } 2264cdf0e10cSrcweir case TypeClass_SHORT: 2265cdf0e10cSrcweir { 2266cdf0e10cSrcweir sal_Int16 aDummy(0); 2267cdf0e10cSrcweir _rValue >>= aDummy; 2268cdf0e10cSrcweir (*this) = aDummy; 2269cdf0e10cSrcweir break; 2270cdf0e10cSrcweir } 2271cdf0e10cSrcweir case TypeClass_LONG: 2272cdf0e10cSrcweir { 2273cdf0e10cSrcweir sal_Int32 aDummy(0); 2274cdf0e10cSrcweir _rValue >>= aDummy; 2275cdf0e10cSrcweir (*this) = aDummy; 2276cdf0e10cSrcweir break; 2277cdf0e10cSrcweir } 2278cdf0e10cSrcweir case TypeClass_UNSIGNED_SHORT: 2279cdf0e10cSrcweir { 2280cdf0e10cSrcweir sal_uInt16 nValue(0); 2281cdf0e10cSrcweir _rValue >>= nValue; 2282cdf0e10cSrcweir (*this) = static_cast<sal_Int32>(nValue); 2283cdf0e10cSrcweir setSigned(sal_False); 2284cdf0e10cSrcweir break; 2285cdf0e10cSrcweir } 2286cdf0e10cSrcweir case TypeClass_HYPER: 2287cdf0e10cSrcweir { 2288cdf0e10cSrcweir sal_Int64 nValue(0); 2289cdf0e10cSrcweir _rValue >>= nValue; 2290cdf0e10cSrcweir (*this) = nValue; 2291cdf0e10cSrcweir break; 2292cdf0e10cSrcweir } 2293cdf0e10cSrcweir case TypeClass_UNSIGNED_HYPER: 2294cdf0e10cSrcweir { 2295cdf0e10cSrcweir sal_uInt64 nValue(0); 2296cdf0e10cSrcweir _rValue >>= nValue; 2297cdf0e10cSrcweir (*this) = static_cast<sal_Int64>(nValue); 2298cdf0e10cSrcweir setSigned(sal_False); 2299cdf0e10cSrcweir break; 2300cdf0e10cSrcweir } 2301cdf0e10cSrcweir case TypeClass_UNSIGNED_LONG: 2302cdf0e10cSrcweir { 2303cdf0e10cSrcweir sal_uInt32 nValue(0); 2304cdf0e10cSrcweir _rValue >>= nValue; 2305cdf0e10cSrcweir (*this) = static_cast<sal_Int64>(nValue); 2306cdf0e10cSrcweir setSigned(sal_False); 2307cdf0e10cSrcweir break; 2308cdf0e10cSrcweir } 2309cdf0e10cSrcweir case TypeClass_ENUM: 2310cdf0e10cSrcweir { 2311cdf0e10cSrcweir sal_Int32 enumValue( 0 ); 2312cdf0e10cSrcweir ::cppu::enum2int( enumValue, _rValue ); 2313cdf0e10cSrcweir (*this) = enumValue; 2314cdf0e10cSrcweir } 2315cdf0e10cSrcweir break; 2316cdf0e10cSrcweir 2317cdf0e10cSrcweir case TypeClass_SEQUENCE: 2318cdf0e10cSrcweir { 2319cdf0e10cSrcweir Sequence<sal_Int8> aDummy; 2320cdf0e10cSrcweir if ( _rValue >>= aDummy ) 2321cdf0e10cSrcweir (*this) = aDummy; 2322cdf0e10cSrcweir else 2323cdf0e10cSrcweir OSL_ENSURE( false, "ORowSetValue::fill: unsupported sequence type!" ); 2324cdf0e10cSrcweir break; 2325cdf0e10cSrcweir } 2326cdf0e10cSrcweir 2327cdf0e10cSrcweir case TypeClass_STRUCT: 2328cdf0e10cSrcweir { 2329cdf0e10cSrcweir ::com::sun::star::util::Date aDate; 2330cdf0e10cSrcweir ::com::sun::star::util::Time aTime; 2331cdf0e10cSrcweir ::com::sun::star::util::DateTime aDateTime; 2332cdf0e10cSrcweir if ( _rValue >>= aDate ) 2333cdf0e10cSrcweir { 2334cdf0e10cSrcweir (*this) = aDate; 2335cdf0e10cSrcweir } 2336cdf0e10cSrcweir else if ( _rValue >>= aTime ) 2337cdf0e10cSrcweir { 2338cdf0e10cSrcweir (*this) = aTime; 2339cdf0e10cSrcweir } 2340cdf0e10cSrcweir else if ( _rValue >>= aDateTime ) 2341cdf0e10cSrcweir { 2342cdf0e10cSrcweir (*this) = aDateTime; 2343cdf0e10cSrcweir } 2344cdf0e10cSrcweir else 2345cdf0e10cSrcweir OSL_ENSURE( false, "ORowSetValue::fill: unsupported structure!" ); 2346cdf0e10cSrcweir 2347cdf0e10cSrcweir break; 2348cdf0e10cSrcweir } 2349cdf0e10cSrcweir case TypeClass_INTERFACE: 2350cdf0e10cSrcweir { 2351cdf0e10cSrcweir Reference< XClob > xClob; 2352cdf0e10cSrcweir if ( _rValue >>= xClob ) 2353cdf0e10cSrcweir { 2354cdf0e10cSrcweir (*this) = _rValue; 2355cdf0e10cSrcweir setTypeKind(DataType::CLOB); 2356cdf0e10cSrcweir } 2357cdf0e10cSrcweir else 2358cdf0e10cSrcweir { 2359cdf0e10cSrcweir Reference< XBlob > xBlob; 2360cdf0e10cSrcweir if ( _rValue >>= xBlob ) 2361cdf0e10cSrcweir { 2362cdf0e10cSrcweir (*this) = _rValue; 2363cdf0e10cSrcweir setTypeKind(DataType::BLOB); 2364cdf0e10cSrcweir } 2365cdf0e10cSrcweir else 2366cdf0e10cSrcweir { 2367cdf0e10cSrcweir (*this) = _rValue; 2368cdf0e10cSrcweir } 2369cdf0e10cSrcweir } 2370cdf0e10cSrcweir } 2371cdf0e10cSrcweir break; 2372cdf0e10cSrcweir 2373cdf0e10cSrcweir default: 2374cdf0e10cSrcweir OSL_ENSURE(0,"Unknown type"); 2375cdf0e10cSrcweir break; 2376cdf0e10cSrcweir } 2377cdf0e10cSrcweir } 2378cdf0e10cSrcweir 2379cdf0e10cSrcweir } // namespace connectivity 2380