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.protected@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;
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.