1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_ucb.hxx"
26*b1cdbd2cSJim Jagielski #include <ucbhelper/contentidentifier.hxx>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/OpenMode.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Reference.h>
29*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBBUTE_HPP_
30*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyAttribute.hpp>
31*b1cdbd2cSJim Jagielski #endif
32*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/ListActionType.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XSourceInitialization.hpp>
34*b1cdbd2cSJim Jagielski #include <ucbhelper/resultsetmetadata.hxx>
35*b1cdbd2cSJim Jagielski #include "ftpresultsetbase.hxx"
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski using namespace ftp;
38*b1cdbd2cSJim Jagielski using namespace com::sun::star;
39*b1cdbd2cSJim Jagielski 
ResultSetBase(const uno::Reference<lang::XMultiServiceFactory> & xMSF,const uno::Reference<ucb::XContentProvider> & xProvider,sal_Int32 nOpenMode,const uno::Sequence<beans::Property> & seq,const uno::Sequence<ucb::NumberedSortingInfo> & seqSort)40*b1cdbd2cSJim Jagielski ResultSetBase::ResultSetBase(
41*b1cdbd2cSJim Jagielski 	const uno::Reference< lang::XMultiServiceFactory >&  xMSF,
42*b1cdbd2cSJim Jagielski 	const uno::Reference< ucb::XContentProvider >&  xProvider,
43*b1cdbd2cSJim Jagielski 	sal_Int32 nOpenMode,
44*b1cdbd2cSJim Jagielski 	const uno::Sequence< beans::Property >& seq,
45*b1cdbd2cSJim Jagielski 	const uno::Sequence< ucb::NumberedSortingInfo >& seqSort )
46*b1cdbd2cSJim Jagielski 	: m_xMSF( xMSF ),
47*b1cdbd2cSJim Jagielski 	  m_xProvider( xProvider ),
48*b1cdbd2cSJim Jagielski 	  m_nRow( -1 ),
49*b1cdbd2cSJim Jagielski 	  m_nWasNull( true ),
50*b1cdbd2cSJim Jagielski 	  m_nOpenMode( nOpenMode ),
51*b1cdbd2cSJim Jagielski 	  m_bRowCountFinal( true ),
52*b1cdbd2cSJim Jagielski 	  m_sProperty( seq ),
53*b1cdbd2cSJim Jagielski 	  m_sSortingInfo( seqSort ),
54*b1cdbd2cSJim Jagielski 	  m_pDisposeEventListeners( 0 ),
55*b1cdbd2cSJim Jagielski 	  m_pRowCountListeners( 0 ),
56*b1cdbd2cSJim Jagielski 	  m_pIsFinalListeners( 0 )
57*b1cdbd2cSJim Jagielski {
58*b1cdbd2cSJim Jagielski }
59*b1cdbd2cSJim Jagielski 
~ResultSetBase()60*b1cdbd2cSJim Jagielski ResultSetBase::~ResultSetBase()
61*b1cdbd2cSJim Jagielski {
62*b1cdbd2cSJim Jagielski 	delete m_pIsFinalListeners;
63*b1cdbd2cSJim Jagielski 	delete m_pRowCountListeners;
64*b1cdbd2cSJim Jagielski 	delete m_pDisposeEventListeners;
65*b1cdbd2cSJim Jagielski }
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski // XInterface
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski void SAL_CALL
acquire(void)71*b1cdbd2cSJim Jagielski ResultSetBase::acquire(
72*b1cdbd2cSJim Jagielski 	void )
73*b1cdbd2cSJim Jagielski 	throw()
74*b1cdbd2cSJim Jagielski {
75*b1cdbd2cSJim Jagielski 	OWeakObject::acquire();
76*b1cdbd2cSJim Jagielski }
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski void SAL_CALL
release(void)80*b1cdbd2cSJim Jagielski ResultSetBase::release(
81*b1cdbd2cSJim Jagielski 	void )
82*b1cdbd2cSJim Jagielski 	throw()
83*b1cdbd2cSJim Jagielski {
84*b1cdbd2cSJim Jagielski 	OWeakObject::release();
85*b1cdbd2cSJim Jagielski }
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski uno::Any SAL_CALL
queryInterface(const uno::Type & rType)90*b1cdbd2cSJim Jagielski ResultSetBase::queryInterface(
91*b1cdbd2cSJim Jagielski 	const uno::Type& rType )
92*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
93*b1cdbd2cSJim Jagielski {
94*b1cdbd2cSJim Jagielski 	uno::Any aRet = cppu::queryInterface(
95*b1cdbd2cSJim Jagielski 		rType,
96*b1cdbd2cSJim Jagielski 		SAL_STATIC_CAST( lang::XComponent*, this),
97*b1cdbd2cSJim Jagielski 		SAL_STATIC_CAST( sdbc::XRow*, this),
98*b1cdbd2cSJim Jagielski 		SAL_STATIC_CAST( sdbc::XResultSet*, this),
99*b1cdbd2cSJim Jagielski 		SAL_STATIC_CAST( sdbc::XResultSetMetaDataSupplier*, this),
100*b1cdbd2cSJim Jagielski 		SAL_STATIC_CAST( beans::XPropertySet*, this ),
101*b1cdbd2cSJim Jagielski 		SAL_STATIC_CAST( ucb::XContentAccess*, this) );
102*b1cdbd2cSJim Jagielski 	return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
103*b1cdbd2cSJim Jagielski }
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski // XComponent
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski void SAL_CALL
addEventListener(const uno::Reference<lang::XEventListener> & Listener)111*b1cdbd2cSJim Jagielski ResultSetBase::addEventListener(
112*b1cdbd2cSJim Jagielski 	const uno::Reference< lang::XEventListener >& Listener )
113*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski 	osl::MutexGuard aGuard( m_aMutex );
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski 	if ( ! m_pDisposeEventListeners )
118*b1cdbd2cSJim Jagielski 		m_pDisposeEventListeners =
119*b1cdbd2cSJim Jagielski 			new cppu::OInterfaceContainerHelper( m_aMutex );
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski 	m_pDisposeEventListeners->addInterface( Listener );
122*b1cdbd2cSJim Jagielski }
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski void SAL_CALL
removeEventListener(const uno::Reference<lang::XEventListener> & Listener)126*b1cdbd2cSJim Jagielski ResultSetBase::removeEventListener(
127*b1cdbd2cSJim Jagielski 	const uno::Reference< lang::XEventListener >& Listener )
128*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
129*b1cdbd2cSJim Jagielski {
130*b1cdbd2cSJim Jagielski 	osl::MutexGuard aGuard( m_aMutex );
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski 	if ( m_pDisposeEventListeners )
133*b1cdbd2cSJim Jagielski 		m_pDisposeEventListeners->removeInterface( Listener );
134*b1cdbd2cSJim Jagielski }
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski void SAL_CALL
dispose()139*b1cdbd2cSJim Jagielski ResultSetBase::dispose()
140*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski 	osl::MutexGuard aGuard( m_aMutex );
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski 	lang::EventObject aEvt;
145*b1cdbd2cSJim Jagielski 	aEvt.Source = static_cast< lang::XComponent * >( this );
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 	if ( m_pDisposeEventListeners && m_pDisposeEventListeners->getLength() )
148*b1cdbd2cSJim Jagielski 	{
149*b1cdbd2cSJim Jagielski 		m_pDisposeEventListeners->disposeAndClear( aEvt );
150*b1cdbd2cSJim Jagielski 	}
151*b1cdbd2cSJim Jagielski 	if( m_pRowCountListeners && m_pRowCountListeners->getLength() )
152*b1cdbd2cSJim Jagielski 	{
153*b1cdbd2cSJim Jagielski 		m_pRowCountListeners->disposeAndClear( aEvt );
154*b1cdbd2cSJim Jagielski 	}
155*b1cdbd2cSJim Jagielski 	if( m_pIsFinalListeners && m_pIsFinalListeners->getLength() )
156*b1cdbd2cSJim Jagielski 	{
157*b1cdbd2cSJim Jagielski 		m_pIsFinalListeners->disposeAndClear( aEvt );
158*b1cdbd2cSJim Jagielski 	}
159*b1cdbd2cSJim Jagielski }
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski //  XResultSet
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
next(void)166*b1cdbd2cSJim Jagielski ResultSetBase::next(
167*b1cdbd2cSJim Jagielski 	void )
168*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
169*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
170*b1cdbd2cSJim Jagielski {
171*b1cdbd2cSJim Jagielski 	sal_Bool test;
172*b1cdbd2cSJim Jagielski 	if( ++m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
173*b1cdbd2cSJim Jagielski 		test = true;
174*b1cdbd2cSJim Jagielski 	else
175*b1cdbd2cSJim Jagielski 		test = false;
176*b1cdbd2cSJim Jagielski 	return test;
177*b1cdbd2cSJim Jagielski }
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
isBeforeFirst(void)181*b1cdbd2cSJim Jagielski ResultSetBase::isBeforeFirst(
182*b1cdbd2cSJim Jagielski 	void )
183*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
184*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
185*b1cdbd2cSJim Jagielski {
186*b1cdbd2cSJim Jagielski 	return m_nRow == -1;
187*b1cdbd2cSJim Jagielski }
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
isAfterLast(void)191*b1cdbd2cSJim Jagielski ResultSetBase::isAfterLast(
192*b1cdbd2cSJim Jagielski 	void )
193*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
194*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
195*b1cdbd2cSJim Jagielski {
196*b1cdbd2cSJim Jagielski 	return m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size());   // Cannot happen, if m_aFolder.isOpen()
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
isFirst(void)201*b1cdbd2cSJim Jagielski ResultSetBase::isFirst(
202*b1cdbd2cSJim Jagielski 	void )
203*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
204*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski 	return m_nRow == 0;
207*b1cdbd2cSJim Jagielski }
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
isLast(void)211*b1cdbd2cSJim Jagielski ResultSetBase::isLast(
212*b1cdbd2cSJim Jagielski 	void  )
213*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
214*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
215*b1cdbd2cSJim Jagielski {
216*b1cdbd2cSJim Jagielski 	if( m_nRow ==  sal::static_int_cast<sal_Int32>(m_aItems.size()) - 1 )
217*b1cdbd2cSJim Jagielski 		return true;
218*b1cdbd2cSJim Jagielski 	else
219*b1cdbd2cSJim Jagielski 		return false;
220*b1cdbd2cSJim Jagielski }
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski void SAL_CALL
beforeFirst(void)224*b1cdbd2cSJim Jagielski ResultSetBase::beforeFirst(
225*b1cdbd2cSJim Jagielski 	void  )
226*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
227*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski 	m_nRow = -1;
230*b1cdbd2cSJim Jagielski }
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski void SAL_CALL
afterLast(void)234*b1cdbd2cSJim Jagielski ResultSetBase::afterLast(
235*b1cdbd2cSJim Jagielski 	void  )
236*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
237*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
238*b1cdbd2cSJim Jagielski {
239*b1cdbd2cSJim Jagielski 	m_nRow = m_aItems.size();
240*b1cdbd2cSJim Jagielski }
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
first(void)244*b1cdbd2cSJim Jagielski ResultSetBase::first(
245*b1cdbd2cSJim Jagielski 	void  )
246*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
247*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski 	m_nRow = -1;
250*b1cdbd2cSJim Jagielski 	return next();
251*b1cdbd2cSJim Jagielski }
252*b1cdbd2cSJim Jagielski 
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
last(void)255*b1cdbd2cSJim Jagielski ResultSetBase::last(
256*b1cdbd2cSJim Jagielski 	void  )
257*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
258*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
259*b1cdbd2cSJim Jagielski {
260*b1cdbd2cSJim Jagielski 	m_nRow = m_aItems.size() - 1;
261*b1cdbd2cSJim Jagielski 	return true;
262*b1cdbd2cSJim Jagielski }
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL
getRow(void)266*b1cdbd2cSJim Jagielski ResultSetBase::getRow(
267*b1cdbd2cSJim Jagielski 	void )
268*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
269*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
270*b1cdbd2cSJim Jagielski {
271*b1cdbd2cSJim Jagielski 	// Test, whether behind last row
272*b1cdbd2cSJim Jagielski 	if( -1 == m_nRow || m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()) )
273*b1cdbd2cSJim Jagielski 		return 0;
274*b1cdbd2cSJim Jagielski 	else
275*b1cdbd2cSJim Jagielski 		return m_nRow+1;
276*b1cdbd2cSJim Jagielski }
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski 
absolute(sal_Int32 row)279*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ResultSetBase::absolute( sal_Int32 row )
280*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException, uno::RuntimeException)
281*b1cdbd2cSJim Jagielski {
282*b1cdbd2cSJim Jagielski 	if( row >= 0 )
283*b1cdbd2cSJim Jagielski 		m_nRow = row - 1;
284*b1cdbd2cSJim Jagielski 	else
285*b1cdbd2cSJim Jagielski 	{
286*b1cdbd2cSJim Jagielski 		last();
287*b1cdbd2cSJim Jagielski 		m_nRow += ( row + 1 );
288*b1cdbd2cSJim Jagielski 		if( m_nRow < -1 )
289*b1cdbd2cSJim Jagielski 			m_nRow = -1;
290*b1cdbd2cSJim Jagielski 	}
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski 	return 0<= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
293*b1cdbd2cSJim Jagielski }
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
relative(sal_Int32 row)299*b1cdbd2cSJim Jagielski ResultSetBase::relative(
300*b1cdbd2cSJim Jagielski 	sal_Int32 row )
301*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
302*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski 	if( isAfterLast() || isBeforeFirst() )
305*b1cdbd2cSJim Jagielski 		throw sdbc::SQLException();
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski 	if( row > 0 )
308*b1cdbd2cSJim Jagielski 		while( row-- )
309*b1cdbd2cSJim Jagielski 			next();
310*b1cdbd2cSJim Jagielski 	else if( row < 0 )
311*b1cdbd2cSJim Jagielski 		while( row++ && m_nRow > - 1 )
312*b1cdbd2cSJim Jagielski 			previous();
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski 	return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
315*b1cdbd2cSJim Jagielski }
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
previous(void)320*b1cdbd2cSJim Jagielski ResultSetBase::previous(
321*b1cdbd2cSJim Jagielski 	void )
322*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
323*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
324*b1cdbd2cSJim Jagielski {
325*b1cdbd2cSJim Jagielski 	if( m_nRow > sal::static_int_cast<sal_Int32>(m_aItems.size()) )
326*b1cdbd2cSJim Jagielski 		m_nRow = m_aItems.size();  // Correct Handling of afterLast
327*b1cdbd2cSJim Jagielski 	if( 0 <= m_nRow ) -- m_nRow;
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski 	return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
330*b1cdbd2cSJim Jagielski }
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski void SAL_CALL
refreshRow(void)334*b1cdbd2cSJim Jagielski ResultSetBase::refreshRow(
335*b1cdbd2cSJim Jagielski 	void )
336*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
337*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
338*b1cdbd2cSJim Jagielski {
339*b1cdbd2cSJim Jagielski }
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski 
342*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
rowUpdated(void)343*b1cdbd2cSJim Jagielski ResultSetBase::rowUpdated(
344*b1cdbd2cSJim Jagielski 	void )
345*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
346*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
347*b1cdbd2cSJim Jagielski {
348*b1cdbd2cSJim Jagielski 	return false;
349*b1cdbd2cSJim Jagielski }
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
rowInserted(void)352*b1cdbd2cSJim Jagielski ResultSetBase::rowInserted(
353*b1cdbd2cSJim Jagielski 	void  )
354*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
355*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
356*b1cdbd2cSJim Jagielski {
357*b1cdbd2cSJim Jagielski 	return false;
358*b1cdbd2cSJim Jagielski }
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL
rowDeleted(void)361*b1cdbd2cSJim Jagielski ResultSetBase::rowDeleted(
362*b1cdbd2cSJim Jagielski 	void  )
363*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
364*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
365*b1cdbd2cSJim Jagielski {
366*b1cdbd2cSJim Jagielski 	return false;
367*b1cdbd2cSJim Jagielski }
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski 
370*b1cdbd2cSJim Jagielski uno::Reference< uno::XInterface > SAL_CALL
getStatement(void)371*b1cdbd2cSJim Jagielski ResultSetBase::getStatement(
372*b1cdbd2cSJim Jagielski 	void  )
373*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
374*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
375*b1cdbd2cSJim Jagielski {
376*b1cdbd2cSJim Jagielski 	uno::Reference< uno::XInterface > test( 0 );
377*b1cdbd2cSJim Jagielski 	return test;
378*b1cdbd2cSJim Jagielski }
379*b1cdbd2cSJim Jagielski 
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski // XCloseable
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski void SAL_CALL
close(void)384*b1cdbd2cSJim Jagielski ResultSetBase::close(
385*b1cdbd2cSJim Jagielski 	void )
386*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
387*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
388*b1cdbd2cSJim Jagielski {
389*b1cdbd2cSJim Jagielski }
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL
queryContentIdentifierString(void)393*b1cdbd2cSJim Jagielski ResultSetBase::queryContentIdentifierString(
394*b1cdbd2cSJim Jagielski 	void )
395*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
396*b1cdbd2cSJim Jagielski {
397*b1cdbd2cSJim Jagielski 	if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
398*b1cdbd2cSJim Jagielski 		return m_aPath[m_nRow];
399*b1cdbd2cSJim Jagielski 	else
400*b1cdbd2cSJim Jagielski 		return rtl::OUString();
401*b1cdbd2cSJim Jagielski }
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski uno::Reference< ucb::XContentIdentifier > SAL_CALL
queryContentIdentifier(void)405*b1cdbd2cSJim Jagielski ResultSetBase::queryContentIdentifier(
406*b1cdbd2cSJim Jagielski 	void
407*b1cdbd2cSJim Jagielski )
408*b1cdbd2cSJim Jagielski 	throw(
409*b1cdbd2cSJim Jagielski 		uno::RuntimeException
410*b1cdbd2cSJim Jagielski 	)
411*b1cdbd2cSJim Jagielski {
412*b1cdbd2cSJim Jagielski 	if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
413*b1cdbd2cSJim Jagielski 	{
414*b1cdbd2cSJim Jagielski 		if(!m_aIdents[m_nRow].is()) {
415*b1cdbd2cSJim Jagielski 			rtl::OUString url = queryContentIdentifierString();
416*b1cdbd2cSJim Jagielski 			if(url.getLength() )
417*b1cdbd2cSJim Jagielski 				m_aIdents[m_nRow] =
418*b1cdbd2cSJim Jagielski 					uno::Reference< ucb::XContentIdentifier >(
419*b1cdbd2cSJim Jagielski 						new ::ucbhelper::ContentIdentifier(m_xMSF,url) );
420*b1cdbd2cSJim Jagielski 		}
421*b1cdbd2cSJim Jagielski 		return m_aIdents[m_nRow];
422*b1cdbd2cSJim Jagielski 	}
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski 	return uno::Reference<ucb::XContentIdentifier>();
425*b1cdbd2cSJim Jagielski }
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski uno::Reference< ucb::XContent > SAL_CALL
queryContent(void)429*b1cdbd2cSJim Jagielski ResultSetBase::queryContent(
430*b1cdbd2cSJim Jagielski 	void )
431*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
432*b1cdbd2cSJim Jagielski {
433*b1cdbd2cSJim Jagielski 	if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
434*b1cdbd2cSJim Jagielski 		return m_xProvider->queryContent(queryContentIdentifier());
435*b1cdbd2cSJim Jagielski 	else
436*b1cdbd2cSJim Jagielski 		return uno::Reference< ucb::XContent >();
437*b1cdbd2cSJim Jagielski }
438*b1cdbd2cSJim Jagielski 
439*b1cdbd2cSJim Jagielski 
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski class XPropertySetInfoImpl
442*b1cdbd2cSJim Jagielski     : public cppu::OWeakObject,
443*b1cdbd2cSJim Jagielski       public beans::XPropertySetInfo
444*b1cdbd2cSJim Jagielski {
445*b1cdbd2cSJim Jagielski public:
446*b1cdbd2cSJim Jagielski 
XPropertySetInfoImpl(const uno::Sequence<beans::Property> & aSeq)447*b1cdbd2cSJim Jagielski     XPropertySetInfoImpl( const uno::Sequence< beans::Property >& aSeq )
448*b1cdbd2cSJim Jagielski         : m_aSeq( aSeq )
449*b1cdbd2cSJim Jagielski     {
450*b1cdbd2cSJim Jagielski     }
451*b1cdbd2cSJim Jagielski 
acquire(void)452*b1cdbd2cSJim Jagielski     void SAL_CALL acquire( void )
453*b1cdbd2cSJim Jagielski         throw()
454*b1cdbd2cSJim Jagielski     {
455*b1cdbd2cSJim Jagielski         OWeakObject::acquire();
456*b1cdbd2cSJim Jagielski     }
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski 
release(void)459*b1cdbd2cSJim Jagielski     void SAL_CALL release( void )
460*b1cdbd2cSJim Jagielski         throw()
461*b1cdbd2cSJim Jagielski     {
462*b1cdbd2cSJim Jagielski         OWeakObject::release();
463*b1cdbd2cSJim Jagielski     }
464*b1cdbd2cSJim Jagielski 
queryInterface(const uno::Type & rType)465*b1cdbd2cSJim Jagielski     uno::Any SAL_CALL queryInterface( const uno::Type& rType )
466*b1cdbd2cSJim Jagielski         throw( uno::RuntimeException )
467*b1cdbd2cSJim Jagielski     {
468*b1cdbd2cSJim Jagielski         uno::Any aRet = cppu::queryInterface(
469*b1cdbd2cSJim Jagielski 			rType,
470*b1cdbd2cSJim Jagielski 			SAL_STATIC_CAST( beans::XPropertySetInfo*, this ) );
471*b1cdbd2cSJim Jagielski         return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
472*b1cdbd2cSJim Jagielski     }
473*b1cdbd2cSJim Jagielski 
getProperties()474*b1cdbd2cSJim Jagielski     uno::Sequence< beans::Property > SAL_CALL getProperties()
475*b1cdbd2cSJim Jagielski         throw( uno::RuntimeException )
476*b1cdbd2cSJim Jagielski     {
477*b1cdbd2cSJim Jagielski         return m_aSeq;
478*b1cdbd2cSJim Jagielski     }
479*b1cdbd2cSJim Jagielski 
getPropertyByName(const::rtl::OUString & aName)480*b1cdbd2cSJim Jagielski     beans::Property SAL_CALL getPropertyByName( const ::rtl::OUString& aName )
481*b1cdbd2cSJim Jagielski         throw( beans::UnknownPropertyException,
482*b1cdbd2cSJim Jagielski                uno::RuntimeException)
483*b1cdbd2cSJim Jagielski     {
484*b1cdbd2cSJim Jagielski         for( int i = 0; i < m_aSeq.getLength(); ++i )
485*b1cdbd2cSJim Jagielski             if( aName == m_aSeq[i].Name )
486*b1cdbd2cSJim Jagielski                 return m_aSeq[i];
487*b1cdbd2cSJim Jagielski         throw beans::UnknownPropertyException();
488*b1cdbd2cSJim Jagielski     }
489*b1cdbd2cSJim Jagielski 
hasPropertyByName(const::rtl::OUString & Name)490*b1cdbd2cSJim Jagielski     sal_Bool SAL_CALL hasPropertyByName( const ::rtl::OUString& Name )
491*b1cdbd2cSJim Jagielski         throw( uno::RuntimeException )
492*b1cdbd2cSJim Jagielski     {
493*b1cdbd2cSJim Jagielski         for( int i = 0; i < m_aSeq.getLength(); ++i )
494*b1cdbd2cSJim Jagielski             if( Name == m_aSeq[i].Name )
495*b1cdbd2cSJim Jagielski                 return true;
496*b1cdbd2cSJim Jagielski         return false;
497*b1cdbd2cSJim Jagielski     }
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski private:
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski     uno::Sequence< beans::Property > m_aSeq;
502*b1cdbd2cSJim Jagielski };
503*b1cdbd2cSJim Jagielski 
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski // XPropertySet
507*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySetInfo > SAL_CALL
getPropertySetInfo()508*b1cdbd2cSJim Jagielski ResultSetBase::getPropertySetInfo()
509*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException)
510*b1cdbd2cSJim Jagielski {
511*b1cdbd2cSJim Jagielski 	uno::Sequence< beans::Property > seq(2);
512*b1cdbd2cSJim Jagielski 	seq[0].Name = rtl::OUString::createFromAscii( "RowCount" );
513*b1cdbd2cSJim Jagielski 	seq[0].Handle = -1;
514*b1cdbd2cSJim Jagielski 	seq[0].Type = getCppuType( static_cast< sal_Int32* >(0) );
515*b1cdbd2cSJim Jagielski 	seq[0].Attributes = beans::PropertyAttribute::READONLY;
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski 	seq[1].Name = rtl::OUString::createFromAscii( "IsRowCountFinal" );
518*b1cdbd2cSJim Jagielski 	seq[1].Handle = -1;
519*b1cdbd2cSJim Jagielski 	seq[1].Type = getCppuType( static_cast< sal_Bool* >(0) );
520*b1cdbd2cSJim Jagielski 	seq[1].Attributes = beans::PropertyAttribute::READONLY;
521*b1cdbd2cSJim Jagielski 
522*b1cdbd2cSJim Jagielski 	//t
523*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySetInfo > (
524*b1cdbd2cSJim Jagielski 		new XPropertySetInfoImpl( seq ) );
525*b1cdbd2cSJim Jagielski }
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski 
528*b1cdbd2cSJim Jagielski 
setPropertyValue(const rtl::OUString & aPropertyName,const uno::Any &)529*b1cdbd2cSJim Jagielski void SAL_CALL ResultSetBase::setPropertyValue(
530*b1cdbd2cSJim Jagielski 	const rtl::OUString& aPropertyName, const uno::Any& /*aValue*/ )
531*b1cdbd2cSJim Jagielski 	throw( beans::UnknownPropertyException,
532*b1cdbd2cSJim Jagielski 		   beans::PropertyVetoException,
533*b1cdbd2cSJim Jagielski 		   lang::IllegalArgumentException,
534*b1cdbd2cSJim Jagielski 		   lang::WrappedTargetException,
535*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
536*b1cdbd2cSJim Jagielski {
537*b1cdbd2cSJim Jagielski 	if( aPropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) ||
538*b1cdbd2cSJim Jagielski 		aPropertyName == rtl::OUString::createFromAscii( "RowCount" ) )
539*b1cdbd2cSJim Jagielski 		return;
540*b1cdbd2cSJim Jagielski 
541*b1cdbd2cSJim Jagielski 	throw beans::UnknownPropertyException();
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski 
544*b1cdbd2cSJim Jagielski 
getPropertyValue(const rtl::OUString & PropertyName)545*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ResultSetBase::getPropertyValue(
546*b1cdbd2cSJim Jagielski 	const rtl::OUString& PropertyName )
547*b1cdbd2cSJim Jagielski 	throw( beans::UnknownPropertyException,
548*b1cdbd2cSJim Jagielski 		   lang::WrappedTargetException,
549*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
550*b1cdbd2cSJim Jagielski {
551*b1cdbd2cSJim Jagielski 	if( PropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) )
552*b1cdbd2cSJim Jagielski 	{
553*b1cdbd2cSJim Jagielski 		uno::Any aAny;
554*b1cdbd2cSJim Jagielski 		aAny <<= m_bRowCountFinal;
555*b1cdbd2cSJim Jagielski 		return aAny;
556*b1cdbd2cSJim Jagielski 	}
557*b1cdbd2cSJim Jagielski 	else if ( PropertyName == rtl::OUString::createFromAscii( "RowCount" ) )
558*b1cdbd2cSJim Jagielski 	{
559*b1cdbd2cSJim Jagielski 		uno::Any aAny;
560*b1cdbd2cSJim Jagielski 		sal_Int32 count = m_aItems.size();
561*b1cdbd2cSJim Jagielski 		aAny <<= count;
562*b1cdbd2cSJim Jagielski 		return aAny;
563*b1cdbd2cSJim Jagielski 	}
564*b1cdbd2cSJim Jagielski 	else
565*b1cdbd2cSJim Jagielski 		throw beans::UnknownPropertyException();
566*b1cdbd2cSJim Jagielski }
567*b1cdbd2cSJim Jagielski 
568*b1cdbd2cSJim Jagielski 
addPropertyChangeListener(const rtl::OUString & aPropertyName,const uno::Reference<beans::XPropertyChangeListener> & xListener)569*b1cdbd2cSJim Jagielski void SAL_CALL ResultSetBase::addPropertyChangeListener(
570*b1cdbd2cSJim Jagielski 	const rtl::OUString& aPropertyName,
571*b1cdbd2cSJim Jagielski 	const uno::Reference< beans::XPropertyChangeListener >& xListener )
572*b1cdbd2cSJim Jagielski 	throw( beans::UnknownPropertyException,
573*b1cdbd2cSJim Jagielski 		   lang::WrappedTargetException,
574*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
575*b1cdbd2cSJim Jagielski {
576*b1cdbd2cSJim Jagielski 	if( aPropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) )
577*b1cdbd2cSJim Jagielski 	{
578*b1cdbd2cSJim Jagielski 		osl::MutexGuard aGuard( m_aMutex );
579*b1cdbd2cSJim Jagielski 		if ( ! m_pIsFinalListeners )
580*b1cdbd2cSJim Jagielski 			m_pIsFinalListeners =
581*b1cdbd2cSJim Jagielski 				new cppu::OInterfaceContainerHelper( m_aMutex );
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski 		m_pIsFinalListeners->addInterface( xListener );
584*b1cdbd2cSJim Jagielski 	}
585*b1cdbd2cSJim Jagielski 	else if ( aPropertyName == rtl::OUString::createFromAscii( "RowCount" ) )
586*b1cdbd2cSJim Jagielski 	{
587*b1cdbd2cSJim Jagielski 		osl::MutexGuard aGuard( m_aMutex );
588*b1cdbd2cSJim Jagielski 		if ( ! m_pRowCountListeners )
589*b1cdbd2cSJim Jagielski 			m_pRowCountListeners =
590*b1cdbd2cSJim Jagielski 				new cppu::OInterfaceContainerHelper( m_aMutex );
591*b1cdbd2cSJim Jagielski 		m_pRowCountListeners->addInterface( xListener );
592*b1cdbd2cSJim Jagielski 	}
593*b1cdbd2cSJim Jagielski 	else
594*b1cdbd2cSJim Jagielski 		throw beans::UnknownPropertyException();
595*b1cdbd2cSJim Jagielski }
596*b1cdbd2cSJim Jagielski 
597*b1cdbd2cSJim Jagielski 
removePropertyChangeListener(const rtl::OUString & aPropertyName,const uno::Reference<beans::XPropertyChangeListener> & aListener)598*b1cdbd2cSJim Jagielski void SAL_CALL ResultSetBase::removePropertyChangeListener(
599*b1cdbd2cSJim Jagielski 	const rtl::OUString& aPropertyName,
600*b1cdbd2cSJim Jagielski 	const uno::Reference< beans::XPropertyChangeListener >& aListener )
601*b1cdbd2cSJim Jagielski 	throw( beans::UnknownPropertyException,
602*b1cdbd2cSJim Jagielski 		   lang::WrappedTargetException,
603*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
604*b1cdbd2cSJim Jagielski {
605*b1cdbd2cSJim Jagielski 	if( aPropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) &&
606*b1cdbd2cSJim Jagielski 		m_pIsFinalListeners )
607*b1cdbd2cSJim Jagielski 	{
608*b1cdbd2cSJim Jagielski 		osl::MutexGuard aGuard( m_aMutex );
609*b1cdbd2cSJim Jagielski 		m_pIsFinalListeners->removeInterface( aListener );
610*b1cdbd2cSJim Jagielski 	}
611*b1cdbd2cSJim Jagielski 	else if ( aPropertyName == rtl::OUString::createFromAscii( "RowCount" ) &&
612*b1cdbd2cSJim Jagielski 			  m_pRowCountListeners )
613*b1cdbd2cSJim Jagielski 	{
614*b1cdbd2cSJim Jagielski 		osl::MutexGuard aGuard( m_aMutex );
615*b1cdbd2cSJim Jagielski 		m_pRowCountListeners->removeInterface( aListener );
616*b1cdbd2cSJim Jagielski 	}
617*b1cdbd2cSJim Jagielski 	else
618*b1cdbd2cSJim Jagielski 		throw beans::UnknownPropertyException();
619*b1cdbd2cSJim Jagielski }
620*b1cdbd2cSJim Jagielski 
621*b1cdbd2cSJim Jagielski 
addVetoableChangeListener(const rtl::OUString &,const uno::Reference<beans::XVetoableChangeListener> &)622*b1cdbd2cSJim Jagielski void SAL_CALL ResultSetBase::addVetoableChangeListener(
623*b1cdbd2cSJim Jagielski 	const rtl::OUString& /*PropertyName*/,
624*b1cdbd2cSJim Jagielski 	const uno::Reference< beans::XVetoableChangeListener >& /*aListener*/ )
625*b1cdbd2cSJim Jagielski 	throw( beans::UnknownPropertyException,
626*b1cdbd2cSJim Jagielski 		   lang::WrappedTargetException,
627*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
628*b1cdbd2cSJim Jagielski {
629*b1cdbd2cSJim Jagielski }
630*b1cdbd2cSJim Jagielski 
631*b1cdbd2cSJim Jagielski 
removeVetoableChangeListener(const rtl::OUString &,const uno::Reference<beans::XVetoableChangeListener> &)632*b1cdbd2cSJim Jagielski void SAL_CALL ResultSetBase::removeVetoableChangeListener(
633*b1cdbd2cSJim Jagielski 	const rtl::OUString& /*PropertyName*/,
634*b1cdbd2cSJim Jagielski 	const uno::Reference< beans::XVetoableChangeListener >& /*aListener*/ )
635*b1cdbd2cSJim Jagielski 	throw( beans::UnknownPropertyException,
636*b1cdbd2cSJim Jagielski 		   lang::WrappedTargetException,
637*b1cdbd2cSJim Jagielski 		   uno::RuntimeException)
638*b1cdbd2cSJim Jagielski {
639*b1cdbd2cSJim Jagielski }
640*b1cdbd2cSJim Jagielski 
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski 
643*b1cdbd2cSJim Jagielski // XResultSetMetaDataSupplier
644*b1cdbd2cSJim Jagielski uno::Reference< sdbc::XResultSetMetaData > SAL_CALL
getMetaData(void)645*b1cdbd2cSJim Jagielski ResultSetBase::getMetaData(
646*b1cdbd2cSJim Jagielski 	void )
647*b1cdbd2cSJim Jagielski 	throw( sdbc::SQLException,
648*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
649*b1cdbd2cSJim Jagielski {
650*b1cdbd2cSJim Jagielski 	::ucbhelper::ResultSetMetaData* p =
651*b1cdbd2cSJim Jagielski 		  new ::ucbhelper::ResultSetMetaData(
652*b1cdbd2cSJim Jagielski 			  m_xMSF, m_sProperty );
653*b1cdbd2cSJim Jagielski 	return uno::Reference< sdbc::XResultSetMetaData >( p );
654*b1cdbd2cSJim Jagielski }
655*b1cdbd2cSJim Jagielski 
656*b1cdbd2cSJim Jagielski 
657*b1cdbd2cSJim Jagielski 
658*b1cdbd2cSJim Jagielski 
659