connectivity/source/parse/sqliterator.cxx | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-)
New commits: commit 89f162abb25168afe942247b77454e45145f1ab8 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Sun Sep 26 20:33:55 2021 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Mon Sep 27 11:15:29 2021 +0200 ofz#39309 collect the names just once Change-Id: Iad8a6c80ecac7b8dc380a4c16ccd82650ecc10f5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122656 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx index 94df96d39628..95c0cd875a93 100644 --- a/connectivity/source/parse/sqliterator.cxx +++ b/connectivity/source/parse/sqliterator.cxx @@ -1718,27 +1718,25 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co } } -OUString OSQLParseTreeIterator::getUniqueColumnName(const OUString & rColumnName) const +OUString OSQLParseTreeIterator::getUniqueColumnName(const OUString& rColumnName) const { - OUString aAlias(rColumnName); + ::comphelper::UStringMixLess aCompare(isCaseSensitive()); + std::vector<OUString> aColumnNames; + OUString sPropertyName = OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME); + for (const auto& col : *m_aSelectColumns) + aColumnNames.push_back(getString(col->getPropertyValue(sPropertyName))); + std::sort(aColumnNames.begin(), aColumnNames.end(), aCompare); - OSQLColumns::const_iterator aIter = find( - m_aSelectColumns->begin(), - m_aSelectColumns->end(), - aAlias, - ::comphelper::UStringMixEqual( isCaseSensitive() ) - ); + if (!std::binary_search(aColumnNames.begin(), aColumnNames.end(), rColumnName, aCompare)) + return rColumnName; + + OUString aAlias; sal_Int32 i=1; - while(aIter != m_aSelectColumns->end()) + do { aAlias = rColumnName + OUString::number(i++); - aIter = find( - m_aSelectColumns->begin(), - m_aSelectColumns->end(), - aAlias, - ::comphelper::UStringMixEqual( isCaseSensitive() ) - ); } + while (std::binary_search(aColumnNames.begin(), aColumnNames.end(), aAlias, aCompare)); return aAlias; }