Kaydet (Commit) ca990e8a authored tarafından Lionel Elie Mamane's avatar Lionel Elie Mamane Kaydeden (comit) Andras Timar

parameter handling: fix confusion between column name and realname

Change-Id: I81fd45276183b911e4560ca785221894ea2ebc88
Reviewed-on: https://gerrit.libreoffice.org/16340Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMichael Stahl <mstahl@redhat.com>
üst 6118e852
...@@ -105,6 +105,8 @@ namespace dbtools ...@@ -105,6 +105,8 @@ namespace dbtools
m_aMasterFields.realloc( 0 ); m_aMasterFields.realloc( 0 );
m_aDetailFields.realloc( 0 ); m_aDetailFields.realloc( 0 );
m_sIdentifierQuoteString.clear(); m_sIdentifierQuoteString.clear();
m_sSpecialCharacters.clear();
m_xConnectionMetadata.clear();
::std::vector< bool > aEmptyArray; ::std::vector< bool > aEmptyArray;
m_aParametersVisited.swap( aEmptyArray ); m_aParametersVisited.swap( aEmptyArray );
m_bUpToDate = false; m_bUpToDate = false;
...@@ -208,24 +210,32 @@ namespace dbtools ...@@ -208,24 +210,32 @@ namespace dbtools
OUString ParameterManager::createFilterConditionFromColumnLink( OUString ParameterManager::createFilterConditionFromColumnLink(
const OUString& _rMasterColumn, const OUString& _rDetailLink, OUString& _rNewParamName ) const OUString &_rMasterColumn, const Reference < XPropertySet > &xDetailField, OUString &o_rNewParamName )
{ {
OUString sFilter; OUString sFilter;
// format is: // format is:
// <detail_column> = :<new_param_name> // <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 // generate a parameter name which is not already used
_rNewParamName = "link_from_"; o_rNewParamName = "link_from_";
_rNewParamName += convertName2SQLName( _rMasterColumn, m_sSpecialCharacters ); o_rNewParamName += convertName2SQLName( _rMasterColumn, m_sSpecialCharacters );
while ( m_aParameterInformation.find( _rNewParamName ) != m_aParameterInformation.end() ) 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 ...@@ -279,8 +289,11 @@ namespace dbtools
// does the detail name denote a column? // does the detail name denote a column?
if ( _rxColumns->hasByName( *pDetailFields ) ) if ( _rxColumns->hasByName( *pDetailFields ) )
{ {
Reference< XPropertySet > xDetailField(_rxColumns->getByName( *pDetailFields ), UNO_QUERY);
assert(xDetailField.is());
OUString sNewParamName; 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!" ); OSL_PRECOND( !sNewParamName.isEmpty(), "ParameterManager::classifyLinks: createFilterConditionFromColumnLink returned nonsense!" );
// remember meta information about this new parameter // remember meta information about this new parameter
...@@ -754,6 +767,7 @@ namespace dbtools ...@@ -754,6 +767,7 @@ namespace dbtools
xMeta = xConnection->getMetaData(); xMeta = xConnection->getMetaData();
if ( xMeta.is() ) if ( xMeta.is() )
{ {
m_xConnectionMetadata = xMeta;
m_sIdentifierQuoteString = xMeta->getIdentifierQuoteString(); m_sIdentifierQuoteString = xMeta->getIdentifierQuoteString();
m_sSpecialCharacters = xMeta->getExtraNameCharacters(); m_sSpecialCharacters = xMeta->getExtraNameCharacters();
} }
......
...@@ -126,6 +126,7 @@ namespace dbtools ...@@ -126,6 +126,7 @@ namespace dbtools
OUString m_sIdentifierQuoteString; OUString m_sIdentifierQuoteString;
OUString m_sSpecialCharacters; OUString m_sSpecialCharacters;
::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xConnectionMetadata;
::std::vector< bool > m_aParametersVisited; ::std::vector< bool > m_aParametersVisited;
...@@ -244,7 +245,7 @@ namespace dbtools ...@@ -244,7 +245,7 @@ namespace dbtools
OUString OUString
createFilterConditionFromColumnLink( createFilterConditionFromColumnLink(
const OUString& /* [in] */ _rMasterColumn, const OUString& /* [in] */ _rMasterColumn,
const OUString& /* [in] */ _rDetailColumn, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& /* [in] */ xDetailColumn,
OUString& /* [out] */ _rNewParamName OUString& /* [out] */ _rNewParamName
); );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment