xref: /trunk/main/xmlhelp/source/cxxhelp/provider/resultsetbase.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef _RESULTSETBASE_HXX
28 #define _RESULTSETBASE_HXX
29 
30 #ifndef INCLUDED_STL_VECTOR
31 #include <vector>
32 #define INCLUDED_STL_VECTOR
33 #endif
34 #include <cppuhelper/weak.hxx>
35 #include <cppuhelper/interfacecontainer.hxx>
36 #include <com/sun/star/lang/XComponent.hpp>
37 #include <com/sun/star/ucb/XContentAccess.hpp>
38 #include <com/sun/star/sdbc/XCloseable.hpp>
39 #include <com/sun/star/beans/XPropertySet.hpp>
40 #include <com/sun/star/sdbc/XResultSet.hpp>
41 #include <com/sun/star/sdbc/XRow.hpp>
42 #include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
43 #include <com/sun/star/ucb/NumberedSortingInfo.hpp>
44 #include <com/sun/star/ucb/XContentProvider.hpp>
45 #include <com/sun/star/ucb/XContentIdentifier.hpp>
46 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
47 #include <com/sun/star/beans/Property.hpp>
48 
49 
50 namespace chelp {
51 
52     class ResultSetBase
53         : public cppu::OWeakObject,
54           public com::sun::star::lang::XComponent,
55           public com::sun::star::sdbc::XRow,
56           public com::sun::star::sdbc::XResultSet,
57           public com::sun::star::sdbc::XCloseable,
58           public com::sun::star::sdbc::XResultSetMetaDataSupplier,
59           public com::sun::star::beans::XPropertySet,
60           public com::sun::star::ucb::XContentAccess
61     {
62     public:
63 
64         ResultSetBase( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >&  xMSF,
65                        const com::sun::star::uno::Reference< com::sun::star::ucb::XContentProvider >&  xProvider,
66                        sal_Int32 nOpenMode,
67                        const com::sun::star::uno::Sequence< com::sun::star::beans::Property >& seq,
68                        const com::sun::star::uno::Sequence< com::sun::star::ucb::NumberedSortingInfo >& seqSort );
69 
70         virtual ~ResultSetBase();
71 
72         // XInterface
73         virtual com::sun::star::uno::Any SAL_CALL
74         queryInterface(
75             const com::sun::star::uno::Type& aType )
76             throw( com::sun::star::uno::RuntimeException);
77 
78         virtual void SAL_CALL
79         acquire(
80             void )
81             throw();
82 
83         virtual void SAL_CALL
84         release(
85             void )
86             throw();
87 
88         // XComponent
89         virtual void SAL_CALL
90         dispose(
91             void )
92             throw( com::sun::star::uno::RuntimeException );
93 
94         virtual void SAL_CALL
95         addEventListener(
96             const com::sun::star::uno::Reference< com::sun::star::lang::XEventListener >& xListener )
97             throw( com::sun::star::uno::RuntimeException );
98 
99         virtual void SAL_CALL
100         removeEventListener( const com::sun::star::uno::Reference< com::sun::star::lang::XEventListener >& aListener )
101             throw( com::sun::star::uno::RuntimeException );
102 
103 
104         // XRow
105         virtual sal_Bool SAL_CALL
106         wasNull(
107             void )
108             throw( com::sun::star::sdbc::SQLException,
109                    com::sun::star::uno::RuntimeException )
110         {
111             if( 0<= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
112                 m_nWasNull = m_aItems[m_nRow]->wasNull();
113             else
114                 m_nWasNull = true;
115             return m_nWasNull;
116         }
117 
118         virtual rtl::OUString SAL_CALL
119         getString(
120             sal_Int32 columnIndex )
121             throw( com::sun::star::sdbc::SQLException,
122                    com::sun::star::uno::RuntimeException)
123         {
124             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
125                 return m_aItems[m_nRow]->getString( columnIndex );
126             else
127                 return rtl::OUString();
128         }
129 
130         virtual sal_Bool SAL_CALL
131         getBoolean(
132             sal_Int32 columnIndex )
133             throw( com::sun::star::sdbc::SQLException,
134                    com::sun::star::uno::RuntimeException)
135         {
136             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
137                 return m_aItems[m_nRow]->getBoolean( columnIndex );
138             else
139                 return false;
140         }
141 
142         virtual sal_Int8 SAL_CALL
143         getByte(
144             sal_Int32 columnIndex )
145             throw( com::sun::star::sdbc::SQLException,
146                    com::sun::star::uno::RuntimeException)
147         {
148             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
149                 return m_aItems[m_nRow]->getByte( columnIndex );
150             else
151                 return sal_Int8( 0 );
152         }
153 
154         virtual sal_Int16 SAL_CALL
155         getShort(
156             sal_Int32 columnIndex )
157             throw(
158                 com::sun::star::sdbc::SQLException,
159                 com::sun::star::uno::RuntimeException)
160         {
161             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
162                 return m_aItems[m_nRow]->getShort( columnIndex );
163             else
164                 return sal_Int16( 0 );
165         }
166 
167         virtual sal_Int32 SAL_CALL
168         getInt(
169             sal_Int32 columnIndex )
170             throw( com::sun::star::sdbc::SQLException,
171                    com::sun::star::uno::RuntimeException )
172         {
173             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
174                 return m_aItems[m_nRow]->getInt( columnIndex );
175             else
176                 return sal_Int32( 0 );
177         }
178 
179         virtual sal_Int64 SAL_CALL
180         getLong(
181             sal_Int32 columnIndex )
182             throw( com::sun::star::sdbc::SQLException,
183                    com::sun::star::uno::RuntimeException)
184         {
185             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
186                 return m_aItems[m_nRow]->getLong( columnIndex );
187             else
188                 return sal_Int64( 0 );
189         }
190 
191         virtual float SAL_CALL
192         getFloat(
193             sal_Int32 columnIndex )
194             throw( com::sun::star::sdbc::SQLException,
195                    com::sun::star::uno::RuntimeException )
196         {
197             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
198                 return m_aItems[m_nRow]->getFloat( columnIndex );
199             else
200                 return float( 0 );
201         }
202 
203         virtual double SAL_CALL
204         getDouble(
205             sal_Int32 columnIndex )
206             throw( com::sun::star::sdbc::SQLException,
207                    com::sun::star::uno::RuntimeException )
208         {
209             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
210                 return m_aItems[m_nRow]->getDouble( columnIndex );
211             else
212                 return double( 0 );
213         }
214 
215         virtual com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL
216         getBytes(
217             sal_Int32 columnIndex )
218             throw( com::sun::star::sdbc::SQLException,
219                    com::sun::star::uno::RuntimeException )
220         {
221             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
222                 return m_aItems[m_nRow]->getBytes( columnIndex );
223             else
224                 return com::sun::star::uno::Sequence< sal_Int8 >();
225         }
226 
227         virtual com::sun::star::util::Date SAL_CALL
228         getDate(
229             sal_Int32 columnIndex )
230             throw( com::sun::star::sdbc::SQLException,
231                    com::sun::star::uno::RuntimeException)
232         {
233             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
234                 return m_aItems[m_nRow]->getDate( columnIndex );
235             else
236                 return com::sun::star::util::Date();
237         }
238 
239         virtual com::sun::star::util::Time SAL_CALL
240         getTime(
241             sal_Int32 columnIndex )
242             throw( com::sun::star::sdbc::SQLException,
243                    com::sun::star::uno::RuntimeException)
244         {
245             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
246                 return m_aItems[m_nRow]->getTime( columnIndex );
247             else
248                 return com::sun::star::util::Time();
249         }
250 
251         virtual com::sun::star::util::DateTime SAL_CALL
252         getTimestamp(
253             sal_Int32 columnIndex )
254             throw( com::sun::star::sdbc::SQLException,
255                    com::sun::star::uno::RuntimeException)
256         {
257             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
258                 return m_aItems[m_nRow]->getTimestamp( columnIndex );
259             else
260                 return com::sun::star::util::DateTime();
261         }
262 
263         virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > SAL_CALL
264         getBinaryStream(
265             sal_Int32 columnIndex )
266             throw( com::sun::star::sdbc::SQLException,
267                    com::sun::star::uno::RuntimeException)
268         {
269             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
270                 return m_aItems[m_nRow]->getBinaryStream( columnIndex );
271             else
272                 return com::sun::star::uno::Reference< com::sun::star::io::XInputStream >();
273         }
274 
275         virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > SAL_CALL
276         getCharacterStream(
277             sal_Int32 columnIndex )
278             throw( com::sun::star::sdbc::SQLException,
279                    com::sun::star::uno::RuntimeException)
280         {
281             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
282                 return m_aItems[m_nRow]->getCharacterStream( columnIndex );
283             else
284                 return com::sun::star::uno::Reference< com::sun::star::io::XInputStream >();
285         }
286 
287         virtual com::sun::star::uno::Any SAL_CALL
288         getObject(
289             sal_Int32 columnIndex,
290             const com::sun::star::uno::Reference< com::sun::star::container::XNameAccess >& typeMap )
291             throw( com::sun::star::sdbc::SQLException,
292                    com::sun::star::uno::RuntimeException)
293         {
294             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
295                 return m_aItems[m_nRow]->getObject( columnIndex,typeMap );
296             else
297                 return com::sun::star::uno::Any();
298         }
299 
300         virtual com::sun::star::uno::Reference< com::sun::star::sdbc::XRef > SAL_CALL
301         getRef(
302             sal_Int32 columnIndex )
303             throw( com::sun::star::sdbc::SQLException,
304                    com::sun::star::uno::RuntimeException)
305         {
306             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
307                 return m_aItems[m_nRow]->getRef( columnIndex );
308             else
309                 return com::sun::star::uno::Reference< com::sun::star::sdbc::XRef >();
310         }
311 
312         virtual com::sun::star::uno::Reference< com::sun::star::sdbc::XBlob > SAL_CALL
313         getBlob(
314             sal_Int32 columnIndex )
315             throw( com::sun::star::sdbc::SQLException,
316                    com::sun::star::uno::RuntimeException)
317         {
318             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
319                 return m_aItems[m_nRow]->getBlob( columnIndex );
320             else
321                 return com::sun::star::uno::Reference< com::sun::star::sdbc::XBlob >();
322         }
323 
324         virtual com::sun::star::uno::Reference< com::sun::star::sdbc::XClob > SAL_CALL
325         getClob(
326             sal_Int32 columnIndex )
327             throw( com::sun::star::sdbc::SQLException,
328                    com::sun::star::uno::RuntimeException)
329         {
330             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
331                 return m_aItems[m_nRow]->getClob( columnIndex );
332             else
333                 return com::sun::star::uno::Reference< com::sun::star::sdbc::XClob >();
334         }
335 
336         virtual com::sun::star::uno::Reference< com::sun::star::sdbc::XArray > SAL_CALL
337         getArray(
338             sal_Int32 columnIndex )
339             throw( com::sun::star::sdbc::SQLException,
340                    com::sun::star::uno::RuntimeException)
341         {
342             if( 0 <= m_nRow && sal::static_int_cast<sal_uInt32>( m_nRow ) < m_aItems.size() )
343                 return m_aItems[m_nRow]->getArray( columnIndex );
344             else
345                 return com::sun::star::uno::Reference< com::sun::star::sdbc::XArray >();
346         }
347 
348 
349         // XResultSet
350 
351         virtual sal_Bool SAL_CALL
352         next(
353             void )
354             throw( com::sun::star::sdbc::SQLException,
355                    com::sun::star::uno::RuntimeException);
356 
357         virtual sal_Bool SAL_CALL
358         isBeforeFirst(
359             void )
360             throw( com::sun::star::sdbc::SQLException,
361                    com::sun::star::uno::RuntimeException);
362 
363         virtual sal_Bool SAL_CALL
364         isAfterLast(
365             void )
366             throw( com::sun::star::sdbc::SQLException,
367                    com::sun::star::uno::RuntimeException);
368 
369         virtual sal_Bool SAL_CALL
370         isFirst(
371             void  )
372             throw( com::sun::star::sdbc::SQLException,
373                    com::sun::star::uno::RuntimeException);
374 
375         virtual sal_Bool SAL_CALL
376         isLast(
377             void  )
378             throw( com::sun::star::sdbc::SQLException,
379                    com::sun::star::uno::RuntimeException);
380 
381         virtual void SAL_CALL
382         beforeFirst(
383             void  )
384             throw( com::sun::star::sdbc::SQLException,
385                    com::sun::star::uno::RuntimeException);
386 
387         virtual void SAL_CALL
388         afterLast(
389             void  )
390             throw( com::sun::star::sdbc::SQLException,
391                    com::sun::star::uno::RuntimeException);
392 
393         virtual sal_Bool SAL_CALL
394         first(
395             void  )
396             throw( com::sun::star::sdbc::SQLException,
397                    com::sun::star::uno::RuntimeException);
398 
399         virtual sal_Bool SAL_CALL
400         last(
401             void  )
402             throw( com::sun::star::sdbc::SQLException,
403                    com::sun::star::uno::RuntimeException);
404 
405         virtual sal_Int32 SAL_CALL
406         getRow(
407             void  )
408             throw( com::sun::star::sdbc::SQLException,
409                    com::sun::star::uno::RuntimeException);
410 
411         virtual sal_Bool SAL_CALL
412         absolute(
413             sal_Int32 row )
414             throw( com::sun::star::sdbc::SQLException,
415                    com::sun::star::uno::RuntimeException);
416 
417         virtual sal_Bool SAL_CALL
418         relative(
419             sal_Int32 rows )
420             throw( com::sun::star::sdbc::SQLException,
421                    com::sun::star::uno::RuntimeException);
422 
423         virtual sal_Bool SAL_CALL
424         previous(
425             void  )
426             throw( com::sun::star::sdbc::SQLException,
427                    com::sun::star::uno::RuntimeException);
428 
429         virtual void SAL_CALL
430         refreshRow(
431             void  )
432             throw( com::sun::star::sdbc::SQLException,
433                    com::sun::star::uno::RuntimeException);
434 
435         virtual sal_Bool SAL_CALL
436         rowUpdated(
437             void )
438             throw( com::sun::star::sdbc::SQLException,
439                    com::sun::star::uno::RuntimeException);
440 
441         virtual sal_Bool SAL_CALL
442         rowInserted(
443             void  )
444             throw( com::sun::star::sdbc::SQLException,
445                    com::sun::star::uno::RuntimeException);
446 
447         virtual sal_Bool SAL_CALL
448         rowDeleted(
449             void  )
450             throw( com::sun::star::sdbc::SQLException,
451                    com::sun::star::uno::RuntimeException);
452 
453 
454         virtual  com::sun::star::uno::Reference<  com::sun::star::uno::XInterface > SAL_CALL
455         getStatement(
456             void  )
457             throw( com::sun::star::sdbc::SQLException,
458                    com::sun::star::uno::RuntimeException);
459 
460         // XCloseable
461 
462         virtual void SAL_CALL
463         close(
464             void )
465             throw( com::sun::star::sdbc::SQLException,
466                    com::sun::star::uno::RuntimeException);
467 
468         // XContentAccess
469 
470         virtual rtl::OUString SAL_CALL
471         queryContentIdentifierString(
472             void )
473             throw( com::sun::star::uno::RuntimeException );
474 
475         virtual com::sun::star::uno::Reference< com::sun::star::ucb::XContentIdentifier > SAL_CALL
476         queryContentIdentifier(
477             void )
478             throw( com::sun::star::uno::RuntimeException );
479 
480         virtual com::sun::star::uno::Reference< com::sun::star::ucb::XContent > SAL_CALL
481         queryContent(
482             void )
483             throw( com::sun::star::uno::RuntimeException );
484 
485         // XResultSetMetaDataSupplier
486         virtual com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSetMetaData > SAL_CALL
487         getMetaData(
488             void )
489             throw( com::sun::star::sdbc::SQLException,
490                    com::sun::star::uno::RuntimeException);
491 
492 
493         // XPropertySet
494         virtual com::sun::star::uno::Reference< com::sun::star::beans::XPropertySetInfo > SAL_CALL
495         getPropertySetInfo()
496             throw( com::sun::star::uno::RuntimeException);
497 
498         virtual void SAL_CALL setPropertyValue(
499             const rtl::OUString& aPropertyName,
500             const com::sun::star::uno::Any& aValue )
501             throw( com::sun::star::beans::UnknownPropertyException,
502                    com::sun::star::beans::PropertyVetoException,
503                    com::sun::star::lang::IllegalArgumentException,
504                    com::sun::star::lang::WrappedTargetException,
505                    com::sun::star::uno::RuntimeException);
506 
507         virtual com::sun::star::uno::Any SAL_CALL
508         getPropertyValue(
509             const rtl::OUString& PropertyName )
510             throw( com::sun::star::beans::UnknownPropertyException,
511                    com::sun::star::lang::WrappedTargetException,
512                    com::sun::star::uno::RuntimeException);
513 
514         virtual void SAL_CALL
515         addPropertyChangeListener(
516             const rtl::OUString& aPropertyName,
517             const com::sun::star::uno::Reference< com::sun::star::beans::XPropertyChangeListener >& xListener )
518             throw( com::sun::star::beans::UnknownPropertyException,
519                    com::sun::star::lang::WrappedTargetException,
520                    com::sun::star::uno::RuntimeException);
521 
522         virtual void SAL_CALL
523         removePropertyChangeListener(
524             const rtl::OUString& aPropertyName,
525             const com::sun::star::uno::Reference< com::sun::star::beans::XPropertyChangeListener >& aListener )
526             throw( com::sun::star::beans::UnknownPropertyException,
527                    com::sun::star::lang::WrappedTargetException,
528                    com::sun::star::uno::RuntimeException);
529 
530         virtual void SAL_CALL
531         addVetoableChangeListener(
532             const rtl::OUString& PropertyName,
533             const com::sun::star::uno::Reference< com::sun::star::beans::XVetoableChangeListener >& aListener )
534             throw( com::sun::star::beans::UnknownPropertyException,
535                    com::sun::star::lang::WrappedTargetException,
536                    com::sun::star::uno::RuntimeException);
537 
538         virtual void SAL_CALL removeVetoableChangeListener(
539             const rtl::OUString& PropertyName,
540             const com::sun::star::uno::Reference< com::sun::star::beans::XVetoableChangeListener >& aListener )
541             throw( com::sun::star::beans::UnknownPropertyException,
542                    com::sun::star::lang::WrappedTargetException,
543                    com::sun::star::uno::RuntimeException);
544 
545     protected:
546 
547         com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >  m_xMSF;
548         com::sun::star::uno::Reference< com::sun::star::ucb::XContentProvider >  m_xProvider;
549         sal_Int32                           m_nRow;
550         sal_Bool                            m_nWasNull;
551         sal_Int32                           m_nOpenMode;
552         sal_Bool                            m_bRowCountFinal;
553 
554         typedef std::vector< com::sun::star::uno::Reference< com::sun::star::ucb::XContentIdentifier > > IdentSet;
555         typedef std::vector< com::sun::star::uno::Reference< com::sun::star::sdbc::XRow > >              ItemSet;
556         typedef std::vector< rtl::OUString >                                                             PathSet;
557 
558         IdentSet                            m_aIdents;
559         ItemSet                             m_aItems;
560         PathSet                             m_aPath;
561 
562         com::sun::star::uno::Sequence< com::sun::star::beans::Property >           m_sProperty;
563         com::sun::star::uno::Sequence< com::sun::star::ucb::NumberedSortingInfo >  m_sSortingInfo;
564 
565         osl::Mutex                          m_aMutex;
566         cppu::OInterfaceContainerHelper*    m_pDisposeEventListeners;
567 
568         cppu::OInterfaceContainerHelper*    m_pRowCountListeners;
569         cppu::OInterfaceContainerHelper*    m_pIsFinalListeners;
570     };
571 
572 
573 } // end namespace fileaccess
574 
575 
576 #endif
577