1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*************************************************************************
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * Copyright 2000, 2010 Oracle and/or its affiliates.
8 * OpenOffice.org - a multi-platform office productivity suite
10 * This file is part of OpenOffice.org.
12 * OpenOffice.org is free software: you can redistribute it and/or modify
13 * it under the terms of the GNU Lesser General Public License version 3
14 * only, as published by the Free Software Foundation.
16 * OpenOffice.org is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Lesser General Public License version 3 for more details
20 * (a copy is included in the LICENSE file that accompanied this code).
22 * You should have received a copy of the GNU Lesser General Public License
23 * version 3 along with OpenOffice.org. If not, see
24 * <http://www.openoffice.org/license.html>
25 * for a copy of the LGPLv3 License.
27 ************************************************************************/
29 #ifndef _CONNECTIVITY_ADO_ADATABASEMETADATARESULTSET_HXX_
30 #define _CONNECTIVITY_ADO_ADATABASEMETADATARESULTSET_HXX_
32 #include <com/sun/star/sdbc/XResultSet.hpp>
33 #include <com/sun/star/sdbc/XRow.hpp>
34 #include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
35 #include <com/sun/star/sdbc/XCloseable.hpp>
36 #include <com/sun/star/sdbc/XColumnLocate.hpp>
37 #include <com/sun/star/util/XCancellable.hpp>
38 #include <com/sun/star/sdbc/XWarningsSupplier.hpp>
39 #include <com/sun/star/sdbc/XResultSetUpdate.hpp>
40 #include <com/sun/star/sdbc/XRowUpdate.hpp>
41 #include <cppuhelper/compbase7.hxx>
42 #include <comphelper/proparrhlp.hxx>
43 #include "ado/AStatement.hxx"
44 #include <comphelper/broadcasthelper.hxx>
45 #include "connectivity/StdTypeDefs.hxx"
47 namespace connectivity
51 class ODatabaseMetaDataResultSetMetaData
;
55 typedef ::cppu::WeakComponentImplHelper7
< ::com::sun::star::sdbc::XResultSet
,
56 ::com::sun::star::sdbc::XRow
,
57 ::com::sun::star::sdbc::XResultSetMetaDataSupplier
,
58 ::com::sun::star::util::XCancellable
,
59 ::com::sun::star::sdbc::XWarningsSupplier
,
60 ::com::sun::star::sdbc::XCloseable
,
61 ::com::sun::star::sdbc::XColumnLocate
> ODatabaseMetaDataResultSet_BASE
;
63 class ODatabaseMetaDataResultSet
: public comphelper::OBaseMutex
,
64 public ODatabaseMetaDataResultSet_BASE
,
65 public ::cppu::OPropertySetHelper
,
66 public ::comphelper::OPropertyArrayUsageHelper
<ODatabaseMetaDataResultSet
>
68 ::std::vector
<sal_Int32
> m_aColMapping
; // pos 0 is unused so we don't have to decrement 1 everytime
70 ::std::map
<sal_Int32
, TInt2IntMap
> m_aValueRange
;
71 ::std::map
<sal_Int32
, TInt2IntMap
>::iterator m_aValueRangeIter
;
73 ::std::map
<sal_Int32
, ::std::map
< ::rtl::OUString
,sal_Int32
> > m_aStrValueRange
;
74 ::std::map
<sal_Int32
, ::std::map
< ::rtl::OUString
,sal_Int32
> >::iterator m_aStrValueRangeIter
;
76 ::std::map
<sal_Int32
, ::std::map
< sal_Int32
,::rtl::OUString
> > m_aIntValueRange
;
77 ::std::map
<sal_Int32
, ::std::map
< sal_Int32
,::rtl::OUString
> >::iterator m_aIntValueRangeIter
;
79 ADORecordset
* m_pRecordSet
;
80 ::com::sun::star::uno::WeakReferenceHelper m_aStatement
;
81 ::com::sun::star::uno::Reference
< ::com::sun::star::sdbc::XResultSetMetaData
> m_xMetaData
;
86 sal_Bool m_bOnFirstAfterOpen
;
88 sal_Int32
getResultSetConcurrency() const throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
89 sal_Int32
getResultSetType() const throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
90 sal_Int32
getFetchDirection() const throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
91 sal_Int32
getFetchSize() const throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
92 ::rtl::OUString
getCursorName() const throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
94 void setFetchDirection(sal_Int32 _par0
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
95 void setFetchSize(sal_Int32 _par0
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
98 inline sal_Int32
mapColumn (sal_Int32 column
);
99 void checkRecordSet() throw(::com::sun::star::sdbc::SQLException
);
100 OLEVariant
getValue(sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
104 // OPropertyArrayUsageHelper
105 virtual ::cppu::IPropertyArrayHelper
* createArrayHelper( ) const;
106 // OPropertySetHelper
107 virtual ::cppu::IPropertyArrayHelper
& SAL_CALL
getInfoHelper();
109 virtual sal_Bool SAL_CALL
convertFastPropertyValue(
110 ::com::sun::star::uno::Any
& rConvertedValue
,
111 ::com::sun::star::uno::Any
& rOldValue
,
113 const ::com::sun::star::uno::Any
& rValue
)
114 throw (::com::sun::star::lang::IllegalArgumentException
);
115 virtual void SAL_CALL
setFastPropertyValue_NoBroadcast(
117 const ::com::sun::star::uno::Any
& rValue
119 throw (::com::sun::star::uno::Exception
);
120 virtual void SAL_CALL
getFastPropertyValue(
121 ::com::sun::star::uno::Any
& rValue
,
125 // a Constructor, that is needed for when Returning the Object is needed:
126 ODatabaseMetaDataResultSet( ADORecordset
* _pRecordSet
);
127 ~ODatabaseMetaDataResultSet();
129 // ::cppu::OComponentHelper
130 virtual void SAL_CALL
disposing(void);
132 virtual ::com::sun::star::uno::Any SAL_CALL
queryInterface( const ::com::sun::star::uno::Type
& rType
) throw(::com::sun::star::uno::RuntimeException
);
133 virtual void SAL_CALL
acquire() throw();
134 virtual void SAL_CALL
release() throw();
136 virtual ::com::sun::star::uno::Sequence
< ::com::sun::star::uno::Type
> SAL_CALL
getTypes( ) throw(::com::sun::star::uno::RuntimeException
);
138 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::beans::XPropertySetInfo
> SAL_CALL
getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException
);
140 virtual sal_Bool SAL_CALL
next( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
141 virtual sal_Bool SAL_CALL
isBeforeFirst( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
142 virtual sal_Bool SAL_CALL
isAfterLast( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
143 virtual sal_Bool SAL_CALL
isFirst( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
144 virtual sal_Bool SAL_CALL
isLast( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
145 virtual void SAL_CALL
beforeFirst( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
146 virtual void SAL_CALL
afterLast( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
147 virtual sal_Bool SAL_CALL
first( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
148 virtual sal_Bool SAL_CALL
last( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
149 virtual sal_Int32 SAL_CALL
getRow( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
150 virtual sal_Bool SAL_CALL
absolute( sal_Int32 row
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
151 virtual sal_Bool SAL_CALL
relative( sal_Int32 rows
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
152 virtual sal_Bool SAL_CALL
previous( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
153 virtual void SAL_CALL
refreshRow( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
154 virtual sal_Bool SAL_CALL
rowUpdated( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
155 virtual sal_Bool SAL_CALL
rowInserted( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
156 virtual sal_Bool SAL_CALL
rowDeleted( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
157 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
> SAL_CALL
getStatement( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
159 virtual sal_Bool SAL_CALL
wasNull( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
160 virtual ::rtl::OUString SAL_CALL
getString( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
161 virtual sal_Bool SAL_CALL
getBoolean( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
162 virtual sal_Int8 SAL_CALL
getByte( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
163 virtual sal_Int16 SAL_CALL
getShort( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
164 virtual sal_Int32 SAL_CALL
getInt( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
165 virtual sal_Int64 SAL_CALL
getLong( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
166 virtual float SAL_CALL
getFloat( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
167 virtual double SAL_CALL
getDouble( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
168 virtual ::com::sun::star::uno::Sequence
< sal_Int8
> SAL_CALL
getBytes( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
169 virtual ::com::sun::star::util::Date SAL_CALL
getDate( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
170 virtual ::com::sun::star::util::Time SAL_CALL
getTime( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
171 virtual ::com::sun::star::util::DateTime SAL_CALL
getTimestamp( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
172 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::io::XInputStream
> SAL_CALL
getBinaryStream( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
173 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::io::XInputStream
> SAL_CALL
getCharacterStream( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
174 virtual ::com::sun::star::uno::Any SAL_CALL
getObject( sal_Int32 columnIndex
, const ::com::sun::star::uno::Reference
< ::com::sun::star::container::XNameAccess
>& typeMap
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
175 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::sdbc::XRef
> SAL_CALL
getRef( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
176 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::sdbc::XBlob
> SAL_CALL
getBlob( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
177 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::sdbc::XClob
> SAL_CALL
getClob( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
178 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::sdbc::XArray
> SAL_CALL
getArray( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
179 // XResultSetMetaDataSupplier
180 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::sdbc::XResultSetMetaData
> SAL_CALL
getMetaData( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
182 virtual void SAL_CALL
cancel( ) throw(::com::sun::star::uno::RuntimeException
);
184 virtual void SAL_CALL
close( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
186 virtual ::com::sun::star::uno::Any SAL_CALL
getWarnings( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
187 virtual void SAL_CALL
clearWarnings( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
189 virtual sal_Int32 SAL_CALL
findColumn( const ::rtl::OUString
& columnName
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
191 const ::std::vector
<sal_Int32
>& getColumnMapping() { return m_aColMapping
; }
193 void setCatalogsMap();
194 void setSchemasMap();
195 void setColumnPrivilegesMap();
196 void setColumnsMap();
198 void setProcedureColumnsMap();
199 void setProceduresMap();
200 void setExportedKeysMap();
201 void setImportedKeysMap();
202 void setPrimaryKeysMap();
203 void setIndexInfoMap();
204 void setTablePrivilegesMap();
205 void setCrossReferenceMap();
206 void setTypeInfoMap(sal_Bool _bJetEngine
);
208 // -------------------------------------------------------------------------
209 inline sal_Int32
ODatabaseMetaDataResultSet::mapColumn (sal_Int32 column
)
211 sal_Int32 map
= column
;
213 if (!m_aColMapping
.empty())
215 // Validate column number
216 map
= m_aColMapping
[column
];
224 #endif // _CONNECTIVITY_ADO_ADATABASEMETADATARESULTSET_HXX_
226 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */