LibreOffice Module xmlhelp (master) 1
resultsetbase.hxx
Go to the documentation of this file.
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#pragma once
20
21#include <vector>
22#include <memory>
23#include <cppuhelper/weak.hxx>
25#include <com/sun/star/lang/XComponent.hpp>
26#include <com/sun/star/ucb/XContentAccess.hpp>
27#include <com/sun/star/sdbc/XCloseable.hpp>
28#include <com/sun/star/beans/XPropertySet.hpp>
29#include <com/sun/star/sdbc/XResultSet.hpp>
30#include <com/sun/star/sdbc/XRow.hpp>
31#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
32#include <com/sun/star/ucb/XContentProvider.hpp>
33#include <com/sun/star/ucb/XContentIdentifier.hpp>
34#include <com/sun/star/uno/XComponentContext.hpp>
35#include <com/sun/star/beans/Property.hpp>
36
37
38namespace chelp {
39
41 : public cppu::OWeakObject,
42 public css::lang::XComponent,
43 public css::sdbc::XRow,
44 public css::sdbc::XResultSet,
45 public css::sdbc::XCloseable,
46 public css::sdbc::XResultSetMetaDataSupplier,
47 public css::beans::XPropertySet,
48 public css::ucb::XContentAccess
49 {
50 public:
51
52 ResultSetBase( css::uno::Reference< css::uno::XComponentContext > xContext,
53 css::uno::Reference< css::ucb::XContentProvider > xProvider,
54 const css::uno::Sequence< css::beans::Property >& seq );
55
56 virtual ~ResultSetBase() override;
57
58 // XInterface
59 virtual css::uno::Any SAL_CALL
60 queryInterface( const css::uno::Type& aType ) override;
61
62 virtual void SAL_CALL
63 acquire()
64 noexcept override;
65
66 virtual void SAL_CALL
67 release()
68 noexcept override;
69
70 // XComponent
71 virtual void SAL_CALL
72 dispose() override;
73
74 virtual void SAL_CALL
75 addEventListener( const css::uno::Reference< css::lang::XEventListener >& xListener ) override;
76
77 virtual void SAL_CALL
78 removeEventListener( const css::uno::Reference< css::lang::XEventListener >& aListener ) override;
79
80
81 // XRow
82 virtual sal_Bool SAL_CALL
83 wasNull() override
84 {
85 if( 0<= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
86 m_nWasNull = m_aItems[m_nRow]->wasNull();
87 else
88 m_nWasNull = true;
89 return m_nWasNull;
90 }
91
92 virtual OUString SAL_CALL
93 getString( sal_Int32 columnIndex ) override
94 {
95 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
96 return m_aItems[m_nRow]->getString( columnIndex );
97 else
98 return OUString();
99 }
100
101 virtual sal_Bool SAL_CALL
102 getBoolean( sal_Int32 columnIndex ) override
103 {
104 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
105 return m_aItems[m_nRow]->getBoolean( columnIndex );
106 else
107 return false;
108 }
109
110 virtual sal_Int8 SAL_CALL
111 getByte( sal_Int32 columnIndex ) override
112 {
113 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
114 return m_aItems[m_nRow]->getByte( columnIndex );
115 else
116 return sal_Int8( 0 );
117 }
118
119 virtual sal_Int16 SAL_CALL
120 getShort( sal_Int32 columnIndex ) override
121 {
122 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
123 return m_aItems[m_nRow]->getShort( columnIndex );
124 else
125 return sal_Int16( 0 );
126 }
127
128 virtual sal_Int32 SAL_CALL
129 getInt( sal_Int32 columnIndex ) override
130 {
131 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
132 return m_aItems[m_nRow]->getInt( columnIndex );
133 else
134 return 0;
135 }
136
137 virtual sal_Int64 SAL_CALL
138 getLong( sal_Int32 columnIndex ) override
139 {
140 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
141 return m_aItems[m_nRow]->getLong( columnIndex );
142 else
143 return sal_Int64( 0 );
144 }
145
146 virtual float SAL_CALL
147 getFloat( sal_Int32 columnIndex ) override
148 {
149 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
150 return m_aItems[m_nRow]->getFloat( columnIndex );
151 else
152 return float( 0 );
153 }
154
155 virtual double SAL_CALL
156 getDouble( sal_Int32 columnIndex ) override
157 {
158 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
159 return m_aItems[m_nRow]->getDouble( columnIndex );
160 else
161 return double( 0 );
162 }
163
164 virtual css::uno::Sequence< sal_Int8 > SAL_CALL
165 getBytes( sal_Int32 columnIndex ) override
166 {
167 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
168 return m_aItems[m_nRow]->getBytes( columnIndex );
169 else
170 return css::uno::Sequence< sal_Int8 >();
171 }
172
173 virtual css::util::Date SAL_CALL
174 getDate( sal_Int32 columnIndex ) override
175 {
176 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
177 return m_aItems[m_nRow]->getDate( columnIndex );
178 else
179 return css::util::Date();
180 }
181
182 virtual css::util::Time SAL_CALL
183 getTime( sal_Int32 columnIndex ) override
184 {
185 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
186 return m_aItems[m_nRow]->getTime( columnIndex );
187 else
188 return css::util::Time();
189 }
190
191 virtual css::util::DateTime SAL_CALL
192 getTimestamp( sal_Int32 columnIndex ) override
193 {
194 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
195 return m_aItems[m_nRow]->getTimestamp( columnIndex );
196 else
197 return css::util::DateTime();
198 }
199
200 virtual css::uno::Reference< css::io::XInputStream > SAL_CALL
201 getBinaryStream( sal_Int32 columnIndex ) override
202 {
203 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
204 return m_aItems[m_nRow]->getBinaryStream( columnIndex );
205 else
206 return css::uno::Reference< css::io::XInputStream >();
207 }
208
209 virtual css::uno::Reference< css::io::XInputStream > SAL_CALL
210 getCharacterStream( sal_Int32 columnIndex ) override
211 {
212 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
213 return m_aItems[m_nRow]->getCharacterStream( columnIndex );
214 else
215 return css::uno::Reference< css::io::XInputStream >();
216 }
217
218 virtual css::uno::Any SAL_CALL
219 getObject( sal_Int32 columnIndex,
220 const css::uno::Reference< css::container::XNameAccess >& typeMap ) override
221 {
222 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
223 return m_aItems[m_nRow]->getObject( columnIndex,typeMap );
224 else
225 return css::uno::Any();
226 }
227
228 virtual css::uno::Reference< css::sdbc::XRef > SAL_CALL
229 getRef( sal_Int32 columnIndex ) override
230 {
231 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
232 return m_aItems[m_nRow]->getRef( columnIndex );
233 else
234 return css::uno::Reference< css::sdbc::XRef >();
235 }
236
237 virtual css::uno::Reference< css::sdbc::XBlob > SAL_CALL
238 getBlob( sal_Int32 columnIndex ) override
239 {
240 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
241 return m_aItems[m_nRow]->getBlob( columnIndex );
242 else
243 return css::uno::Reference< css::sdbc::XBlob >();
244 }
245
246 virtual css::uno::Reference< css::sdbc::XClob > SAL_CALL
247 getClob( sal_Int32 columnIndex ) override
248 {
249 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
250 return m_aItems[m_nRow]->getClob( columnIndex );
251 else
252 return css::uno::Reference< css::sdbc::XClob >();
253 }
254
255 virtual css::uno::Reference< css::sdbc::XArray > SAL_CALL
256 getArray( sal_Int32 columnIndex ) override
257 {
258 if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
259 return m_aItems[m_nRow]->getArray( columnIndex );
260 else
261 return css::uno::Reference< css::sdbc::XArray >();
262 }
263
264
265 // XResultSet
266
267 virtual sal_Bool SAL_CALL
268 next() override;
269
270 virtual sal_Bool SAL_CALL
271 isBeforeFirst() override;
272
273 virtual sal_Bool SAL_CALL
274 isAfterLast() override;
275
276 virtual sal_Bool SAL_CALL
277 isFirst() override;
278
279 virtual sal_Bool SAL_CALL
280 isLast() override;
281
282 virtual void SAL_CALL
283 beforeFirst() override;
284
285 virtual void SAL_CALL
286 afterLast() override;
287
288 virtual sal_Bool SAL_CALL
289 first() override;
290
291 virtual sal_Bool SAL_CALL
292 last() override;
293
294 virtual sal_Int32 SAL_CALL
295 getRow() override;
296
297 virtual sal_Bool SAL_CALL
298 absolute( sal_Int32 row ) override;
299
300 virtual sal_Bool SAL_CALL
301 relative( sal_Int32 rows ) override;
302
303 virtual sal_Bool SAL_CALL
304 previous() override;
305
306 virtual void SAL_CALL
307 refreshRow() override;
308
309 virtual sal_Bool SAL_CALL
310 rowUpdated() override;
311
312 virtual sal_Bool SAL_CALL
313 rowInserted() override;
314
315 virtual sal_Bool SAL_CALL
316 rowDeleted() override;
317
318
319 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
320 getStatement() override;
321
322 // XCloseable
323
324 virtual void SAL_CALL
325 close() override;
326
327 // XContentAccess
328
329 virtual OUString SAL_CALL
331
332 virtual css::uno::Reference< css::ucb::XContentIdentifier > SAL_CALL
333 queryContentIdentifier() override;
334
335 virtual css::uno::Reference< css::ucb::XContent > SAL_CALL
336 queryContent() override;
337
338 // XResultSetMetaDataSupplier
339 virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL
340 getMetaData() override;
341
342
343 // XPropertySet
344 virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
345 getPropertySetInfo() override;
346
347 virtual void SAL_CALL setPropertyValue(
348 const OUString& aPropertyName,
349 const css::uno::Any& aValue ) override;
350
351 virtual css::uno::Any SAL_CALL
353 const OUString& PropertyName ) override;
354
355 virtual void SAL_CALL
357 const OUString& aPropertyName,
358 const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
359
360 virtual void SAL_CALL
362 const OUString& aPropertyName,
363 const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
364
365 virtual void SAL_CALL
367 const OUString& PropertyName,
368 const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
369
370 virtual void SAL_CALL removeVetoableChangeListener(
371 const OUString& PropertyName,
372 const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
373
374 protected:
375
376 css::uno::Reference< css::uno::XComponentContext > m_xContext;
377 css::uno::Reference< css::ucb::XContentProvider > m_xProvider;
378 sal_Int32 m_nRow;
380
381 typedef std::vector< css::uno::Reference< css::ucb::XContentIdentifier > > IdentSet;
382 typedef std::vector< css::uno::Reference< css::sdbc::XRow > > ItemSet;
383
386 std::vector<OUString> m_aPath;
387
388 css::uno::Sequence< css::beans::Property > m_sProperty;
389
390 std::mutex m_aMutex;
394 };
395
396
397} // end namespace fileaccess
398
399
400/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual sal_Bool SAL_CALL isAfterLast() override
virtual sal_Bool SAL_CALL rowUpdated() override
virtual void SAL_CALL acquire() noexcept override
virtual sal_Bool SAL_CALL previous() override
virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getBinaryStream(sal_Int32 columnIndex) override
virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData() override
comphelper::OInterfaceContainerHelper4< css::lang::XEventListener > m_aDisposeEventListeners
virtual css::util::Date SAL_CALL getDate(sal_Int32 columnIndex) override
virtual sal_Bool SAL_CALL wasNull() override
virtual sal_Bool SAL_CALL next() override
ResultSetBase(css::uno::Reference< css::uno::XComponentContext > xContext, css::uno::Reference< css::ucb::XContentProvider > xProvider, const css::uno::Sequence< css::beans::Property > &seq)
virtual double SAL_CALL getDouble(sal_Int32 columnIndex) override
virtual css::util::DateTime SAL_CALL getTimestamp(sal_Int32 columnIndex) override
virtual void SAL_CALL setPropertyValue(const OUString &aPropertyName, const css::uno::Any &aValue) override
virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getCharacterStream(sal_Int32 columnIndex) override
virtual void SAL_CALL refreshRow() override
virtual sal_Bool SAL_CALL rowInserted() override
comphelper::OInterfaceContainerHelper4< css::beans::XPropertyChangeListener > m_aIsFinalListeners
std::vector< css::uno::Reference< css::ucb::XContentIdentifier > > IdentSet
virtual void SAL_CALL addVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) override
virtual sal_Bool SAL_CALL relative(sal_Int32 rows) override
virtual void SAL_CALL beforeFirst() override
virtual void SAL_CALL removeVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) override
virtual void SAL_CALL close() override
std::vector< OUString > m_aPath
virtual sal_Bool SAL_CALL first() override
virtual sal_Int16 SAL_CALL getShort(sal_Int32 columnIndex) override
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBytes(sal_Int32 columnIndex) override
virtual css::uno::Reference< css::sdbc::XRef > SAL_CALL getRef(sal_Int32 columnIndex) override
virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
virtual ~ResultSetBase() override
virtual void SAL_CALL dispose() override
virtual sal_Bool SAL_CALL isLast() override
virtual void SAL_CALL removeEventListener(const css::uno::Reference< css::lang::XEventListener > &aListener) override
virtual OUString SAL_CALL queryContentIdentifierString() override
virtual css::uno::Any SAL_CALL getObject(sal_Int32 columnIndex, const css::uno::Reference< css::container::XNameAccess > &typeMap) override
css::uno::Reference< css::uno::XComponentContext > m_xContext
virtual sal_Bool SAL_CALL absolute(sal_Int32 row) override
virtual sal_Bool SAL_CALL last() override
css::uno::Reference< css::ucb::XContentProvider > m_xProvider
virtual sal_Bool SAL_CALL rowDeleted() override
virtual css::util::Time SAL_CALL getTime(sal_Int32 columnIndex) override
virtual sal_Bool SAL_CALL isBeforeFirst() override
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &aType) override
virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > &xListener) override
css::uno::Sequence< css::beans::Property > m_sProperty
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement() override
virtual void SAL_CALL addPropertyChangeListener(const OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &xListener) override
std::vector< css::uno::Reference< css::sdbc::XRow > > ItemSet
virtual css::uno::Reference< css::ucb::XContent > SAL_CALL queryContent() override
virtual sal_Bool SAL_CALL getBoolean(sal_Int32 columnIndex) override
virtual float SAL_CALL getFloat(sal_Int32 columnIndex) override
virtual void SAL_CALL afterLast() override
virtual void SAL_CALL removePropertyChangeListener(const OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &aListener) override
virtual OUString SAL_CALL getString(sal_Int32 columnIndex) override
virtual css::uno::Reference< css::sdbc::XArray > SAL_CALL getArray(sal_Int32 columnIndex) override
virtual sal_Int32 SAL_CALL getInt(sal_Int32 columnIndex) override
virtual css::uno::Reference< css::ucb::XContentIdentifier > SAL_CALL queryContentIdentifier() override
virtual sal_Bool SAL_CALL isFirst() override
virtual sal_Int8 SAL_CALL getByte(sal_Int32 columnIndex) override
virtual void SAL_CALL release() noexcept override
virtual css::uno::Reference< css::sdbc::XBlob > SAL_CALL getBlob(sal_Int32 columnIndex) override
virtual css::uno::Reference< css::sdbc::XClob > SAL_CALL getClob(sal_Int32 columnIndex) override
virtual sal_Int32 SAL_CALL getRow() override
comphelper::OInterfaceContainerHelper4< css::beans::XPropertyChangeListener > m_aRowCountListeners
virtual sal_Int64 SAL_CALL getLong(sal_Int32 columnIndex) override
virtual css::uno::Any SAL_CALL getPropertyValue(const OUString &PropertyName) override
unsigned char sal_Bool
signed char sal_Int8