1*ac9096f4SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*ac9096f4SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*ac9096f4SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*ac9096f4SAndrew Rist  * distributed with this work for additional information
6*ac9096f4SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*ac9096f4SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*ac9096f4SAndrew Rist  * "License"); you may not use this file except in compliance
9*ac9096f4SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*ac9096f4SAndrew Rist  *
11*ac9096f4SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*ac9096f4SAndrew Rist  *
13*ac9096f4SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*ac9096f4SAndrew Rist  * software distributed under the License is distributed on an
15*ac9096f4SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*ac9096f4SAndrew Rist  * KIND, either express or implied.  See the License for the
17*ac9096f4SAndrew Rist  * specific language governing permissions and limitations
18*ac9096f4SAndrew Rist  * under the License.
19*ac9096f4SAndrew Rist  *
20*ac9096f4SAndrew Rist  *************************************************************/
21*ac9096f4SAndrew Rist 
22*ac9096f4SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_ucbhelper.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir /**************************************************************************
28cdf0e10cSrcweir 								TODO
29cdf0e10cSrcweir  **************************************************************************
30cdf0e10cSrcweir 
31cdf0e10cSrcweir  *************************************************************************/
32cdf0e10cSrcweir #include <cppuhelper/interfacecontainer.hxx>
33cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp>
34cdf0e10cSrcweir #include <ucbhelper/resultset.hxx>
35cdf0e10cSrcweir #include <ucbhelper/resultsetmetadata.hxx>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir using namespace com::sun::star;
38cdf0e10cSrcweir 
39cdf0e10cSrcweir //=========================================================================
40cdf0e10cSrcweir 
41cdf0e10cSrcweir namespace ucbhelper_impl
42cdf0e10cSrcweir {
43cdf0e10cSrcweir 
44cdf0e10cSrcweir struct PropertyInfo
45cdf0e10cSrcweir {
46cdf0e10cSrcweir 	const char*	pName;
47cdf0e10cSrcweir 	sal_Int32   nHandle;
48cdf0e10cSrcweir 	sal_Int16   nAttributes;
49cdf0e10cSrcweir 	const uno::Type& (*pGetCppuType)();
50cdf0e10cSrcweir };
51cdf0e10cSrcweir 
52cdf0e10cSrcweir static const uno::Type& sal_Int32_getCppuType()
53cdf0e10cSrcweir {
54cdf0e10cSrcweir 	return getCppuType( static_cast< const sal_Int32 * >( 0 ) );
55cdf0e10cSrcweir }
56cdf0e10cSrcweir 
57cdf0e10cSrcweir static const uno::Type& sal_Bool_getCppuType()
58cdf0e10cSrcweir {
59cdf0e10cSrcweir 	return getCppuBooleanType();
60cdf0e10cSrcweir }
61cdf0e10cSrcweir 
62cdf0e10cSrcweir static const PropertyInfo aPropertyTable[] =
63cdf0e10cSrcweir {
64cdf0e10cSrcweir 	{ "IsRowCountFinal",
65cdf0e10cSrcweir 	  1000,
66cdf0e10cSrcweir 	  beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY,
67cdf0e10cSrcweir 	  &sal_Bool_getCppuType
68cdf0e10cSrcweir 	},
69cdf0e10cSrcweir 	{ "RowCount",
70cdf0e10cSrcweir 	  1001,
71cdf0e10cSrcweir 	  beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY,
72cdf0e10cSrcweir 	  &sal_Int32_getCppuType
73cdf0e10cSrcweir 	},
74cdf0e10cSrcweir 	{ 0,
75cdf0e10cSrcweir 	  0,
76cdf0e10cSrcweir 	  0,
77cdf0e10cSrcweir 	  0
78cdf0e10cSrcweir 	}
79cdf0e10cSrcweir };
80cdf0e10cSrcweir 
81cdf0e10cSrcweir #define RESULTSET_PROPERTY_COUNT 2
82cdf0e10cSrcweir 
83cdf0e10cSrcweir //=========================================================================
84cdf0e10cSrcweir //
85cdf0e10cSrcweir // class PropertySetInfo
86cdf0e10cSrcweir //
87cdf0e10cSrcweir //=========================================================================
88cdf0e10cSrcweir 
89cdf0e10cSrcweir class PropertySetInfo :
90cdf0e10cSrcweir 		public cppu::OWeakObject,
91cdf0e10cSrcweir         public lang::XTypeProvider,
92cdf0e10cSrcweir         public beans::XPropertySetInfo
93cdf0e10cSrcweir {
94cdf0e10cSrcweir 	uno::Reference< lang::XMultiServiceFactory > m_xSMgr;
95cdf0e10cSrcweir 	uno::Sequence< beans::Property >* 			 m_pProps;
96cdf0e10cSrcweir 
97cdf0e10cSrcweir private:
98cdf0e10cSrcweir 	sal_Bool queryProperty(
99cdf0e10cSrcweir         const rtl::OUString& aName, beans::Property& rProp );
100cdf0e10cSrcweir 
101cdf0e10cSrcweir public:
102cdf0e10cSrcweir 	PropertySetInfo(
103cdf0e10cSrcweir         const uno::Reference< lang::XMultiServiceFactory >& rxSMgr,
104cdf0e10cSrcweir         const PropertyInfo* pProps,
105cdf0e10cSrcweir         sal_Int32 nProps );
106cdf0e10cSrcweir 	virtual ~PropertySetInfo();
107cdf0e10cSrcweir 
108cdf0e10cSrcweir 	// XInterface
109cdf0e10cSrcweir 	XINTERFACE_DECL()
110cdf0e10cSrcweir 
111cdf0e10cSrcweir 	// XTypeProvider
112cdf0e10cSrcweir 	XTYPEPROVIDER_DECL()
113cdf0e10cSrcweir 
114cdf0e10cSrcweir 	// XPropertySetInfo
115cdf0e10cSrcweir     virtual uno::Sequence< beans::Property > SAL_CALL getProperties()
116cdf0e10cSrcweir 		throw( uno::RuntimeException );
117cdf0e10cSrcweir     virtual beans::Property SAL_CALL getPropertyByName(
118cdf0e10cSrcweir             const rtl::OUString& aName )
119cdf0e10cSrcweir 		throw( beans::UnknownPropertyException, uno::RuntimeException );
120cdf0e10cSrcweir     virtual sal_Bool SAL_CALL hasPropertyByName( const rtl::OUString& Name )
121cdf0e10cSrcweir 		throw( uno::RuntimeException );
122cdf0e10cSrcweir };
123cdf0e10cSrcweir 
124cdf0e10cSrcweir //=========================================================================
125cdf0e10cSrcweir //
126cdf0e10cSrcweir // PropertyChangeListenerContainer.
127cdf0e10cSrcweir //
128cdf0e10cSrcweir //=========================================================================
129cdf0e10cSrcweir 
130cdf0e10cSrcweir struct equalStr_Impl
131cdf0e10cSrcweir {
132cdf0e10cSrcweir 	bool operator()( const rtl::OUString& s1, const rtl::OUString& s2 ) const
133cdf0e10cSrcweir   	{
134cdf0e10cSrcweir 		return !!( s1 == s2 );
135cdf0e10cSrcweir 	}
136cdf0e10cSrcweir };
137cdf0e10cSrcweir 
138cdf0e10cSrcweir struct hashStr_Impl
139cdf0e10cSrcweir {
140cdf0e10cSrcweir 	size_t operator()( const rtl::OUString& rName ) const
141cdf0e10cSrcweir 	{
142cdf0e10cSrcweir 		return rName.hashCode();
143cdf0e10cSrcweir 	}
144cdf0e10cSrcweir };
145cdf0e10cSrcweir 
146cdf0e10cSrcweir typedef cppu::OMultiTypeInterfaceContainerHelperVar
147cdf0e10cSrcweir <
148cdf0e10cSrcweir 	rtl::OUString,
149cdf0e10cSrcweir 	hashStr_Impl,
150cdf0e10cSrcweir 	equalStr_Impl
151cdf0e10cSrcweir > PropertyChangeListenerContainer;
152cdf0e10cSrcweir 
153cdf0e10cSrcweir //=========================================================================
154cdf0e10cSrcweir //
155cdf0e10cSrcweir // class PropertyChangeListeners.
156cdf0e10cSrcweir //
157cdf0e10cSrcweir //=========================================================================
158cdf0e10cSrcweir 
159cdf0e10cSrcweir class PropertyChangeListeners : public PropertyChangeListenerContainer
160cdf0e10cSrcweir {
161cdf0e10cSrcweir public:
162cdf0e10cSrcweir 	PropertyChangeListeners( osl::Mutex& rMtx )
163cdf0e10cSrcweir 	: PropertyChangeListenerContainer( rMtx ) {}
164cdf0e10cSrcweir };
165cdf0e10cSrcweir 
166cdf0e10cSrcweir } // namespace ucbhelper_impl
167cdf0e10cSrcweir 
168cdf0e10cSrcweir using namespace ucbhelper_impl;
169cdf0e10cSrcweir 
170cdf0e10cSrcweir namespace ucbhelper
171cdf0e10cSrcweir {
172cdf0e10cSrcweir 
173cdf0e10cSrcweir //=========================================================================
174cdf0e10cSrcweir //
175cdf0e10cSrcweir // struct ResultSet_Impl.
176cdf0e10cSrcweir //
177cdf0e10cSrcweir //=========================================================================
178cdf0e10cSrcweir 
179cdf0e10cSrcweir struct ResultSet_Impl
180cdf0e10cSrcweir {
181cdf0e10cSrcweir 	uno::Reference< lang::XMultiServiceFactory > 	m_xSMgr;
182cdf0e10cSrcweir 	uno::Reference< com::sun::star::ucb::XCommandEnvironment > 	m_xEnv;
183cdf0e10cSrcweir 	uno::Reference< beans::XPropertySetInfo >     	m_xPropSetInfo;
184cdf0e10cSrcweir 	uno::Reference< sdbc::XResultSetMetaData >   	m_xMetaData;
185cdf0e10cSrcweir 	uno::Sequence< beans::Property >              	m_aProperties;
186cdf0e10cSrcweir 	rtl::Reference< ResultSetDataSupplier >	        m_xDataSupplier;
187cdf0e10cSrcweir 	osl::Mutex						 	m_aMutex;
188cdf0e10cSrcweir 	cppu::OInterfaceContainerHelper* 	m_pDisposeEventListeners;
189cdf0e10cSrcweir 	PropertyChangeListeners*			m_pPropertyChangeListeners;
190cdf0e10cSrcweir 	sal_Int32						 	m_nPos;
191cdf0e10cSrcweir 	sal_Bool 						 	m_bWasNull;
192cdf0e10cSrcweir 	sal_Bool 						 	m_bAfterLast;
193cdf0e10cSrcweir 
194cdf0e10cSrcweir 	inline ResultSet_Impl(
195cdf0e10cSrcweir         const uno::Reference< lang::XMultiServiceFactory >& rxSMgr,
196cdf0e10cSrcweir         const uno::Sequence< beans::Property >& rProperties,
197cdf0e10cSrcweir         const rtl::Reference< ResultSetDataSupplier >& rDataSupplier,
198cdf0e10cSrcweir         const uno::Reference< com::sun::star::ucb::XCommandEnvironment >&
199cdf0e10cSrcweir             rxEnv );
200cdf0e10cSrcweir 	inline ~ResultSet_Impl();
201cdf0e10cSrcweir };
202cdf0e10cSrcweir 
203cdf0e10cSrcweir inline ResultSet_Impl::ResultSet_Impl(
204cdf0e10cSrcweir     const uno::Reference< lang::XMultiServiceFactory >& rxSMgr,
205cdf0e10cSrcweir     const uno::Sequence< beans::Property >& rProperties,
206cdf0e10cSrcweir     const rtl::Reference< ResultSetDataSupplier >& rDataSupplier,
207cdf0e10cSrcweir     const uno::Reference< com::sun::star::ucb::XCommandEnvironment >& rxEnv )
208cdf0e10cSrcweir : m_xSMgr( rxSMgr ),
209cdf0e10cSrcweir   m_xEnv( rxEnv ),
210cdf0e10cSrcweir   m_aProperties( rProperties ),
211cdf0e10cSrcweir   m_xDataSupplier( rDataSupplier ),
212cdf0e10cSrcweir   m_pDisposeEventListeners( 0 ),
213cdf0e10cSrcweir   m_pPropertyChangeListeners( 0 ),
214cdf0e10cSrcweir   m_nPos( 0 ), // Position is one-based. Zero means: before first element.
215cdf0e10cSrcweir   m_bWasNull( sal_False ),
216cdf0e10cSrcweir   m_bAfterLast( sal_False )
217cdf0e10cSrcweir {
218cdf0e10cSrcweir }
219cdf0e10cSrcweir 
220cdf0e10cSrcweir //=========================================================================
221cdf0e10cSrcweir inline ResultSet_Impl::~ResultSet_Impl()
222cdf0e10cSrcweir {
223cdf0e10cSrcweir 	delete m_pDisposeEventListeners;
224cdf0e10cSrcweir 	delete m_pPropertyChangeListeners;
225cdf0e10cSrcweir }
226cdf0e10cSrcweir 
227cdf0e10cSrcweir //=========================================================================
228cdf0e10cSrcweir //=========================================================================
229cdf0e10cSrcweir //
230cdf0e10cSrcweir // ResultSet Implementation.
231cdf0e10cSrcweir //
232cdf0e10cSrcweir //=========================================================================
233cdf0e10cSrcweir //=========================================================================
234cdf0e10cSrcweir 
235cdf0e10cSrcweir ResultSet::ResultSet(
236cdf0e10cSrcweir     const uno::Reference< lang::XMultiServiceFactory >& rxSMgr,
237cdf0e10cSrcweir     const uno::Sequence< beans::Property >& rProperties,
238cdf0e10cSrcweir     const rtl::Reference< ResultSetDataSupplier >& rDataSupplier )
239cdf0e10cSrcweir : m_pImpl( new ResultSet_Impl(
240cdf0e10cSrcweir                rxSMgr,
241cdf0e10cSrcweir                rProperties,
242cdf0e10cSrcweir                rDataSupplier,
243cdf0e10cSrcweir                uno::Reference< com::sun::star::ucb::XCommandEnvironment >() ) )
244cdf0e10cSrcweir {
245cdf0e10cSrcweir 	rDataSupplier->m_pResultSet = this;
246cdf0e10cSrcweir }
247cdf0e10cSrcweir 
248cdf0e10cSrcweir //=========================================================================
249cdf0e10cSrcweir ResultSet::ResultSet(
250cdf0e10cSrcweir     const uno::Reference< lang::XMultiServiceFactory >& rxSMgr,
251cdf0e10cSrcweir     const uno::Sequence< beans::Property >& rProperties,
252cdf0e10cSrcweir     const rtl::Reference< ResultSetDataSupplier >& rDataSupplier,
253cdf0e10cSrcweir     const uno::Reference< com::sun::star::ucb::XCommandEnvironment >& rxEnv )
254cdf0e10cSrcweir : m_pImpl( new ResultSet_Impl( rxSMgr, rProperties, rDataSupplier, rxEnv ) )
255cdf0e10cSrcweir {
256cdf0e10cSrcweir 	rDataSupplier->m_pResultSet = this;
257cdf0e10cSrcweir }
258cdf0e10cSrcweir 
259cdf0e10cSrcweir //=========================================================================
260cdf0e10cSrcweir // virtual
261cdf0e10cSrcweir ResultSet::~ResultSet()
262cdf0e10cSrcweir {
263cdf0e10cSrcweir 	delete m_pImpl;
264cdf0e10cSrcweir }
265cdf0e10cSrcweir 
266cdf0e10cSrcweir //=========================================================================
267cdf0e10cSrcweir //
268cdf0e10cSrcweir // XInterface methods.
269cdf0e10cSrcweir //
270cdf0e10cSrcweir //=========================================================================
271cdf0e10cSrcweir 
272cdf0e10cSrcweir XINTERFACE_IMPL_9( ResultSet,
273cdf0e10cSrcweir 				   lang::XTypeProvider,
274cdf0e10cSrcweir 				   lang::XServiceInfo,
275cdf0e10cSrcweir 				   lang::XComponent,
276cdf0e10cSrcweir 				   com::sun::star::ucb::XContentAccess,
277cdf0e10cSrcweir 				   sdbc::XResultSet,
278cdf0e10cSrcweir 				   sdbc::XResultSetMetaDataSupplier,
279cdf0e10cSrcweir 				   sdbc::XRow,
280cdf0e10cSrcweir 				   sdbc::XCloseable,
281cdf0e10cSrcweir 				   beans::XPropertySet );
282cdf0e10cSrcweir 
283cdf0e10cSrcweir //=========================================================================
284cdf0e10cSrcweir //
285cdf0e10cSrcweir // XTypeProvider methods.
286cdf0e10cSrcweir //
287cdf0e10cSrcweir //=========================================================================
288cdf0e10cSrcweir 
289cdf0e10cSrcweir XTYPEPROVIDER_IMPL_9( ResultSet,
290cdf0e10cSrcweir 					  lang::XTypeProvider,
291cdf0e10cSrcweir 				   	  lang::XServiceInfo,
292cdf0e10cSrcweir 					  lang::XComponent,
293cdf0e10cSrcweir 					  com::sun::star::ucb::XContentAccess,
294cdf0e10cSrcweir 					  sdbc::XResultSet,
295cdf0e10cSrcweir 					  sdbc::XResultSetMetaDataSupplier,
296cdf0e10cSrcweir 					  sdbc::XRow,
297cdf0e10cSrcweir 					  sdbc::XCloseable,
298cdf0e10cSrcweir 					  beans::XPropertySet );
299cdf0e10cSrcweir 
300cdf0e10cSrcweir //=========================================================================
301cdf0e10cSrcweir //
302cdf0e10cSrcweir // XServiceInfo methods.
303cdf0e10cSrcweir //
304cdf0e10cSrcweir //=========================================================================
305cdf0e10cSrcweir 
306cdf0e10cSrcweir XSERVICEINFO_NOFACTORY_IMPL_1( ResultSet,
307cdf0e10cSrcweir 		 		   rtl::OUString::createFromAscii( "ResultSet" ),
308cdf0e10cSrcweir 		 		   rtl::OUString::createFromAscii( RESULTSET_SERVICE_NAME ) );
309cdf0e10cSrcweir 
310cdf0e10cSrcweir //=========================================================================
311cdf0e10cSrcweir //
312cdf0e10cSrcweir // XComponent methods.
313cdf0e10cSrcweir //
314cdf0e10cSrcweir //=========================================================================
315cdf0e10cSrcweir 
316cdf0e10cSrcweir // virtual
317cdf0e10cSrcweir void SAL_CALL ResultSet::dispose()
318cdf0e10cSrcweir 	throw( uno::RuntimeException )
319cdf0e10cSrcweir {
320cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
321cdf0e10cSrcweir 
322cdf0e10cSrcweir 	if ( m_pImpl->m_pDisposeEventListeners &&
323cdf0e10cSrcweir 		 m_pImpl->m_pDisposeEventListeners->getLength() )
324cdf0e10cSrcweir 	{
325cdf0e10cSrcweir 		lang::EventObject aEvt;
326cdf0e10cSrcweir 		aEvt.Source = static_cast< lang::XComponent * >( this );
327cdf0e10cSrcweir 		m_pImpl->m_pDisposeEventListeners->disposeAndClear( aEvt );
328cdf0e10cSrcweir 	}
329cdf0e10cSrcweir 
330cdf0e10cSrcweir 	if ( m_pImpl->m_pPropertyChangeListeners )
331cdf0e10cSrcweir 	{
332cdf0e10cSrcweir 		lang::EventObject aEvt;
333cdf0e10cSrcweir 		aEvt.Source = static_cast< beans::XPropertySet * >( this );
334cdf0e10cSrcweir 		m_pImpl->m_pPropertyChangeListeners->disposeAndClear( aEvt );
335cdf0e10cSrcweir 	}
336cdf0e10cSrcweir 
337cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->close();
338cdf0e10cSrcweir }
339cdf0e10cSrcweir 
340cdf0e10cSrcweir //=========================================================================
341cdf0e10cSrcweir // virtual
342cdf0e10cSrcweir void SAL_CALL ResultSet::addEventListener(
343cdf0e10cSrcweir         const uno::Reference< lang::XEventListener >& Listener )
344cdf0e10cSrcweir 	throw( uno::RuntimeException )
345cdf0e10cSrcweir {
346cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
347cdf0e10cSrcweir 
348cdf0e10cSrcweir 	if ( !m_pImpl->m_pDisposeEventListeners )
349cdf0e10cSrcweir 		m_pImpl->m_pDisposeEventListeners =
350cdf0e10cSrcweir             new cppu::OInterfaceContainerHelper( m_pImpl->m_aMutex );
351cdf0e10cSrcweir 
352cdf0e10cSrcweir 	m_pImpl->m_pDisposeEventListeners->addInterface( Listener );
353cdf0e10cSrcweir }
354cdf0e10cSrcweir 
355cdf0e10cSrcweir //=========================================================================
356cdf0e10cSrcweir // virtual
357cdf0e10cSrcweir void SAL_CALL ResultSet::removeEventListener(
358cdf0e10cSrcweir         const uno::Reference< lang::XEventListener >& Listener )
359cdf0e10cSrcweir 	throw( uno::RuntimeException )
360cdf0e10cSrcweir {
361cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
362cdf0e10cSrcweir 
363cdf0e10cSrcweir 	if ( m_pImpl->m_pDisposeEventListeners )
364cdf0e10cSrcweir 		m_pImpl->m_pDisposeEventListeners->removeInterface( Listener );
365cdf0e10cSrcweir }
366cdf0e10cSrcweir 
367cdf0e10cSrcweir //=========================================================================
368cdf0e10cSrcweir //
369cdf0e10cSrcweir // XResultSetMetaDataSupplier methods.
370cdf0e10cSrcweir //
371cdf0e10cSrcweir //=========================================================================
372cdf0e10cSrcweir 
373cdf0e10cSrcweir // virtual
374cdf0e10cSrcweir uno::Reference< sdbc::XResultSetMetaData > SAL_CALL ResultSet::getMetaData()
375cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
376cdf0e10cSrcweir {
377cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
378cdf0e10cSrcweir 
379cdf0e10cSrcweir 	if ( !m_pImpl->m_xMetaData.is() )
380cdf0e10cSrcweir 		m_pImpl->m_xMetaData = new ResultSetMetaData( m_pImpl->m_xSMgr,
381cdf0e10cSrcweir 													  m_pImpl->m_aProperties );
382cdf0e10cSrcweir 
383cdf0e10cSrcweir 	return m_pImpl->m_xMetaData;
384cdf0e10cSrcweir }
385cdf0e10cSrcweir 
386cdf0e10cSrcweir //=========================================================================
387cdf0e10cSrcweir //
388cdf0e10cSrcweir // XResultSet methods.
389cdf0e10cSrcweir //
390cdf0e10cSrcweir //=========================================================================
391cdf0e10cSrcweir 
392cdf0e10cSrcweir // virtual
393cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::next()
394cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
395cdf0e10cSrcweir {
396cdf0e10cSrcweir 	// Note: Cursor is initially positioned before the first row.
397cdf0e10cSrcweir 	//       First call to 'next()' moves it to first row.
398cdf0e10cSrcweir 
399cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
400cdf0e10cSrcweir 
401cdf0e10cSrcweir 	if ( m_pImpl->m_bAfterLast )
402cdf0e10cSrcweir 	{
403cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
404cdf0e10cSrcweir 		return sal_False;
405cdf0e10cSrcweir 	}
406cdf0e10cSrcweir 
407cdf0e10cSrcweir 	// getResult works zero-based!
408cdf0e10cSrcweir 	if ( !m_pImpl->m_xDataSupplier->getResult( m_pImpl->m_nPos ) )
409cdf0e10cSrcweir 	{
410cdf0e10cSrcweir 		m_pImpl->m_bAfterLast = sal_True;
411cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
412cdf0e10cSrcweir 		return sal_False;
413cdf0e10cSrcweir 	}
414cdf0e10cSrcweir 
415cdf0e10cSrcweir 	m_pImpl->m_nPos++;
416cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
417cdf0e10cSrcweir 	return sal_True;
418cdf0e10cSrcweir }
419cdf0e10cSrcweir 
420cdf0e10cSrcweir //=========================================================================
421cdf0e10cSrcweir // virtual
422cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::isBeforeFirst()
423cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
424cdf0e10cSrcweir {
425cdf0e10cSrcweir 	if ( m_pImpl->m_bAfterLast )
426cdf0e10cSrcweir 	{
427cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
428cdf0e10cSrcweir 		return sal_False;
429cdf0e10cSrcweir 	}
430cdf0e10cSrcweir 
431cdf0e10cSrcweir 	// getResult works zero-based!
432cdf0e10cSrcweir 	if ( !m_pImpl->m_xDataSupplier->getResult( 0 ) )
433cdf0e10cSrcweir 	{
434cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
435cdf0e10cSrcweir 		return sal_False;
436cdf0e10cSrcweir 	}
437cdf0e10cSrcweir 
438cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
439cdf0e10cSrcweir 	return ( m_pImpl->m_nPos == 0 );
440cdf0e10cSrcweir }
441cdf0e10cSrcweir 
442cdf0e10cSrcweir //=========================================================================
443cdf0e10cSrcweir // virtual
444cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::isAfterLast()
445cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
446cdf0e10cSrcweir {
447cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
448cdf0e10cSrcweir 	return m_pImpl->m_bAfterLast;
449cdf0e10cSrcweir }
450cdf0e10cSrcweir 
451cdf0e10cSrcweir //=========================================================================
452cdf0e10cSrcweir // virtual
453cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::isFirst()
454cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
455cdf0e10cSrcweir {
456cdf0e10cSrcweir 	if ( m_pImpl->m_bAfterLast )
457cdf0e10cSrcweir 	{
458cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
459cdf0e10cSrcweir 		return sal_False;
460cdf0e10cSrcweir 	}
461cdf0e10cSrcweir 
462cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
463cdf0e10cSrcweir 	return ( m_pImpl->m_nPos == 1 );
464cdf0e10cSrcweir }
465cdf0e10cSrcweir 
466cdf0e10cSrcweir //=========================================================================
467cdf0e10cSrcweir // virtual
468cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::isLast()
469cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
470cdf0e10cSrcweir {
471cdf0e10cSrcweir 	if ( m_pImpl->m_bAfterLast )
472cdf0e10cSrcweir 	{
473cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
474cdf0e10cSrcweir 		return sal_False;
475cdf0e10cSrcweir 	}
476cdf0e10cSrcweir 
477cdf0e10cSrcweir 	sal_Int32 nCount = m_pImpl->m_xDataSupplier->totalCount();
478cdf0e10cSrcweir 	if ( !nCount )
479cdf0e10cSrcweir 	{
480cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
481cdf0e10cSrcweir 		return sal_False;
482cdf0e10cSrcweir 	}
483cdf0e10cSrcweir 
484cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
485cdf0e10cSrcweir 	return ( m_pImpl->m_nPos == nCount );
486cdf0e10cSrcweir }
487cdf0e10cSrcweir 
488cdf0e10cSrcweir //=========================================================================
489cdf0e10cSrcweir // virtual
490cdf0e10cSrcweir void SAL_CALL ResultSet::beforeFirst()
491cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
492cdf0e10cSrcweir {
493cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
494cdf0e10cSrcweir 	m_pImpl->m_bAfterLast = sal_False;
495cdf0e10cSrcweir 	m_pImpl->m_nPos = 0;
496cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
497cdf0e10cSrcweir }
498cdf0e10cSrcweir 
499cdf0e10cSrcweir //=========================================================================
500cdf0e10cSrcweir // virtual
501cdf0e10cSrcweir void SAL_CALL ResultSet::afterLast()
502cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
503cdf0e10cSrcweir {
504cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
505cdf0e10cSrcweir 	m_pImpl->m_bAfterLast = sal_True;
506cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
507cdf0e10cSrcweir }
508cdf0e10cSrcweir 
509cdf0e10cSrcweir //=========================================================================
510cdf0e10cSrcweir // virtual
511cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::first()
512cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
513cdf0e10cSrcweir {
514cdf0e10cSrcweir 	// getResult works zero-based!
515cdf0e10cSrcweir 	if ( m_pImpl->m_xDataSupplier->getResult( 0 ) )
516cdf0e10cSrcweir 	{
517cdf0e10cSrcweir 		osl::MutexGuard aGuard( m_pImpl->m_aMutex );
518cdf0e10cSrcweir 		m_pImpl->m_bAfterLast = sal_False;
519cdf0e10cSrcweir 		m_pImpl->m_nPos = 1;
520cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
521cdf0e10cSrcweir 		return sal_True;
522cdf0e10cSrcweir 	}
523cdf0e10cSrcweir 
524cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
525cdf0e10cSrcweir 	return sal_False;
526cdf0e10cSrcweir }
527cdf0e10cSrcweir 
528cdf0e10cSrcweir //=========================================================================
529cdf0e10cSrcweir // virtual
530cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::last()
531cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
532cdf0e10cSrcweir {
533cdf0e10cSrcweir 	sal_Int32 nCount = m_pImpl->m_xDataSupplier->totalCount();
534cdf0e10cSrcweir 	if ( nCount )
535cdf0e10cSrcweir 	{
536cdf0e10cSrcweir 		osl::MutexGuard aGuard( m_pImpl->m_aMutex );
537cdf0e10cSrcweir 		m_pImpl->m_bAfterLast = sal_False;
538cdf0e10cSrcweir 		m_pImpl->m_nPos = nCount;
539cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
540cdf0e10cSrcweir 		return sal_True;
541cdf0e10cSrcweir 	}
542cdf0e10cSrcweir 
543cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
544cdf0e10cSrcweir 	return sal_False;
545cdf0e10cSrcweir }
546cdf0e10cSrcweir 
547cdf0e10cSrcweir //=========================================================================
548cdf0e10cSrcweir // virtual
549cdf0e10cSrcweir sal_Int32 SAL_CALL ResultSet::getRow()
550cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
551cdf0e10cSrcweir {
552cdf0e10cSrcweir 	if ( m_pImpl->m_bAfterLast )
553cdf0e10cSrcweir 	{
554cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
555cdf0e10cSrcweir 		return 0;
556cdf0e10cSrcweir 	}
557cdf0e10cSrcweir 
558cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
559cdf0e10cSrcweir 	return m_pImpl->m_nPos;
560cdf0e10cSrcweir }
561cdf0e10cSrcweir 
562cdf0e10cSrcweir //=========================================================================
563cdf0e10cSrcweir // virtual
564cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::absolute( sal_Int32 row )
565cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
566cdf0e10cSrcweir {
567cdf0e10cSrcweir /*
568cdf0e10cSrcweir 	If the row number is positive, the cursor moves to the given row number
569cdf0e10cSrcweir 	with respect to the beginning of the result set. The first row is row 1,
570cdf0e10cSrcweir 	the second is row 2, and so on.
571cdf0e10cSrcweir 
572cdf0e10cSrcweir 	If the given row number is negative, the cursor moves to an absolute row
573cdf0e10cSrcweir 	position with respect to the end of the result set. For example, calling
574cdf0e10cSrcweir 	absolaute( -1 ) positions the cursor on the last row, absolaute( -2 )
575cdf0e10cSrcweir 	indicates the next-to-last row, and so on.
576cdf0e10cSrcweir 
577cdf0e10cSrcweir 	An attempt to position the cursor beyond the first/last row in the result
578cdf0e10cSrcweir 	set leaves the cursor before/after the first/last row, respectively.
579cdf0e10cSrcweir 
580cdf0e10cSrcweir 	Calling absolute( 1 ) is the same as calling first().
581cdf0e10cSrcweir 
582cdf0e10cSrcweir     Calling absolute( -1 ) is the same as calling last().
583cdf0e10cSrcweir */
584cdf0e10cSrcweir 	if ( row < 0 )
585cdf0e10cSrcweir 	{
586cdf0e10cSrcweir 		sal_Int32 nCount = m_pImpl->m_xDataSupplier->totalCount();
587cdf0e10cSrcweir 
588cdf0e10cSrcweir 		if ( ( row * -1 ) > nCount )
589cdf0e10cSrcweir 		{
590cdf0e10cSrcweir 			osl::MutexGuard aGuard( m_pImpl->m_aMutex );
591cdf0e10cSrcweir 			m_pImpl->m_bAfterLast = sal_False;
592cdf0e10cSrcweir 			m_pImpl->m_nPos = 0;
593cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
594cdf0e10cSrcweir 			return sal_False;
595cdf0e10cSrcweir 		}
596cdf0e10cSrcweir 		else // |row| <= nCount
597cdf0e10cSrcweir 		{
598cdf0e10cSrcweir 			osl::MutexGuard aGuard( m_pImpl->m_aMutex );
599cdf0e10cSrcweir 			m_pImpl->m_bAfterLast = sal_False;
600cdf0e10cSrcweir 			m_pImpl->m_nPos = ( nCount + row + 1 );
601cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
602cdf0e10cSrcweir 			return sal_True;
603cdf0e10cSrcweir 		}
604cdf0e10cSrcweir 	}
605cdf0e10cSrcweir 	else if ( row == 0 )
606cdf0e10cSrcweir 	{
607cdf0e10cSrcweir 	    // @throws SQLException
608cdf0e10cSrcweir 		//		... if row is 0 ...
609cdf0e10cSrcweir 		throw sdbc::SQLException();
610cdf0e10cSrcweir 	}
611cdf0e10cSrcweir 	else // row > 0
612cdf0e10cSrcweir 	{
613cdf0e10cSrcweir 		sal_Int32 nCount = m_pImpl->m_xDataSupplier->totalCount();
614cdf0e10cSrcweir 
615cdf0e10cSrcweir 		if ( row <= nCount )
616cdf0e10cSrcweir 		{
617cdf0e10cSrcweir 			osl::MutexGuard aGuard( m_pImpl->m_aMutex );
618cdf0e10cSrcweir 			m_pImpl->m_bAfterLast = sal_False;
619cdf0e10cSrcweir 			m_pImpl->m_nPos = row;
620cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
621cdf0e10cSrcweir 			return sal_True;
622cdf0e10cSrcweir 		}
623cdf0e10cSrcweir 		else // row > nCount
624cdf0e10cSrcweir 		{
625cdf0e10cSrcweir 			osl::MutexGuard aGuard( m_pImpl->m_aMutex );
626cdf0e10cSrcweir 			m_pImpl->m_bAfterLast = sal_True;
627cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
628cdf0e10cSrcweir 			return sal_False;
629cdf0e10cSrcweir 		}
630cdf0e10cSrcweir 	}
631cdf0e10cSrcweir 
632cdf0e10cSrcweir 	// unreachable...
633cdf0e10cSrcweir }
634cdf0e10cSrcweir 
635cdf0e10cSrcweir //=========================================================================
636cdf0e10cSrcweir // virtual
637cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::relative( sal_Int32 rows )
638cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
639cdf0e10cSrcweir {
640cdf0e10cSrcweir /*
641cdf0e10cSrcweir 	Attempting to move beyond the first/last row in the result set
642cdf0e10cSrcweir 	positions the cursor before/after the the first/last row.
643cdf0e10cSrcweir 
644cdf0e10cSrcweir 	Calling relative( 0 ) is valid, but does not change the cursor position.
645cdf0e10cSrcweir 
646cdf0e10cSrcweir     Calling relative( 1 ) is different from calling next() because it makes
647cdf0e10cSrcweir 	sense to call next() when there is no current row, for example,	when
648cdf0e10cSrcweir 	the cursor is positioned before the first row or after the last	row of
649cdf0e10cSrcweir 	the result set.
650cdf0e10cSrcweir */
651cdf0e10cSrcweir 	if ( m_pImpl->m_bAfterLast || ( m_pImpl->m_nPos == 0 ) )
652cdf0e10cSrcweir 	{
653cdf0e10cSrcweir 		// "No current row".
654cdf0e10cSrcweir 		throw sdbc::SQLException();
655cdf0e10cSrcweir 	}
656cdf0e10cSrcweir 
657cdf0e10cSrcweir 	if ( rows < 0 )
658cdf0e10cSrcweir 	{
659cdf0e10cSrcweir 		if ( ( m_pImpl->m_nPos + rows ) > 0 )
660cdf0e10cSrcweir 		{
661cdf0e10cSrcweir 			osl::MutexGuard aGuard( m_pImpl->m_aMutex );
662cdf0e10cSrcweir 			m_pImpl->m_bAfterLast = sal_False;
663cdf0e10cSrcweir 			m_pImpl->m_nPos = ( m_pImpl->m_nPos + rows );
664cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
665cdf0e10cSrcweir 			return sal_True;
666cdf0e10cSrcweir 		}
667cdf0e10cSrcweir 		else
668cdf0e10cSrcweir 		{
669cdf0e10cSrcweir 			osl::MutexGuard aGuard( m_pImpl->m_aMutex );
670cdf0e10cSrcweir 			m_pImpl->m_bAfterLast = sal_False;
671cdf0e10cSrcweir 			m_pImpl->m_nPos = 0;
672cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
673cdf0e10cSrcweir 			return sal_False;
674cdf0e10cSrcweir 		}
675cdf0e10cSrcweir 	}
676cdf0e10cSrcweir 	else if ( rows == 0 )
677cdf0e10cSrcweir 	{
678cdf0e10cSrcweir 		// nop.
679cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
680cdf0e10cSrcweir 		return sal_True;
681cdf0e10cSrcweir 	}
682cdf0e10cSrcweir 	else // rows > 0
683cdf0e10cSrcweir 	{
684cdf0e10cSrcweir 		sal_Int32 nCount = m_pImpl->m_xDataSupplier->totalCount();
685cdf0e10cSrcweir 		if ( ( m_pImpl->m_nPos + rows ) <= nCount )
686cdf0e10cSrcweir 		{
687cdf0e10cSrcweir 			osl::MutexGuard aGuard( m_pImpl->m_aMutex );
688cdf0e10cSrcweir 			m_pImpl->m_bAfterLast = sal_False;
689cdf0e10cSrcweir 			m_pImpl->m_nPos = ( m_pImpl->m_nPos + rows );
690cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
691cdf0e10cSrcweir 			return sal_True;
692cdf0e10cSrcweir 		}
693cdf0e10cSrcweir 		else
694cdf0e10cSrcweir 		{
695cdf0e10cSrcweir 			osl::MutexGuard aGuard( m_pImpl->m_aMutex );
696cdf0e10cSrcweir 			m_pImpl->m_bAfterLast = sal_True;
697cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
698cdf0e10cSrcweir 			return sal_False;
699cdf0e10cSrcweir 		}
700cdf0e10cSrcweir 	}
701cdf0e10cSrcweir 
702cdf0e10cSrcweir 	// unreachable...
703cdf0e10cSrcweir }
704cdf0e10cSrcweir 
705cdf0e10cSrcweir //=========================================================================
706cdf0e10cSrcweir // virtual
707cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::previous()
708cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
709cdf0e10cSrcweir {
710cdf0e10cSrcweir /*
711cdf0e10cSrcweir 	previous() is not the same as relative( -1 ) because it makes sense
712cdf0e10cSrcweir 	to call previous() when there is no current row.
713cdf0e10cSrcweir */
714cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
715cdf0e10cSrcweir 
716cdf0e10cSrcweir 	if ( m_pImpl->m_bAfterLast )
717cdf0e10cSrcweir 	{
718cdf0e10cSrcweir 		m_pImpl->m_bAfterLast = sal_False;
719cdf0e10cSrcweir 		sal_Int32 nCount = m_pImpl->m_xDataSupplier->totalCount();
720cdf0e10cSrcweir 		m_pImpl->m_nPos = nCount;
721cdf0e10cSrcweir 	}
722cdf0e10cSrcweir 	else if ( m_pImpl->m_nPos )
723cdf0e10cSrcweir 		m_pImpl->m_nPos--;
724cdf0e10cSrcweir 
725cdf0e10cSrcweir 	if ( m_pImpl->m_nPos )
726cdf0e10cSrcweir 	{
727cdf0e10cSrcweir 		m_pImpl->m_xDataSupplier->validate();
728cdf0e10cSrcweir 		return sal_True;
729cdf0e10cSrcweir 	}
730cdf0e10cSrcweir 
731cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
732cdf0e10cSrcweir 	return sal_False;
733cdf0e10cSrcweir }
734cdf0e10cSrcweir 
735cdf0e10cSrcweir //=========================================================================
736cdf0e10cSrcweir // virtual
737cdf0e10cSrcweir void SAL_CALL ResultSet::refreshRow()
738cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
739cdf0e10cSrcweir {
740cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
741cdf0e10cSrcweir 	if ( m_pImpl->m_bAfterLast || ( m_pImpl->m_nPos == 0 ) )
742cdf0e10cSrcweir 		return;
743cdf0e10cSrcweir 
744cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->releasePropertyValues( m_pImpl->m_nPos );
745cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
746cdf0e10cSrcweir }
747cdf0e10cSrcweir 
748cdf0e10cSrcweir //=========================================================================
749cdf0e10cSrcweir // virtual
750cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::rowUpdated()
751cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
752cdf0e10cSrcweir {
753cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
754cdf0e10cSrcweir 	return sal_False;
755cdf0e10cSrcweir }
756cdf0e10cSrcweir 
757cdf0e10cSrcweir //=========================================================================
758cdf0e10cSrcweir // virtual
759cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::rowInserted()
760cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
761cdf0e10cSrcweir {
762cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
763cdf0e10cSrcweir 	return sal_False;
764cdf0e10cSrcweir }
765cdf0e10cSrcweir 
766cdf0e10cSrcweir //=========================================================================
767cdf0e10cSrcweir // virtual
768cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::rowDeleted()
769cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
770cdf0e10cSrcweir {
771cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
772cdf0e10cSrcweir 	return sal_False;
773cdf0e10cSrcweir }
774cdf0e10cSrcweir 
775cdf0e10cSrcweir //=========================================================================
776cdf0e10cSrcweir // virtual
777cdf0e10cSrcweir uno::Reference< uno::XInterface > SAL_CALL ResultSet::getStatement()
778cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
779cdf0e10cSrcweir {
780cdf0e10cSrcweir /*
781cdf0e10cSrcweir 	returns the Statement that produced this ResultSet object. If the
782cdf0e10cSrcweir 	result set was generated some other way, ... this method returns null.
783cdf0e10cSrcweir */
784cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
785cdf0e10cSrcweir 	return uno::Reference< uno::XInterface >();
786cdf0e10cSrcweir }
787cdf0e10cSrcweir 
788cdf0e10cSrcweir //=========================================================================
789cdf0e10cSrcweir //
790cdf0e10cSrcweir // XRow methods.
791cdf0e10cSrcweir //
792cdf0e10cSrcweir //=========================================================================
793cdf0e10cSrcweir 
794cdf0e10cSrcweir // virtual
795cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::wasNull()
796cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
797cdf0e10cSrcweir {
798cdf0e10cSrcweir 	// This method can not be implemented correctly!!! Imagine different
799cdf0e10cSrcweir 	// threads doing a getXYZ - wasNull calling sequence on the same
800cdf0e10cSrcweir 	// implementation object...
801cdf0e10cSrcweir 
802cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
803cdf0e10cSrcweir 	{
804cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
805cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
806cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
807cdf0e10cSrcweir 		if ( xValues.is() )
808cdf0e10cSrcweir 		{
809cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
810cdf0e10cSrcweir 			return xValues->wasNull();
811cdf0e10cSrcweir 		}
812cdf0e10cSrcweir 	}
813cdf0e10cSrcweir 
814cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
815cdf0e10cSrcweir 	return m_pImpl->m_bWasNull;
816cdf0e10cSrcweir }
817cdf0e10cSrcweir 
818cdf0e10cSrcweir //=========================================================================
819cdf0e10cSrcweir // virtual
820cdf0e10cSrcweir rtl::OUString SAL_CALL ResultSet::getString( sal_Int32 columnIndex )
821cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
822cdf0e10cSrcweir {
823cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
824cdf0e10cSrcweir 	{
825cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
826cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
827cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
828cdf0e10cSrcweir 		if ( xValues.is() )
829cdf0e10cSrcweir 		{
830cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
831cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
832cdf0e10cSrcweir 			return xValues->getString( columnIndex );
833cdf0e10cSrcweir 		}
834cdf0e10cSrcweir 	}
835cdf0e10cSrcweir 
836cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
837cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
838cdf0e10cSrcweir 	return rtl::OUString();
839cdf0e10cSrcweir }
840cdf0e10cSrcweir 
841cdf0e10cSrcweir //=========================================================================
842cdf0e10cSrcweir // virtual
843cdf0e10cSrcweir sal_Bool SAL_CALL ResultSet::getBoolean( sal_Int32 columnIndex )
844cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
845cdf0e10cSrcweir {
846cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
847cdf0e10cSrcweir 	{
848cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
849cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
850cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
851cdf0e10cSrcweir 		if ( xValues.is() )
852cdf0e10cSrcweir 		{
853cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
854cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
855cdf0e10cSrcweir 			return xValues->getBoolean( columnIndex );
856cdf0e10cSrcweir 		}
857cdf0e10cSrcweir 	}
858cdf0e10cSrcweir 
859cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
860cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
861cdf0e10cSrcweir 	return sal_False;
862cdf0e10cSrcweir }
863cdf0e10cSrcweir 
864cdf0e10cSrcweir //=========================================================================
865cdf0e10cSrcweir // virtual
866cdf0e10cSrcweir sal_Int8 SAL_CALL ResultSet::getByte( sal_Int32 columnIndex )
867cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
868cdf0e10cSrcweir {
869cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
870cdf0e10cSrcweir 	{
871cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
872cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
873cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
874cdf0e10cSrcweir 		if ( xValues.is() )
875cdf0e10cSrcweir 		{
876cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
877cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
878cdf0e10cSrcweir 			return xValues->getByte( columnIndex );
879cdf0e10cSrcweir 		}
880cdf0e10cSrcweir 	}
881cdf0e10cSrcweir 
882cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
883cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
884cdf0e10cSrcweir 	return 0;
885cdf0e10cSrcweir }
886cdf0e10cSrcweir 
887cdf0e10cSrcweir //=========================================================================
888cdf0e10cSrcweir // virtual
889cdf0e10cSrcweir sal_Int16 SAL_CALL ResultSet::getShort( sal_Int32 columnIndex )
890cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
891cdf0e10cSrcweir {
892cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
893cdf0e10cSrcweir 	{
894cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
895cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
896cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
897cdf0e10cSrcweir 		if ( xValues.is() )
898cdf0e10cSrcweir 		{
899cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
900cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
901cdf0e10cSrcweir 			return xValues->getShort( columnIndex );
902cdf0e10cSrcweir 		}
903cdf0e10cSrcweir 	}
904cdf0e10cSrcweir 
905cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
906cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
907cdf0e10cSrcweir 	return 0;
908cdf0e10cSrcweir }
909cdf0e10cSrcweir 
910cdf0e10cSrcweir //=========================================================================
911cdf0e10cSrcweir // virtual
912cdf0e10cSrcweir sal_Int32 SAL_CALL ResultSet::getInt( sal_Int32 columnIndex )
913cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
914cdf0e10cSrcweir {
915cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
916cdf0e10cSrcweir 	{
917cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
918cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
919cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
920cdf0e10cSrcweir 		if ( xValues.is() )
921cdf0e10cSrcweir 		{
922cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
923cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
924cdf0e10cSrcweir 			return xValues->getInt( columnIndex );
925cdf0e10cSrcweir 		}
926cdf0e10cSrcweir 	}
927cdf0e10cSrcweir 
928cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
929cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
930cdf0e10cSrcweir 	return 0;
931cdf0e10cSrcweir }
932cdf0e10cSrcweir 
933cdf0e10cSrcweir //=========================================================================
934cdf0e10cSrcweir // virtual
935cdf0e10cSrcweir sal_Int64 SAL_CALL ResultSet::getLong( sal_Int32 columnIndex )
936cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
937cdf0e10cSrcweir {
938cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
939cdf0e10cSrcweir 	{
940cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
941cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
942cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
943cdf0e10cSrcweir 		if ( xValues.is() )
944cdf0e10cSrcweir 		{
945cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
946cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
947cdf0e10cSrcweir 			return xValues->getLong( columnIndex );
948cdf0e10cSrcweir 		}
949cdf0e10cSrcweir 	}
950cdf0e10cSrcweir 
951cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
952cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
953cdf0e10cSrcweir 	return 0;
954cdf0e10cSrcweir }
955cdf0e10cSrcweir 
956cdf0e10cSrcweir //=========================================================================
957cdf0e10cSrcweir // virtual
958cdf0e10cSrcweir float SAL_CALL ResultSet::getFloat( sal_Int32 columnIndex )
959cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
960cdf0e10cSrcweir {
961cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
962cdf0e10cSrcweir 	{
963cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
964cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
965cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
966cdf0e10cSrcweir 		if ( xValues.is() )
967cdf0e10cSrcweir 		{
968cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
969cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
970cdf0e10cSrcweir 			return xValues->getFloat( columnIndex );
971cdf0e10cSrcweir 		}
972cdf0e10cSrcweir 	}
973cdf0e10cSrcweir 
974cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
975cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
976cdf0e10cSrcweir 	return 0;
977cdf0e10cSrcweir }
978cdf0e10cSrcweir 
979cdf0e10cSrcweir //=========================================================================
980cdf0e10cSrcweir // virtual
981cdf0e10cSrcweir double SAL_CALL ResultSet::getDouble( sal_Int32 columnIndex )
982cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
983cdf0e10cSrcweir {
984cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
985cdf0e10cSrcweir 	{
986cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
987cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
988cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
989cdf0e10cSrcweir 		if ( xValues.is() )
990cdf0e10cSrcweir 		{
991cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
992cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
993cdf0e10cSrcweir 			return xValues->getDouble( columnIndex );
994cdf0e10cSrcweir 		}
995cdf0e10cSrcweir 	}
996cdf0e10cSrcweir 
997cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
998cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
999cdf0e10cSrcweir 	return 0;
1000cdf0e10cSrcweir }
1001cdf0e10cSrcweir 
1002cdf0e10cSrcweir //=========================================================================
1003cdf0e10cSrcweir // virtual
1004cdf0e10cSrcweir uno::Sequence< sal_Int8 > SAL_CALL
1005cdf0e10cSrcweir ResultSet::getBytes( sal_Int32 columnIndex )
1006cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1007cdf0e10cSrcweir {
1008cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1009cdf0e10cSrcweir 	{
1010cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1011cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1012cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1013cdf0e10cSrcweir 		if ( xValues.is() )
1014cdf0e10cSrcweir 		{
1015cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1016cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1017cdf0e10cSrcweir 			return xValues->getBytes( columnIndex );
1018cdf0e10cSrcweir 		}
1019cdf0e10cSrcweir 	}
1020cdf0e10cSrcweir 
1021cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1022cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1023cdf0e10cSrcweir 	return uno::Sequence< sal_Int8 >();
1024cdf0e10cSrcweir }
1025cdf0e10cSrcweir 
1026cdf0e10cSrcweir //=========================================================================
1027cdf0e10cSrcweir // virtual
1028cdf0e10cSrcweir util::Date SAL_CALL ResultSet::getDate( sal_Int32 columnIndex )
1029cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1030cdf0e10cSrcweir {
1031cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1032cdf0e10cSrcweir 	{
1033cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1034cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1035cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1036cdf0e10cSrcweir 		if ( xValues.is() )
1037cdf0e10cSrcweir 		{
1038cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1039cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1040cdf0e10cSrcweir 			return xValues->getDate( columnIndex );
1041cdf0e10cSrcweir 		}
1042cdf0e10cSrcweir 	}
1043cdf0e10cSrcweir 
1044cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1045cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1046cdf0e10cSrcweir 	return util::Date();
1047cdf0e10cSrcweir }
1048cdf0e10cSrcweir 
1049cdf0e10cSrcweir //=========================================================================
1050cdf0e10cSrcweir // virtual
1051cdf0e10cSrcweir util::Time SAL_CALL ResultSet::getTime( sal_Int32 columnIndex )
1052cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1053cdf0e10cSrcweir {
1054cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1055cdf0e10cSrcweir 	{
1056cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1057cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1058cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1059cdf0e10cSrcweir 		if ( xValues.is() )
1060cdf0e10cSrcweir 		{
1061cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1062cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1063cdf0e10cSrcweir 			return xValues->getTime( columnIndex );
1064cdf0e10cSrcweir 		}
1065cdf0e10cSrcweir 	}
1066cdf0e10cSrcweir 
1067cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1068cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1069cdf0e10cSrcweir 	return util::Time();
1070cdf0e10cSrcweir }
1071cdf0e10cSrcweir 
1072cdf0e10cSrcweir //=========================================================================
1073cdf0e10cSrcweir // virtual
1074cdf0e10cSrcweir util::DateTime SAL_CALL
1075cdf0e10cSrcweir ResultSet::getTimestamp( sal_Int32 columnIndex )
1076cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1077cdf0e10cSrcweir {
1078cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1079cdf0e10cSrcweir 	{
1080cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1081cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1082cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1083cdf0e10cSrcweir 		if ( xValues.is() )
1084cdf0e10cSrcweir 		{
1085cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1086cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1087cdf0e10cSrcweir 			return xValues->getTimestamp( columnIndex );
1088cdf0e10cSrcweir 		}
1089cdf0e10cSrcweir 	}
1090cdf0e10cSrcweir 
1091cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1092cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1093cdf0e10cSrcweir 	return util::DateTime();
1094cdf0e10cSrcweir }
1095cdf0e10cSrcweir 
1096cdf0e10cSrcweir //=========================================================================
1097cdf0e10cSrcweir // virtual
1098cdf0e10cSrcweir uno::Reference< io::XInputStream > SAL_CALL
1099cdf0e10cSrcweir ResultSet::getBinaryStream( sal_Int32 columnIndex )
1100cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1101cdf0e10cSrcweir {
1102cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1103cdf0e10cSrcweir 	{
1104cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1105cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1106cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1107cdf0e10cSrcweir 		if ( xValues.is() )
1108cdf0e10cSrcweir 		{
1109cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1110cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1111cdf0e10cSrcweir 			return xValues->getBinaryStream( columnIndex );
1112cdf0e10cSrcweir 		}
1113cdf0e10cSrcweir 	}
1114cdf0e10cSrcweir 
1115cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1116cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1117cdf0e10cSrcweir 	return uno::Reference< io::XInputStream >();
1118cdf0e10cSrcweir }
1119cdf0e10cSrcweir 
1120cdf0e10cSrcweir //=========================================================================
1121cdf0e10cSrcweir // virtual
1122cdf0e10cSrcweir uno::Reference< io::XInputStream > SAL_CALL
1123cdf0e10cSrcweir ResultSet::getCharacterStream( sal_Int32 columnIndex )
1124cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1125cdf0e10cSrcweir {
1126cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1127cdf0e10cSrcweir 	{
1128cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1129cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1130cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1131cdf0e10cSrcweir 		if ( xValues.is() )
1132cdf0e10cSrcweir 		{
1133cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1134cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1135cdf0e10cSrcweir 			return xValues->getCharacterStream( columnIndex );
1136cdf0e10cSrcweir 		}
1137cdf0e10cSrcweir 	}
1138cdf0e10cSrcweir 
1139cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1140cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1141cdf0e10cSrcweir 	return uno::Reference< io::XInputStream >();
1142cdf0e10cSrcweir }
1143cdf0e10cSrcweir 
1144cdf0e10cSrcweir //=========================================================================
1145cdf0e10cSrcweir // virtual
1146cdf0e10cSrcweir uno::Any SAL_CALL ResultSet::getObject(
1147cdf0e10cSrcweir         sal_Int32 columnIndex,
1148cdf0e10cSrcweir         const uno::Reference< container::XNameAccess >& typeMap )
1149cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1150cdf0e10cSrcweir {
1151cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1152cdf0e10cSrcweir 	{
1153cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1154cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1155cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1156cdf0e10cSrcweir 		if ( xValues.is() )
1157cdf0e10cSrcweir 		{
1158cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1159cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1160cdf0e10cSrcweir 			return xValues->getObject( columnIndex, typeMap );
1161cdf0e10cSrcweir 		}
1162cdf0e10cSrcweir 	}
1163cdf0e10cSrcweir 
1164cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1165cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1166cdf0e10cSrcweir 	return uno::Any();
1167cdf0e10cSrcweir }
1168cdf0e10cSrcweir 
1169cdf0e10cSrcweir //=========================================================================
1170cdf0e10cSrcweir // virtual
1171cdf0e10cSrcweir uno::Reference< sdbc::XRef > SAL_CALL
1172cdf0e10cSrcweir ResultSet::getRef( sal_Int32 columnIndex )
1173cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1174cdf0e10cSrcweir {
1175cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1176cdf0e10cSrcweir 	{
1177cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1178cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1179cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1180cdf0e10cSrcweir 		if ( xValues.is() )
1181cdf0e10cSrcweir 		{
1182cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1183cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1184cdf0e10cSrcweir 			return xValues->getRef( columnIndex );
1185cdf0e10cSrcweir 		}
1186cdf0e10cSrcweir 	}
1187cdf0e10cSrcweir 
1188cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1189cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1190cdf0e10cSrcweir 	return uno::Reference< sdbc::XRef >();
1191cdf0e10cSrcweir }
1192cdf0e10cSrcweir 
1193cdf0e10cSrcweir //=========================================================================
1194cdf0e10cSrcweir // virtual
1195cdf0e10cSrcweir uno::Reference< sdbc::XBlob > SAL_CALL
1196cdf0e10cSrcweir ResultSet::getBlob( sal_Int32 columnIndex )
1197cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1198cdf0e10cSrcweir {
1199cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1200cdf0e10cSrcweir 	{
1201cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1202cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1203cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1204cdf0e10cSrcweir 		if ( xValues.is() )
1205cdf0e10cSrcweir 		{
1206cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1207cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1208cdf0e10cSrcweir 			return xValues->getBlob( columnIndex );
1209cdf0e10cSrcweir 		}
1210cdf0e10cSrcweir 	}
1211cdf0e10cSrcweir 
1212cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1213cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1214cdf0e10cSrcweir 	return uno::Reference< sdbc::XBlob >();
1215cdf0e10cSrcweir }
1216cdf0e10cSrcweir 
1217cdf0e10cSrcweir //=========================================================================
1218cdf0e10cSrcweir // virtual
1219cdf0e10cSrcweir uno::Reference< sdbc::XClob > SAL_CALL
1220cdf0e10cSrcweir ResultSet::getClob( sal_Int32 columnIndex )
1221cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1222cdf0e10cSrcweir {
1223cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1224cdf0e10cSrcweir 	{
1225cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1226cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1227cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1228cdf0e10cSrcweir 		if ( xValues.is() )
1229cdf0e10cSrcweir 		{
1230cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1231cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1232cdf0e10cSrcweir 			return xValues->getClob( columnIndex );
1233cdf0e10cSrcweir 		}
1234cdf0e10cSrcweir 	}
1235cdf0e10cSrcweir 
1236cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1237cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1238cdf0e10cSrcweir 	return uno::Reference< sdbc::XClob >();
1239cdf0e10cSrcweir }
1240cdf0e10cSrcweir 
1241cdf0e10cSrcweir //=========================================================================
1242cdf0e10cSrcweir // virtual
1243cdf0e10cSrcweir uno::Reference< sdbc::XArray > SAL_CALL
1244cdf0e10cSrcweir ResultSet::getArray( sal_Int32 columnIndex )
1245cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1246cdf0e10cSrcweir {
1247cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1248cdf0e10cSrcweir 	{
1249cdf0e10cSrcweir 		uno::Reference< sdbc::XRow > xValues
1250cdf0e10cSrcweir 			= m_pImpl->m_xDataSupplier->queryPropertyValues(
1251cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1252cdf0e10cSrcweir 		if ( xValues.is() )
1253cdf0e10cSrcweir 		{
1254cdf0e10cSrcweir 			m_pImpl->m_bWasNull = sal_False;
1255cdf0e10cSrcweir 			m_pImpl->m_xDataSupplier->validate();
1256cdf0e10cSrcweir 			return xValues->getArray( columnIndex );
1257cdf0e10cSrcweir 		}
1258cdf0e10cSrcweir 	}
1259cdf0e10cSrcweir 
1260cdf0e10cSrcweir 	m_pImpl->m_bWasNull = sal_True;
1261cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1262cdf0e10cSrcweir 	return uno::Reference< sdbc::XArray >();
1263cdf0e10cSrcweir }
1264cdf0e10cSrcweir 
1265cdf0e10cSrcweir //=========================================================================
1266cdf0e10cSrcweir //
1267cdf0e10cSrcweir // XCloseable methods.
1268cdf0e10cSrcweir //
1269cdf0e10cSrcweir //=========================================================================
1270cdf0e10cSrcweir 
1271cdf0e10cSrcweir // virtual
1272cdf0e10cSrcweir void SAL_CALL ResultSet::close()
1273cdf0e10cSrcweir 	throw( sdbc::SQLException, uno::RuntimeException )
1274cdf0e10cSrcweir {
1275cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->close();
1276cdf0e10cSrcweir 	m_pImpl->m_xDataSupplier->validate();
1277cdf0e10cSrcweir }
1278cdf0e10cSrcweir 
1279cdf0e10cSrcweir //=========================================================================
1280cdf0e10cSrcweir //
1281cdf0e10cSrcweir // XContentAccess methods.
1282cdf0e10cSrcweir //
1283cdf0e10cSrcweir //=========================================================================
1284cdf0e10cSrcweir 
1285cdf0e10cSrcweir // virtual
1286cdf0e10cSrcweir rtl::OUString SAL_CALL ResultSet::queryContentIdentifierString()
1287cdf0e10cSrcweir 	throw( uno::RuntimeException )
1288cdf0e10cSrcweir {
1289cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1290cdf0e10cSrcweir 		return m_pImpl->m_xDataSupplier->queryContentIdentifierString(
1291cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1292cdf0e10cSrcweir 
1293cdf0e10cSrcweir 	return rtl::OUString();
1294cdf0e10cSrcweir }
1295cdf0e10cSrcweir 
1296cdf0e10cSrcweir //=========================================================================
1297cdf0e10cSrcweir // virtual
1298cdf0e10cSrcweir uno::Reference< com::sun::star::ucb::XContentIdentifier > SAL_CALL
1299cdf0e10cSrcweir ResultSet::queryContentIdentifier()
1300cdf0e10cSrcweir 	throw( uno::RuntimeException )
1301cdf0e10cSrcweir {
1302cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1303cdf0e10cSrcweir 		return m_pImpl->m_xDataSupplier->queryContentIdentifier(
1304cdf0e10cSrcweir 														m_pImpl->m_nPos - 1 );
1305cdf0e10cSrcweir 
1306cdf0e10cSrcweir 	return uno::Reference< com::sun::star::ucb::XContentIdentifier >();
1307cdf0e10cSrcweir }
1308cdf0e10cSrcweir 
1309cdf0e10cSrcweir //=========================================================================
1310cdf0e10cSrcweir // virtual
1311cdf0e10cSrcweir uno::Reference< com::sun::star::ucb::XContent > SAL_CALL
1312cdf0e10cSrcweir ResultSet::queryContent()
1313cdf0e10cSrcweir 	throw( uno::RuntimeException )
1314cdf0e10cSrcweir {
1315cdf0e10cSrcweir 	if ( m_pImpl->m_nPos && !m_pImpl->m_bAfterLast )
1316cdf0e10cSrcweir 		return m_pImpl->m_xDataSupplier->queryContent( m_pImpl->m_nPos - 1 );
1317cdf0e10cSrcweir 
1318cdf0e10cSrcweir 	return uno::Reference< com::sun::star::ucb::XContent >();
1319cdf0e10cSrcweir }
1320cdf0e10cSrcweir 
1321cdf0e10cSrcweir //=========================================================================
1322cdf0e10cSrcweir //
1323cdf0e10cSrcweir // XPropertySet methods.
1324cdf0e10cSrcweir //
1325cdf0e10cSrcweir //=========================================================================
1326cdf0e10cSrcweir 
1327cdf0e10cSrcweir // virtual
1328cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > SAL_CALL
1329cdf0e10cSrcweir ResultSet::getPropertySetInfo()
1330cdf0e10cSrcweir 	throw( uno::RuntimeException )
1331cdf0e10cSrcweir {
1332cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
1333cdf0e10cSrcweir 
1334cdf0e10cSrcweir 	if ( !m_pImpl->m_xPropSetInfo.is() )
1335cdf0e10cSrcweir 		m_pImpl->m_xPropSetInfo
1336cdf0e10cSrcweir 			= new PropertySetInfo( m_pImpl->m_xSMgr,
1337cdf0e10cSrcweir 								   aPropertyTable,
1338cdf0e10cSrcweir 								   RESULTSET_PROPERTY_COUNT );
1339cdf0e10cSrcweir 	return m_pImpl->m_xPropSetInfo;
1340cdf0e10cSrcweir }
1341cdf0e10cSrcweir 
1342cdf0e10cSrcweir //=========================================================================
1343cdf0e10cSrcweir // virtual
1344cdf0e10cSrcweir void SAL_CALL ResultSet::setPropertyValue( const rtl::OUString& aPropertyName,
1345cdf0e10cSrcweir 										   const uno::Any& )
1346cdf0e10cSrcweir 	throw( beans::UnknownPropertyException,
1347cdf0e10cSrcweir 		   beans::PropertyVetoException,
1348cdf0e10cSrcweir 		   lang::IllegalArgumentException,
1349cdf0e10cSrcweir 		   lang::WrappedTargetException,
1350cdf0e10cSrcweir 		   uno::RuntimeException )
1351cdf0e10cSrcweir {
1352cdf0e10cSrcweir 	if ( !aPropertyName.getLength() )
1353cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
1354cdf0e10cSrcweir 
1355cdf0e10cSrcweir 	if ( aPropertyName.equals(
1356cdf0e10cSrcweir 				rtl::OUString::createFromAscii( "RowCount" ) ) )
1357cdf0e10cSrcweir 	{
1358cdf0e10cSrcweir 		// property is read-only.
1359cdf0e10cSrcweir 		throw lang::IllegalArgumentException();
1360cdf0e10cSrcweir 	}
1361cdf0e10cSrcweir 	else if ( aPropertyName.equals(
1362cdf0e10cSrcweir 				rtl::OUString::createFromAscii( "IsRowCountFinal" ) ) )
1363cdf0e10cSrcweir 	{
1364cdf0e10cSrcweir 		// property is read-only.
1365cdf0e10cSrcweir 		throw lang::IllegalArgumentException();
1366cdf0e10cSrcweir 	}
1367cdf0e10cSrcweir 	else
1368cdf0e10cSrcweir 	{
1369cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
1370cdf0e10cSrcweir 	}
1371cdf0e10cSrcweir }
1372cdf0e10cSrcweir 
1373cdf0e10cSrcweir //=========================================================================
1374cdf0e10cSrcweir // virtual
1375cdf0e10cSrcweir uno::Any SAL_CALL ResultSet::getPropertyValue(
1376cdf0e10cSrcweir         const rtl::OUString& PropertyName )
1377cdf0e10cSrcweir 	throw( beans::UnknownPropertyException,
1378cdf0e10cSrcweir 		   lang::WrappedTargetException,
1379cdf0e10cSrcweir 		   uno::RuntimeException )
1380cdf0e10cSrcweir {
1381cdf0e10cSrcweir 	if ( !PropertyName.getLength() )
1382cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
1383cdf0e10cSrcweir 
1384cdf0e10cSrcweir 	uno::Any aValue;
1385cdf0e10cSrcweir 
1386cdf0e10cSrcweir 	if ( PropertyName.equals(
1387cdf0e10cSrcweir 				rtl::OUString::createFromAscii( "RowCount" ) ) )
1388cdf0e10cSrcweir 	{
1389cdf0e10cSrcweir 		aValue <<= m_pImpl->m_xDataSupplier->currentCount();
1390cdf0e10cSrcweir 	}
1391cdf0e10cSrcweir 	else if ( PropertyName.equals(
1392cdf0e10cSrcweir 				rtl::OUString::createFromAscii( "IsRowCountFinal" ) ) )
1393cdf0e10cSrcweir 	{
1394cdf0e10cSrcweir 		aValue <<= m_pImpl->m_xDataSupplier->isCountFinal();
1395cdf0e10cSrcweir 	}
1396cdf0e10cSrcweir 	else
1397cdf0e10cSrcweir 	{
1398cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
1399cdf0e10cSrcweir 	}
1400cdf0e10cSrcweir 
1401cdf0e10cSrcweir 	return aValue;
1402cdf0e10cSrcweir }
1403cdf0e10cSrcweir 
1404cdf0e10cSrcweir //=========================================================================
1405cdf0e10cSrcweir // virtual
1406cdf0e10cSrcweir void SAL_CALL ResultSet::addPropertyChangeListener(
1407cdf0e10cSrcweir         const rtl::OUString& aPropertyName,
1408cdf0e10cSrcweir         const uno::Reference< beans::XPropertyChangeListener >& xListener )
1409cdf0e10cSrcweir 	throw( beans::UnknownPropertyException,
1410cdf0e10cSrcweir 		   lang::WrappedTargetException,
1411cdf0e10cSrcweir 		   uno::RuntimeException )
1412cdf0e10cSrcweir {
1413cdf0e10cSrcweir 	// Note: An empty property name means a listener for "all" properties.
1414cdf0e10cSrcweir 
1415cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
1416cdf0e10cSrcweir 
1417cdf0e10cSrcweir 	if ( aPropertyName.getLength() &&
1418cdf0e10cSrcweir 	     !aPropertyName.equals(
1419cdf0e10cSrcweir 				rtl::OUString::createFromAscii( "RowCount" ) ) &&
1420cdf0e10cSrcweir 		 !aPropertyName.equals(
1421cdf0e10cSrcweir 				rtl::OUString::createFromAscii( "IsRowCountFinal" ) ) )
1422cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
1423cdf0e10cSrcweir 
1424cdf0e10cSrcweir 	if ( !m_pImpl->m_pPropertyChangeListeners )
1425cdf0e10cSrcweir 		m_pImpl->m_pPropertyChangeListeners
1426cdf0e10cSrcweir 			= new PropertyChangeListeners( m_pImpl->m_aMutex );
1427cdf0e10cSrcweir 
1428cdf0e10cSrcweir 	m_pImpl->m_pPropertyChangeListeners->addInterface(
1429cdf0e10cSrcweir 												aPropertyName, xListener );
1430cdf0e10cSrcweir }
1431cdf0e10cSrcweir 
1432cdf0e10cSrcweir //=========================================================================
1433cdf0e10cSrcweir // virtual
1434cdf0e10cSrcweir void SAL_CALL ResultSet::removePropertyChangeListener(
1435cdf0e10cSrcweir         const rtl::OUString& aPropertyName,
1436cdf0e10cSrcweir 		const uno::Reference< beans::XPropertyChangeListener >& xListener )
1437cdf0e10cSrcweir 	throw( beans::UnknownPropertyException,
1438cdf0e10cSrcweir 		   lang::WrappedTargetException,
1439cdf0e10cSrcweir 		   uno::RuntimeException )
1440cdf0e10cSrcweir {
1441cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_pImpl->m_aMutex );
1442cdf0e10cSrcweir 
1443cdf0e10cSrcweir 	if ( aPropertyName.getLength() &&
1444cdf0e10cSrcweir 	     !aPropertyName.equals(
1445cdf0e10cSrcweir 				rtl::OUString::createFromAscii( "RowCount" ) ) &&
1446cdf0e10cSrcweir 		 !aPropertyName.equals(
1447cdf0e10cSrcweir 				rtl::OUString::createFromAscii( "IsRowCountFinal" ) ) )
1448cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
1449cdf0e10cSrcweir 
1450cdf0e10cSrcweir 	if ( m_pImpl->m_pPropertyChangeListeners )
1451cdf0e10cSrcweir 		m_pImpl->m_pPropertyChangeListeners->removeInterface(
1452cdf0e10cSrcweir 													aPropertyName, xListener );
1453cdf0e10cSrcweir 
1454cdf0e10cSrcweir }
1455cdf0e10cSrcweir 
1456cdf0e10cSrcweir //=========================================================================
1457cdf0e10cSrcweir // virtual
1458cdf0e10cSrcweir void SAL_CALL ResultSet::addVetoableChangeListener(
1459cdf0e10cSrcweir         const rtl::OUString&,
1460cdf0e10cSrcweir         const uno::Reference< beans::XVetoableChangeListener >& )
1461cdf0e10cSrcweir 	throw( beans::UnknownPropertyException,
1462cdf0e10cSrcweir 		   lang::WrappedTargetException,
1463cdf0e10cSrcweir 		   uno::RuntimeException )
1464cdf0e10cSrcweir {
1465cdf0e10cSrcweir 	//	No constrained props, at the moment.
1466cdf0e10cSrcweir }
1467cdf0e10cSrcweir 
1468cdf0e10cSrcweir //=========================================================================
1469cdf0e10cSrcweir // virtual
1470cdf0e10cSrcweir void SAL_CALL ResultSet::removeVetoableChangeListener(
1471cdf0e10cSrcweir         const rtl::OUString&,
1472cdf0e10cSrcweir         const uno::Reference< beans::XVetoableChangeListener >& )
1473cdf0e10cSrcweir 	throw( beans::UnknownPropertyException,
1474cdf0e10cSrcweir 		   lang::WrappedTargetException,
1475cdf0e10cSrcweir 		   uno::RuntimeException )
1476cdf0e10cSrcweir {
1477cdf0e10cSrcweir 	//	No constrained props, at the moment.
1478cdf0e10cSrcweir }
1479cdf0e10cSrcweir 
1480cdf0e10cSrcweir //=========================================================================
1481cdf0e10cSrcweir //
1482cdf0e10cSrcweir // Non-interface methods.
1483cdf0e10cSrcweir //
1484cdf0e10cSrcweir //=========================================================================
1485cdf0e10cSrcweir 
1486cdf0e10cSrcweir void ResultSet::propertyChanged( const beans::PropertyChangeEvent& rEvt )
1487cdf0e10cSrcweir {
1488cdf0e10cSrcweir 	if ( !m_pImpl->m_pPropertyChangeListeners )
1489cdf0e10cSrcweir 		return;
1490cdf0e10cSrcweir 
1491cdf0e10cSrcweir 	// Notify listeners interested especially in the changed property.
1492cdf0e10cSrcweir 	cppu::OInterfaceContainerHelper* pPropsContainer
1493cdf0e10cSrcweir 		= m_pImpl->m_pPropertyChangeListeners->getContainer(
1494cdf0e10cSrcweir 														rEvt.PropertyName );
1495cdf0e10cSrcweir 	if ( pPropsContainer )
1496cdf0e10cSrcweir 	{
1497cdf0e10cSrcweir 		cppu::OInterfaceIteratorHelper aIter( *pPropsContainer );
1498cdf0e10cSrcweir 		while ( aIter.hasMoreElements() )
1499cdf0e10cSrcweir 		{
1500cdf0e10cSrcweir 			uno::Reference< beans::XPropertyChangeListener > xListener(
1501cdf0e10cSrcweir                 aIter.next(), uno::UNO_QUERY );
1502cdf0e10cSrcweir 			if ( xListener.is() )
1503cdf0e10cSrcweir 				xListener->propertyChange( rEvt );
1504cdf0e10cSrcweir 		}
1505cdf0e10cSrcweir 	}
1506cdf0e10cSrcweir 
1507cdf0e10cSrcweir 	// Notify listeners interested in all properties.
1508cdf0e10cSrcweir 	pPropsContainer
1509cdf0e10cSrcweir 		= m_pImpl->m_pPropertyChangeListeners->getContainer( rtl::OUString() );
1510cdf0e10cSrcweir 	if ( pPropsContainer )
1511cdf0e10cSrcweir 	{
1512cdf0e10cSrcweir 		cppu::OInterfaceIteratorHelper aIter( *pPropsContainer );
1513cdf0e10cSrcweir 		while ( aIter.hasMoreElements() )
1514cdf0e10cSrcweir 		{
1515cdf0e10cSrcweir 			uno::Reference< beans::XPropertyChangeListener > xListener(
1516cdf0e10cSrcweir                 aIter.next(), uno::UNO_QUERY );
1517cdf0e10cSrcweir 			if ( xListener.is() )
1518cdf0e10cSrcweir 				xListener->propertyChange( rEvt );
1519cdf0e10cSrcweir 		}
1520cdf0e10cSrcweir 	}
1521cdf0e10cSrcweir }
1522cdf0e10cSrcweir 
1523cdf0e10cSrcweir //=========================================================================
1524cdf0e10cSrcweir void ResultSet::rowCountChanged( sal_uInt32 nOld, sal_uInt32 nNew )
1525cdf0e10cSrcweir {
1526cdf0e10cSrcweir 	OSL_ENSURE( nOld < nNew, "ResultSet::rowCountChanged - nOld >= nNew!" );
1527cdf0e10cSrcweir 
1528cdf0e10cSrcweir 	if ( !m_pImpl->m_pPropertyChangeListeners )
1529cdf0e10cSrcweir 		return;
1530cdf0e10cSrcweir 
1531cdf0e10cSrcweir 	propertyChanged(
1532cdf0e10cSrcweir 		beans::PropertyChangeEvent(
1533cdf0e10cSrcweir             static_cast< cppu::OWeakObject * >( this ),
1534cdf0e10cSrcweir             rtl::OUString::createFromAscii( "RowCount" ),
1535cdf0e10cSrcweir             sal_False,
1536cdf0e10cSrcweir             1001,
1537cdf0e10cSrcweir             uno::makeAny( nOld ),	  // old value
1538cdf0e10cSrcweir             uno::makeAny( nNew ) ) ); // new value
1539cdf0e10cSrcweir }
1540cdf0e10cSrcweir 
1541cdf0e10cSrcweir //=========================================================================
1542cdf0e10cSrcweir void ResultSet::rowCountFinal()
1543cdf0e10cSrcweir {
1544cdf0e10cSrcweir 	if ( !m_pImpl->m_pPropertyChangeListeners )
1545cdf0e10cSrcweir 		return;
1546cdf0e10cSrcweir 
1547cdf0e10cSrcweir 	propertyChanged(
1548cdf0e10cSrcweir 		beans::PropertyChangeEvent(
1549cdf0e10cSrcweir             static_cast< cppu::OWeakObject * >( this ),
1550cdf0e10cSrcweir             rtl::OUString::createFromAscii( "IsRowCountFinal" ),
1551cdf0e10cSrcweir             sal_False,
1552cdf0e10cSrcweir             1000,
1553cdf0e10cSrcweir 			uno:: makeAny( sal_False ),	  // old value
1554cdf0e10cSrcweir             uno::makeAny( sal_True ) ) ); // new value
1555cdf0e10cSrcweir }
1556cdf0e10cSrcweir 
1557cdf0e10cSrcweir //=========================================================================
1558cdf0e10cSrcweir const uno::Sequence< beans::Property >&	ResultSet::getProperties()
1559cdf0e10cSrcweir {
1560cdf0e10cSrcweir 	return m_pImpl->m_aProperties;
1561cdf0e10cSrcweir }
1562cdf0e10cSrcweir 
1563cdf0e10cSrcweir //=========================================================================
1564cdf0e10cSrcweir const uno::Reference< com::sun::star::ucb::XCommandEnvironment >&
1565cdf0e10cSrcweir ResultSet::getEnvironment()
1566cdf0e10cSrcweir {
1567cdf0e10cSrcweir 	return m_pImpl->m_xEnv;
1568cdf0e10cSrcweir }
1569cdf0e10cSrcweir 
1570cdf0e10cSrcweir } // namespace ucbhelper
1571cdf0e10cSrcweir 
1572cdf0e10cSrcweir namespace ucbhelper_impl {
1573cdf0e10cSrcweir 
1574cdf0e10cSrcweir //=========================================================================
1575cdf0e10cSrcweir //=========================================================================
1576cdf0e10cSrcweir //
1577cdf0e10cSrcweir // PropertySetInfo Implementation.
1578cdf0e10cSrcweir //
1579cdf0e10cSrcweir //=========================================================================
1580cdf0e10cSrcweir //=========================================================================
1581cdf0e10cSrcweir 
1582cdf0e10cSrcweir PropertySetInfo::PropertySetInfo(
1583cdf0e10cSrcweir     const uno::Reference< lang::XMultiServiceFactory >& rxSMgr,
1584cdf0e10cSrcweir     const PropertyInfo* pProps,
1585cdf0e10cSrcweir     sal_Int32 nProps )
1586cdf0e10cSrcweir : m_xSMgr( rxSMgr )
1587cdf0e10cSrcweir {
1588cdf0e10cSrcweir 	m_pProps = new uno::Sequence< beans::Property >( nProps );
1589cdf0e10cSrcweir 
1590cdf0e10cSrcweir 	if ( nProps )
1591cdf0e10cSrcweir 	{
1592cdf0e10cSrcweir 		const PropertyInfo* pEntry = pProps;
1593cdf0e10cSrcweir 		beans::Property* pProperties = m_pProps->getArray();
1594cdf0e10cSrcweir 
1595cdf0e10cSrcweir 		for ( sal_Int32 n = 0; n < nProps; ++n )
1596cdf0e10cSrcweir 		{
1597cdf0e10cSrcweir 			beans::Property& rProp = pProperties[ n ];
1598cdf0e10cSrcweir 
1599cdf0e10cSrcweir 			rProp.Name		 = rtl::OUString::createFromAscii( pEntry->pName );
1600cdf0e10cSrcweir     		rProp.Handle	 = pEntry->nHandle;
1601cdf0e10cSrcweir     		rProp.Type		 = pEntry->pGetCppuType();
1602cdf0e10cSrcweir     		rProp.Attributes = pEntry->nAttributes;
1603cdf0e10cSrcweir 
1604cdf0e10cSrcweir 			pEntry++;
1605cdf0e10cSrcweir 		}
1606cdf0e10cSrcweir 	}
1607cdf0e10cSrcweir }
1608cdf0e10cSrcweir 
1609cdf0e10cSrcweir //=========================================================================
1610cdf0e10cSrcweir // virtual
1611cdf0e10cSrcweir PropertySetInfo::~PropertySetInfo()
1612cdf0e10cSrcweir {
1613cdf0e10cSrcweir 	delete m_pProps;
1614cdf0e10cSrcweir }
1615cdf0e10cSrcweir 
1616cdf0e10cSrcweir //=========================================================================
1617cdf0e10cSrcweir //
1618cdf0e10cSrcweir // XInterface methods.
1619cdf0e10cSrcweir //
1620cdf0e10cSrcweir //=========================================================================
1621cdf0e10cSrcweir 
1622cdf0e10cSrcweir XINTERFACE_IMPL_2( PropertySetInfo,
1623cdf0e10cSrcweir 				   lang::XTypeProvider,
1624cdf0e10cSrcweir 				   beans::XPropertySetInfo );
1625cdf0e10cSrcweir 
1626cdf0e10cSrcweir //=========================================================================
1627cdf0e10cSrcweir //
1628cdf0e10cSrcweir // XTypeProvider methods.
1629cdf0e10cSrcweir //
1630cdf0e10cSrcweir //=========================================================================
1631cdf0e10cSrcweir 
1632cdf0e10cSrcweir XTYPEPROVIDER_IMPL_2( PropertySetInfo,
1633cdf0e10cSrcweir 				   	  lang::XTypeProvider,
1634cdf0e10cSrcweir 				   	  beans::XPropertySetInfo );
1635cdf0e10cSrcweir 
1636cdf0e10cSrcweir //=========================================================================
1637cdf0e10cSrcweir //
1638cdf0e10cSrcweir // XPropertySetInfo methods.
1639cdf0e10cSrcweir //
1640cdf0e10cSrcweir //=========================================================================
1641cdf0e10cSrcweir 
1642cdf0e10cSrcweir // virtual
1643cdf0e10cSrcweir uno::Sequence< beans::Property > SAL_CALL PropertySetInfo::getProperties()
1644cdf0e10cSrcweir 	throw( uno::RuntimeException )
1645cdf0e10cSrcweir {
1646cdf0e10cSrcweir 	return uno::Sequence< beans::Property >( *m_pProps );
1647cdf0e10cSrcweir }
1648cdf0e10cSrcweir 
1649cdf0e10cSrcweir //=========================================================================
1650cdf0e10cSrcweir // virtual
1651cdf0e10cSrcweir beans::Property SAL_CALL PropertySetInfo::getPropertyByName(
1652cdf0e10cSrcweir         const rtl::OUString& aName )
1653cdf0e10cSrcweir 	throw( beans::UnknownPropertyException, uno::RuntimeException )
1654cdf0e10cSrcweir {
1655cdf0e10cSrcweir 	beans::Property aProp;
1656cdf0e10cSrcweir 	if ( queryProperty( aName, aProp ) )
1657cdf0e10cSrcweir 		return aProp;
1658cdf0e10cSrcweir 
1659cdf0e10cSrcweir 	throw beans::UnknownPropertyException();
1660cdf0e10cSrcweir }
1661cdf0e10cSrcweir 
1662cdf0e10cSrcweir //=========================================================================
1663cdf0e10cSrcweir // virtual
1664cdf0e10cSrcweir sal_Bool SAL_CALL PropertySetInfo::hasPropertyByName(
1665cdf0e10cSrcweir         const rtl::OUString& Name )
1666cdf0e10cSrcweir 	throw( uno::RuntimeException )
1667cdf0e10cSrcweir {
1668cdf0e10cSrcweir 	beans::Property aProp;
1669cdf0e10cSrcweir 	return queryProperty( Name, aProp );
1670cdf0e10cSrcweir }
1671cdf0e10cSrcweir 
1672cdf0e10cSrcweir //=========================================================================
1673cdf0e10cSrcweir sal_Bool PropertySetInfo::queryProperty(
1674cdf0e10cSrcweir     const rtl::OUString& aName, beans::Property& rProp )
1675cdf0e10cSrcweir {
1676cdf0e10cSrcweir 	sal_Int32 nCount = m_pProps->getLength();
1677cdf0e10cSrcweir 	const beans::Property* pProps = m_pProps->getConstArray();
1678cdf0e10cSrcweir 	for ( sal_Int32 n = 0; n < nCount; ++n )
1679cdf0e10cSrcweir 	{
1680cdf0e10cSrcweir 		const beans::Property& rCurr = pProps[ n ];
1681cdf0e10cSrcweir 		if ( rCurr.Name == aName )
1682cdf0e10cSrcweir 		{
1683cdf0e10cSrcweir 			rProp = rCurr;
1684cdf0e10cSrcweir 			return sal_True;
1685cdf0e10cSrcweir 		}
1686cdf0e10cSrcweir 	}
1687cdf0e10cSrcweir 
1688cdf0e10cSrcweir 	return sal_False;
1689cdf0e10cSrcweir }
1690cdf0e10cSrcweir 
1691cdf0e10cSrcweir } // namespace ucbhelper_impl
1692