diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2015-06-17 14:32:29 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2015-08-06 12:23:06 +0200 |
commit | ca990e8a09f77e4e9edcbf85562e563184df7f2c (patch) | |
tree | c12677c10623e985368c3bdf32515449362ebd55 /connectivity/source/commontools/parameters.cxx | |
parent | 6118e8520f83ce60318dd9667bdf5d1028d60f97 (diff) |
parameter handling: fix confusion between column name and realname
Change-Id: I81fd45276183b911e4560ca785221894ea2ebc88
Reviewed-on: https://gerrit.libreoffice.org/16340
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'connectivity/source/commontools/parameters.cxx')
-rw-r--r-- | connectivity/source/commontools/parameters.cxx | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/connectivity/source/commontools/parameters.cxx b/connectivity/source/commontools/parameters.cxx index 8459ae933c9a..1f94a59f1ede 100644 --- a/connectivity/source/commontools/parameters.cxx +++ b/connectivity/source/commontools/parameters.cxx @@ -105,6 +105,8 @@ namespace dbtools m_aMasterFields.realloc( 0 ); m_aDetailFields.realloc( 0 ); m_sIdentifierQuoteString.clear(); + m_sSpecialCharacters.clear(); + m_xConnectionMetadata.clear(); ::std::vector< bool > aEmptyArray; m_aParametersVisited.swap( aEmptyArray ); m_bUpToDate = false; @@ -208,24 +210,32 @@ namespace dbtools OUString ParameterManager::createFilterConditionFromColumnLink( - const OUString& _rMasterColumn, const OUString& _rDetailLink, OUString& _rNewParamName ) + const OUString &_rMasterColumn, const Reference < XPropertySet > &xDetailField, OUString &o_rNewParamName ) { OUString sFilter; - // format is: // <detail_column> = :<new_param_name> - sFilter = quoteName( m_sIdentifierQuoteString, _rDetailLink ); - sFilter += " = :"; + { + OUString tblName; + xDetailField->getPropertyValue("TableName") >>= tblName; + if (!tblName.isEmpty()) + sFilter = ::dbtools::quoteTableName( m_xConnectionMetadata, tblName, ::dbtools::eInDataManipulation ) + "."; + } + { + OUString colName; + xDetailField->getPropertyValue("RealName") >>= colName; + sFilter += quoteName( m_sIdentifierQuoteString, colName ) + " = :"; + } // generate a parameter name which is not already used - _rNewParamName = "link_from_"; - _rNewParamName += convertName2SQLName( _rMasterColumn, m_sSpecialCharacters ); - while ( m_aParameterInformation.find( _rNewParamName ) != m_aParameterInformation.end() ) + o_rNewParamName = "link_from_"; + o_rNewParamName += convertName2SQLName( _rMasterColumn, m_sSpecialCharacters ); + while ( m_aParameterInformation.find( o_rNewParamName ) != m_aParameterInformation.end() ) { - _rNewParamName += "_"; + o_rNewParamName += "_"; } - return sFilter += _rNewParamName; + return sFilter += o_rNewParamName; } @@ -279,8 +289,11 @@ namespace dbtools // does the detail name denote a column? if ( _rxColumns->hasByName( *pDetailFields ) ) { + Reference< XPropertySet > xDetailField(_rxColumns->getByName( *pDetailFields ), UNO_QUERY); + assert(xDetailField.is()); + OUString sNewParamName; - const OUString sFilterCondition = createFilterConditionFromColumnLink( *pMasterFields, *pDetailFields, sNewParamName ); + const OUString sFilterCondition = createFilterConditionFromColumnLink( *pMasterFields, xDetailField, sNewParamName ); OSL_PRECOND( !sNewParamName.isEmpty(), "ParameterManager::classifyLinks: createFilterConditionFromColumnLink returned nonsense!" ); // remember meta information about this new parameter @@ -754,6 +767,7 @@ namespace dbtools xMeta = xConnection->getMetaData(); if ( xMeta.is() ) { + m_xConnectionMetadata = xMeta; m_sIdentifierQuoteString = xMeta->getIdentifierQuoteString(); m_sSpecialCharacters = xMeta->getExtraNameCharacters(); } |