diff options
author | Eike Rathke <erack@redhat.com> | 2017-09-08 19:06:41 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2017-09-08 21:53:46 +0200 |
commit | 9c1826d98065c30411cbf2e731560165ca2b7668 (patch) | |
tree | 06de32ee651e03fce5f9e5497ed4af7218caeced /sc/source/core/data/documen3.cxx | |
parent | 276536fc10368dbe7e16cf859b6da903cec6b8aa (diff) |
sc-perf: do not add a million empty filter entries just to sort and discard
Which can happen if an (anonymous) database range as filter range was selected
to span an entire column of which most (the tail) is empty cells. The entries
are processed to be unique anyway. This significantly shortens the time to
display the filter dialog.
Happened with attachment
http://bugs.documentfoundation.org/attachment.cgi?id=136074 of bug
https://bugs.documentfoundation.org/show_bug.cgi?id=112258
Change-Id: Ia169911d6f23611a3b3ecbf291757465f1998210
Reviewed-on: https://gerrit.libreoffice.org/42118
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'sc/source/core/data/documen3.cxx')
-rw-r--r-- | sc/source/core/data/documen3.cxx | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx index 5fb5c8dcd539..f40f756a22c9 100644 --- a/sc/source/core/data/documen3.cxx +++ b/sc/source/core/data/documen3.cxx @@ -73,6 +73,7 @@ #include "formulacell.hxx" #include "refupdatecontext.hxx" #include "scopetools.hxx" +#include "filterentries.hxx" #include "globalnames.hxx" #include <LibreOfficeKit/LibreOfficeKitEnums.h> @@ -1501,7 +1502,7 @@ void ScDocument::GetFilterSelCount( SCCOL nCol, SCROW nRow, SCTAB nTab, SCSIZE& * Entries for AutoFilter listbox */ void ScDocument::GetFilterEntries( - SCCOL nCol, SCROW nRow, SCTAB nTab, std::vector<ScTypedStrData>& rStrings, bool& rHasDates) + SCCOL nCol, SCROW nRow, SCTAB nTab, ScFilterEntries& rFilterEntries ) { if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && pDBCollection ) { @@ -1537,14 +1538,14 @@ void ScDocument::GetFilterEntries( if ( bFilter ) { - maTabs[nTab]->GetFilteredFilterEntries( nCol, nStartRow, nEndRow, aParam, rStrings, rHasDates ); + maTabs[nTab]->GetFilteredFilterEntries( nCol, nStartRow, nEndRow, aParam, rFilterEntries ); } else { - maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rStrings, rHasDates ); + maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rFilterEntries ); } - sortAndRemoveDuplicates(rStrings, aParam.bCaseSens); + sortAndRemoveDuplicates( rFilterEntries.maStrData, aParam.bCaseSens); } } } @@ -1554,12 +1555,12 @@ void ScDocument::GetFilterEntries( */ void ScDocument::GetFilterEntriesArea( SCCOL nCol, SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bCaseSens, - std::vector<ScTypedStrData>& rStrings, bool& rHasDates) + ScFilterEntries& rFilterEntries ) { if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] ) { - maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rStrings, rHasDates ); - sortAndRemoveDuplicates(rStrings, bCaseSens); + maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rFilterEntries ); + sortAndRemoveDuplicates( rFilterEntries.maStrData, bCaseSens); } } |