diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-09-26 20:33:55 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-09-27 11:15:29 +0200 |
commit | 89f162abb25168afe942247b77454e45145f1ab8 (patch) | |
tree | 0ec73438f67395474c1edbab04a8457d4131a0f8 /connectivity | |
parent | 54235fc2e2674cd3cf38dd71176efb0cd6be5ae5 (diff) |
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 <caolanm@redhat.com>
Diffstat (limited to 'connectivity')
-rw-r--r-- | connectivity/source/parse/sqliterator.cxx | 28 |
1 files changed, 13 insertions, 15 deletions
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; } |