Kaydet (Commit) 878a5dab authored tarafından Kohei Yoshida's avatar Kohei Yoshida

fdo#74650: Speed up GetFilteredFilterEntries().

Change-Id: I1b3ae601726401a0e70fb1a05b9a90c43773794c
üst 2d843bb1
...@@ -460,7 +460,10 @@ public: ...@@ -460,7 +460,10 @@ public:
/// Including current, may return -1 /// Including current, may return -1
SCsROW GetNextUnprotected( SCROW nRow, bool bUp ) const; SCsROW GetNextUnprotected( SCROW nRow, bool bUp ) const;
void GetFilterEntries(SCROW nStartRow, SCROW nEndRow, std::vector<ScTypedStrData>& rStrings, bool& rHasDates); void GetFilterEntries(
sc::ColumnBlockConstPosition& rBlockPos, SCROW nStartRow, SCROW nEndRow,
std::vector<ScTypedStrData>& rStrings, bool& rHasDates );
bool GetDataEntries( SCROW nRow, std::set<ScTypedStrData>& rStrings, bool bLimit ) const; bool GetDataEntries( SCROW nRow, std::set<ScTypedStrData>& rStrings, bool bLimit ) const;
void UpdateInsertTabAbs(SCTAB nNewPos); void UpdateInsertTabAbs(SCTAB nNewPos);
......
...@@ -2047,10 +2047,13 @@ public: ...@@ -2047,10 +2047,13 @@ public:
} }
void ScColumn::GetFilterEntries(SCROW nStartRow, SCROW nEndRow, std::vector<ScTypedStrData>& rStrings, bool& rHasDates) void ScColumn::GetFilterEntries(
sc::ColumnBlockConstPosition& rBlockPos, SCROW nStartRow, SCROW nEndRow,
std::vector<ScTypedStrData>& rStrings, bool& rHasDates )
{ {
FilterEntriesHandler aFunc(*this, rStrings); FilterEntriesHandler aFunc(*this, rStrings);
sc::ParseAllNonEmpty(maCells.begin(), maCells, nStartRow, nEndRow, aFunc); rBlockPos.miCellPos =
sc::ParseAllNonEmpty(rBlockPos.miCellPos, maCells, nStartRow, nEndRow, aFunc);
rHasDates = aFunc.hasDates(); rHasDates = aFunc.hasDates();
} }
......
...@@ -2556,12 +2556,17 @@ bool ScTable::HasRowHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL /* nEndCol * ...@@ -2556,12 +2556,17 @@ bool ScTable::HasRowHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL /* nEndCol *
void ScTable::GetFilterEntries(SCCOL nCol, SCROW nRow1, SCROW nRow2, std::vector<ScTypedStrData>& rStrings, bool& rHasDates) void ScTable::GetFilterEntries(SCCOL nCol, SCROW nRow1, SCROW nRow2, std::vector<ScTypedStrData>& rStrings, bool& rHasDates)
{ {
aCol[nCol].GetFilterEntries( nRow1, nRow2, rStrings, rHasDates ); sc::ColumnBlockConstPosition aBlockPos;
aCol[nCol].InitBlockPosition(aBlockPos);
aCol[nCol].GetFilterEntries(aBlockPos, nRow1, nRow2, rStrings, rHasDates);
} }
void ScTable::GetFilteredFilterEntries( void ScTable::GetFilteredFilterEntries(
SCCOL nCol, SCROW nRow1, SCROW nRow2, const ScQueryParam& rParam, std::vector<ScTypedStrData>& rStrings, bool& rHasDates) SCCOL nCol, SCROW nRow1, SCROW nRow2, const ScQueryParam& rParam, std::vector<ScTypedStrData>& rStrings, bool& rHasDates)
{ {
sc::ColumnBlockConstPosition aBlockPos;
aCol[nCol].InitBlockPosition(aBlockPos);
// remove the entry for this column from the query parameter // remove the entry for this column from the query parameter
ScQueryParam aParam( rParam ); ScQueryParam aParam( rParam );
aParam.RemoveEntryByField(nCol); aParam.RemoveEntryByField(nCol);
...@@ -2573,7 +2578,7 @@ void ScTable::GetFilteredFilterEntries( ...@@ -2573,7 +2578,7 @@ void ScTable::GetFilteredFilterEntries(
if (ValidQuery(j, aParam)) if (ValidQuery(j, aParam))
{ {
bool bThisHasDates = false; bool bThisHasDates = false;
aCol[nCol].GetFilterEntries( j, j, rStrings, bThisHasDates ); aCol[nCol].GetFilterEntries(aBlockPos, j, j, rStrings, bThisHasDates);
bHasDates |= bThisHasDates; bHasDates |= bThisHasDates;
} }
} }
......
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