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

Kohei Yoshida kohei.yoshida at collabora.com
Thu Feb 2 05:02:33 UTC 2017


 sc/source/core/data/table3.cxx |   29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

New commits:
commit 42e472b5870278058537d43d03d457dc80b16166
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon Jan 30 22:01:45 2017 -0500

    tdf#105629: Let's move the advanced-filter specific stuff ...
    
    to the place where we actually parse the filtering rules for advanced
    filter queries.
    
    Change-Id: I87650227e15fa54303efd720530d31ecf9827226
    Reviewed-on: https://gerrit.libreoffice.org/33816
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Kohei Yoshida <libreoffice at kohei.us>

diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index 64c082b..17cc5b3 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -2888,26 +2888,15 @@ public:
 
     void operator() (ScQueryEntry::Item& rItem)
     {
-        if (rItem.meType != ScQueryEntry::ByString && rItem.meType != ScQueryEntry::ByDate)
+        // Double-check if the query by date is really appropriate.
+
+        if (rItem.meType != ScQueryEntry::ByDate)
             return;
 
         sal_uInt32 nIndex = 0;
         bool bNumber = mrDoc.GetFormatTable()->
             IsNumberFormat(rItem.maString.getString(), nIndex, rItem.mfVal);
 
-        // Advanced Filter creates only ByString queries that need to be
-        // converted to ByValue if appropriate. rItem.mfVal now holds the value
-        // if bNumber==true.
-
-        if (rItem.meType == ScQueryEntry::ByString)
-        {
-            if (bNumber)
-                rItem.meType = ScQueryEntry::ByValue;
-            return;
-        }
-
-        // Double-check if the query by date is really appropriate.
-
         if (bNumber && ((nIndex % SV_COUNTRY_LANGUAGE_OFFSET) != 0))
         {
             const SvNumberformat* pEntry = mrDoc.GetFormatTable()->GetEntry(nIndex);
@@ -3272,12 +3261,22 @@ bool ScTable::CreateQueryParam(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow
     if (!bValid)
         bValid = CreateExcelQuery(nCol1, nRow1, nCol2, nRow2, rQueryParam);
 
+    SvNumberFormatter* pFormatter = pDocument->GetFormatTable();
     nCount = rQueryParam.GetEntryCount();
+
     if (bValid)
     {
         //  bQueryByString must be set
         for (i=0; i < nCount; i++)
-            rQueryParam.GetEntry(i).GetQueryItem().meType = ScQueryEntry::ByString;
+        {
+            ScQueryEntry::Item& rItem = rQueryParam.GetEntry(i).GetQueryItem();
+
+            sal_uInt32 nIndex = 0;
+            bool bNumber = pFormatter->IsNumberFormat(
+                rItem.maString.getString(), nIndex, rItem.mfVal);
+
+            rItem.meType = bNumber ? ScQueryEntry::ByValue : ScQueryEntry::ByString;
+        }
     }
     else
     {


More information about the Libreoffice-commits mailing list