User: ihi Date: 2007-11-21 15:34:54+0000 Modified: dba/dbaccess/source/core/api/statement.cxx
Log: INTEGRATION: CWS dba24c (1.16.78); FILE MERGED 2007/09/27 07:51:47 fs 1.16.78.3: #i81691# cache the EscapeProcessing property 2007/09/27 06:31:13 fs 1.16.78.2: during #i81691# don't set aggregate properties in convertFastPropertyValue, but really only in setFastPropertyValue_NoBroadcast 2007/09/12 09:09:37 fs 1.16.78.1: PROPERTY_(ID_)USE_ESCAPE_PROCESSING: removed the USE_ for consistency reasons File Changes: Directory: /dba/dbaccess/source/core/api/ ========================================= File [changed]: statement.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/api/statement.cxx?r1=1.16&r2=1.17 Delta lines: +83 -65 --------------------- --- statement.cxx 2007-01-15 14:30:52+0000 1.16 +++ statement.cxx 2007-11-21 15:34:51+0000 1.17 @@ -89,7 +89,8 @@ const Reference< XInterface > & _xStatement) :OSubComponent(m_aMutex, _xConn) ,OPropertySetHelper(OComponentHelper::rBHelper) - ,m_bUseBookmarks(sal_False) + ,m_bUseBookmarks( sal_False ) + ,m_bEscapeProcessing( sal_True ) { DBG_CTOR(OStatementBase, NULL); @@ -226,7 +227,7 @@ { BEGIN_PROPERTY_HELPER(10) DECL_PROP0(CURSORNAME, ::rtl::OUString); - DECL_PROP0_BOOL(USE_ESCAPE_PROCESSING); + DECL_PROP0_BOOL(ESCAPE_PROCESSING); DECL_PROP0(FETCHDIRECTION, sal_Int32); DECL_PROP0(FETCHSIZE, sal_Int32); DECL_PROP0(MAXFIELDSIZE, sal_Int32); @@ -252,39 +253,61 @@ switch (nHandle) { case PROPERTY_ID_USEBOOKMARKS: - if ( m_xAggregateAsSet.is() ) - { - bModified = ::comphelper::tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bUseBookmarks); - if (bModified && m_xAggregateAsSet->getPropertySetInfo()->hasPropertyByName(PROPERTY_USEBOOKMARKS)) - m_xAggregateAsSet->setPropertyValue(PROPERTY_USEBOOKMARKS, rConvertedValue); - } + bModified = ::comphelper::tryPropertyValue( rConvertedValue, rOldValue, rValue, m_bUseBookmarks ); + break; + + case PROPERTY_ID_ESCAPE_PROCESSING: + bModified = ::comphelper::tryPropertyValue( rConvertedValue, rOldValue, rValue, m_bEscapeProcessing ); break; + default: + if ( m_xAggregateAsSet.is() ) { // get the property name - ::rtl::OUString aPropName; - sal_Int16 nAttributes; - getInfoHelper().fillPropertyMembersByHandle(&aPropName, &nAttributes, nHandle); - OSL_ENSURE(aPropName.getLength(), "property not found?"); + ::rtl::OUString sPropName; + getInfoHelper().fillPropertyMembersByHandle( &sPropName, NULL, nHandle ); // now set the value - if ( m_xAggregateAsSet.is() ) - m_xAggregateAsSet->setPropertyValue(aPropName, rValue); + Any aCurrentValue = m_xAggregateAsSet->getPropertyValue( sPropName ); + if ( aCurrentValue != rValue ) + { + rOldValue = aCurrentValue; + rConvertedValue = rValue; + bModified = sal_True; } } + break; + } return bModified; } //------------------------------------------------------------------------------ void OStatementBase::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw (Exception) { - switch (nHandle) + switch ( nHandle ) { - // the other properties are set in convertFast... case PROPERTY_ID_USEBOOKMARKS: { - m_bUseBookmarks = ::comphelper::getBOOL(rValue); - } break; + m_bUseBookmarks = ::comphelper::getBOOL( rValue ); + if ( m_xAggregateAsSet.is() && m_xAggregateAsSet->getPropertySetInfo()->hasPropertyByName( PROPERTY_USEBOOKMARKS ) ) + m_xAggregateAsSet->setPropertyValue( PROPERTY_USEBOOKMARKS, rValue ); + } + break; + + case PROPERTY_ID_ESCAPE_PROCESSING: + m_bEscapeProcessing = ::comphelper::getBOOL( rValue ); + if ( m_xAggregateAsSet.is() ) + m_xAggregateAsSet->setPropertyValue( PROPERTY_ESCAPE_PROCESSING, rValue ); + break; + + default: + if ( m_xAggregateAsSet.is() ) + { + ::rtl::OUString sPropName; + getInfoHelper().fillPropertyMembersByHandle( &sPropName, NULL, nHandle ); + m_xAggregateAsSet->setPropertyValue( sPropName, rValue ); + } + break; } } @@ -294,20 +317,23 @@ switch (nHandle) { case PROPERTY_ID_USEBOOKMARKS: - rValue.setValue(&m_bUseBookmarks, getBooleanCppuType()); + rValue <<= m_bUseBookmarks; break; + + case PROPERTY_ID_ESCAPE_PROCESSING: + // don't rely on our aggregate - if it implements this wrong, and always returns + // TRUE here, then we would loop in impl_doEscapeProcessing_nothrow + rValue <<= m_bEscapeProcessing; + break; + default: - { - // get the property name - ::rtl::OUString aPropName; - sal_Int16 nAttributes; - const_cast<OStatementBase*>(this)->getInfoHelper(). - fillPropertyMembersByHandle(&aPropName, &nAttributes, nHandle); - OSL_ENSURE(aPropName.getLength(), "property not found?"); - // now read the value if ( m_xAggregateAsSet.is() ) - rValue = m_xAggregateAsSet->getPropertyValue(aPropName); + { + ::rtl::OUString sPropName; + const_cast< OStatementBase* >( this )->getInfoHelper().fillPropertyMembersByHandle( &sPropName, NULL, nHandle ); + rValue = m_xAggregateAsSet->getPropertyValue( sPropName ); } + break; } } @@ -550,13 +576,10 @@ // ----------------------------------------------------------------------------- ::rtl::OUString OStatement::impl_doEscapeProcessing_nothrow( const ::rtl::OUString& _rSQL ) const { + if ( !m_bEscapeProcessing ) + return _rSQL; try { - bool bEscapeProcessing = false; - OSL_VERIFY( m_xAggregateAsSet->getPropertyValue( PROPERTY_USE_ESCAPE_PROCESSING ) >>= bEscapeProcessing ); - if ( !bEscapeProcessing ) - return _rSQL; - if ( !impl_ensureComposer_nothrow() ) return _rSQL; @@ -569,11 +592,6 @@ return _rSQL; ::rtl::OUString sLowLevelSQL = m_xComposer->getQueryWithSubstitution(); - if ( sLowLevelSQL == m_xComposer->getQuery() ) - // if the low level SQL is the same as the high level SQL, then simply - // return the original SQL statement, without tampering with it at all. - return _rSQL; - return sLowLevelSQL; } catch( const Exception& ) --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
