summaryrefslogtreecommitdiff
path: root/connectivity/source/commontools/FValue.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'connectivity/source/commontools/FValue.cxx')
-rw-r--r--connectivity/source/commontools/FValue.cxx2380
1 files changed, 0 insertions, 2380 deletions
diff --git a/connectivity/source/commontools/FValue.cxx b/connectivity/source/commontools/FValue.cxx
deleted file mode 100644
index 1f49fc64d0..0000000000
--- a/connectivity/source/commontools/FValue.cxx
+++ /dev/null
@@ -1,2380 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_connectivity.hxx"
-
-#include <stdio.h>
-#include "connectivity/FValue.hxx"
-#include "connectivity/CommonTools.hxx"
-#include <connectivity/dbconversion.hxx>
-#include <comphelper/extract.hxx>
-#include <com/sun/star/io/XInputStream.hpp>
-#include <rtl/ustrbuf.hxx>
-#include <rtl/logfile.hxx>
-
-using namespace ::dbtools;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::sdb;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::util;
-using namespace ::com::sun::star::io;
-
-namespace connectivity
-{
-
-namespace {
- static sal_Bool isStorageCompatible(sal_Int32 _eType1, sal_Int32 _eType2)
- {
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::isStorageCompatible" );
- sal_Bool bIsCompatible = sal_True;
-
- if (_eType1 != _eType2)
- {
- RTL_LOGFILE_CONTEXT_TRACE( aLogger, "ORowSetValue::isStorageCompatible _eType1 != _eType2" );
- switch (_eType1)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- bIsCompatible = (DataType::CHAR == _eType2)
- || (DataType::VARCHAR == _eType2)
- || (DataType::DECIMAL == _eType2)
- || (DataType::NUMERIC == _eType2)
- || (DataType::LONGVARCHAR == _eType2);
- break;
-
- case DataType::DOUBLE:
- case DataType::REAL:
- bIsCompatible = (DataType::DOUBLE == _eType2)
- || (DataType::REAL == _eType2);
- break;
-
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- bIsCompatible = (DataType::BINARY == _eType2)
- || (DataType::VARBINARY == _eType2)
- || (DataType::LONGVARBINARY == _eType2);
- break;
-
- case DataType::INTEGER:
- bIsCompatible = (DataType::SMALLINT == _eType2)
- || (DataType::TINYINT == _eType2)
- || (DataType::BIT == _eType2)
- || (DataType::BOOLEAN == _eType2);
- break;
- case DataType::SMALLINT:
- bIsCompatible = (DataType::TINYINT == _eType2)
- || (DataType::BIT == _eType2)
- || (DataType::BOOLEAN == _eType2);
- break;
- case DataType::TINYINT:
- bIsCompatible = (DataType::BIT == _eType2)
- || (DataType::BOOLEAN == _eType2);
- break;
-
- case DataType::BLOB:
- case DataType::CLOB:
- case DataType::OBJECT:
- bIsCompatible = (DataType::BLOB == _eType2)
- || (DataType::CLOB == _eType2)
- || (DataType::OBJECT == _eType2);
- break;
-
- default:
- bIsCompatible = sal_False;
- }
- }
- return bIsCompatible;
- }
-}
-
-// -----------------------------------------------------------------------------
-#ifdef DBG_UTIL
-
-#include <vector>
-#include <rtl/string.h>
-
-namespace tracing
-{
- struct AllocationType
- {
- const sal_Char* pName;
- sal_Int32 nAllocatedUnits;
-
- AllocationType( ) : pName( NULL ), nAllocatedUnits( 0 ) { }
- };
-
- // =============================================================================
- class AllocationTracer
- {
- public:
- typedef ::std::vector< AllocationType > AllocationState;
- static AllocationState s_aAllocated;
- static ::osl::Mutex s_aMutex;
-
- public:
- static void registerUnit( const sal_Char* _pName );
- static void revokeUnit( const sal_Char* _pName );
-
- private:
- static AllocationState::iterator getLocation( const sal_Char* _pName );
- };
-
- // =============================================================================
- AllocationTracer::AllocationState::iterator AllocationTracer::getLocation( const sal_Char* _pName )
- {
- AllocationState::iterator aLookFor = s_aAllocated.begin();
- for ( ;
- aLookFor != s_aAllocated.end();
- ++aLookFor
- )
- {
- if ( 0 == rtl_str_compare( aLookFor->pName, _pName ) )
- // found
- return aLookFor;
- }
- // not found
- s_aAllocated.push_back( AllocationType() );
- aLookFor = s_aAllocated.end(); --aLookFor;
- aLookFor->pName = _pName; // note that this assumes that _pName is a constant string ....
- return aLookFor;
- }
-
- // =============================================================================
- AllocationTracer::AllocationState AllocationTracer::s_aAllocated;
- ::osl::Mutex AllocationTracer::s_aMutex;
-
- // =============================================================================
- void AllocationTracer::registerUnit( const sal_Char* _pName )
- {
- ::osl::MutexGuard aGuard( s_aMutex );
-
- AllocationState::iterator aPos = getLocation( _pName );
- ++aPos->nAllocatedUnits;
- }
-
- // =============================================================================
- void AllocationTracer::revokeUnit( const sal_Char* _pName )
- {
- ::osl::MutexGuard aGuard( s_aMutex );
-
- AllocationState::iterator aPos = getLocation( _pName );
- --aPos->nAllocatedUnits;
- }
-
-#define TRACE_ALLOC( type ) tracing::AllocationTracer::registerUnit( #type );
-#define TRACE_FREE( type ) tracing::AllocationTracer::revokeUnit( #type );
-}
-#else
-#define TRACE_ALLOC( type )
-#define TRACE_FREE( type )
-#endif
-
-// -----------------------------------------------------------------------------
-void ORowSetValue::setTypeKind(sal_Int32 _eType)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::setTypeKind" );
- if ( !m_bNull && !isStorageCompatible(_eType, m_eTypeKind) )
- {
- switch(_eType)
- {
- case DataType::VARCHAR:
- case DataType::CHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- (*this) = getString();
- break;
- case DataType::BIGINT:
- (*this) = getLong();
- break;
-
- case DataType::FLOAT:
- (*this) = getFloat();
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- (*this) = getDouble();
- break;
- case DataType::TINYINT:
- (*this) = getInt8();
- break;
- case DataType::SMALLINT:
- (*this) = getInt16();
- break;
- case DataType::INTEGER:
- (*this) = getInt32();
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- (*this) = getBool();
- break;
- case DataType::DATE:
- (*this) = getDate();
- break;
- case DataType::TIME:
- (*this) = getTime();
- break;
- case DataType::TIMESTAMP:
- (*this) = getDateTime();
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- (*this) = getSequence();
- break;
- case DataType::BLOB:
- case DataType::CLOB:
- case DataType::OBJECT:
- case DataType::OTHER:
- (*this) = getAny();
- break;
- default:
- (*this) = getAny();
- OSL_FAIL("ORowSetValue:operator==(): UNSPUPPORTED TYPE!");
- }
- }
-
- m_eTypeKind = _eType;
-}
-
-// -----------------------------------------------------------------------------
-void ORowSetValue::free()
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::free" );
- if(!m_bNull)
- {
- switch(m_eTypeKind)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- OSL_ENSURE(m_aValue.m_pString,"String pointer is null!");
- rtl_uString_release(m_aValue.m_pString);
- m_aValue.m_pString = NULL;
- break;
- case DataType::INTEGER:
- if ( !m_bSigned )
- {
- delete (sal_Int64*)m_aValue.m_pValue;
- TRACE_FREE( sal_Int64 )
- m_aValue.m_pValue = NULL;
- }
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- {
- delete (sal_Int64*)m_aValue.m_pValue;
- TRACE_FREE( sal_Int64 )
- m_aValue.m_pValue = NULL;
- }
- else
- {
- OSL_ENSURE(m_aValue.m_pString,"String pointer is null!");
- rtl_uString_release(m_aValue.m_pString);
- m_aValue.m_pString = NULL;
- }
- break;
- case DataType::FLOAT:
- delete (float*)m_aValue.m_pValue;
- TRACE_FREE( float )
- m_aValue.m_pValue = NULL;
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- delete (double*)m_aValue.m_pValue;
- TRACE_FREE( double )
- m_aValue.m_pValue = NULL;
- break;
- case DataType::DATE:
- delete (::com::sun::star::util::Date*)m_aValue.m_pValue;
- TRACE_FREE( Date )
- m_aValue.m_pValue = NULL;
- break;
- case DataType::TIME:
- delete (::com::sun::star::util::Time*)m_aValue.m_pValue;
- TRACE_FREE( Time )
- m_aValue.m_pValue = NULL;
- break;
- case DataType::TIMESTAMP:
- delete (::com::sun::star::util::DateTime*)m_aValue.m_pValue;
- TRACE_FREE( DateTime )
- m_aValue.m_pValue = NULL;
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- delete (Sequence<sal_Int8>*)m_aValue.m_pValue;
- TRACE_FREE( Sequence_sal_Int8 )
- m_aValue.m_pValue = NULL;
- break;
- case DataType::BLOB:
- case DataType::CLOB:
- case DataType::OBJECT:
- delete (Any*)m_aValue.m_pValue;
- TRACE_FREE( Any )
- m_aValue.m_pValue = NULL;
- break;
- case DataType::BIT:
- case DataType::TINYINT:
- case DataType::SMALLINT:
- case DataType::BOOLEAN:
- break;
- default:
- if ( m_aValue.m_pValue )
- {
- delete (Any*)m_aValue.m_pValue;
- TRACE_FREE( Any )
- m_aValue.m_pValue = NULL;
- }
- break;
-
- }
- m_bNull = sal_True;
- }
-}
-// -----------------------------------------------------------------------------
-ORowSetValue& ORowSetValue::operator=(const ORowSetValue& _rRH)
-{
- if(&_rRH == this)
- return *this;
-
- if ( m_eTypeKind != _rRH.m_eTypeKind || (_rRH.m_bNull && !m_bNull) || m_bSigned != _rRH.m_bSigned)
- free();
-
- m_bBound = _rRH.m_bBound;
- m_eTypeKind = _rRH.m_eTypeKind;
- m_bSigned = _rRH.m_bSigned;
-
- if(m_bNull && !_rRH.m_bNull)
- {
- switch(_rRH.m_eTypeKind)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- rtl_uString_acquire(_rRH.m_aValue.m_pString);
- m_aValue.m_pString = _rRH.m_aValue.m_pString;
- break;
- case DataType::BIGINT:
- if ( _rRH.m_bSigned )
- {
- m_aValue.m_pValue = new sal_Int64(*(sal_Int64*)_rRH.m_aValue.m_pValue);
- TRACE_ALLOC( sal_Int64 )
- }
- else
- {
- rtl_uString_acquire(_rRH.m_aValue.m_pString);
- m_aValue.m_pString = _rRH.m_aValue.m_pString;
- }
- break;
- case DataType::FLOAT:
- m_aValue.m_pValue = new float(*(float*)_rRH.m_aValue.m_pValue);
- TRACE_ALLOC( float )
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- m_aValue.m_pValue = new double(*(double*)_rRH.m_aValue.m_pValue);
- TRACE_ALLOC( double )
- break;
- case DataType::DATE:
- m_aValue.m_pValue = new Date(*(Date*)_rRH.m_aValue.m_pValue);
- TRACE_ALLOC( Date )
- break;
- case DataType::TIME:
- m_aValue.m_pValue = new Time(*(Time*)_rRH.m_aValue.m_pValue);
- TRACE_ALLOC( Time )
- break;
- case DataType::TIMESTAMP:
- m_aValue.m_pValue = new DateTime(*(DateTime*)_rRH.m_aValue.m_pValue);
- TRACE_ALLOC( DateTime )
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- m_aValue.m_pValue = new Sequence<sal_Int8>(*(Sequence<sal_Int8>*)_rRH.m_aValue.m_pValue);
- TRACE_ALLOC( Sequence_sal_Int8 )
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- m_aValue.m_bBool = _rRH.m_aValue.m_bBool;
- break;
- case DataType::TINYINT:
- if ( _rRH.m_bSigned )
- m_aValue.m_nInt8 = _rRH.m_aValue.m_nInt8;
- else
- m_aValue.m_nInt16 = _rRH.m_aValue.m_nInt16;
- break;
- case DataType::SMALLINT:
- if ( _rRH.m_bSigned )
- m_aValue.m_nInt16 = _rRH.m_aValue.m_nInt16;
- else
- m_aValue.m_nInt32 = _rRH.m_aValue.m_nInt32;
- break;
- case DataType::INTEGER:
- if ( _rRH.m_bSigned )
- m_aValue.m_nInt32 = _rRH.m_aValue.m_nInt32;
- else
- {
- m_aValue.m_pValue = new sal_Int64(*(sal_Int64*)_rRH.m_aValue.m_pValue);
- TRACE_ALLOC( sal_Int64 )
- }
- break;
- default:
- m_aValue.m_pValue = new Any(*(Any*)_rRH.m_aValue.m_pValue);
- TRACE_ALLOC( Any )
- }
- }
- else if(!_rRH.m_bNull)
- {
- switch(_rRH.m_eTypeKind)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- (*this) = ::rtl::OUString(_rRH.m_aValue.m_pString);
- break;
- case DataType::BIGINT:
- if ( _rRH.m_bSigned )
- (*this) = *(sal_Int64*)_rRH.m_aValue.m_pValue;
- else
- (*this) = ::rtl::OUString(_rRH.m_aValue.m_pString);
- break;
- case DataType::FLOAT:
- (*this) = *(float*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- (*this) = *(double*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::DATE:
- (*this) = *(Date*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::TIME:
- (*this) = *(Time*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::TIMESTAMP:
- (*this) = *(DateTime*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- (*this) = *(Sequence<sal_Int8>*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- m_aValue.m_bBool = _rRH.m_aValue.m_bBool;
- break;
- case DataType::TINYINT:
- if ( _rRH.m_bSigned )
- m_aValue.m_nInt8 = _rRH.m_aValue.m_nInt8;
- else
- m_aValue.m_nInt16 = _rRH.m_aValue.m_nInt16;
- break;
- case DataType::SMALLINT:
- if ( _rRH.m_bSigned )
- m_aValue.m_nInt16 = _rRH.m_aValue.m_nInt16;
- else
- m_aValue.m_nInt32 = _rRH.m_aValue.m_nInt32;
- break;
- case DataType::INTEGER:
- if ( _rRH.m_bSigned )
- m_aValue.m_nInt32 = _rRH.m_aValue.m_nInt32;
- else
- *static_cast<sal_Int64*>(m_aValue.m_pValue) = *(sal_Int64*)_rRH.m_aValue.m_pValue;
- break;
- default:
- (*(Any*)m_aValue.m_pValue) = (*(Any*)_rRH.m_aValue.m_pValue);
- }
- }
-
- m_bNull = _rRH.m_bNull;
- // OJ: BUGID: 96277
- m_eTypeKind = _rRH.m_eTypeKind;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-
-ORowSetValue& ORowSetValue::operator=(const Date& _rRH)
-{
- if(m_eTypeKind != DataType::DATE)
- free();
-
- if(m_bNull)
- {
- m_aValue.m_pValue = new Date(_rRH);
- TRACE_ALLOC( Date )
- m_eTypeKind = DataType::DATE;
- m_bNull = sal_False;
- }
- else
- *(Date*)m_aValue.m_pValue = _rRH;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-ORowSetValue& ORowSetValue::operator=(const Time& _rRH)
-{
- if(m_eTypeKind != DataType::TIME)
- free();
-
- if(m_bNull)
- {
- m_aValue.m_pValue = new Time(_rRH);
- TRACE_ALLOC( Time )
- m_eTypeKind = DataType::TIME;
- m_bNull = sal_False;
- }
- else
- *(Time*)m_aValue.m_pValue = _rRH;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-ORowSetValue& ORowSetValue::operator=(const DateTime& _rRH)
-{
- if(m_eTypeKind != DataType::TIMESTAMP)
- free();
- if(m_bNull)
- {
- m_aValue.m_pValue = new DateTime(_rRH);
- TRACE_ALLOC( DateTime )
- m_eTypeKind = DataType::TIMESTAMP;
- m_bNull = sal_False;
- }
- else
- *(DateTime*)m_aValue.m_pValue = _rRH;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-
-ORowSetValue& ORowSetValue::operator=(const ::rtl::OUString& _rRH)
-{
- if(m_eTypeKind != DataType::VARCHAR || m_aValue.m_pString != _rRH.pData)
- {
- free();
- m_bNull = sal_False;
-
- m_aValue.m_pString = _rRH.pData;
- rtl_uString_acquire(m_aValue.m_pString);
- m_eTypeKind = DataType::VARCHAR;
- }
-
- return *this;
-}
-// -------------------------------------------------------------------------
-
-ORowSetValue& ORowSetValue::operator=(const double& _rRH)
-{
- if( !isStorageCompatible(m_eTypeKind,DataType::DOUBLE) )
- free();
-
- if(m_bNull)
- {
- m_aValue.m_pValue = new double(_rRH);
- TRACE_ALLOC( double )
- m_eTypeKind = DataType::DOUBLE;
- m_bNull = sal_False;
- }
- else
- *(double*)m_aValue.m_pValue = _rRH;
-
- return *this;
-}
-// -----------------------------------------------------------------------------
-ORowSetValue& ORowSetValue::operator=(const float& _rRH)
-{
- if(m_eTypeKind != DataType::FLOAT)
- free();
-
- if(m_bNull)
- {
- m_aValue.m_pValue = new float(_rRH);
- TRACE_ALLOC( float )
- m_eTypeKind = DataType::FLOAT;
- m_bNull = sal_False;
- }
- else
- *(float*)m_aValue.m_pValue = _rRH;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-
-ORowSetValue& ORowSetValue::operator=(const sal_Int8& _rRH)
-{
- if(m_eTypeKind != DataType::TINYINT )
- free();
-
- m_aValue.m_nInt8 = _rRH;
- m_eTypeKind = DataType::TINYINT;
- m_bNull = sal_False;
- return *this;
-}
-// -------------------------------------------------------------------------
-
-ORowSetValue& ORowSetValue::operator=(const sal_Int16& _rRH)
-{
- if(m_eTypeKind != DataType::SMALLINT )
- free();
-
- m_aValue.m_nInt16 = _rRH;
- m_eTypeKind = DataType::SMALLINT;
- m_bNull = sal_False;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-
-ORowSetValue& ORowSetValue::operator=(const sal_Int32& _rRH)
-{
- if(m_eTypeKind != DataType::INTEGER )
- free();
-
- if ( m_bSigned )
- m_aValue.m_nInt32 = _rRH;
- else
- {
- if ( m_bNull )
- {
- m_aValue.m_pValue = new sal_Int64(_rRH);
- TRACE_ALLOC( sal_Int64 )
- }
- else
- *static_cast<sal_Int64*>(m_aValue.m_pValue) = static_cast<sal_Int64>(_rRH);
- }
-
- m_eTypeKind = DataType::INTEGER;
- m_bNull = sal_False;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-
-ORowSetValue& ORowSetValue::operator=(const sal_Bool _rRH)
-{
- if(m_eTypeKind != DataType::BIT && DataType::BOOLEAN != m_eTypeKind )
- free();
-
- m_aValue.m_bBool = _rRH;
- m_eTypeKind = DataType::BIT;
- m_bNull = sal_False;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-ORowSetValue& ORowSetValue::operator=(const sal_Int64& _rRH)
-{
- if ( DataType::BIGINT != m_eTypeKind || !m_bSigned )
- free();
-
- if ( m_bSigned )
- {
- if(m_bNull)
- {
- m_aValue.m_pValue = new sal_Int64(_rRH);
- TRACE_ALLOC( sal_Int64 )
- }
- else
- *static_cast<sal_Int64*>(m_aValue.m_pValue) = _rRH;
- }
- else
- {
- ::rtl::OUString aVal = ::rtl::OUString::valueOf(_rRH);
- m_aValue.m_pString = aVal.pData;
- rtl_uString_acquire(m_aValue.m_pString);
- }
-
- m_eTypeKind = DataType::BIGINT;
- m_bNull = sal_False;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-ORowSetValue& ORowSetValue::operator=(const Sequence<sal_Int8>& _rRH)
-{
- if (!isStorageCompatible(DataType::LONGVARBINARY,m_eTypeKind))
- free();
-
- if (m_bNull)
- {
- m_aValue.m_pValue = new Sequence<sal_Int8>(_rRH);
- TRACE_ALLOC( Sequence_sal_Int8 )
- }
- else
- *static_cast< Sequence< sal_Int8 >* >(m_aValue.m_pValue) = _rRH;
-
- m_eTypeKind = DataType::LONGVARBINARY;
- m_bNull = sal_False;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-ORowSetValue& ORowSetValue::operator=(const Any& _rAny)
-{
- if (!isStorageCompatible(DataType::OBJECT,m_eTypeKind))
- free();
-
- if ( m_bNull )
- {
- m_aValue.m_pValue = new Any(_rAny);
- TRACE_ALLOC( Any )
- }
- else
- *static_cast<Any*>(m_aValue.m_pValue) = _rAny;
-
- m_eTypeKind = DataType::OBJECT;
- m_bNull = sal_False;
-
- return *this;
-}
-// -------------------------------------------------------------------------
-
-sal_Bool operator==(const Date& _rLH,const Date& _rRH)
-{
- return _rLH.Day == _rRH.Day && _rLH.Month == _rRH.Month && _rLH.Year == _rRH.Year;
-}
-// -------------------------------------------------------------------------
-
-sal_Bool operator==(const Time& _rLH,const Time& _rRH)
-{
- return _rLH.Minutes == _rRH.Minutes && _rLH.Hours == _rRH.Hours && _rLH.Seconds == _rRH.Seconds && _rLH.HundredthSeconds == _rRH.HundredthSeconds;
-}
-// -------------------------------------------------------------------------
-
-sal_Bool operator==(const DateTime& _rLH,const DateTime& _rRH)
-{
- return _rLH.Day == _rRH.Day && _rLH.Month == _rRH.Month && _rLH.Year == _rRH.Year &&
- _rLH.Minutes == _rRH.Minutes && _rLH.Hours == _rRH.Hours && _rLH.Seconds == _rRH.Seconds && _rLH.HundredthSeconds == _rRH.HundredthSeconds;
-}
-// -------------------------------------------------------------------------
-
-bool ORowSetValue::operator==(const ORowSetValue& _rRH) const
-{
- if ( m_eTypeKind != _rRH.m_eTypeKind )
- {
- switch(m_eTypeKind)
- {
- case DataType::FLOAT:
- case DataType::DOUBLE:
- case DataType::REAL:
- return getDouble() == _rRH.getDouble();
- default:
- switch(_rRH.m_eTypeKind)
- {
- case DataType::FLOAT:
- case DataType::DOUBLE:
- case DataType::REAL:
- return getDouble() == _rRH.getDouble();
- default:
- break;
- }
- break;
- }
- return false;
- }
- if ( m_bNull != _rRH.isNull() )
- return false;
- if(m_bNull && _rRH.isNull())
- return true;
-
- bool bRet = false;
- OSL_ENSURE(!m_bNull,"SHould not be null!");
- switch(m_eTypeKind)
- {
- case DataType::VARCHAR:
- case DataType::CHAR:
- case DataType::LONGVARCHAR:
- {
- ::rtl::OUString aVal1(m_aValue.m_pString);
- ::rtl::OUString aVal2(_rRH.m_aValue.m_pString);
- return aVal1 == aVal2;
- }
- default:
- if ( m_bSigned != _rRH.m_bSigned )
- return false;
- break;
- }
-
- switch(m_eTypeKind)
- {
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- {
- ::rtl::OUString aVal1(m_aValue.m_pString);
- ::rtl::OUString aVal2(_rRH.m_aValue.m_pString);
- bRet = aVal1 == aVal2;
- }
- break;
- case DataType::FLOAT:
- bRet = *(float*)m_aValue.m_pValue == *(float*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- bRet = *(double*)m_aValue.m_pValue == *(double*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::TINYINT:
- bRet = m_bSigned ? ( m_aValue.m_nInt8 == _rRH.m_aValue.m_nInt8 ) : (m_aValue.m_nInt16 == _rRH.m_aValue.m_nInt16);
- break;
- case DataType::SMALLINT:
- bRet = m_bSigned ? ( m_aValue.m_nInt16 == _rRH.m_aValue.m_nInt16 ) : (m_aValue.m_nInt32 == _rRH.m_aValue.m_nInt32);
- break;
- case DataType::INTEGER:
- 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);
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- bRet = *(sal_Int64*)m_aValue.m_pValue == *(sal_Int64*)_rRH.m_aValue.m_pValue;
- else
- {
- ::rtl::OUString aVal1(m_aValue.m_pString);
- ::rtl::OUString aVal2(_rRH.m_aValue.m_pString);
- bRet = aVal1 == aVal2;
- }
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- bRet = m_aValue.m_bBool == _rRH.m_aValue.m_bBool;
- break;
- case DataType::DATE:
- bRet = *(Date*)m_aValue.m_pValue == *(Date*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::TIME:
- bRet = *(Time*)m_aValue.m_pValue == *(Time*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::TIMESTAMP:
- bRet = *(DateTime*)m_aValue.m_pValue == *(DateTime*)_rRH.m_aValue.m_pValue;
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- bRet = false;
- break;
- case DataType::BLOB:
- case DataType::CLOB:
- case DataType::OBJECT:
- case DataType::OTHER:
- bRet = false;
- break;
- default:
- bRet = false;
- OSL_FAIL("ORowSetValue::operator==(): UNSPUPPORTED TYPE!");
- break;
- }
- return bRet;
-}
-// -------------------------------------------------------------------------
-Any ORowSetValue::makeAny() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::makeAny" );
- Any rValue;
- if(isBound() && !isNull())
- {
- switch(getTypeKind())
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- OSL_ENSURE(m_aValue.m_pString,"Value is null!");
- rValue <<= (::rtl::OUString)m_aValue.m_pString;
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- {
- OSL_ENSURE(m_aValue.m_pValue,"Value is null!");
- rValue <<= *(sal_Int64*)m_aValue.m_pValue;
- }
- else
- {
- OSL_ENSURE(m_aValue.m_pString,"Value is null!");
- rValue <<= (::rtl::OUString)m_aValue.m_pString;
- }
- break;
- case DataType::FLOAT:
- OSL_ENSURE(m_aValue.m_pValue,"Value is null!");
- rValue <<= *(float*)m_aValue.m_pValue;
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- OSL_ENSURE(m_aValue.m_pValue,"Value is null!");
- rValue <<= *(double*)m_aValue.m_pValue;
- break;
- case DataType::DATE:
- OSL_ENSURE(m_aValue.m_pValue,"Value is null!");
- rValue <<= *(Date*)m_aValue.m_pValue;
- break;
- case DataType::TIME:
- OSL_ENSURE(m_aValue.m_pValue,"Value is null!");
- rValue <<= *(Time*)m_aValue.m_pValue;
- break;
- case DataType::TIMESTAMP:
- OSL_ENSURE(m_aValue.m_pValue,"Value is null!");
- rValue <<= *(DateTime*)m_aValue.m_pValue;
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- OSL_ENSURE(m_aValue.m_pValue,"Value is null!");
- rValue <<= *(Sequence<sal_Int8>*)m_aValue.m_pValue;
- break;
- case DataType::BLOB:
- case DataType::CLOB:
- case DataType::OBJECT:
- case DataType::OTHER:
- rValue = getAny();
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- rValue.setValue( &m_aValue.m_bBool, ::getCppuBooleanType() );
- break;
- case DataType::TINYINT:
- if ( m_bSigned )
- rValue <<= m_aValue.m_nInt8;
- else
- rValue <<= m_aValue.m_nInt16;
- break;
- case DataType::SMALLINT:
- if ( m_bSigned )
- rValue <<= m_aValue.m_nInt16;
- else
- rValue <<= m_aValue.m_nInt32;
- break;
- case DataType::INTEGER:
- if ( m_bSigned )
- rValue <<= m_aValue.m_nInt32;
- else
- {
- OSL_ENSURE(m_aValue.m_pValue,"Value is null!");
- rValue <<= *(sal_Int64*)m_aValue.m_pValue;
- }
- break;
- default:
- OSL_FAIL("ORowSetValue::makeAny(): UNSPUPPORTED TYPE!");
- rValue = getAny();
- break;
- }
- }
- return rValue;
-}
-// -------------------------------------------------------------------------
-::rtl::OUString ORowSetValue::getString( ) const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getString" );
- ::rtl::OUString aRet;
- if(!m_bNull)
- {
- switch(getTypeKind())
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- aRet = m_aValue.m_pString;
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- aRet = ::rtl::OUString::valueOf((sal_Int64)*this);
- else
- aRet = m_aValue.m_pString;
- break;
- case DataType::FLOAT:
- aRet = ::rtl::OUString::valueOf((float)*this);
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- aRet = ::rtl::OUString::valueOf((double)*this);
- break;
- case DataType::DATE:
- aRet = connectivity::toDateString(*this);
- break;
- case DataType::TIME:
- aRet = connectivity::toTimeString(*this);
- break;
- case DataType::TIMESTAMP:
- aRet = connectivity::toDateTimeString(*this);
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- {
- ::rtl::OUStringBuffer sVal(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("0x")));
- Sequence<sal_Int8> aSeq(getSequence());
- const sal_Int8* pBegin = aSeq.getConstArray();
- const sal_Int8* pEnd = pBegin + aSeq.getLength();
- for(;pBegin != pEnd;++pBegin)
- sVal.append((sal_Int32)*pBegin,16);
- aRet = sVal.makeStringAndClear();
- }
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- aRet = ::rtl::OUString::valueOf((sal_Int32)(sal_Bool)*this);
- break;
- case DataType::TINYINT:
- if ( m_bSigned )
- aRet = ::rtl::OUString::valueOf((sal_Int32)(sal_Int8)*this);
- else
- aRet = ::rtl::OUString::valueOf((sal_Int32)(sal_Int16)*this);
- break;
- case DataType::SMALLINT:
- if ( m_bSigned )
- aRet = ::rtl::OUString::valueOf((sal_Int32)(sal_Int16)*this);
- else
- aRet = ::rtl::OUString::valueOf((sal_Int32)*this);
- break;
- case DataType::INTEGER:
- if ( m_bSigned )
- aRet = ::rtl::OUString::valueOf((sal_Int32)*this);
- else
- aRet = ::rtl::OUString::valueOf((sal_Int64)*this);
- break;
- case DataType::CLOB:
- {
- Any aValue( getAny() );
- Reference< XClob > xClob;
- if ( aValue >>= xClob )
- {
- if ( xClob.is() )
- {
- aRet = xClob->getSubString(1,(sal_Int32)xClob->length() );
- }
- }
- }
- break;
- default:
- {
- Any aValue = getAny();
- aValue >>= aRet;
- break;
- }
- }
- }
- return aRet;
-}
-// -------------------------------------------------------------------------
-sal_Bool ORowSetValue::getBool() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getBool" );
- sal_Bool bRet = sal_False;
- if(!m_bNull)
- {
- switch(getTypeKind())
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::LONGVARCHAR:
- {
- const ::rtl::OUString sValue(m_aValue.m_pString);
- const static ::rtl::OUString s_sTrue(RTL_CONSTASCII_USTRINGPARAM("true"));
- const static ::rtl::OUString s_sFalse(RTL_CONSTASCII_USTRINGPARAM("false"));
- if ( sValue.equalsIgnoreAsciiCase(s_sTrue) )
- {
- bRet = sal_True;
- break;
- }
- else if ( sValue.equalsIgnoreAsciiCase(s_sFalse) )
- {
- bRet = sal_False;
- break;
- }
- }
- // run through
- case DataType::DECIMAL:
- case DataType::NUMERIC:
-
- bRet = ::rtl::OUString(m_aValue.m_pString).toInt32() != 0;
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- bRet = *(sal_Int64*)m_aValue.m_pValue != 0;
- else
- bRet = ::rtl::OUString(m_aValue.m_pString).toInt64() != 0;
- break;
- case DataType::FLOAT:
- bRet = *(float*)m_aValue.m_pValue != 0.0;
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- bRet = *(double*)m_aValue.m_pValue != 0.0;
- break;
- case DataType::DATE:
- case DataType::TIME:
- case DataType::TIMESTAMP:
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- OSL_ASSERT(!"getBool() for this type is not allowed!");
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- bRet = m_aValue.m_bBool;
- break;
- case DataType::TINYINT:
- bRet = m_bSigned ? (m_aValue.m_nInt8 != 0) : (m_aValue.m_nInt16 != 0);
- break;
- case DataType::SMALLINT:
- bRet = m_bSigned ? (m_aValue.m_nInt16 != 0) : (m_aValue.m_nInt32 != 0);
- break;
- case DataType::INTEGER:
- bRet = m_bSigned ? (m_aValue.m_nInt32 != 0) : (*static_cast<sal_Int64*>(m_aValue.m_pValue) != sal_Int64(0));
- break;
- default:
- {
- Any aValue = getAny();
- aValue >>= bRet;
- break;
- }
- }
- }
- return bRet;
-}
-// -------------------------------------------------------------------------
-sal_Int8 ORowSetValue::getInt8() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getInt8" );
-
-
- sal_Int8 nRet = 0;
- if(!m_bNull)
- {
- switch(getTypeKind())
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- nRet = sal_Int8(::rtl::OUString(m_aValue.m_pString).toInt32());
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- nRet = sal_Int8(*(sal_Int64*)m_aValue.m_pValue);
- else
- nRet = sal_Int8(::rtl::OUString(m_aValue.m_pString).toInt32());
- break;
- case DataType::FLOAT:
- nRet = sal_Int8(*(float*)m_aValue.m_pValue);
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- nRet = sal_Int8(*(double*)m_aValue.m_pValue);
- break;
- case DataType::DATE:
- case DataType::TIME:
- case DataType::TIMESTAMP:
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- case DataType::BLOB:
- case DataType::CLOB:
- OSL_ASSERT(!"getInt8() for this type is not allowed!");
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- nRet = m_aValue.m_bBool;
- break;
- case DataType::TINYINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt8;
- else
- nRet = static_cast<sal_Int8>(m_aValue.m_nInt16);
- break;
- case DataType::SMALLINT:
- if ( m_bSigned )
- nRet = static_cast<sal_Int8>(m_aValue.m_nInt16);
- else
- nRet = static_cast<sal_Int8>(m_aValue.m_nInt32);
- break;
- case DataType::INTEGER:
- if ( m_bSigned )
- nRet = static_cast<sal_Int8>(m_aValue.m_nInt32);
- else
- nRet = static_cast<sal_Int8>(*static_cast<sal_Int64*>(m_aValue.m_pValue));
- break;
- default:
- {
- Any aValue = getAny();
- aValue >>= nRet;
- break;
- }
- }
- }
- return nRet;
-}
-// -------------------------------------------------------------------------
-sal_Int16 ORowSetValue::getInt16() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getInt16" );
-
-
- sal_Int16 nRet = 0;
- if(!m_bNull)
- {
- switch(getTypeKind())
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- nRet = sal_Int16(::rtl::OUString(m_aValue.m_pString).toInt32());
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- nRet = sal_Int16(*(sal_Int64*)m_aValue.m_pValue);
- else
- nRet = sal_Int16(::rtl::OUString(m_aValue.m_pString).toInt32());
- break;
- case DataType::FLOAT:
- nRet = sal_Int16(*(float*)m_aValue.m_pValue);
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- nRet = sal_Int16(*(double*)m_aValue.m_pValue);
- break;
- case DataType::DATE:
- case DataType::TIME:
- case DataType::TIMESTAMP:
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- case DataType::BLOB:
- case DataType::CLOB:
- OSL_ASSERT(!"getInt16() for this type is not allowed!");
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- nRet = m_aValue.m_bBool;
- break;
- case DataType::TINYINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt8;
- else
- nRet = m_aValue.m_nInt16;
- break;
- case DataType::SMALLINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt16;
- else
- nRet = static_cast<sal_Int16>(m_aValue.m_nInt32);
- break;
- case DataType::INTEGER:
- if ( m_bSigned )
- nRet = static_cast<sal_Int16>(m_aValue.m_nInt32);
- else
- nRet = static_cast<sal_Int16>(*static_cast<sal_Int64*>(m_aValue.m_pValue));
- break;
- default:
- {
- Any aValue = getAny();
- aValue >>= nRet;
- break;
- }
- }
- }
- return nRet;
-}
-// -------------------------------------------------------------------------
-sal_Int32 ORowSetValue::getInt32() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getInt32" );
- sal_Int32 nRet = 0;
- if(!m_bNull)
- {
- switch(getTypeKind())
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- nRet = ::rtl::OUString(m_aValue.m_pString).toInt32();
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- nRet = sal_Int32(*(sal_Int64*)m_aValue.m_pValue);
- else
- nRet = ::rtl::OUString(m_aValue.m_pString).toInt32();
- break;
- case DataType::FLOAT:
- nRet = sal_Int32(*(float*)m_aValue.m_pValue);
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- nRet = sal_Int32(*(double*)m_aValue.m_pValue);
- break;
- case DataType::DATE:
- nRet = dbtools::DBTypeConversion::toDays(*(::com::sun::star::util::Date*)m_aValue.m_pValue);
- break;
- case DataType::TIME:
- case DataType::TIMESTAMP:
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- case DataType::BLOB:
- case DataType::CLOB:
- OSL_ASSERT(!"getInt32() for this type is not allowed!");
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- nRet = m_aValue.m_bBool;
- break;
- case DataType::TINYINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt8;
- else
- nRet = m_aValue.m_nInt16;
- break;
- case DataType::SMALLINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt16;
- else
- nRet = m_aValue.m_nInt32;
- break;
- case DataType::INTEGER:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt32;
- else
- nRet = static_cast<sal_Int32>(*static_cast<sal_Int64*>(m_aValue.m_pValue));
- break;
- default:
- {
- Any aValue = getAny();
- aValue >>= nRet;
- break;
- }
- }
- }
- return nRet;
-}
-// -------------------------------------------------------------------------
-sal_Int64 ORowSetValue::getLong() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getLong" );
- sal_Int64 nRet = 0;
- if(!m_bNull)
- {
- switch(getTypeKind())
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- nRet = ::rtl::OUString(m_aValue.m_pString).toInt64();
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- nRet = *(sal_Int64*)m_aValue.m_pValue;
- else
- nRet = ::rtl::OUString(m_aValue.m_pString).toInt64();
- break;
- case DataType::FLOAT:
- nRet = sal_Int64(*(float*)m_aValue.m_pValue);
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- nRet = sal_Int64(*(double*)m_aValue.m_pValue);
- break;
- case DataType::DATE:
- nRet = dbtools::DBTypeConversion::toDays(*(::com::sun::star::util::Date*)m_aValue.m_pValue);
- break;
- case DataType::TIME:
- case DataType::TIMESTAMP:
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- case DataType::BLOB:
- case DataType::CLOB:
- OSL_ASSERT(!"getInt32() for this type is not allowed!");
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- nRet = m_aValue.m_bBool;
- break;
- case DataType::TINYINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt8;
- else
- nRet = m_aValue.m_nInt16;
- break;
- case DataType::SMALLINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt16;
- else
- nRet = m_aValue.m_nInt32;
- break;
- case DataType::INTEGER:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt32;
- else
- nRet = *(sal_Int64*)m_aValue.m_pValue;
- break;
- default:
- {
- Any aValue = getAny();
- aValue >>= nRet;
- break;
- }
- }
- }
- return nRet;
-}
-// -------------------------------------------------------------------------
-float ORowSetValue::getFloat() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getFloat" );
- float nRet = 0;
- if(!m_bNull)
- {
- switch(getTypeKind())
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- nRet = ::rtl::OUString(m_aValue.m_pString).toFloat();
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- nRet = float(*(sal_Int64*)m_aValue.m_pValue);
- else
- nRet = ::rtl::OUString(m_aValue.m_pString).toFloat();
- break;
- case DataType::FLOAT:
- nRet = *(float*)m_aValue.m_pValue;
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- nRet = (float)*(double*)m_aValue.m_pValue;
- break;
- case DataType::DATE:
- nRet = (float)dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::Date*)m_aValue.m_pValue);
- break;
- case DataType::TIME:
- nRet = (float)dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::Time*)m_aValue.m_pValue);
- break;
- case DataType::TIMESTAMP:
- nRet = (float)dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::DateTime*)m_aValue.m_pValue);
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- case DataType::BLOB:
- case DataType::CLOB:
- OSL_ASSERT(!"getDouble() for this type is not allowed!");
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- nRet = m_aValue.m_bBool;
- break;
- case DataType::TINYINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt8;
- else
- nRet = m_aValue.m_nInt16;
- break;
- case DataType::SMALLINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt16;
- else
- nRet = (float)m_aValue.m_nInt32;
- break;
- case DataType::INTEGER:
- if ( m_bSigned )
- nRet = (float)m_aValue.m_nInt32;
- else
- nRet = float(*(sal_Int64*)m_aValue.m_pValue);
- break;
- default:
- {
- Any aValue = getAny();
- aValue >>= nRet;
- break;
- }
- }
- }
- return nRet;
-}
-// -------------------------------------------------------------------------
-double ORowSetValue::getDouble() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getDouble" );
-
-
- double nRet = 0;
- if(!m_bNull)
- {
- switch(getTypeKind())
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- nRet = ::rtl::OUString(m_aValue.m_pString).toDouble();
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- nRet = double(*(sal_Int64*)m_aValue.m_pValue);
- else
- nRet = ::rtl::OUString(m_aValue.m_pString).toDouble();
- break;
- case DataType::FLOAT:
- nRet = *(float*)m_aValue.m_pValue;
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- nRet = *(double*)m_aValue.m_pValue;
- break;
- case DataType::DATE:
- nRet = dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::Date*)m_aValue.m_pValue);
- break;
- case DataType::TIME:
- nRet = dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::Time*)m_aValue.m_pValue);
- break;
- case DataType::TIMESTAMP:
- nRet = dbtools::DBTypeConversion::toDouble(*(::com::sun::star::util::DateTime*)m_aValue.m_pValue);
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- case DataType::BLOB:
- case DataType::CLOB:
- OSL_ASSERT(!"getDouble() for this type is not allowed!");
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- nRet = m_aValue.m_bBool;
- break;
- case DataType::TINYINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt8;
- else
- nRet = m_aValue.m_nInt16;
- break;
- case DataType::SMALLINT:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt16;
- else
- nRet = m_aValue.m_nInt32;
- break;
- case DataType::INTEGER:
- if ( m_bSigned )
- nRet = m_aValue.m_nInt32;
- else
- nRet = double(*(sal_Int64*)m_aValue.m_pValue);
- break;
- default:
- {
- Any aValue = getAny();
- aValue >>= nRet;
- break;
- }
- }
- }
- return nRet;
-}
-// -------------------------------------------------------------------------
-void ORowSetValue::setFromDouble(const double& _rVal,sal_Int32 _nDatatype)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::setFromDouble" );
- free();
-
- m_bNull = sal_False;
- switch(_nDatatype)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- {
- ::rtl::OUString aVal = ::rtl::OUString::valueOf(_rVal);
- m_aValue.m_pString = aVal.pData;
- rtl_uString_acquire(m_aValue.m_pString);
- }
- break;
- case DataType::BIGINT:
- if ( m_bSigned )
- {
- m_aValue.m_pValue = new sal_Int64((sal_Int64)_rVal);
- TRACE_ALLOC( sal_Int64 )
- }
- else
- {
- ::rtl::OUString aVal = ::rtl::OUString::valueOf(_rVal);
- m_aValue.m_pString = aVal.pData;
- rtl_uString_acquire(m_aValue.m_pString);
- }
- break;
- case DataType::FLOAT:
- m_aValue.m_pValue = new float((float)_rVal);
- TRACE_ALLOC( float )
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- m_aValue.m_pValue = new double(_rVal);
- TRACE_ALLOC( double )
- break;
- case DataType::DATE:
- m_aValue.m_pValue = new Date(dbtools::DBTypeConversion::toDate(_rVal));
- TRACE_ALLOC( Date )
- break;
- case DataType::TIME:
- m_aValue.m_pValue = new Time(dbtools::DBTypeConversion::toTime(_rVal));
- TRACE_ALLOC( Time )
- break;
- case DataType::TIMESTAMP:
- m_aValue.m_pValue = new DateTime(dbtools::DBTypeConversion::toDateTime(_rVal));
- TRACE_ALLOC( DateTime )
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- case DataType::BLOB:
- case DataType::CLOB:
- OSL_ASSERT(!"setFromDouble() for this type is not allowed!");
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- m_aValue.m_bBool = _rVal != 0.0;
- break;
- case DataType::TINYINT:
- if ( m_bSigned )
- m_aValue.m_nInt8 = sal_Int8(_rVal);
- else
- m_aValue.m_nInt16 = sal_Int16(_rVal);
- break;
- case DataType::SMALLINT:
- if ( m_bSigned )
- m_aValue.m_nInt16 = sal_Int16(_rVal);
- else
- m_aValue.m_nInt32 = sal_Int32(_rVal);
- break;
- case DataType::INTEGER:
- if ( m_bSigned )
- m_aValue.m_nInt32 = sal_Int32(_rVal);
- else
- {
- m_aValue.m_pValue = new sal_Int64((sal_Int64)_rVal);
- TRACE_ALLOC( sal_Int64 )
- }
- break;
- default:
- {
- m_aValue.m_pValue = new Any(_rVal);
- break;
- }
- }
- m_eTypeKind = _nDatatype;
-}
-// -----------------------------------------------------------------------------
-Sequence<sal_Int8> ORowSetValue::getSequence() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getSequence" );
- Sequence<sal_Int8> aSeq;
- if (!m_bNull)
- {
- switch(m_eTypeKind)
- {
- case DataType::OBJECT:
- case DataType::CLOB:
- case DataType::BLOB:
- {
- Reference<XInputStream> xStream;
- const Any aValue = makeAny();
- if(aValue.hasValue())
- {
- Reference<XBlob> xBlob(aValue,UNO_QUERY);
- if ( xBlob.is() )
- xStream = xBlob->getBinaryStream();
- else
- {
- Reference<XClob> xClob(aValue,UNO_QUERY);
- if ( xClob.is() )
- xStream = xClob->getCharacterStream();
- }
- if(xStream.is())
- {
- const sal_uInt32 nBytesToRead = 65535;
- sal_uInt32 nRead;
-
- do
- {
- ::com::sun::star::uno::Sequence< sal_Int8 > aReadSeq;
-
- nRead = xStream->readSomeBytes( aReadSeq, nBytesToRead );
-
- if( nRead )
- {
- const sal_uInt32 nOldLength = aSeq.getLength();
- aSeq.realloc( nOldLength + nRead );
- rtl_copyMemory( aSeq.getArray() + nOldLength, aReadSeq.getConstArray(), aReadSeq.getLength() );
- }
- }
- while( nBytesToRead == nRead );
- xStream->closeInput();
- }
- }
- }
- break;
- case DataType::VARCHAR:
- case DataType::LONGVARCHAR:
- {
- ::rtl::OUString sVal(m_aValue.m_pString);
- aSeq = Sequence<sal_Int8>(reinterpret_cast<const sal_Int8*>(sVal.getStr()),sizeof(sal_Unicode)*sVal.getLength());
- }
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- aSeq = *static_cast< Sequence<sal_Int8>*>(m_aValue.m_pValue);
- break;
- default:
- {
- Any aValue = getAny();
- aValue >>= aSeq;
- break;
- }
- }
- }
- return aSeq;
-
-}
-// -----------------------------------------------------------------------------
-::com::sun::star::util::Date ORowSetValue::getDate() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getDate" );
- ::com::sun::star::util::Date aValue;
- if(!m_bNull)
- {
- switch(m_eTypeKind)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::LONGVARCHAR:
- aValue = DBTypeConversion::toDate(getString());
- break;
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::FLOAT:
- case DataType::DOUBLE:
- case DataType::REAL:
- aValue = DBTypeConversion::toDate((double)*this);
- break;
-
- case DataType::DATE:
- aValue = *static_cast< ::com::sun::star::util::Date*>(m_aValue.m_pValue);
- break;
- case DataType::TIMESTAMP:
- {
- ::com::sun::star::util::DateTime* pDateTime = static_cast< ::com::sun::star::util::DateTime*>(m_aValue.m_pValue);
- aValue.Day = pDateTime->Day;
- aValue.Month = pDateTime->Month;
- aValue.Year = pDateTime->Year;
- }
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- case DataType::TINYINT:
- case DataType::SMALLINT:
- case DataType::INTEGER:
- case DataType::BIGINT:
- aValue = DBTypeConversion::toDate( double( sal_Int64( *this ) ) );
- break;
-
- case DataType::BLOB:
- case DataType::CLOB:
- case DataType::OBJECT:
- default:
- OSL_ENSURE( false, "ORowSetValue::getDate: cannot retrieve the data!" );
- // NO break!
-
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- case DataType::TIME:
- aValue = DBTypeConversion::toDate( (double)0 );
- break;
- }
- }
- return aValue;
-}
-// -----------------------------------------------------------------------------
-::com::sun::star::util::Time ORowSetValue::getTime() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getTime" );
- ::com::sun::star::util::Time aValue;
- if(!m_bNull)
- {
- switch(m_eTypeKind)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::LONGVARCHAR:
- aValue = DBTypeConversion::toTime(getString());
- break;
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- aValue = DBTypeConversion::toTime((double)*this);
- break;
- case DataType::FLOAT:
- case DataType::DOUBLE:
- case DataType::REAL:
- aValue = DBTypeConversion::toTime((double)*this);
- break;
- case DataType::TIMESTAMP:
- {
- ::com::sun::star::util::DateTime* pDateTime = static_cast< ::com::sun::star::util::DateTime*>(m_aValue.m_pValue);
- aValue.HundredthSeconds = pDateTime->HundredthSeconds;
- aValue.Seconds = pDateTime->Seconds;
- aValue.Minutes = pDateTime->Minutes;
- aValue.Hours = pDateTime->Hours;
- }
- break;
- case DataType::TIME:
- aValue = *static_cast< ::com::sun::star::util::Time*>(m_aValue.m_pValue);
- break;
- default:
- {
- Any aAnyValue = getAny();
- aAnyValue >>= aValue;
- break;
- }
- }
- }
- return aValue;
-}
-// -----------------------------------------------------------------------------
-::com::sun::star::util::DateTime ORowSetValue::getDateTime() const
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::getDateTime" );
- ::com::sun::star::util::DateTime aValue;
- if(!m_bNull)
- {
- switch(m_eTypeKind)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::LONGVARCHAR:
- aValue = DBTypeConversion::toDateTime(getString());
- break;
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- aValue = DBTypeConversion::toDateTime((double)*this);
- break;
- case DataType::FLOAT:
- case DataType::DOUBLE:
- case DataType::REAL:
- aValue = DBTypeConversion::toDateTime((double)*this);
- break;
- case DataType::DATE:
- {
- ::com::sun::star::util::Date* pDate = static_cast< ::com::sun::star::util::Date*>(m_aValue.m_pValue);
- aValue.Day = pDate->Day;
- aValue.Month = pDate->Month;
- aValue.Year = pDate->Year;
- }
- break;
- case DataType::TIME:
- {
- ::com::sun::star::util::Time* pTime = static_cast< ::com::sun::star::util::Time*>(m_aValue.m_pValue);
- aValue.HundredthSeconds = pTime->HundredthSeconds;
- aValue.Seconds = pTime->Seconds;
- aValue.Minutes = pTime->Minutes;
- aValue.Hours = pTime->Hours;
- }
- break;
- case DataType::TIMESTAMP:
- aValue = *static_cast< ::com::sun::star::util::DateTime*>(m_aValue.m_pValue);
- break;
- default:
- {
- Any aAnyValue = getAny();
- aAnyValue >>= aValue;
- break;
- }
- }
- }
- return aValue;
-}
-// -----------------------------------------------------------------------------
-void ORowSetValue::setSigned(sal_Bool _bMod)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::setSigned" );
- if ( m_bSigned != _bMod )
- {
- m_bSigned = _bMod;
- if ( !m_bNull )
- {
- sal_Int32 nType = m_eTypeKind;
- switch(m_eTypeKind)
- {
- case DataType::BIGINT:
- if ( m_bSigned ) // now we are signed, so we were unsigned and need to call getString()
- {
- m_bSigned = !m_bSigned;
- const ::rtl::OUString sValue = getString();
- free();
- m_bSigned = !m_bSigned;
- (*this) = sValue;
- }
- else
- {
- m_bSigned = !m_bSigned;
- const sal_Int64 nValue = getLong();
- free();
- m_bSigned = !m_bSigned;
- (*this) = nValue;
- }
- break;
- case DataType::TINYINT:
- if ( m_bSigned )
- (*this) = getInt8();
- else
- {
- m_bSigned = !m_bSigned;
- (*this) = getInt16();
- m_bSigned = !m_bSigned;
- }
- break;
- case DataType::SMALLINT:
- if ( m_bSigned )
- (*this) = getInt16();
- else
- {
- m_bSigned = !m_bSigned;
- (*this) = getInt32();
- m_bSigned = !m_bSigned;
- }
- break;
- case DataType::INTEGER:
- if ( m_bSigned )
- (*this) = getInt32();
- else
- {
- m_bSigned = !m_bSigned;
- (*this) = getLong();
- m_bSigned = !m_bSigned;
- }
- break;
- }
- m_eTypeKind = nType;
- }
- }
-}
-
-// -----------------------------------------------------------------------------
-namespace detail
-{
- class SAL_NO_VTABLE IValueSource
- {
- public:
- virtual ::rtl::OUString getString() const = 0;
- virtual sal_Bool getBoolean() const = 0;
- virtual sal_Int8 getByte() const = 0;
- virtual sal_Int16 getShort() const = 0;
- virtual sal_Int32 getInt() const = 0;
- virtual sal_Int64 getLong() const = 0;
- virtual float getFloat() const = 0;
- virtual double getDouble() const = 0;
- virtual Date getDate() const = 0;
- virtual Time getTime() const = 0;
- virtual DateTime getTimestamp() const = 0;
- virtual Sequence< sal_Int8 > getBytes() const = 0;
- virtual Reference< XInputStream > getBinaryStream() const = 0;
- virtual Reference< XInputStream > getCharacterStream() const = 0;
- virtual Reference< XBlob > getBlob() const = 0;
- virtual Reference< XClob > getClob() const = 0;
- virtual Any getObject() const = 0;
- virtual sal_Bool wasNull() const = 0;
-
- virtual ~IValueSource() { }
- };
-
- class RowValue : public IValueSource
- {
- public:
- RowValue( const Reference< XRow >& _xRow, const sal_Int32 _nPos )
- :m_xRow( _xRow )
- ,m_nPos( _nPos )
- {
- }
-
- // IValueSource
- virtual ::rtl::OUString getString() const { return m_xRow->getString( m_nPos ); };
- virtual sal_Bool getBoolean() const { return m_xRow->getBoolean( m_nPos ); };
- virtual sal_Int8 getByte() const { return m_xRow->getByte( m_nPos ); };
- virtual sal_Int16 getShort() const { return m_xRow->getShort( m_nPos ); }
- virtual sal_Int32 getInt() const { return m_xRow->getInt( m_nPos ); }
- virtual sal_Int64 getLong() const { return m_xRow->getLong( m_nPos ); }
- virtual float getFloat() const { return m_xRow->getFloat( m_nPos ); };
- virtual double getDouble() const { return m_xRow->getDouble( m_nPos ); };
- virtual Date getDate() const { return m_xRow->getDate( m_nPos ); };
- virtual Time getTime() const { return m_xRow->getTime( m_nPos ); };
- virtual DateTime getTimestamp() const { return m_xRow->getTimestamp( m_nPos ); };
- virtual Sequence< sal_Int8 > getBytes() const { return m_xRow->getBytes( m_nPos ); };
- virtual Reference< XInputStream > getBinaryStream() const { return m_xRow->getBinaryStream( m_nPos ); };
- virtual Reference< XInputStream > getCharacterStream() const { return m_xRow->getCharacterStream( m_nPos ); };
- virtual Reference< XBlob > getBlob() const { return m_xRow->getBlob( m_nPos ); };
- virtual Reference< XClob > getClob() const { return m_xRow->getClob( m_nPos ); };
- virtual Any getObject() const { return m_xRow->getObject( m_nPos ,NULL); };
- virtual sal_Bool wasNull() const { return m_xRow->wasNull( ); };
-
- private:
- const Reference< XRow > m_xRow;
- const sal_Int32 m_nPos;
- };
-
- class ColumnValue : public IValueSource
- {
- public:
- ColumnValue( const Reference< XColumn >& _rxColumn )
- :m_xColumn( _rxColumn )
- {
- }
-
- // IValueSource
- virtual ::rtl::OUString getString() const { return m_xColumn->getString(); };
- virtual sal_Bool getBoolean() const { return m_xColumn->getBoolean(); };
- virtual sal_Int8 getByte() const { return m_xColumn->getByte(); };
- virtual sal_Int16 getShort() const { return m_xColumn->getShort(); }
- virtual sal_Int32 getInt() const { return m_xColumn->getInt(); }
- virtual sal_Int64 getLong() const { return m_xColumn->getLong(); }
- virtual float getFloat() const { return m_xColumn->getFloat(); };
- virtual double getDouble() const { return m_xColumn->getDouble(); };
- virtual Date getDate() const { return m_xColumn->getDate(); };
- virtual Time getTime() const { return m_xColumn->getTime(); };
- virtual DateTime getTimestamp() const { return m_xColumn->getTimestamp(); };
- virtual Sequence< sal_Int8 > getBytes() const { return m_xColumn->getBytes(); };
- virtual Reference< XInputStream > getBinaryStream() const { return m_xColumn->getBinaryStream(); };
- virtual Reference< XInputStream > getCharacterStream() const { return m_xColumn->getCharacterStream(); };
- virtual Reference< XBlob > getBlob() const { return m_xColumn->getBlob(); };
- virtual Reference< XClob > getClob() const { return m_xColumn->getClob(); };
- virtual Any getObject() const { return m_xColumn->getObject( NULL ); };
- virtual sal_Bool wasNull() const { return m_xColumn->wasNull( ); };
-
- private:
- const Reference< XColumn > m_xColumn;
- };
-}
-
-// -----------------------------------------------------------------------------
-void ORowSetValue::fill( const sal_Int32 _nType, const Reference< XColumn >& _rxColumn )
-{
- detail::ColumnValue aColumnValue( _rxColumn );
- impl_fill( _nType, sal_True, aColumnValue );
-}
-
-// -----------------------------------------------------------------------------
-void ORowSetValue::fill( sal_Int32 _nPos, sal_Int32 _nType, sal_Bool _bNullable, const Reference< XRow>& _xRow )
-{
- detail::RowValue aRowValue( _xRow, _nPos );
- impl_fill( _nType, _bNullable, aRowValue );
-}
-
-// -----------------------------------------------------------------------------
-void ORowSetValue::fill(sal_Int32 _nPos,
- sal_Int32 _nType,
- const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow>& _xRow)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::fill (1)" );
- fill(_nPos,_nType,sal_True,_xRow);
-}
-
-// -----------------------------------------------------------------------------
-void ORowSetValue::impl_fill( const sal_Int32 _nType, sal_Bool _bNullable, const detail::IValueSource& _rValueSource )
-
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::fill (2)" );
- sal_Bool bReadData = sal_True;
- switch(_nType)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::LONGVARCHAR:
- (*this) = _rValueSource.getString();
- break;
- case DataType::BIGINT:
- if ( isSigned() )
- (*this) = _rValueSource.getLong();
- else
- (*this) = _rValueSource.getString();
- break;
- case DataType::FLOAT:
- (*this) = _rValueSource.getFloat();
- break;
- case DataType::DOUBLE:
- case DataType::REAL:
- (*this) = _rValueSource.getDouble();
- break;
- case DataType::DATE:
- (*this) = _rValueSource.getDate();
- break;
- case DataType::TIME:
- (*this) = _rValueSource.getTime();
- break;
- case DataType::TIMESTAMP:
- (*this) = _rValueSource.getTimestamp();
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- case DataType::LONGVARBINARY:
- (*this) = _rValueSource.getBytes();
- break;
- case DataType::BIT:
- case DataType::BOOLEAN:
- (*this) = _rValueSource.getBoolean();
- break;
- case DataType::TINYINT:
- if ( isSigned() )
- (*this) = _rValueSource.getByte();
- else
- (*this) = _rValueSource.getShort();
- break;
- case DataType::SMALLINT:
- if ( isSigned() )
- (*this) = _rValueSource.getShort();
- else
- (*this) = _rValueSource.getInt();
- break;
- case DataType::INTEGER:
- if ( isSigned() )
- (*this) = _rValueSource.getInt();
- else
- (*this) = _rValueSource.getLong();
- break;
- case DataType::CLOB:
- (*this) = ::com::sun::star::uno::makeAny(_rValueSource.getClob());
- setTypeKind(DataType::CLOB);
- break;
- case DataType::BLOB:
- (*this) = ::com::sun::star::uno::makeAny(_rValueSource.getBlob());
- setTypeKind(DataType::BLOB);
- break;
- case DataType::OTHER:
- (*this) = _rValueSource.getObject();
- setTypeKind(DataType::OTHER);
- break;
- default:
- OSL_FAIL( "ORowSetValue::fill: unsupported type!" );
- (*this) = _rValueSource.getObject();
- break;
- }
- if ( bReadData && _bNullable && _rValueSource.wasNull() )
- setNull();
- setTypeKind(_nType);
-}
-// -----------------------------------------------------------------------------
-void ORowSetValue::fill(const Any& _rValue)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbtools", "Ocke.Janssen@sun.com", "ORowSetValue::fill (3)" );
- switch (_rValue.getValueType().getTypeClass())
- {
- case TypeClass_VOID:
- setNull();
- break;
- case TypeClass_BOOLEAN:
- {
- sal_Bool bValue( sal_False );
- _rValue >>= bValue;
- (*this) = bValue;
- break;
- }
- case TypeClass_CHAR:
- {
- sal_Unicode aDummy(0);
- _rValue >>= aDummy;
- (*this) = ::rtl::OUString(aDummy);
- break;
- }
- case TypeClass_STRING:
- {
- ::rtl::OUString sDummy;
- _rValue >>= sDummy;
- (*this) = sDummy;
- break;
- }
- case TypeClass_FLOAT:
- {
- float aDummy(0.0);
- _rValue >>= aDummy;
- (*this) = aDummy;
- break;
- }
- case TypeClass_DOUBLE:
- {
- double aDummy(0.0);
- _rValue >>= aDummy;
- (*this) = aDummy;
- break;
- }
- case TypeClass_BYTE:
- {
- sal_Int8 aDummy(0);
- _rValue >>= aDummy;
- (*this) = aDummy;
- break;
- }
- case TypeClass_SHORT:
- {
- sal_Int16 aDummy(0);
- _rValue >>= aDummy;
- (*this) = aDummy;
- break;
- }
- case TypeClass_LONG:
- {
- sal_Int32 aDummy(0);
- _rValue >>= aDummy;
- (*this) = aDummy;
- break;
- }
- case TypeClass_UNSIGNED_SHORT:
- {
- sal_uInt16 nValue(0);
- _rValue >>= nValue;
- (*this) = static_cast<sal_Int32>(nValue);
- setSigned(sal_False);
- break;
- }
- case TypeClass_HYPER:
- {
- sal_Int64 nValue(0);
- _rValue >>= nValue;
- (*this) = nValue;
- break;
- }
- case TypeClass_UNSIGNED_HYPER:
- {
- sal_uInt64 nValue(0);
- _rValue >>= nValue;
- (*this) = static_cast<sal_Int64>(nValue);
- setSigned(sal_False);
- break;
- }
- case TypeClass_UNSIGNED_LONG:
- {
- sal_uInt32 nValue(0);
- _rValue >>= nValue;
- (*this) = static_cast<sal_Int64>(nValue);
- setSigned(sal_False);
- break;
- }
- case TypeClass_ENUM:
- {
- sal_Int32 enumValue( 0 );
- ::cppu::enum2int( enumValue, _rValue );
- (*this) = enumValue;
- }
- break;
-
- case TypeClass_SEQUENCE:
- {
- Sequence<sal_Int8> aDummy;
- if ( _rValue >>= aDummy )
- (*this) = aDummy;
- else
- OSL_FAIL( "ORowSetValue::fill: unsupported sequence type!" );
- break;
- }
-
- case TypeClass_STRUCT:
- {
- ::com::sun::star::util::Date aDate;
- ::com::sun::star::util::Time aTime;
- ::com::sun::star::util::DateTime aDateTime;
- if ( _rValue >>= aDate )
- {
- (*this) = aDate;
- }
- else if ( _rValue >>= aTime )
- {
- (*this) = aTime;
- }
- else if ( _rValue >>= aDateTime )
- {
- (*this) = aDateTime;
- }
- else
- OSL_FAIL( "ORowSetValue::fill: unsupported structure!" );
-
- break;
- }
- case TypeClass_INTERFACE:
- {
- Reference< XClob > xClob;
- if ( _rValue >>= xClob )
- {
- (*this) = _rValue;
- setTypeKind(DataType::CLOB);
- }
- else
- {
- Reference< XBlob > xBlob;
- if ( _rValue >>= xBlob )
- {
- (*this) = _rValue;
- setTypeKind(DataType::BLOB);
- }
- else
- {
- (*this) = _rValue;
- }
- }
- }
- break;
-
- default:
- OSL_FAIL("Unknown type");
- break;
- }
-}
-
-} // namespace connectivity
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */