Bug Summary

File:ucbhelper/source/provider/resultset.cxx
Location:line 397, column 9
Description:Called C++ object pointer is null

Annotated Source Code

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