Hi,

/Sorry for the last mails. Here is the mail, hopefully correct./

I submitted a patch for the bug 51309 - Names of DatabaseRanges should not be case sensitive :
https://bugs.freedesktop.org/show_bug.cgi?id=51309

You will the diff file attached and on the bug's page.
https://bugs.freedesktop.org/page.cgi?id=splinter.html&bug=51309&attachment=69115

Changes :

- ScDBData::less::operator() is modified to compare upper strings

- All the calls to NamedDBs::findByName() are now NamedDBs::findByUpperName().

- In case of a call to findByUpperName by an argument, the function 
ScGlobal::pCharClass->uppercase(aName) was used to ensure upper case.

- The definitions of FindByName() are deleted.


*All of my past and future contributions to LibreOffice may be licensed
under the MPL/LGPLv3+ dual license. *


Should be Ok !
Mat'

--
Mathieu D.

Author: Mathieu D. <call.protec...@gmail.com>
Date:   Fri Oct 26 10:26:33 2012 -0400
                
                Names of DatabaseRanges should not be case sensitive.
                This patch to LibreOffice is under LGPLv3+ / MPL.

diff --git a/sc/inc/dbdata.hxx b/sc/inc/dbdata.hxx
index d607b4e..5f7133f 100644
--- a/sc/inc/dbdata.hxx
+++ b/sc/inc/dbdata.hxx
@@ -185,7 +185,6 @@ public:
         const_iterator begin() const;
         const_iterator end() const;
         ScDBData* findByIndex(sal_uInt16 nIndex);
-        ScDBData* findByName(const ::rtl::OUString& rName);
         ScDBData* findByUpperName(const ::rtl::OUString& rName);
         bool insert(ScDBData* p);
         void erase(iterator itr);
diff --git a/sc/qa/unit/subsequent_filters-test.cxx 
b/sc/qa/unit/subsequent_filters-test.cxx
index 10db9ae..89e5d0b 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -948,11 +948,11 @@ void ScFiltersTest::testBugFixesODS()
 
     {
         // fdo#40426
-        ScDBData* pDBData = 
pDoc->GetDBCollection()->getNamedDBs().findByName("DBRange1");
+        ScDBData* pDBData = 
pDoc->GetDBCollection()->getNamedDBs().findByUpperName("DBRANGE1");
         CPPUNIT_ASSERT(pDBData);
         CPPUNIT_ASSERT(pDBData->HasHeader());
         // no header
-        pDBData = 
pDoc->GetDBCollection()->getNamedDBs().findByName("DBRange2");
+        pDBData = 
pDoc->GetDBCollection()->getNamedDBs().findByUpperName("DBRANGE2");
         CPPUNIT_ASSERT(pDBData);
         CPPUNIT_ASSERT(!pDBData->HasHeader());
     }
