[Libreoffice-commits] core.git: sc/source

Eike Rathke erack at redhat.com
Tue May 23 18:42:08 UTC 2017


 sc/source/core/tool/interpr1.cxx |  140 +++++++++++++++++++--------------------
 1 file changed, 70 insertions(+), 70 deletions(-)

New commits:
commit 6df362b4b01a1f645009b45e1a7dd902f1de089b
Author: Eike Rathke <erack at redhat.com>
Date:   Tue May 23 20:40:50 2017 +0200

    Extend the loop over svRefList to cover also the query evaluation
    
    ... otherwise all but the last reflist entry are thrown away..
    
    Change-Id: Ic8e66cfb6179a86140e566d25cbffc901527f269

diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 4618bddec326..85d9ddb4259b 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -5790,87 +5790,87 @@ void ScInterpreter::IterateParametersIfs( double(*ResultFunc)( const sc::ParamIf
                 PushError ( FormulaError::IllegalArgument);
                 return;
             }
-        }
 
-        // recalculate matrix values
-        if (nGlobalError != FormulaError::NONE)
-        {
-            PushError( nGlobalError);
-            return;
-        }
+            // recalculate matrix values
+            if (nGlobalError != FormulaError::NONE)
+            {
+                PushError( nGlobalError);
+                return;
+            }
 
-        // initialize temporary result matrix
-        if (aResArray.empty())
-        {
-            nColSize = nCol2 - nCol1 + 1;
-            nRowSize = nRow2 - nRow1 + 1;
-            aResArray.resize(nColSize*nRowSize, 0);
-        }
+            // initialize temporary result matrix
+            if (aResArray.empty())
+            {
+                nColSize = nCol2 - nCol1 + 1;
+                nRowSize = nRow2 - nRow1 + 1;
+                aResArray.resize(nColSize*nRowSize, 0);
+            }
 
-        ScQueryParam rParam;
-        rParam.nRow1       = nRow1;
-        rParam.nRow2       = nRow2;
+            ScQueryParam rParam;
+            rParam.nRow1       = nRow1;
+            rParam.nRow2       = nRow2;
 
-        ScQueryEntry& rEntry = rParam.GetEntry(0);
-        ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
-        rEntry.bDoQuery = true;
-        if (!bIsString)
-        {
-            rItem.meType = ScQueryEntry::ByValue;
-            rItem.mfVal = fVal;
-            rEntry.eOp = SC_EQUAL;
-        }
-        else
-        {
-            rParam.FillInExcelSyntax(pDok->GetSharedStringPool(), aString.getString(), 0, pFormatter);
-            if (rItem.meType == ScQueryEntry::ByString)
-                rParam.eSearchType = DetectSearchType(rItem.maString.getString(), pDok);
-        }
-        ScAddress aAdr;
-        aAdr.SetTab( nTab1 );
-        rParam.nCol1  = nCol1;
-        rParam.nCol2  = nCol2;
-        rEntry.nField = nCol1;
-        SCCOL nColDiff = -nCol1;
-        SCROW nRowDiff = -nRow1;
-        if (pQueryMatrix)
-        {
-            // Never case-sensitive.
-            sc::CompareOptions aOptions( pDok, rEntry, rParam.eSearchType);
-            ScMatrixRef pResultMatrix = QueryMat( pQueryMatrix, aOptions);
-            if (nGlobalError != FormulaError::NONE || !pResultMatrix)
+            ScQueryEntry& rEntry = rParam.GetEntry(0);
+            ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
+            rEntry.bDoQuery = true;
+            if (!bIsString)
             {
-                PushError( FormulaError::IllegalParameter);
-                return;
+                rItem.meType = ScQueryEntry::ByValue;
+                rItem.mfVal = fVal;
+                rEntry.eOp = SC_EQUAL;
             }
-
-            // result matrix is filled with boolean values.
-            std::vector<double> aResValues;
-            pResultMatrix->GetDoubleArray(aResValues);
-            if (aResArray.size() != aResValues.size())
+            else
             {
-                PushError( FormulaError::IllegalParameter);
-                return;
+                rParam.FillInExcelSyntax(pDok->GetSharedStringPool(), aString.getString(), 0, pFormatter);
+                if (rItem.meType == ScQueryEntry::ByString)
+                    rParam.eSearchType = DetectSearchType(rItem.maString.getString(), pDok);
             }
+            ScAddress aAdr;
+            aAdr.SetTab( nTab1 );
+            rParam.nCol1  = nCol1;
+            rParam.nCol2  = nCol2;
+            rEntry.nField = nCol1;
+            SCCOL nColDiff = -nCol1;
+            SCROW nRowDiff = -nRow1;
+            if (pQueryMatrix)
+            {
+                // Never case-sensitive.
+                sc::CompareOptions aOptions( pDok, rEntry, rParam.eSearchType);
+                ScMatrixRef pResultMatrix = QueryMat( pQueryMatrix, aOptions);
+                if (nGlobalError != FormulaError::NONE || !pResultMatrix)
+                {
+                    PushError( FormulaError::IllegalParameter);
+                    return;
+                }
 
-            std::vector<sal_uInt8>::iterator itRes = aResArray.begin(), itResEnd = aResArray.end();
-            std::vector<double>::const_iterator itThisRes = aResValues.begin();
-            for (; itRes != itResEnd; ++itRes, ++itThisRes)
-                *itRes += *itThisRes;
-        }
-        else
-        {
-            ScQueryCellIterator aCellIter(pDok, nTab1, rParam, false);
-            // Increment Entry.nField in iterator when switching to next column.
-            aCellIter.SetAdvanceQueryParamEntryField( true );
-            if ( aCellIter.GetFirst() )
+                // result matrix is filled with boolean values.
+                std::vector<double> aResValues;
+                pResultMatrix->GetDoubleArray(aResValues);
+                if (aResArray.size() != aResValues.size())
+                {
+                    PushError( FormulaError::IllegalParameter);
+                    return;
+                }
+
+                std::vector<sal_uInt8>::iterator itRes = aResArray.begin(), itResEnd = aResArray.end();
+                std::vector<double>::const_iterator itThisRes = aResValues.begin();
+                for (; itRes != itResEnd; ++itRes, ++itThisRes)
+                    *itRes += *itThisRes;
+            }
+            else
             {
-                do
+                ScQueryCellIterator aCellIter(pDok, nTab1, rParam, false);
+                // Increment Entry.nField in iterator when switching to next column.
+                aCellIter.SetAdvanceQueryParamEntryField( true );
+                if ( aCellIter.GetFirst() )
                 {
-                    size_t nC = aCellIter.GetCol() + nColDiff;
-                    size_t nR = aCellIter.GetRow() + nRowDiff;
-                    ++aResArray[nC*nRowSize+nR];
-                } while ( aCellIter.GetNext() );
+                    do
+                    {
+                        size_t nC = aCellIter.GetCol() + nColDiff;
+                        size_t nR = aCellIter.GetRow() + nRowDiff;
+                        ++aResArray[nC*nRowSize+nR];
+                    } while ( aCellIter.GetNext() );
+                }
             }
         }
         nParamCount -= 2;


More information about the Libreoffice-commits mailing list