1*96de5490SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*96de5490SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*96de5490SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*96de5490SAndrew Rist  * distributed with this work for additional information
6*96de5490SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*96de5490SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*96de5490SAndrew Rist  * "License"); you may not use this file except in compliance
9*96de5490SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*96de5490SAndrew Rist  *
11*96de5490SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*96de5490SAndrew Rist  *
13*96de5490SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*96de5490SAndrew Rist  * software distributed under the License is distributed on an
15*96de5490SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*96de5490SAndrew Rist  * KIND, either express or implied.  See the License for the
17*96de5490SAndrew Rist  * specific language governing permissions and limitations
18*96de5490SAndrew Rist  * under the License.
19*96de5490SAndrew Rist  *
20*96de5490SAndrew Rist  *************************************************************/
21*96de5490SAndrew Rist 
22*96de5490SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_dbaccess.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "apitools.hxx"
28cdf0e10cSrcweir #include "dbastrings.hrc"
29cdf0e10cSrcweir #include "definitioncolumn.hxx"
30cdf0e10cSrcweir #include "sdbcoretools.hxx"
31cdf0e10cSrcweir 
32cdf0e10cSrcweir /** === begin UNO includes === **/
33cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp>
34cdf0e10cSrcweir #include <com/sun/star/sdbcx/XTablesSupplier.hpp>
35cdf0e10cSrcweir /** === end UNO includes === **/
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #include <comphelper/property.hxx>
38cdf0e10cSrcweir #include <comphelper/types.hxx>
39cdf0e10cSrcweir #include <connectivity/dbtools.hxx>
40cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx>
41cdf0e10cSrcweir #include <tools/debug.hxx>
42cdf0e10cSrcweir #include <tools/diagnose_ex.h>
43cdf0e10cSrcweir 
44cdf0e10cSrcweir using namespace ::com::sun::star::sdbc;
45cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx;
46cdf0e10cSrcweir using namespace ::com::sun::star::beans;
47cdf0e10cSrcweir using namespace ::com::sun::star::uno;
48cdf0e10cSrcweir using namespace ::com::sun::star::lang;
49cdf0e10cSrcweir using namespace ::com::sun::star::container;
50cdf0e10cSrcweir using namespace ::cppu;
51cdf0e10cSrcweir using namespace ::comphelper;
52cdf0e10cSrcweir using namespace ::osl;
53cdf0e10cSrcweir using namespace dbaccess;
54cdf0e10cSrcweir 
55cdf0e10cSrcweir #define HAS_DESCRIPTION		        0x00000001
56cdf0e10cSrcweir #define HAS_DEFAULTVALUE	        0x00000002
57cdf0e10cSrcweir #define HAS_ROWVERSION		        0x00000004
58cdf0e10cSrcweir #define HAS_AUTOINCREMENT_CREATION	0x00000008
59cdf0e10cSrcweir 
60cdf0e10cSrcweir //============================================================
61cdf0e10cSrcweir //= OTableColumnDescriptor
62cdf0e10cSrcweir //============================================================
IMPLEMENT_FORWARD_XINTERFACE2(OTableColumnDescriptor,OColumn,TXChild)63cdf0e10cSrcweir IMPLEMENT_FORWARD_XINTERFACE2(OTableColumnDescriptor,OColumn,TXChild)
64cdf0e10cSrcweir 
65cdf0e10cSrcweir //------------------------------------------------------------------------------
66cdf0e10cSrcweir void OTableColumnDescriptor::impl_registerProperties()
67cdf0e10cSrcweir {
68cdf0e10cSrcweir     sal_Int32 nDefaultAttr = m_bActAsDescriptor ? 0 : PropertyAttribute::READONLY;
69cdf0e10cSrcweir 
70cdf0e10cSrcweir     registerProperty( PROPERTY_TYPENAME, PROPERTY_ID_TYPENAME, nDefaultAttr, &m_aTypeName, ::getCppuType( &m_aTypeName ) );
71cdf0e10cSrcweir     registerProperty( PROPERTY_DESCRIPTION, PROPERTY_ID_DESCRIPTION, nDefaultAttr, &m_aDescription, ::getCppuType( &m_aDescription ) );
72cdf0e10cSrcweir     registerProperty( PROPERTY_DEFAULTVALUE, PROPERTY_ID_DEFAULTVALUE, nDefaultAttr, &m_aDefaultValue, ::getCppuType( &m_aDefaultValue ) );
73cdf0e10cSrcweir 
74cdf0e10cSrcweir     if ( m_bActAsDescriptor )
75cdf0e10cSrcweir         registerProperty( PROPERTY_AUTOINCREMENTCREATION, PROPERTY_ID_AUTOINCREMENTCREATION, nDefaultAttr, &m_aAutoIncrementValue, ::getCppuType( &m_aAutoIncrementValue ) );
76cdf0e10cSrcweir 
77cdf0e10cSrcweir     registerProperty( PROPERTY_TYPE, PROPERTY_ID_TYPE, nDefaultAttr, &m_nType, ::getCppuType( &m_nType ) );
78cdf0e10cSrcweir     registerProperty( PROPERTY_PRECISION, PROPERTY_ID_PRECISION, nDefaultAttr, &m_nPrecision, ::getCppuType( &m_nPrecision ) );
79cdf0e10cSrcweir     registerProperty( PROPERTY_SCALE, PROPERTY_ID_SCALE, nDefaultAttr, &m_nScale, ::getCppuType( &m_nScale ) );
80cdf0e10cSrcweir     registerProperty( PROPERTY_ISNULLABLE, PROPERTY_ID_ISNULLABLE, nDefaultAttr, &m_nIsNullable, ::getCppuType( &m_nIsNullable ) );
81cdf0e10cSrcweir     registerProperty( PROPERTY_ISAUTOINCREMENT, PROPERTY_ID_ISAUTOINCREMENT, nDefaultAttr, &m_bAutoIncrement, ::getCppuType( &m_bAutoIncrement ) );
82cdf0e10cSrcweir     registerProperty( PROPERTY_ISROWVERSION, PROPERTY_ID_ISROWVERSION, nDefaultAttr, &m_bRowVersion, ::getCppuType( &m_bRowVersion ) );
83cdf0e10cSrcweir     registerProperty( PROPERTY_ISCURRENCY, PROPERTY_ID_ISCURRENCY, nDefaultAttr, &m_bCurrency, ::getCppuType( &m_bCurrency ) );
84cdf0e10cSrcweir 
85cdf0e10cSrcweir     OColumnSettings::registerProperties( *this );
86cdf0e10cSrcweir }
87cdf0e10cSrcweir 
88cdf0e10cSrcweir //--------------------------------------------------------------------------
IMPLEMENT_GET_IMPLEMENTATION_ID(OTableColumnDescriptor)89cdf0e10cSrcweir IMPLEMENT_GET_IMPLEMENTATION_ID( OTableColumnDescriptor )
90cdf0e10cSrcweir 
91cdf0e10cSrcweir // ::com::sun::star::lang::XServiceInfo
92cdf0e10cSrcweir //------------------------------------------------------------------------------
93cdf0e10cSrcweir rtl::OUString OTableColumnDescriptor::getImplementationName(  ) throw (RuntimeException)
94cdf0e10cSrcweir {
95cdf0e10cSrcweir 	return rtl::OUString::createFromAscii("com.sun.star.sdb.OTableColumnDescriptor");
96cdf0e10cSrcweir }
97cdf0e10cSrcweir 
98cdf0e10cSrcweir //------------------------------------------------------------------------------
getSupportedServiceNames()99cdf0e10cSrcweir Sequence< ::rtl::OUString > OTableColumnDescriptor::getSupportedServiceNames(  ) throw (RuntimeException)
100cdf0e10cSrcweir {
101cdf0e10cSrcweir 	Sequence< ::rtl::OUString > aSNS( 2 );
102cdf0e10cSrcweir     aSNS[0] = m_bActAsDescriptor ? SERVICE_SDBCX_COLUMNDESCRIPTOR : SERVICE_SDBCX_COLUMN;
103cdf0e10cSrcweir 	aSNS[1] = SERVICE_SDB_COLUMNSETTINGS;
104cdf0e10cSrcweir 	return aSNS;
105cdf0e10cSrcweir }
106cdf0e10cSrcweir 
107cdf0e10cSrcweir // comphelper::OPropertyArrayUsageHelper
108cdf0e10cSrcweir //------------------------------------------------------------------------------
createArrayHelper() const109cdf0e10cSrcweir ::cppu::IPropertyArrayHelper* OTableColumnDescriptor::createArrayHelper( ) const
110cdf0e10cSrcweir {
111cdf0e10cSrcweir     Sequence< Property > aProps;
112cdf0e10cSrcweir     describeProperties( aProps );
113cdf0e10cSrcweir     return new ::cppu::OPropertyArrayHelper( aProps );
114cdf0e10cSrcweir }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir // cppu::OPropertySetHelper
117cdf0e10cSrcweir //------------------------------------------------------------------------------
getInfoHelper()118cdf0e10cSrcweir ::cppu::IPropertyArrayHelper& OTableColumnDescriptor::getInfoHelper()
119cdf0e10cSrcweir {
120cdf0e10cSrcweir 	return *static_cast< ::comphelper::OPropertyArrayUsageHelper< OTableColumnDescriptor >* >(this)->getArrayHelper();
121cdf0e10cSrcweir }
122cdf0e10cSrcweir 
123cdf0e10cSrcweir //------------------------------------------------------------------------------
setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any & rValue)124cdf0e10cSrcweir void OTableColumnDescriptor::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw (Exception)
125cdf0e10cSrcweir {
126cdf0e10cSrcweir 	OColumn::setFastPropertyValue_NoBroadcast( nHandle, rValue );
127cdf0e10cSrcweir 	::dbaccess::notifyDataSourceModified( m_xParent, sal_True );
128cdf0e10cSrcweir }
129cdf0e10cSrcweir 
130cdf0e10cSrcweir // -----------------------------------------------------------------------------
getParent()131cdf0e10cSrcweir Reference< XInterface > SAL_CALL OTableColumnDescriptor::getParent(  ) throw (RuntimeException)
132cdf0e10cSrcweir {
133cdf0e10cSrcweir 	::osl::MutexGuard aGuard(m_aMutex);
134cdf0e10cSrcweir 	return m_xParent;
135cdf0e10cSrcweir }
136cdf0e10cSrcweir // -----------------------------------------------------------------------------
setParent(const Reference<XInterface> & _xParent)137cdf0e10cSrcweir void SAL_CALL OTableColumnDescriptor::setParent( const Reference< XInterface >& _xParent ) throw (NoSupportException, RuntimeException)
138cdf0e10cSrcweir {
139cdf0e10cSrcweir 	::osl::MutexGuard aGuard(m_aMutex);
140cdf0e10cSrcweir 	m_xParent = _xParent;
141cdf0e10cSrcweir }
142cdf0e10cSrcweir //============================================================
143cdf0e10cSrcweir //= OTableColumn
144cdf0e10cSrcweir //============================================================
145cdf0e10cSrcweir DBG_NAME(OTableColumn);
146cdf0e10cSrcweir 
147cdf0e10cSrcweir // -------------------------------------------------------------------------
OTableColumn(const::rtl::OUString & _rName)148cdf0e10cSrcweir OTableColumn::OTableColumn( const ::rtl::OUString& _rName )
149cdf0e10cSrcweir     :OTableColumnDescriptor( false /* do not act as descriptor */ )
150cdf0e10cSrcweir {
151cdf0e10cSrcweir 	DBG_CTOR(OTableColumn,NULL);
152cdf0e10cSrcweir 	m_sName = _rName;
153cdf0e10cSrcweir }
154cdf0e10cSrcweir 
155cdf0e10cSrcweir // -----------------------------------------------------------------------------
~OTableColumn()156cdf0e10cSrcweir OTableColumn::~OTableColumn()
157cdf0e10cSrcweir {
158cdf0e10cSrcweir 	DBG_DTOR(OTableColumn,NULL);
159cdf0e10cSrcweir }
160cdf0e10cSrcweir 
161cdf0e10cSrcweir //--------------------------------------------------------------------------
IMPLEMENT_GET_IMPLEMENTATION_ID(OTableColumn)162cdf0e10cSrcweir IMPLEMENT_GET_IMPLEMENTATION_ID( OTableColumn )
163cdf0e10cSrcweir 
164cdf0e10cSrcweir //------------------------------------------------------------------------------
165cdf0e10cSrcweir rtl::OUString OTableColumn::getImplementationName(  ) throw (RuntimeException)
166cdf0e10cSrcweir {
167cdf0e10cSrcweir 	return rtl::OUString::createFromAscii("com.sun.star.sdb.OTableColumn");
168cdf0e10cSrcweir }
169cdf0e10cSrcweir 
170cdf0e10cSrcweir //------------------------------------------------------------------------------
getInfoHelper()171cdf0e10cSrcweir ::cppu::IPropertyArrayHelper& SAL_CALL OTableColumn::getInfoHelper()
172cdf0e10cSrcweir {
173cdf0e10cSrcweir     return *OTableColumn_PBase::getArrayHelper();
174cdf0e10cSrcweir }
175cdf0e10cSrcweir 
176cdf0e10cSrcweir //------------------------------------------------------------------------------
createArrayHelper() const177cdf0e10cSrcweir ::cppu::IPropertyArrayHelper* OTableColumn::createArrayHelper( ) const
178cdf0e10cSrcweir {
179cdf0e10cSrcweir     return OTableColumnDescriptor::createArrayHelper();
180cdf0e10cSrcweir }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir // =========================================================================
183cdf0e10cSrcweir //= OQueryColumn
184cdf0e10cSrcweir // =========================================================================
185cdf0e10cSrcweir DBG_NAME( OQueryColumn );
186cdf0e10cSrcweir 
187cdf0e10cSrcweir // -------------------------------------------------------------------------
OQueryColumn(const Reference<XPropertySet> & _rxParserColumn,const Reference<XConnection> & _rxConnection,const::rtl::OUString i_sLabel)188cdf0e10cSrcweir OQueryColumn::OQueryColumn( const Reference< XPropertySet >& _rxParserColumn, const Reference< XConnection >& _rxConnection,const ::rtl::OUString i_sLabel )
189cdf0e10cSrcweir     :OTableColumnDescriptor( false /* do not act as descriptor */ )
190cdf0e10cSrcweir     ,m_sLabel(i_sLabel)
191cdf0e10cSrcweir {
192cdf0e10cSrcweir     const sal_Int32 nPropAttr = PropertyAttribute::READONLY;
193cdf0e10cSrcweir     registerProperty( PROPERTY_CATALOGNAME, PROPERTY_ID_CATALOGNAME, nPropAttr, &m_sCatalogName, ::getCppuType( &m_sCatalogName ) );
194cdf0e10cSrcweir     registerProperty( PROPERTY_SCHEMANAME, PROPERTY_ID_SCHEMANAME, nPropAttr, &m_sSchemaName, ::getCppuType( &m_sSchemaName ) );
195cdf0e10cSrcweir     registerProperty( PROPERTY_TABLENAME, PROPERTY_ID_TABLENAME, nPropAttr, &m_sTableName, ::getCppuType( &m_sTableName ) );
196cdf0e10cSrcweir     registerProperty( PROPERTY_REALNAME, PROPERTY_ID_REALNAME, nPropAttr, &m_sRealName, ::getCppuType( &m_sRealName ) );
197cdf0e10cSrcweir     registerProperty( PROPERTY_LABEL, PROPERTY_ID_LABEL, nPropAttr, &m_sLabel, ::getCppuType( &m_sLabel ) );
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 	DBG_CTOR( OQueryColumn, NULL );
200cdf0e10cSrcweir 
201cdf0e10cSrcweir     OSL_VERIFY( _rxParserColumn->getPropertyValue( PROPERTY_TYPENAME ) >>= m_aTypeName );
202cdf0e10cSrcweir     OSL_VERIFY( _rxParserColumn->getPropertyValue( PROPERTY_ISNULLABLE ) >>= m_nIsNullable );
203cdf0e10cSrcweir 	OSL_VERIFY( _rxParserColumn->getPropertyValue( PROPERTY_PRECISION ) >>= m_nPrecision );
204cdf0e10cSrcweir 	OSL_VERIFY( _rxParserColumn->getPropertyValue( PROPERTY_SCALE ) >>= m_nScale );
205cdf0e10cSrcweir 	OSL_VERIFY( _rxParserColumn->getPropertyValue( PROPERTY_TYPE ) >>= m_nType );
206cdf0e10cSrcweir     OSL_VERIFY( _rxParserColumn->getPropertyValue( PROPERTY_ISAUTOINCREMENT ) >>= m_bAutoIncrement );
207cdf0e10cSrcweir     OSL_VERIFY( _rxParserColumn->getPropertyValue( PROPERTY_ISCURRENCY ) >>= m_bCurrency );
208cdf0e10cSrcweir 	OSL_VERIFY( _rxParserColumn->getPropertyValue( PROPERTY_NAME ) >>= m_sName );
209cdf0e10cSrcweir 
210cdf0e10cSrcweir     m_bRowVersion = sal_False;
211cdf0e10cSrcweir 
212cdf0e10cSrcweir     Reference< XPropertySetInfo > xPSI( _rxParserColumn->getPropertySetInfo(), UNO_SET_THROW );
213cdf0e10cSrcweir     if ( xPSI->hasPropertyByName( PROPERTY_DEFAULTVALUE ) )
214cdf0e10cSrcweir         OSL_VERIFY( _rxParserColumn->getPropertyValue( PROPERTY_DEFAULTVALUE ) >>= m_aDefaultValue );
215cdf0e10cSrcweir 
216cdf0e10cSrcweir     // copy some optional properties from the parser column
217cdf0e10cSrcweir     struct PropertyDescriptor
218cdf0e10cSrcweir     {
219cdf0e10cSrcweir         ::rtl::OUString sName;
220cdf0e10cSrcweir         sal_Int32       nHandle;
221cdf0e10cSrcweir     };
222cdf0e10cSrcweir     PropertyDescriptor aProps[] =
223cdf0e10cSrcweir     {
224cdf0e10cSrcweir         { PROPERTY_CATALOGNAME,      PROPERTY_ID_CATALOGNAME },
225cdf0e10cSrcweir         { PROPERTY_SCHEMANAME,       PROPERTY_ID_SCHEMANAME },
226cdf0e10cSrcweir         { PROPERTY_TABLENAME,        PROPERTY_ID_TABLENAME },
227cdf0e10cSrcweir         { PROPERTY_REALNAME,         PROPERTY_ID_REALNAME }
228cdf0e10cSrcweir     };
229cdf0e10cSrcweir     for ( size_t i=0; i < sizeof( aProps ) / sizeof( aProps[0] ); ++i )
230cdf0e10cSrcweir     {
231cdf0e10cSrcweir         if ( xPSI->hasPropertyByName( aProps[i].sName ) )
232cdf0e10cSrcweir             setFastPropertyValue_NoBroadcast( aProps[i].nHandle, _rxParserColumn->getPropertyValue( aProps[i].sName ) );
233cdf0e10cSrcweir     }
234cdf0e10cSrcweir 
235cdf0e10cSrcweir     // determine the table column we're based on
236cdf0e10cSrcweir     osl_incrementInterlockedCount( &m_refCount );
237cdf0e10cSrcweir     {
238cdf0e10cSrcweir         m_xOriginalTableColumn = impl_determineOriginalTableColumn( _rxConnection );
239cdf0e10cSrcweir     }
240cdf0e10cSrcweir     osl_decrementInterlockedCount( &m_refCount );
241cdf0e10cSrcweir }
242cdf0e10cSrcweir 
243cdf0e10cSrcweir //--------------------------------------------------------------------------
~OQueryColumn()244cdf0e10cSrcweir OQueryColumn::~OQueryColumn()
245cdf0e10cSrcweir {
246cdf0e10cSrcweir     DBG_DTOR( OQueryColumn, NULL );
247cdf0e10cSrcweir }
248cdf0e10cSrcweir 
249cdf0e10cSrcweir //--------------------------------------------------------------------------
impl_determineOriginalTableColumn(const Reference<XConnection> & _rxConnection)250cdf0e10cSrcweir Reference< XPropertySet > OQueryColumn::impl_determineOriginalTableColumn( const Reference< XConnection >& _rxConnection )
251cdf0e10cSrcweir {
252cdf0e10cSrcweir     OSL_PRECOND( _rxConnection.is(), "OQueryColumn::impl_determineOriginalTableColumn: illegal connection!" );
253cdf0e10cSrcweir     if ( !_rxConnection.is() )
254cdf0e10cSrcweir         return NULL;
255cdf0e10cSrcweir 
256cdf0e10cSrcweir     Reference< XPropertySet > xOriginalTableColumn;
257cdf0e10cSrcweir     try
258cdf0e10cSrcweir     {
259cdf0e10cSrcweir         // determine the composed table name, plus the column name, as indicated by the
260cdf0e10cSrcweir         // respective properties
261cdf0e10cSrcweir         ::rtl::OUString sCatalog, sSchema, sTable;
262cdf0e10cSrcweir         OSL_VERIFY( getPropertyValue( PROPERTY_CATALOGNAME ) >>= sCatalog );
263cdf0e10cSrcweir         OSL_VERIFY( getPropertyValue( PROPERTY_SCHEMANAME ) >>= sSchema );
264cdf0e10cSrcweir         OSL_VERIFY( getPropertyValue( PROPERTY_TABLENAME ) >>= sTable );
265cdf0e10cSrcweir         if ( !sCatalog.getLength() && !sSchema.getLength() && !sTable.getLength() )
266cdf0e10cSrcweir             return NULL;
267cdf0e10cSrcweir 
268cdf0e10cSrcweir         ::rtl::OUString sComposedTableName = ::dbtools::composeTableName(
269cdf0e10cSrcweir             _rxConnection->getMetaData(), sCatalog, sSchema, sTable, sal_False, ::dbtools::eComplete );
270cdf0e10cSrcweir 
271cdf0e10cSrcweir         // retrieve the table in question
272cdf0e10cSrcweir         Reference< XTablesSupplier > xSuppTables( _rxConnection, UNO_QUERY_THROW );
273cdf0e10cSrcweir         Reference< XNameAccess > xTables( xSuppTables->getTables(), UNO_QUERY_THROW );
274cdf0e10cSrcweir         if ( !xTables->hasByName( sComposedTableName ) )
275cdf0e10cSrcweir             return NULL;
276cdf0e10cSrcweir 
277cdf0e10cSrcweir         Reference< XColumnsSupplier > xSuppCols( xTables->getByName( sComposedTableName ), UNO_QUERY_THROW );
278cdf0e10cSrcweir         Reference< XNameAccess > xColumns( xSuppCols->getColumns(), UNO_QUERY_THROW );
279cdf0e10cSrcweir 
280cdf0e10cSrcweir         ::rtl::OUString sColumn;
281cdf0e10cSrcweir         OSL_VERIFY( getPropertyValue( PROPERTY_REALNAME ) >>= sColumn );
282cdf0e10cSrcweir         if ( !xColumns->hasByName( sColumn ) )
283cdf0e10cSrcweir             return NULL;
284cdf0e10cSrcweir 
285cdf0e10cSrcweir         xOriginalTableColumn.set( xColumns->getByName( sColumn ), UNO_QUERY );
286cdf0e10cSrcweir     }
287cdf0e10cSrcweir     catch( const Exception& )
288cdf0e10cSrcweir     {
289cdf0e10cSrcweir     	DBG_UNHANDLED_EXCEPTION();
290cdf0e10cSrcweir     }
291cdf0e10cSrcweir     return xOriginalTableColumn;
292cdf0e10cSrcweir }
293cdf0e10cSrcweir 
294cdf0e10cSrcweir //--------------------------------------------------------------------------
IMPLEMENT_GET_IMPLEMENTATION_ID(OQueryColumn)295cdf0e10cSrcweir IMPLEMENT_GET_IMPLEMENTATION_ID( OQueryColumn )
296cdf0e10cSrcweir 
297cdf0e10cSrcweir //--------------------------------------------------------------------------
298cdf0e10cSrcweir ::rtl::OUString SAL_CALL OQueryColumn::getImplementationName(  ) throw(RuntimeException)
299cdf0e10cSrcweir {
300cdf0e10cSrcweir     return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.comp.dbaccess.OQueryColumn" ) );
301cdf0e10cSrcweir }
302cdf0e10cSrcweir 
303cdf0e10cSrcweir //------------------------------------------------------------------------------
getInfoHelper()304cdf0e10cSrcweir ::cppu::IPropertyArrayHelper& SAL_CALL OQueryColumn::getInfoHelper()
305cdf0e10cSrcweir {
306cdf0e10cSrcweir     return *OQueryColumn_PBase::getArrayHelper();
307cdf0e10cSrcweir }
308cdf0e10cSrcweir 
309cdf0e10cSrcweir //--------------------------------------------------------------------------
createArrayHelper() const310cdf0e10cSrcweir ::cppu::IPropertyArrayHelper* OQueryColumn::createArrayHelper() const
311cdf0e10cSrcweir {
312cdf0e10cSrcweir     return OTableColumnDescriptor::createArrayHelper();
313cdf0e10cSrcweir }
314cdf0e10cSrcweir 
315cdf0e10cSrcweir //--------------------------------------------------------------------------
getFastPropertyValue(Any & _rValue,sal_Int32 _nHandle) const316cdf0e10cSrcweir void SAL_CALL OQueryColumn::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const
317cdf0e10cSrcweir {
318cdf0e10cSrcweir     OTableColumnDescriptor::getFastPropertyValue( _rValue, _nHandle );
319cdf0e10cSrcweir 
320cdf0e10cSrcweir     // special treatment for column settings:
321cdf0e10cSrcweir     if ( !OColumnSettings::isColumnSettingProperty( _nHandle ) )
322cdf0e10cSrcweir         return;
323cdf0e10cSrcweir 
324cdf0e10cSrcweir     // If the setting has its default value, then try to obtain the value from the table column which
325cdf0e10cSrcweir     // this query column is based on
326cdf0e10cSrcweir     if ( !OColumnSettings::isDefaulted( _nHandle, _rValue ) )
327cdf0e10cSrcweir         return;
328cdf0e10cSrcweir 
329cdf0e10cSrcweir     if ( !m_xOriginalTableColumn.is() )
330cdf0e10cSrcweir         return;
331cdf0e10cSrcweir 
332cdf0e10cSrcweir     try
333cdf0e10cSrcweir     {
334cdf0e10cSrcweir         // determine original property name
335cdf0e10cSrcweir         ::rtl::OUString sPropName;
336cdf0e10cSrcweir         sal_Int16 nAttributes( 0 );
337cdf0e10cSrcweir         const_cast< OQueryColumn* >( this )->getInfoHelper().fillPropertyMembersByHandle( &sPropName, &nAttributes, _nHandle );
338cdf0e10cSrcweir         OSL_ENSURE( sPropName.getLength(), "OColumnWrapper::impl_getPropertyNameFromHandle: property not found!" );
339cdf0e10cSrcweir 
340cdf0e10cSrcweir         _rValue = m_xOriginalTableColumn->getPropertyValue( sPropName );
341cdf0e10cSrcweir     }
342cdf0e10cSrcweir     catch( const Exception& )
343cdf0e10cSrcweir     {
344cdf0e10cSrcweir     	DBG_UNHANDLED_EXCEPTION();
345cdf0e10cSrcweir     }
346cdf0e10cSrcweir }
347cdf0e10cSrcweir 
348cdf0e10cSrcweir //==========================================================================
349cdf0e10cSrcweir //= OColumnWrapper
350cdf0e10cSrcweir //==========================================================================
351cdf0e10cSrcweir DBG_NAME(OColumnWrapper);
352cdf0e10cSrcweir //--------------------------------------------------------------------------
OColumnWrapper(const Reference<XPropertySet> & rCol,const bool _bNameIsReadOnly)353cdf0e10cSrcweir OColumnWrapper::OColumnWrapper( const Reference< XPropertySet > & rCol, const bool _bNameIsReadOnly )
354cdf0e10cSrcweir     :OColumn( _bNameIsReadOnly )
355cdf0e10cSrcweir     ,m_xAggregate(rCol)
356cdf0e10cSrcweir     ,m_nColTypeID(-1)
357cdf0e10cSrcweir {
358cdf0e10cSrcweir 	DBG_CTOR(OColumnWrapper,NULL);
359cdf0e10cSrcweir 	// which type of aggregate property do we have?
360cdf0e10cSrcweir     // we distingish the properties by the containment of optional properties
361cdf0e10cSrcweir 	m_nColTypeID = 0;
362cdf0e10cSrcweir 	if ( m_xAggregate.is() )
363cdf0e10cSrcweir 	{
364cdf0e10cSrcweir 		Reference <XPropertySetInfo > xInfo(m_xAggregate->getPropertySetInfo());
365cdf0e10cSrcweir 		m_nColTypeID |= xInfo->hasPropertyByName(PROPERTY_DESCRIPTION) ? HAS_DESCRIPTION : 0;
366cdf0e10cSrcweir 		m_nColTypeID |= xInfo->hasPropertyByName(PROPERTY_DEFAULTVALUE) ? HAS_DEFAULTVALUE : 0;
367cdf0e10cSrcweir 		m_nColTypeID |= xInfo->hasPropertyByName(PROPERTY_ISROWVERSION) ? HAS_ROWVERSION : 0;
368cdf0e10cSrcweir         m_nColTypeID |= xInfo->hasPropertyByName(PROPERTY_AUTOINCREMENTCREATION) ? HAS_AUTOINCREMENT_CREATION : 0;
369cdf0e10cSrcweir 
370cdf0e10cSrcweir 		m_xAggregate->getPropertyValue(PROPERTY_NAME) >>= m_sName;
371cdf0e10cSrcweir 	}
372cdf0e10cSrcweir }
373cdf0e10cSrcweir // -----------------------------------------------------------------------------
~OColumnWrapper()374cdf0e10cSrcweir OColumnWrapper::~OColumnWrapper()
375cdf0e10cSrcweir {
376cdf0e10cSrcweir 	DBG_DTOR(OColumnWrapper,NULL);
377cdf0e10cSrcweir }
378cdf0e10cSrcweir 
379cdf0e10cSrcweir //------------------------------------------------------------------------------
impl_getPropertyNameFromHandle(const sal_Int32 _nHandle) const380cdf0e10cSrcweir ::rtl::OUString OColumnWrapper::impl_getPropertyNameFromHandle( const sal_Int32 _nHandle ) const
381cdf0e10cSrcweir {
382cdf0e10cSrcweir     ::rtl::OUString sPropName;
383cdf0e10cSrcweir     sal_Int16 nAttributes( 0 );
384cdf0e10cSrcweir     const_cast< OColumnWrapper* >( this )->getInfoHelper().fillPropertyMembersByHandle( &sPropName, &nAttributes, _nHandle );
385cdf0e10cSrcweir     OSL_ENSURE( sPropName.getLength(), "OColumnWrapper::impl_getPropertyNameFromHandle: property not found!" );
386cdf0e10cSrcweir     return sPropName;
387cdf0e10cSrcweir }
388cdf0e10cSrcweir 
389cdf0e10cSrcweir //------------------------------------------------------------------------------
getFastPropertyValue(Any & rValue,sal_Int32 nHandle) const390cdf0e10cSrcweir void OColumnWrapper::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) const
391cdf0e10cSrcweir {
392cdf0e10cSrcweir     // derived classes are free to either use the OPropertyContainer(Helper) mechanisms for properties,
393cdf0e10cSrcweir     // or to declare additional properties which are to be forwarded to the wrapped object. So we need
394cdf0e10cSrcweir     // to distinguish those cases.
395cdf0e10cSrcweir     if ( OColumn::isRegisteredProperty( nHandle ) )
396cdf0e10cSrcweir     {
397cdf0e10cSrcweir         OColumn::getFastPropertyValue( rValue, nHandle );
398cdf0e10cSrcweir     }
399cdf0e10cSrcweir     else
400cdf0e10cSrcweir     {
401cdf0e10cSrcweir 	    rValue = m_xAggregate->getPropertyValue( impl_getPropertyNameFromHandle( nHandle ) );
402cdf0e10cSrcweir 	}
403cdf0e10cSrcweir }
404cdf0e10cSrcweir 
405cdf0e10cSrcweir //------------------------------------------------------------------------------
convertFastPropertyValue(Any & rConvertedValue,Any & rOldValue,sal_Int32 nHandle,const Any & rValue)406cdf0e10cSrcweir sal_Bool OColumnWrapper::convertFastPropertyValue( Any & rConvertedValue, Any & rOldValue, sal_Int32 nHandle,
407cdf0e10cSrcweir             const Any& rValue ) throw (IllegalArgumentException)
408cdf0e10cSrcweir {
409cdf0e10cSrcweir     sal_Bool bModified( sal_False );
410cdf0e10cSrcweir     if ( OColumn::isRegisteredProperty( nHandle ) )
411cdf0e10cSrcweir     {
412cdf0e10cSrcweir 	    bModified = OColumn::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue );
413cdf0e10cSrcweir     }
414cdf0e10cSrcweir     else
415cdf0e10cSrcweir     {
416cdf0e10cSrcweir         getFastPropertyValue( rOldValue, nHandle );
417cdf0e10cSrcweir         if ( rOldValue != rValue )
418cdf0e10cSrcweir         {
419cdf0e10cSrcweir             rConvertedValue = rValue;
420cdf0e10cSrcweir             bModified = sal_True;
421cdf0e10cSrcweir         }
422cdf0e10cSrcweir     }
423cdf0e10cSrcweir 	return bModified;
424cdf0e10cSrcweir }
425cdf0e10cSrcweir 
426cdf0e10cSrcweir //------------------------------------------------------------------------------
setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any & rValue)427cdf0e10cSrcweir void OColumnWrapper::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw (Exception)
428cdf0e10cSrcweir {
429cdf0e10cSrcweir     if ( OColumn::isRegisteredProperty( nHandle ) )
430cdf0e10cSrcweir     {
431cdf0e10cSrcweir 	    OColumn::setFastPropertyValue_NoBroadcast( nHandle, rValue );
432cdf0e10cSrcweir     }
433cdf0e10cSrcweir     else
434cdf0e10cSrcweir     {
435cdf0e10cSrcweir         m_xAggregate->setPropertyValue( impl_getPropertyNameFromHandle( nHandle ), rValue );
436cdf0e10cSrcweir     }
437cdf0e10cSrcweir }
438cdf0e10cSrcweir 
439cdf0e10cSrcweir // -----------------------------------------------------------------------------
getSomething(const Sequence<sal_Int8> & aIdentifier)440cdf0e10cSrcweir sal_Int64 SAL_CALL OColumnWrapper::getSomething( const Sequence< sal_Int8 >& aIdentifier ) throw(RuntimeException)
441cdf0e10cSrcweir {
442cdf0e10cSrcweir 	Reference< XUnoTunnel > xTunnel( m_xAggregate, UNO_QUERY);
443cdf0e10cSrcweir 	if ( xTunnel.is() )
444cdf0e10cSrcweir 		return xTunnel->getSomething( aIdentifier );
445cdf0e10cSrcweir 	return 0;
446cdf0e10cSrcweir }
447cdf0e10cSrcweir 
448cdf0e10cSrcweir //============================================================
449cdf0e10cSrcweir //= OTableColumnDescriptorWrapper
450cdf0e10cSrcweir //============================================================
451cdf0e10cSrcweir //--------------------------------------------------------------------------
OTableColumnDescriptorWrapper(const Reference<XPropertySet> & _rCol,const bool _bPureWrap,const bool _bIsDescriptor)452cdf0e10cSrcweir OTableColumnDescriptorWrapper::OTableColumnDescriptorWrapper( const Reference< XPropertySet >& _rCol, const bool _bPureWrap, const bool _bIsDescriptor )
453cdf0e10cSrcweir     :OColumnWrapper( _rCol, !_bIsDescriptor )
454cdf0e10cSrcweir     ,m_bPureWrap( _bPureWrap )
455cdf0e10cSrcweir     ,m_bIsDescriptor( _bIsDescriptor )
456cdf0e10cSrcweir {
457cdf0e10cSrcweir     // let the ColumnSettings register its properties
458cdf0e10cSrcweir     OColumnSettings::registerProperties( *this );
459cdf0e10cSrcweir }
460cdf0e10cSrcweir 
461cdf0e10cSrcweir // com::sun::star::lang::XTypeProvider
462cdf0e10cSrcweir //--------------------------------------------------------------------------
IMPLEMENT_GET_IMPLEMENTATION_ID(OTableColumnDescriptorWrapper)463cdf0e10cSrcweir IMPLEMENT_GET_IMPLEMENTATION_ID( OTableColumnDescriptorWrapper )
464cdf0e10cSrcweir 
465cdf0e10cSrcweir // ::com::sun::star::lang::XServiceInfo
466cdf0e10cSrcweir //------------------------------------------------------------------------------
467cdf0e10cSrcweir rtl::OUString OTableColumnDescriptorWrapper::getImplementationName(  ) throw (RuntimeException)
468cdf0e10cSrcweir {
469cdf0e10cSrcweir 	return rtl::OUString::createFromAscii("com.sun.star.sdb.OTableColumnDescriptorWrapper");
470cdf0e10cSrcweir }
471cdf0e10cSrcweir 
472cdf0e10cSrcweir //------------------------------------------------------------------------------
getSupportedServiceNames()473cdf0e10cSrcweir Sequence< ::rtl::OUString > OTableColumnDescriptorWrapper::getSupportedServiceNames(  ) throw (RuntimeException)
474cdf0e10cSrcweir {
475cdf0e10cSrcweir 	Sequence< ::rtl::OUString > aSNS( 2 );
476cdf0e10cSrcweir 	aSNS[0] = SERVICE_SDBCX_COLUMNDESCRIPTOR;
477cdf0e10cSrcweir 	aSNS[1] = SERVICE_SDB_COLUMNSETTINGS;
478cdf0e10cSrcweir 	return aSNS;
479cdf0e10cSrcweir }
480cdf0e10cSrcweir 
481cdf0e10cSrcweir // comphelper::OPropertyArrayUsageHelper
482cdf0e10cSrcweir //------------------------------------------------------------------------------
createArrayHelper(sal_Int32 nId) const483cdf0e10cSrcweir ::cppu::IPropertyArrayHelper* OTableColumnDescriptorWrapper::createArrayHelper( sal_Int32 nId ) const
484cdf0e10cSrcweir {
485cdf0e10cSrcweir     const sal_Int32 nHaveAlways = 7;
486cdf0e10cSrcweir 
487cdf0e10cSrcweir 	// Which optional properties are contained?
488cdf0e10cSrcweir 	sal_Int32 nHaveOptionally = 0;
489cdf0e10cSrcweir 	if (nId & HAS_DESCRIPTION)
490cdf0e10cSrcweir 		++nHaveOptionally;
491cdf0e10cSrcweir 	if (nId & HAS_DEFAULTVALUE)
492cdf0e10cSrcweir 		++nHaveOptionally;
493cdf0e10cSrcweir 	if (nId & HAS_ROWVERSION)
494cdf0e10cSrcweir 		++nHaveOptionally;
495cdf0e10cSrcweir     if ( nId & HAS_AUTOINCREMENT_CREATION )
496cdf0e10cSrcweir 		++nHaveOptionally;
497cdf0e10cSrcweir 
498cdf0e10cSrcweir     const sal_Int32 nPropertyCount( nHaveAlways + nHaveOptionally );
499cdf0e10cSrcweir 	Sequence< Property > aTableDescProperties( nPropertyCount );
500cdf0e10cSrcweir 	Property* pDesc = aTableDescProperties.getArray();
501cdf0e10cSrcweir 	sal_Int32 nPos = 0;
502cdf0e10cSrcweir 
503cdf0e10cSrcweir 	DECL_PROP0_BOOL( ISAUTOINCREMENT                );
504cdf0e10cSrcweir 	DECL_PROP0_BOOL( ISCURRENCY                     );
505cdf0e10cSrcweir 	DECL_PROP0( ISNULLABLE,         sal_Int32       );
506cdf0e10cSrcweir 	DECL_PROP0( PRECISION,          sal_Int32		);
507cdf0e10cSrcweir 	DECL_PROP0( SCALE,              sal_Int32		);
508cdf0e10cSrcweir 	DECL_PROP0( TYPE,               sal_Int32		);
509cdf0e10cSrcweir 	DECL_PROP0( TYPENAME,           ::rtl::OUString );
510cdf0e10cSrcweir 
511cdf0e10cSrcweir     if ( nId & HAS_AUTOINCREMENT_CREATION )
512cdf0e10cSrcweir 	{
513cdf0e10cSrcweir 		DECL_PROP1( AUTOINCREMENTCREATION, ::rtl::OUString, MAYBEVOID );
514cdf0e10cSrcweir 	}
515cdf0e10cSrcweir 	if ( nId & HAS_DEFAULTVALUE )
516cdf0e10cSrcweir 	{
517cdf0e10cSrcweir 		DECL_PROP0( DEFAULTVALUE, ::rtl::OUString );
518cdf0e10cSrcweir 	}
519cdf0e10cSrcweir 	if ( nId & HAS_DESCRIPTION )
520cdf0e10cSrcweir 	{
521cdf0e10cSrcweir 		DECL_PROP0( DESCRIPTION, ::rtl::OUString );
522cdf0e10cSrcweir 	}
523cdf0e10cSrcweir 	if ( nId & HAS_ROWVERSION )
524cdf0e10cSrcweir 	{
525cdf0e10cSrcweir 		DECL_PROP0_BOOL( ISROWVERSION );
526cdf0e10cSrcweir 	}
527cdf0e10cSrcweir 
528cdf0e10cSrcweir     OSL_ENSURE( nPos == nPropertyCount, "OTableColumnDescriptorWrapper::createArrayHelper: something went wrong!" );
529cdf0e10cSrcweir 
530cdf0e10cSrcweir     if ( !m_bIsDescriptor )
531cdf0e10cSrcweir     {
532cdf0e10cSrcweir         for (   Property* prop = aTableDescProperties.getArray();
533cdf0e10cSrcweir                 prop != aTableDescProperties.getArray() + aTableDescProperties.getLength();
534cdf0e10cSrcweir                 ++prop
535cdf0e10cSrcweir             )
536cdf0e10cSrcweir         {
537cdf0e10cSrcweir             prop->Attributes |= PropertyAttribute::READONLY;
538cdf0e10cSrcweir         }
539cdf0e10cSrcweir     }
540cdf0e10cSrcweir 
541cdf0e10cSrcweir     // finally also describe the properties which are maintained by our base class, in particular the OPropertyContainerHelper
542cdf0e10cSrcweir     Sequence< Property > aBaseProperties;
543cdf0e10cSrcweir     describeProperties( aBaseProperties );
544cdf0e10cSrcweir 
545cdf0e10cSrcweir     Sequence< Property > aAllProperties( ::comphelper::concatSequences( aTableDescProperties, aBaseProperties ) );
546cdf0e10cSrcweir 	return new ::cppu::OPropertyArrayHelper( aAllProperties, sal_False );
547cdf0e10cSrcweir }
548cdf0e10cSrcweir 
549cdf0e10cSrcweir // cppu::OPropertySetHelper
550cdf0e10cSrcweir //------------------------------------------------------------------------------
getInfoHelper()551cdf0e10cSrcweir ::cppu::IPropertyArrayHelper& OTableColumnDescriptorWrapper::getInfoHelper()
552cdf0e10cSrcweir {
553cdf0e10cSrcweir 	return *static_cast< OIdPropertyArrayUsageHelper< OTableColumnDescriptorWrapper >* >(this)->getArrayHelper(m_nColTypeID);
554cdf0e10cSrcweir }
555cdf0e10cSrcweir 
556cdf0e10cSrcweir //------------------------------------------------------------------------------
getFastPropertyValue(Any & rValue,sal_Int32 nHandle) const557cdf0e10cSrcweir void OTableColumnDescriptorWrapper::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) const
558cdf0e10cSrcweir {
559cdf0e10cSrcweir 	if ( m_bPureWrap )
560cdf0e10cSrcweir 	{
561cdf0e10cSrcweir 		rValue = m_xAggregate->getPropertyValue( impl_getPropertyNameFromHandle( nHandle ) );
562cdf0e10cSrcweir 	}
563cdf0e10cSrcweir 	else
564cdf0e10cSrcweir 	{
565cdf0e10cSrcweir 	    OColumnWrapper::getFastPropertyValue( rValue, nHandle );
566cdf0e10cSrcweir 	}
567cdf0e10cSrcweir }
568cdf0e10cSrcweir 
569cdf0e10cSrcweir //------------------------------------------------------------------------------
convertFastPropertyValue(Any & rConvertedValue,Any & rOldValue,sal_Int32 nHandle,const Any & rValue)570cdf0e10cSrcweir sal_Bool OTableColumnDescriptorWrapper::convertFastPropertyValue( Any & rConvertedValue, Any & rOldValue, sal_Int32 nHandle, const Any& rValue ) throw (IllegalArgumentException)
571cdf0e10cSrcweir {
572cdf0e10cSrcweir 	sal_Bool bModified(sal_False);
573cdf0e10cSrcweir 	if ( m_bPureWrap )
574cdf0e10cSrcweir     {
575cdf0e10cSrcweir         // do not delegate to OColumnWrapper: It would, for the properties which were registered with registerProperty,
576cdf0e10cSrcweir         // ask the OPropertyContainer base class, which is not what we want here.
577cdf0e10cSrcweir         // TODO: the whole "m_bPureWrap"-thingie is strange. We should have a dedicated class doing this wrapping,
578cdf0e10cSrcweir         // not a class which normally serves other purposes, and only sometimes does a "pure wrap". It makes the
579cdf0e10cSrcweir         // code unnecessarily hard to maintain, and error prone.
580cdf0e10cSrcweir         rOldValue = m_xAggregate->getPropertyValue( impl_getPropertyNameFromHandle( nHandle ) );
581cdf0e10cSrcweir         if ( rOldValue != rValue )
582cdf0e10cSrcweir         {
583cdf0e10cSrcweir             rConvertedValue = rValue;
584cdf0e10cSrcweir             bModified = sal_True;
585cdf0e10cSrcweir         }
586cdf0e10cSrcweir     }
587cdf0e10cSrcweir 	else
588cdf0e10cSrcweir 	{
589cdf0e10cSrcweir         bModified = OColumnWrapper::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue );
590cdf0e10cSrcweir 	}
591cdf0e10cSrcweir 	return bModified;
592cdf0e10cSrcweir }
593cdf0e10cSrcweir 
594cdf0e10cSrcweir //------------------------------------------------------------------------------
setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any & rValue)595cdf0e10cSrcweir void OTableColumnDescriptorWrapper::setFastPropertyValue_NoBroadcast(
596cdf0e10cSrcweir 												sal_Int32 nHandle,
597cdf0e10cSrcweir 												const Any& rValue
598cdf0e10cSrcweir 												 )
599cdf0e10cSrcweir 												 throw (Exception)
600cdf0e10cSrcweir {
601cdf0e10cSrcweir 	if ( m_bPureWrap )
602cdf0e10cSrcweir     {
603cdf0e10cSrcweir         m_xAggregate->setPropertyValue( impl_getPropertyNameFromHandle( nHandle ), rValue );
604cdf0e10cSrcweir     }
605cdf0e10cSrcweir 	else
606cdf0e10cSrcweir 	{
607cdf0e10cSrcweir 	    OColumnWrapper::setFastPropertyValue_NoBroadcast( nHandle, rValue );
608cdf0e10cSrcweir     }
609cdf0e10cSrcweir }
610cdf0e10cSrcweir 
611cdf0e10cSrcweir //============================================================
612cdf0e10cSrcweir //= OTableColumnWrapper
613cdf0e10cSrcweir //============================================================
614cdf0e10cSrcweir //--------------------------------------------------------------------------
OTableColumnWrapper(const Reference<XPropertySet> & rCol,const Reference<XPropertySet> & _xColDefintion,const bool _bPureWrap)615cdf0e10cSrcweir OTableColumnWrapper::OTableColumnWrapper( const Reference< XPropertySet >& rCol, const Reference< XPropertySet >& _xColDefintion,
616cdf0e10cSrcweir             const bool _bPureWrap )
617cdf0e10cSrcweir 	:OTableColumnDescriptorWrapper( rCol, _bPureWrap, false )
618cdf0e10cSrcweir {
619cdf0e10cSrcweir 	osl_incrementInterlockedCount( &m_refCount );
620cdf0e10cSrcweir 	if ( _xColDefintion.is() )
621cdf0e10cSrcweir 	{
622cdf0e10cSrcweir 		try
623cdf0e10cSrcweir 		{
624cdf0e10cSrcweir 			::comphelper::copyProperties( _xColDefintion, this );
625cdf0e10cSrcweir 		}
626cdf0e10cSrcweir 		catch( const Exception& )
627cdf0e10cSrcweir 		{
628cdf0e10cSrcweir             DBG_UNHANDLED_EXCEPTION();
629cdf0e10cSrcweir 		}
630cdf0e10cSrcweir 	}
631cdf0e10cSrcweir 	osl_decrementInterlockedCount( &m_refCount );
632cdf0e10cSrcweir }
633cdf0e10cSrcweir 
634cdf0e10cSrcweir //--------------------------------------------------------------------------
~OTableColumnWrapper()635cdf0e10cSrcweir OTableColumnWrapper::~OTableColumnWrapper()
636cdf0e10cSrcweir {
637cdf0e10cSrcweir }
638cdf0e10cSrcweir 
639cdf0e10cSrcweir //--------------------------------------------------------------------------
IMPLEMENT_GET_IMPLEMENTATION_ID(OTableColumnWrapper)640cdf0e10cSrcweir IMPLEMENT_GET_IMPLEMENTATION_ID( OTableColumnWrapper )
641cdf0e10cSrcweir 
642cdf0e10cSrcweir //------------------------------------------------------------------------------
643cdf0e10cSrcweir rtl::OUString OTableColumnWrapper::getImplementationName(  ) throw (RuntimeException)
644cdf0e10cSrcweir {
645cdf0e10cSrcweir 	return rtl::OUString::createFromAscii( "com.sun.star.sdb.OTableColumnWrapper" );
646cdf0e10cSrcweir }
647cdf0e10cSrcweir 
648cdf0e10cSrcweir //------------------------------------------------------------------------------
getSupportedServiceNames()649cdf0e10cSrcweir Sequence< ::rtl::OUString > OTableColumnWrapper::getSupportedServiceNames(  ) throw (RuntimeException)
650cdf0e10cSrcweir {
651cdf0e10cSrcweir 	Sequence< ::rtl::OUString > aSNS( 2 );
652cdf0e10cSrcweir 	aSNS[0] = SERVICE_SDBCX_COLUMN;
653cdf0e10cSrcweir 	aSNS[1] = SERVICE_SDB_COLUMNSETTINGS;
654cdf0e10cSrcweir 	return aSNS;
655cdf0e10cSrcweir }
656cdf0e10cSrcweir 
657cdf0e10cSrcweir //------------------------------------------------------------------------------
getInfoHelper()658cdf0e10cSrcweir ::cppu::IPropertyArrayHelper& OTableColumnWrapper::getInfoHelper()
659cdf0e10cSrcweir {
660cdf0e10cSrcweir 	return *static_cast< OIdPropertyArrayUsageHelper< OTableColumnWrapper >* >(this)->getArrayHelper(m_nColTypeID);
661cdf0e10cSrcweir }
662cdf0e10cSrcweir 
663cdf0e10cSrcweir // comphelper::OPropertyArrayUsageHelper
664cdf0e10cSrcweir //------------------------------------------------------------------------------
createArrayHelper(sal_Int32 nId) const665cdf0e10cSrcweir ::cppu::IPropertyArrayHelper* OTableColumnWrapper::createArrayHelper( sal_Int32 nId ) const
666cdf0e10cSrcweir {
667cdf0e10cSrcweir     return OTableColumnDescriptorWrapper::createArrayHelper( nId );
668cdf0e10cSrcweir }
669cdf0e10cSrcweir 
670