1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: KeySet.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef DBACCESS_CORE_API_KEYSET_HXX
32 #define DBACCESS_CORE_API_KEYSET_HXX
34 #ifndef DBACCESS_CORE_API_CACHESET_HXX
35 #include "CacheSet.hxx"
38 #ifndef _CPPUHELPER_IMPLBASE1_HXX_
39 #include <cppuhelper/implbase1.hxx>
43 #ifndef _COM_SUN_STAR_LANG_XUNOTUNNEL_HPP_
44 #include <com/sun/star/lang/XUnoTunnel.hpp>
46 #ifndef _COM_SUN_STAR_SDB_XSINGLESELECTQUERYANALYZER_HPP_
47 #include <com/sun/star/sdb/XSingleSelectQueryAnalyzer.hpp>
49 #ifndef _COMPHELPER_STLTYPES_HXX_
50 #include <comphelper/stl_types.hxx>
55 struct SelectColumnDescription
62 ::rtl::OUString sDefaultValue
;
64 SelectColumnDescription()
73 SelectColumnDescription( sal_Int32 _nPosition
, sal_Int32 _nType
, sal_Int32 _nScale
,sal_Bool _bNullable
, const ::rtl::OUString
& _rDefaultValue
)
74 :nPosition( _nPosition
)
77 ,bNullable(_bNullable
)
78 ,sDefaultValue( _rDefaultValue
)
82 typedef ::std::map
< ::rtl::OUString
, SelectColumnDescription
, ::comphelper::UStringMixLess
> SelectColumnsMetaData
;
84 // the elements of _rxQueryColumns must have the properties PROPERTY_REALNAME and PROPERTY_TABLENAME
85 void getColumnPositions(const ::com::sun::star::uno::Reference
< ::com::sun::star::container::XNameAccess
>& _rxQueryColumns
,
86 const ::com::sun::star::uno::Reference
< ::com::sun::star::container::XNameAccess
>& _rxColumns
,
87 const ::rtl::OUString
& _rsUpdateTableName
,
88 SelectColumnsMetaData
& _rColumnNames
/* out */);
90 typedef ::std::pair
<ORowSetRow
,sal_Int32
> OKeySetValue
;
91 typedef ::std::map
<sal_Int32
,OKeySetValue
> OKeySetMatrix
;
92 // is used when the source supports keys
93 class OKeySet
: public OCacheSet
95 OKeySetMatrix m_aKeyMap
;
96 OKeySetMatrix::iterator m_aKeyIter
;
98 ::std::vector
< ::rtl::OUString
> m_aAutoColumns
; // contains all columns which are autoincrement ones
100 ORowSetValueVector m_aParameterValueForCache
;
101 SelectColumnsMetaData
* m_pKeyColumnNames
; // contains all key column names
102 SelectColumnsMetaData
* m_pColumnNames
; // contains all column names
103 SelectColumnsMetaData
* m_pForeignColumnNames
; // contains all column names of the rest
104 connectivity::OSQLTable m_xTable
; // reference to our table
105 ::com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexAccess
> m_xTableKeys
;
106 ::com::sun::star::uno::Reference
< ::com::sun::star::sdbc::XPreparedStatement
> m_xStatement
;
107 ::com::sun::star::uno::Reference
< ::com::sun::star::sdbc::XResultSet
> m_xSet
;
108 ::com::sun::star::uno::Reference
< ::com::sun::star::sdbc::XRow
> m_xRow
;
109 ::com::sun::star::uno::Reference
< ::com::sun::star::sdb::XSingleSelectQueryAnalyzer
> m_xComposer
;
110 ::rtl::OUString m_sUpdateTableName
;
111 ::rtl::OUString m_aSelectComposedTableName
;
113 sal_Bool m_bRowCountFinal
;
116 getComposedTableName return the composed table name for the query
117 @param _sCatalog the catalogname may be empty
118 @param _sSchema the schemaname may be empty
119 @param _sTable the tablename
121 @return the composed name
123 ::rtl::OUString
getComposedTableName( const ::rtl::OUString
& _sCatalog
,
124 const ::rtl::OUString
& _sSchema
,
125 const ::rtl::OUString
& _sTable
);
127 /** copies the values from the insert row into the key row
129 * \param _rInsertRow the row which was inserted
130 * \param _rKeyRow The current key row of the row set.
132 void copyRowValue(const ORowSetRow
& _rInsertRow
,ORowSetRow
& _rKeyRow
);
134 ::com::sun::star::uno::Reference
< ::com::sun::star::container::XNameAccess
> getKeyColumns() const;
140 OKeySet(const connectivity::OSQLTable
& _xTable
,
141 const ::com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexAccess
>& _xTableKeys
,
142 const ::rtl::OUString
& _rUpdateTableName
,
143 const ::com::sun::star::uno::Reference
< ::com::sun::star::sdb::XSingleSelectQueryAnalyzer
>& _xComposer
,
144 const ORowSetValueVector
& _aParameterValueForCache
);
146 // late ctor which can throw exceptions
147 virtual void construct(const ::com::sun::star::uno::Reference
< ::com::sun::star::sdbc::XResultSet
>& _xDriverSet
);
149 // ::com::sun::star::sdbc::XRow
150 virtual sal_Bool SAL_CALL
wasNull( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
151 virtual ::rtl::OUString SAL_CALL
getString( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
152 virtual sal_Bool SAL_CALL
getBoolean( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
153 virtual sal_Int8 SAL_CALL
getByte( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
154 virtual sal_Int16 SAL_CALL
getShort( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
155 virtual sal_Int32 SAL_CALL
getInt( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
156 virtual sal_Int64 SAL_CALL
getLong( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
157 virtual float SAL_CALL
getFloat( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
158 virtual double SAL_CALL
getDouble( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
159 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
);
160 virtual ::com::sun::star::util::Date SAL_CALL
getDate( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
161 virtual ::com::sun::star::util::Time SAL_CALL
getTime( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
162 virtual ::com::sun::star::util::DateTime SAL_CALL
getTimestamp( sal_Int32 columnIndex
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
163 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
);
164 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
);
165 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
);
166 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
);
167 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
);
168 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
);
169 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
);
172 virtual sal_Bool SAL_CALL
rowUpdated( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
173 virtual sal_Bool SAL_CALL
rowInserted( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
174 virtual sal_Bool SAL_CALL
rowDeleted( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
175 // ::com::sun::star::sdbc::XResultSet
176 virtual sal_Bool SAL_CALL
next( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
177 virtual sal_Bool SAL_CALL
isBeforeFirst( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
178 virtual sal_Bool SAL_CALL
isAfterLast( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
179 virtual sal_Bool SAL_CALL
isFirst( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
180 virtual sal_Bool SAL_CALL
isLast( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
181 virtual void SAL_CALL
beforeFirst( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
182 virtual void SAL_CALL
afterLast( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
183 virtual sal_Bool SAL_CALL
first( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
184 virtual sal_Bool SAL_CALL
last( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
185 virtual sal_Int32 SAL_CALL
getRow( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
186 virtual sal_Bool SAL_CALL
absolute( sal_Int32 row
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
187 virtual sal_Bool SAL_CALL
relative( sal_Int32 rows
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
188 virtual sal_Bool SAL_CALL
previous( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
189 virtual void SAL_CALL
refreshRow( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
190 // ::com::sun::star::sdbcx::XRowLocate
191 virtual ::com::sun::star::uno::Any SAL_CALL
getBookmark() throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
192 // -------------------------------------------------------------------------
193 virtual sal_Bool SAL_CALL
moveToBookmark( const ::com::sun::star::uno::Any
& bookmark
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
194 // -------------------------------------------------------------------------
195 virtual sal_Bool SAL_CALL
moveRelativeToBookmark( const ::com::sun::star::uno::Any
& bookmark
, sal_Int32 rows
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
196 // -------------------------------------------------------------------------
197 virtual sal_Int32 SAL_CALL
compareBookmarks( const ::com::sun::star::uno::Any
& first
, const ::com::sun::star::uno::Any
& second
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
198 // -------------------------------------------------------------------------
199 virtual sal_Bool SAL_CALL
hasOrderedBookmarks( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
200 // -------------------------------------------------------------------------
201 virtual sal_Int32 SAL_CALL
hashBookmark( const ::com::sun::star::uno::Any
& bookmark
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
202 // -------------------------------------------------------------------------
203 // ::com::sun::star::sdbcx::XDeleteRows
204 virtual ::com::sun::star::uno::Sequence
< sal_Int32
> SAL_CALL
deleteRows( const ::com::sun::star::uno::Sequence
< ::com::sun::star::uno::Any
>& rows
,const connectivity::OSQLTable
& _xTable
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
205 // ::com::sun::star::sdbc::XResultSetUpdate
206 virtual void SAL_CALL
updateRow(const ORowSetRow
& _rInsertRow
,const ORowSetRow
& _rOrginalRow
,const connectivity::OSQLTable
& _xTable
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
207 virtual void SAL_CALL
deleteRow(const ORowSetRow
& _rInsertRow
,const connectivity::OSQLTable
& _xTable
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
208 virtual void SAL_CALL
insertRow( const ORowSetRow
& _rInsertRow
,const connectivity::OSQLTable
& _xTable
) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
209 virtual void SAL_CALL
cancelRowUpdates( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
210 virtual void SAL_CALL
moveToInsertRow( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
211 virtual void SAL_CALL
moveToCurrentRow( ) throw(::com::sun::star::sdbc::SQLException
, ::com::sun::star::uno::RuntimeException
);
214 #endif // DBACCESS_CORE_API_KEYSET_HXX