xref: /AOO41X/main/connectivity/source/commontools/FValue.cxx (revision 619a211ca1c14976dc2c684004b5a1d904c426e3)
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