User: obo Date: 05/12/19 09:14:56 Modified: /dba/dbaccess/source/core/api/ resultcolumn.cxx
Log: INTEGRATION: CWS kaddrbook (1.6.56); FILE MERGED 2005/12/05 12:15:24 fs 1.6.56.1: #i58879# respect XDatabaseMetaData::getVersionColumns, and translate it into css.sdbcx.Column.IsRowVersion File Changes: Directory: /dba/dbaccess/source/core/api/ ========================================= File [changed]: resultcolumn.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/api/resultcolumn.cxx?r1=1.6&r2=1.7 Delta lines: +65 -2 -------------------- --- resultcolumn.cxx 8 Sep 2005 10:09:27 -0000 1.6 +++ resultcolumn.cxx 19 Dec 2005 17:14:53 -0000 1.7 @@ -62,6 +62,12 @@ #ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_ #include <com/sun/star/beans/PropertyAttribute.hpp> #endif +#ifndef _CPPUHELPER_EXC_HLP_HXX_ +#include <cppuhelper/exc_hlp.hxx> +#endif +#ifndef _OSL_THREAD_H_ +#include <osl/thread.h> +#endif using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::beans; @@ -77,13 +83,64 @@ //-------------------------------------------------------------------------- OResultColumn::OResultColumn( const Reference < XResultSetMetaData >& _xMetaData, - sal_Int32 _nPos) + sal_Int32 _nPos, + const Reference< XDatabaseMetaData >& _rxDBMeta ) :m_xMetaData(_xMetaData) ,m_nPos(_nPos) + ,m_xDBMetaData(_rxDBMeta) { DBG_CTOR(OResultColumn,NULL); } // ----------------------------------------------------------------------------- +void OResultColumn::impl_determineIsRowVersion_nothrow() +{ + if ( m_aIsRowVersion.hasValue() ) + return; + m_aIsRowVersion <<= (sal_Bool)(sal_False); + + OSL_ENSURE( m_xDBMetaData.is(), "OResultColumn::impl_determineIsRowVersion_nothrow: no DBMetaData!" ); + if ( !m_xDBMetaData.is() ) + return; + + try + { + ::rtl::OUString sCatalog, sSchema, sTable, sColumnName; + getPropertyValue( PROPERTY_CATALOGNAME ) >>= sCatalog; + getPropertyValue( PROPERTY_SCHEMANAME ) >>= sSchema; + getPropertyValue( PROPERTY_TABLENAME ) >>= sTable; + getPropertyValue( PROPERTY_NAME ) >>= sColumnName; + + Reference< XResultSet > xVersionColumns = m_xDBMetaData->getVersionColumns( + makeAny( sCatalog ), sSchema, sTable ); + if ( xVersionColumns.is() ) // allowed to be NULL + { + Reference< XRow > xResultRow( xVersionColumns, UNO_QUERY_THROW ); + while ( xVersionColumns->next() ) + { + if ( xResultRow->getString( 2 ) == sColumnName ) + { + m_aIsRowVersion <<= (sal_Bool)(sal_True); + break; + } + } + } + } + catch( const Exception& e ) + { + #if OSL_DEBUG_LEVEL > 0 + Any caught( ::cppu::getCaughtException() ); + ::rtl::OString sMessage( "impl_determineIsRowVersion_nothrow: caught an exception!" ); + sMessage += "\ntype: "; + sMessage += ::rtl::OString( caught.getValueTypeName().getStr(), caught.getValueTypeName().getLength(), osl_getThreadTextEncoding() ); + sMessage += "\nmessage: "; + sMessage += ::rtl::OString( e.Message.getStr(), e.Message.getLength(), osl_getThreadTextEncoding() ); + OSL_ENSURE( false, sMessage ); + #else + e; // make compiler happy + #endif + } +} +// ----------------------------------------------------------------------------- OResultColumn::~OResultColumn() { DBG_DTOR(OResultColumn,NULL); @@ -135,7 +192,7 @@ //------------------------------------------------------------------------------ ::cppu::IPropertyArrayHelper* OResultColumn::createArrayHelper( ) const { - BEGIN_PROPERTY_HELPER(20) + BEGIN_PROPERTY_HELPER(21) DECL_PROP1(CATALOGNAME, ::rtl::OUString, READONLY); DECL_PROP1(DISPLAYSIZE, sal_Int32, READONLY); DECL_PROP1_BOOL(ISAUTOINCREMENT, READONLY); @@ -144,6 +201,7 @@ DECL_PROP1_BOOL(ISDEFINITELYWRITABLE, READONLY); DECL_PROP1(ISNULLABLE, sal_Int32, READONLY); DECL_PROP1_BOOL(ISREADONLY, READONLY); + DECL_PROP1_BOOL(ISROWVERSION, READONLY); DECL_PROP1_BOOL(ISSEARCHABLE, READONLY); DECL_PROP1_BOOL(ISSIGNED, READONLY); DECL_PROP1_BOOL(ISWRITABLE, READONLY); @@ -173,6 +231,10 @@ { switch (nHandle) { + case PROPERTY_ID_ISROWVERSION: + const_cast< OResultColumn* >( this )->impl_determineIsRowVersion_nothrow(); + rValue = m_aIsRowVersion; + break; case PROPERTY_ID_TABLENAME: rValue <<= m_xMetaData->getTableName(m_nPos); break; @@ -265,6 +327,7 @@ // empty string'S rValue <<= rtl::OUString(); break; + case PROPERTY_ID_ISROWVERSION: case PROPERTY_ID_ISAUTOINCREMENT: case PROPERTY_ID_ISWRITABLE: case PROPERTY_ID_ISDEFINITELYWRITABLE: --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
