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