diff --git a/sc/source/core/data/cell.cxx b/sc/source/core/data/cell.cxx
index e27339e..4c0bd4b 100644
--- a/sc/source/core/data/cell.cxx
+++ b/sc/source/core/data/cell.cxx
@@ -203,7 +203,7 @@ void adjustDBRange(ScToken* pToken, ScDocument& rNewDoc, 
const ScDocument* pOldD
     ScDBData* pDBData = aOldNamedDBs.findByIndex(pToken->GetIndex());
     if (!pDBData)
         return; //invalid index
-    rtl::OUString aDBName = pDBData->GetName();
+    rtl::OUString aDBName = pDBData->GetUpperName();
 
     //search in new document
     ScDBCollection* pNewDBCollection = rNewDoc.GetDBCollection();
@@ -212,7 +212,7 @@ void adjustDBRange(ScToken* pToken, ScDocument& rNewDoc, 
const ScDocument* pOldD
         pNewDBCollection = new ScDBCollection(&rNewDoc);
     }
     ScDBCollection::NamedDBs& aNewNamedDBs = pNewDBCollection->getNamedDBs();
-    ScDBData* pNewDBData = aNewNamedDBs.findByName(aDBName);
+    ScDBData* pNewDBData = aNewNamedDBs.findByUpperName(aDBName);
     if (!pNewDBData)
     {
         pNewDBData = new ScDBData(*pDBData);
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx
index 54ce14f..7ed637c 100644
--- a/sc/source/core/data/documen3.cxx
+++ b/sc/source/core/data/documen3.cxx
@@ -250,7 +250,7 @@ void ScDocument::SetDBCollection( ScDBCollection* 
pNewDBCollection, bool bRemove
             bool bFound = false;
             if (pNewDBCollection)
             {
-                ScDBData* pNewData = 
pNewDBCollection->getNamedDBs().findByName(rOldData.GetName());
+                ScDBData* pNewData = 
pNewDBCollection->getNamedDBs().findByUpperName(rOldData.GetUpperName());
                 if (pNewData)
                 {
                     if (pNewData->HasAutoFilter())
diff --git a/sc/source/core/tool/dbdata.cxx b/sc/source/core/tool/dbdata.cxx
index 7b142cc..3290f18 100644
--- a/sc/source/core/tool/dbdata.cxx
+++ b/sc/source/core/tool/dbdata.cxx
@@ -53,7 +53,7 @@ using ::std::pair;
 
 bool ScDBData::less::operator() (const ScDBData& left, const ScDBData& right) 
const
 {
-    return ScGlobal::GetpTransliteration()->compareString(left.GetName(), 
right.GetName()) < 0;
+    return ScGlobal::GetpTransliteration()->compareString(left.GetUpperName(), 
right.GetUpperName()) < 0;
 }
 
 ScDBData::ScDBData( const ::rtl::OUString& rName,
@@ -643,17 +643,6 @@ public:
     }
 };
 
-class FindByName : public unary_function<ScDBData, bool>
-{
-    const ::rtl::OUString& mrName;
-public:
-    FindByName(const ::rtl::OUString& rName) : mrName(rName) {}
-    bool operator() (const ScDBData& r) const
-    {
-        return r.GetName() == mrName;
-    }
-};
-
 class FindByUpperName : public unary_function<ScDBData, bool>
 {
     const ::rtl::OUString& mrName;
@@ -700,13 +689,6 @@ ScDBData* ScDBCollection::NamedDBs::findByIndex(sal_uInt16 
nIndex)
     return itr == maDBs.end() ? NULL : &(*itr);
 }
 
-ScDBData* ScDBCollection::NamedDBs::findByName(const ::rtl::OUString& rName)
-{
-    DBsType::iterator itr = find_if(
-        maDBs.begin(), maDBs.end(), FindByName(rName));
-    return itr == maDBs.end() ? NULL : &(*itr);
-}
-
 ScDBData* ScDBCollection::NamedDBs::findByUpperName(const ::rtl::OUString& 
rName)
 {
     DBsType::iterator itr = find_if(
diff --git a/sc/source/core/tool/rangeutl.cxx b/sc/source/core/tool/rangeutl.cxx
index 1001410..5b5c814 100644
--- a/sc/source/core/tool/rangeutl.cxx
+++ b/sc/source/core/tool/rangeutl.cxx
@@ -335,7 +335,7 @@ sal_Bool ScRangeUtil::MakeRangeFromName (
     else if( eScope==RUTL_DBASE )
     {
         ScDBCollection::NamedDBs& rDbNames = 
pDoc->GetDBCollection()->getNamedDBs();
-        ScDBData* pData = rDbNames.findByName(rName);
+        ScDBData* pData = 
rDbNames.findByUpperName(ScGlobal::pCharClass->uppercase(rName));
         if (pData)
         {
             pData->GetArea(nTab, nColStart, nRowStart, nColEnd, nRowEnd);
diff --git a/sc/source/ui/dbgui/dbnamdlg.cxx b/sc/source/ui/dbgui/dbnamdlg.cxx
index d380c59..ed8d981 100644
--- a/sc/source/ui/dbgui/dbnamdlg.cxx
+++ b/sc/source/ui/dbgui/dbnamdlg.cxx
@@ -380,7 +380,7 @@ void ScDbNameDlg::UpdateNames()
 void ScDbNameDlg::UpdateDBData( const String& rStrName )
 {
 
-    const ScDBData* pData = aLocalDbCol.getNamedDBs().findByName(rStrName);
+    const ScDBData* pData = 
aLocalDbCol.getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(rStrName));
 
     if ( pData )
     {
@@ -471,7 +471,7 @@ IMPL_LINK_NOARG(ScDbNameDlg, AddBtnHdl)
                 ScAddress aStart = theCurArea.aStart;
                 ScAddress aEnd   = theCurArea.aEnd;
 
-                ScDBData* pOldEntry = 
aLocalDbCol.getNamedDBs().findByName(aNewName);
+                ScDBData* pOldEntry = 
aLocalDbCol.getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(aNewName));
                 if (pOldEntry)
                 {
                     //  Bereich veraendern
diff --git a/sc/source/ui/docshell/arealink.cxx 
b/sc/source/ui/docshell/arealink.cxx
index 2c08572..2c11441 100644
--- a/sc/source/ui/docshell/arealink.cxx
+++ b/sc/source/ui/docshell/arealink.cxx
@@ -205,7 +205,7 @@ bool ScAreaLink::FindExtRange( ScRange& rRange, ScDocument* 
pSrcDoc, const Strin
     ScRangeName* pNames = pSrcDoc->GetRangeName();
     if (pNames)         // benannte Bereiche
     {
-        const ScRangeData* p = 
pNames->findByUpperName(ScGlobal::pCharClass->uppercase(rAreaName));
+        const ScRangeData* p = pNames->findByUpperName(rAreaName);
         if (p && p->IsValidReference(rRange))
             bFound = true;
     }
@@ -214,7 +214,7 @@ bool ScAreaLink::FindExtRange( ScRange& rRange, ScDocument* 
pSrcDoc, const Strin
         ScDBCollection* pDBColl = pSrcDoc->GetDBCollection();
         if (pDBColl)
         {
-            const ScDBData* pDB = pDBColl->getNamedDBs().findByName(rAreaName);
+            const ScDBData* pDB = 
pDBColl->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(rAreaName));
             if (pDB)
             {
                 SCTAB nTab;
diff --git a/sc/source/ui/docshell/dbdocfun.cxx 
b/sc/source/ui/docshell/dbdocfun.cxx
index 07049a0..7e9115f 100644
--- a/sc/source/ui/docshell/dbdocfun.cxx
+++ b/sc/source/ui/docshell/dbdocfun.cxx
@@ -127,7 +127,7 @@ bool ScDBDocFunc::DeleteDBRange(const ::rtl::OUString& 
rName)
     bool bUndo = pDoc->IsUndoEnabled();
 
     ScDBCollection::NamedDBs& rDBs = pDocColl->getNamedDBs();
-    const ScDBData* p = rDBs.findByName(rName);
+    const ScDBData* p = 
rDBs.findByUpperName(ScGlobal::pCharClass->uppercase(rName));
     if (p)
     {
         ScDocShellModificator aModificator( rDocShell );
@@ -162,8 +162,8 @@ bool ScDBDocFunc::RenameDBRange( const String& rOld, const 
String& rNew )
     ScDBCollection* pDocColl = pDoc->GetDBCollection();
     bool bUndo = pDoc->IsUndoEnabled();
     ScDBCollection::NamedDBs& rDBs = pDocColl->getNamedDBs();
-    const ScDBData* pOld = rDBs.findByName(rOld);
-    const ScDBData* pNew = rDBs.findByName(rNew);
+    const ScDBData* pOld = 
rDBs.findByUpperName(ScGlobal::pCharClass->uppercase(rOld));
+    const ScDBData* pNew = 
rDBs.findByUpperName(ScGlobal::pCharClass->uppercase(rNew));
     if (pOld && !pNew)
     {
         ScDocShellModificator aModificator( rDocShell );
@@ -216,7 +216,7 @@ bool ScDBDocFunc::ModifyDBData( const ScDBData& rNewData )
         pData = pDoc->GetAnonymousDBData(nTab);
     }
     else
-        pData = pDocColl->getNamedDBs().findByName(rNewData.GetName());
+        pData = 
pDocColl->getNamedDBs().findByUpperName(rNewData.GetUpperName());
 
     if (pData)
     {
@@ -267,7 +267,7 @@ bool ScDBDocFunc::RepeatDB( const ::rtl::OUString& rDBName, 
bool bRecord, bool b
     {
         ScDBCollection* pColl = pDoc->GetDBCollection();
         if (pColl)
-            pDBData = pColl->getNamedDBs().findByName(rDBName);
+            pDBData = 
pColl->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(rDBName));
     }
 
     if ( pDBData )
@@ -1525,7 +1525,7 @@ void ScDBDocFunc::UpdateImport( const String& rTarget, 
const svx::ODataAccessDes
 
     ScDocument* pDoc = rDocShell.GetDocument();
     ScDBCollection& rDBColl = *pDoc->GetDBCollection();
-    const ScDBData* pData = rDBColl.getNamedDBs().findByName(rTarget);
+    const ScDBData* pData = 
rDBColl.getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(rTarget));
     if (!pData)
     {
         InfoBox aInfoBox(rDocShell.GetActiveDialogParent(),
diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx
index babda0d..f55a204 100644
--- a/sc/source/ui/docshell/docsh4.cxx
+++ b/sc/source/ui/docshell/docsh4.cxx
@@ -207,7 +207,7 @@ void ScDocShell::Execute( SfxRequest& rReq )
                 if (bIsNewArea)
                 {
                     ScDBCollection* pDBColl = aDocument.GetDBCollection();
-                    if ( !pDBColl || 
!pDBColl->getNamedDBs().findByName(sTarget) )
+                    if ( !pDBColl || 
!pDBColl->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(sTarget))
 )
                     {
                         ScAddress aPos;
                         if ( aPos.Parse( sTarget, &aDocument, 
aDocument.GetAddressConvention() ) & SCA_VALID )
diff --git a/sc/source/ui/docshell/docsh5.cxx b/sc/source/ui/docshell/docsh5.cxx
index 5beb522..63ade6d 100644
--- a/sc/source/ui/docshell/docsh5.cxx
+++ b/sc/source/ui/docshell/docsh5.cxx
@@ -276,7 +276,7 @@ ScDBData* ScDocShell::GetDBData( const ScRange& rMarked, 
ScGetDBMode eMode, ScGe
                     ++nCount;
                     aNewName = aImport;
                     aNewName += String::CreateFromInt32( nCount );
-                    pDummy = rDBs.findByName(aNewName);
+                    pDummy = 
rDBs.findByUpperName(ScGlobal::pCharClass->uppercase(aNewName));
                 }
                 while (pDummy);
                 pNoNameData = new ScDBData( aNewName, nTab,
diff --git a/sc/source/ui/navipi/content.cxx b/sc/source/ui/navipi/content.cxx
index 14a2d47..ab42837 100644
--- a/sc/source/ui/navipi/content.cxx
+++ b/sc/source/ui/navipi/content.cxx
@@ -264,7 +264,7 @@ static String lcl_GetDBAreaRange( ScDocument* pDoc, const 
String& rDBName )
     if (pDoc)
     {
         ScDBCollection* pDbNames = pDoc->GetDBCollection();
-        const ScDBData* pData = pDbNames->getNamedDBs().findByName(rDBName);
+        const ScDBData* pData = 
pDbNames->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(rDBName));
         if (pData)
         {
             ScRange aRange;
diff --git a/sc/source/ui/undo/undodat.cxx b/sc/source/ui/undo/undodat.cxx
index 62e10b8..199617c 100644
--- a/sc/source/ui/undo/undodat.cxx
+++ b/sc/source/ui/undo/undodat.cxx
@@ -1068,7 +1068,7 @@ void ScUndoAutoFilter::DoChange( bool bUndo )
     else
     {
         ScDBCollection* pColl = pDoc->GetDBCollection();
-        pDBData = pColl->getNamedDBs().findByName(aDBName);
+        pDBData = 
pColl->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(aDBName));
     }
 
     if ( pDBData )
@@ -1812,7 +1812,7 @@ void ScUndoConsolidate::Undo()
         ScDBCollection* pColl = pDoc->GetDBCollection();
         if (pColl)
         {
-            ScDBData* pDocData = 
pColl->getNamedDBs().findByName(pUndoData->GetName());
+            ScDBData* pDocData = 
pColl->getNamedDBs().findByUpperName(pUndoData->GetUpperName());
             if (pDocData)
                 *pDocData = *pUndoData;
         }
diff --git a/sc/source/ui/unoobj/datauno.cxx b/sc/source/ui/unoobj/datauno.cxx
index cbff0b4..d902c97 100644
--- a/sc/source/ui/unoobj/datauno.cxx
+++ b/sc/source/ui/unoobj/datauno.cxx
@@ -1734,7 +1734,7 @@ ScDBData* ScDatabaseRangeObj::GetDBData_Impl() const
             ScDBCollection* pNames = 
pDocShell->GetDocument()->GetDBCollection();
             if (pNames)
             {
-                ScDBData* p = pNames->getNamedDBs().findByName(aName);
+                ScDBData* p = 
pNames->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(aName));
                 if (p)
                     pRet = p;
             }
@@ -2441,7 +2441,7 @@ sal_Bool SAL_CALL ScDatabaseRangesObj::hasByName( const 
rtl::OUString& aName )
     {
         ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection();
         if (pNames)
-            return pNames->getNamedDBs().findByName(aName) != NULL;
+            return 
pNames->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(aName)) 
!= NULL;
     }
     return false;
 }
diff --git a/sc/source/ui/view/dbfunc.cxx b/sc/source/ui/view/dbfunc.cxx
index 0416b42..ad4d102 100644
--- a/sc/source/ui/view/dbfunc.cxx
+++ b/sc/source/ui/view/dbfunc.cxx
@@ -65,7 +65,7 @@ void ScDBFunc::GotoDBArea( const ::rtl::OUString& rDBName )
 {
     ScDocument* pDoc = GetViewData()->GetDocument();
     ScDBCollection* pDBCol = pDoc->GetDBCollection();
-    ScDBData* pData = pDBCol->getNamedDBs().findByName(rDBName);
+    ScDBData* pData = 
pDBCol->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(rDBName));
     if (pData)
     {
         SCTAB nTab = 0;

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to