diff options
author | Ivo Hinkelmann <ihi@openoffice.org> | 2009-02-16 16:08:38 +0000 |
---|---|---|
committer | Ivo Hinkelmann <ihi@openoffice.org> | 2009-02-16 16:08:38 +0000 |
commit | 22c23392f43cb33ab519bed625a7bc98d9bc5e20 (patch) | |
tree | b3fb847e211c8d8669df4e5bfc48b4b649a78e14 | |
parent | 77bae2cefa9ce466a8767dbcd59dfbc6703a1c3e (diff) |
CWS-TOOLING: integrate CWS dba31i_OOO310
2009-02-12 09:37:16 +0100 fs r267635 : merging the fix for #i98549# from CWS rptfix04 to CWS dba31i
2009-02-09 10:09:03 +0100 fs r267502 : #i98467#
2009-02-03 14:40:59 +0100 fs r267328 : #i97159# +checkParameterTypes
2009-02-03 14:40:32 +0100 fs r267327 : some more data / correct query 'all orders'
2009-02-03 14:16:56 +0100 fs r267321 : #i97159# properly determine column alias / table range for parameters in BETWEEN clauses
2009-02-03 12:39:40 +0100 oj r267313 : #i97159# check for column range in parameter
2009-02-03 10:17:29 +0100 fs r267300 : #i98247#
2009-02-02 12:21:18 +0100 oj r267258 : #i98724# subst corrected
-rw-r--r-- | connectivity/inc/connectivity/IParseContext.hxx | 2 | ||||
-rw-r--r-- | connectivity/source/parse/sqliterator.cxx | 57 | ||||
-rw-r--r-- | sfx2/source/notify/eventsupplier.cxx | 79 |
3 files changed, 82 insertions, 56 deletions
diff --git a/connectivity/inc/connectivity/IParseContext.hxx b/connectivity/inc/connectivity/IParseContext.hxx index 624273a9d4..b90ea0dd69 100644 --- a/connectivity/inc/connectivity/IParseContext.hxx +++ b/connectivity/inc/connectivity/IParseContext.hxx @@ -41,7 +41,7 @@ namespace connectivity //========================================================================== //= IParseContext //========================================================================== - class OOO_DLLPUBLIC_DBTOOLS IParseContext + class IParseContext { public: enum ErrorCode diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx index 0f79fe59cc..8f30460e43 100644 --- a/connectivity/source/parse/sqliterator.cxx +++ b/connectivity/source/parse/sqliterator.cxx @@ -1066,6 +1066,26 @@ bool OSQLParseTreeIterator::traverseGroupByColumnNames(const OSQLParseNode* pSel traverseByColumnNames( pSelectNode, sal_False ); return !hasErrors(); } + +// ----------------------------------------------------------------------------- +namespace +{ + ::rtl::OUString lcl_generateParameterName( const OSQLParseNode& _rParentNode, const OSQLParseNode& _rParamNode ) + { + ::rtl::OUString sColumnName( RTL_CONSTASCII_USTRINGPARAM( "param" ) ); + const sal_Int32 nCount = (sal_Int32)_rParentNode.count(); + for ( sal_Int32 i = 0; i < nCount; ++i ) + { + if ( _rParentNode.getChild(i) == &_rParamNode ) + { + sColumnName += ::rtl::OUString::valueOf( i+1 ); + break; + } + } + return sColumnName; + } +} + // ----------------------------------------------------------------------------- void OSQLParseTreeIterator::traverseParameters(const OSQLParseNode* _pNode) { @@ -1081,33 +1101,34 @@ void OSQLParseTreeIterator::traverseParameters(const OSQLParseNode* _pNode) sal_uInt32 nPos = 0; if ( pParent->getChild(nPos) == _pNode ) nPos = 2; - pParent->getChild(nPos)->parseNodeToStr( sColumnName, m_pImpl->m_xConnection, NULL, sal_False, sal_False ); + const OSQLParseNode* pOther = pParent->getChild(nPos); + if ( SQL_ISRULE( pOther, column_ref ) ) + getColumnRange( pOther, sColumnName, sTableRange, aColumnAlias); + else + pOther->parseNodeToStr( sColumnName, m_pImpl->m_xConnection, NULL, sal_False, sal_False ); } // if ( SQL_ISRULE(pParent,comparison_predicate) ) // x = X else if ( SQL_ISRULE(pParent,like_predicate) ) { - pParent->getChild(0)->parseNodeToStr( sColumnName, m_pImpl->m_xConnection, NULL, sal_False, sal_False ); + const OSQLParseNode* pOther = pParent->getChild(0); + if ( SQL_ISRULE( pOther, column_ref ) ) + getColumnRange( pOther, sColumnName, sTableRange, aColumnAlias); + else + pOther->parseNodeToStr( sColumnName, m_pImpl->m_xConnection, NULL, sal_False, sal_False ); } else if ( SQL_ISRULE(pParent,between_predicate) ) { - sal_Int32 nPos = 2; - if ( pParent->getChild(3) == _pNode ) - nPos = 1; - pParent->getChild(0)->parseNodeToStr( sColumnName, m_pImpl->m_xConnection, NULL, sal_False, sal_False ); - sColumnName += ::rtl::OUString::valueOf(nPos); + const OSQLParseNode* pOther = pParent->getChild(0); + if ( SQL_ISRULE( pOther, column_ref ) ) + getColumnRange( pOther, sColumnName, sTableRange, aColumnAlias); + else + { + pOther->parseNodeToStr( sColumnName, m_pImpl->m_xConnection, NULL, sal_False, sal_False ); + lcl_generateParameterName( *pParent, *_pNode ); + } } else if ( pParent->getNodeType() == SQL_NODE_COMMALISTRULE ) { - const sal_Int32 nParamCount = (sal_Int32)pParent->count(); - for (sal_Int32 i = 0; i < nParamCount; ++i) - { - if ( pParent->getChild(i) == _pNode ) - { - static const ::rtl::OUString s_sParam(RTL_CONSTASCII_USTRINGPARAM("param")); - sColumnName = s_sParam; - sColumnName += ::rtl::OUString::valueOf(i+1); - break; - } - } + lcl_generateParameterName( *pParent, *_pNode ); } } traverseParameter( _pNode, pParent, sColumnName, sTableRange, aColumnAlias ); diff --git a/sfx2/source/notify/eventsupplier.cxx b/sfx2/source/notify/eventsupplier.cxx index a10d4f0075..9d64f696cb 100644 --- a/sfx2/source/notify/eventsupplier.cxx +++ b/sfx2/source/notify/eventsupplier.cxx @@ -73,6 +73,8 @@ #define UNO_QUERY ::com::sun::star::uno::UNO_QUERY namespace css = ::com::sun::star; +using ::com::sun::star::uno::Sequence; +using ::com::sun::star::beans::PropertyValue; //-------------------------------------------------------------------------------------------------------- // --- XNameReplace --- @@ -83,55 +85,58 @@ void SAL_CALL SfxEvents_Impl::replaceByName( const OUSTRING & aName, const ANY & { ::osl::MutexGuard aGuard( maMutex ); - bool bReset = !rElement.hasValue(); // find the event in the list and replace the data long nCount = maEventNames.getLength(); for ( long i=0; i<nCount; i++ ) { if ( maEventNames[i] == aName ) { + Sequence< PropertyValue > aProperties; // check for correct type of the element - if ( bReset || ::getCppuType( (const SEQUENCE < PROPERTYVALUE > *)0 ) == rElement.getValueType() ) + if ( rElement.hasValue() && !( rElement >>= aProperties ) ) + throw ILLEGALARGUMENTEXCEPTION(); + + // create Configuration at first, creation might call this method also and that would overwrite everything + // we might have stored before! + USHORT nID = (USHORT) SfxEventConfiguration::GetEventId_Impl( aName ); + OSL_ENSURE( nID, "SfxEvents_Impl::replaceByName: no ID for the given event!" ); + if ( !nID ) + // throw? + return; + + if ( mpObjShell && !mpObjShell->IsLoading() ) + mpObjShell->SetModified( TRUE ); + + if ( aProperties.getLength() ) { - // create Configuration at first, creation might call this method also and that would overwrite everything - // we might have stored before! - USHORT nID = (USHORT) SfxEventConfiguration::GetEventId_Impl( aName ); - if ( nID ) + // "normalize" the macro descriptor + ANY aValue; + BlowUpMacro( rElement, aValue, mpObjShell ); + aValue >>= aProperties; + + ::rtl::OUString sType; + if ( ( aProperties.getLength() == 1 ) + && ( aProperties[0].Name.compareToAscii( PROP_EVENT_TYPE ) == 0 ) + && ( aProperties[0].Value >>= sType ) + && ( sType.getLength() == 0 ) + ) { - // pConfig becomes the owner of the new SvxMacro - if ( mpObjShell && !mpObjShell->IsLoading() ) - mpObjShell->SetModified( TRUE ); - - if ( bReset ) - { - maEventData[i] = ANY(); - } - else - { - ANY aValue; - BlowUpMacro( rElement, aValue, mpObjShell ); - - SEQUENCE < PROPERTYVALUE > aProperties; - if ( aValue >>= aProperties ) - { - ::rtl::OUString aType; - if (( aProperties[0].Name.compareToAscii( PROP_EVENT_TYPE ) == 0 ) && - ( aProperties[0].Value >>= aType ) && - aType.getLength() == 0 ) - { - // An empty event type means no binding. Therefore reset data - // to reflect that state. - maEventData[i] = ANY(); - } - else - maEventData[i] = aValue; - } - } + // An empty event type means no binding. Therefore reset data + // to reflect that state. + // (that's for compatibility only. Nowadays, the Tools/Customize dialog should + // set an empty sequence to indicate the request for resetting the assignment.) + aProperties.realloc( 0 ); } } - else - throw ILLEGALARGUMENTEXCEPTION(); + if ( aProperties.getLength() ) + { + maEventData[i] = makeAny( aProperties ); + } + else + { + maEventData[i].clear(); + } return; } } |