|
 |
ebc4bd |
From 43c6130f152066ce751033f5b0fd205b4912e332 Mon Sep 17 00:00:00 2001
|
|
 |
ebc4bd |
Message-Id: <43c6130f152066ce751033f5b0fd205b4912e332.1430929664.git.erack@redhat.com>
|
|
 |
ebc4bd |
From: Eike Rathke <erack@redhat.com>
|
|
 |
ebc4bd |
Date: Wed, 6 May 2015 17:15:12 +0200
|
|
 |
ebc4bd |
Subject: [PATCH] Resolves: tdf#91078 check also DBData modified, not only
|
|
 |
ebc4bd |
named expressions
|
|
 |
ebc4bd |
MIME-Version: 1.0
|
|
 |
ebc4bd |
Content-Type: multipart/mixed; boundary="------------erAck-patch-parts"
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
This is a multi-part message in MIME format.
|
|
 |
ebc4bd |
--------------erAck-patch-parts
|
|
 |
ebc4bd |
Content-Type: text/plain; charset=UTF-8; format=fixed
|
|
 |
ebc4bd |
Content-Transfer-Encoding: 8bit
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
This adds ScDocument& to all RefUpdate...Context; another approach could
|
|
 |
ebc4bd |
had been to add an UpdatedDBData similar to UpdatedRangeNames and gather
|
|
 |
ebc4bd |
those in the ScDBData::Update...() methods, but as long as
|
|
 |
ebc4bd |
ScDBData::IsModified() works that isn't necessary.
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
(cherry picked from commit 848dc76e76c1c4a9040be4a0088c4d4527af6f40)
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
Backported.
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
Change-Id: Iae3ec6c8b8356cbd8acb2445489e91e7d6922fb3
|
|
 |
ebc4bd |
---
|
|
 |
ebc4bd |
sc/inc/refupdatecontext.hxx | 9 ++++++---
|
|
 |
ebc4bd |
sc/source/core/data/documen2.cxx | 4 ++--
|
|
 |
ebc4bd |
sc/source/core/data/document.cxx | 8 ++++----
|
|
 |
ebc4bd |
sc/source/core/data/refupdatecontext.cxx | 12 ++++++------
|
|
 |
ebc4bd |
sc/source/core/tool/token.cxx | 29 +++++++++++++++++++++--------
|
|
 |
ebc4bd |
5 files changed, 39 insertions(+), 23 deletions(-)
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
--------------erAck-patch-parts
|
|
 |
ebc4bd |
Content-Type: text/x-patch; name="0001-Resolves-tdf-91078-check-also-DBData-modified-not-on.patch"
|
|
 |
ebc4bd |
Content-Transfer-Encoding: 8bit
|
|
 |
ebc4bd |
Content-Disposition: attachment; filename="0001-Resolves-tdf-91078-check-also-DBData-modified-not-on.patch"
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
diff --git a/sc/inc/refupdatecontext.hxx b/sc/inc/refupdatecontext.hxx
|
|
 |
ebc4bd |
index 393a855..3b4db92 100644
|
|
 |
ebc4bd |
--- a/sc/inc/refupdatecontext.hxx
|
|
 |
ebc4bd |
+++ b/sc/inc/refupdatecontext.hxx
|
|
 |
ebc4bd |
@@ -103,29 +103,32 @@ struct RefUpdateResult
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
struct RefUpdateInsertTabContext
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
+ ScDocument& mrDoc;
|
|
 |
ebc4bd |
SCTAB mnInsertPos;
|
|
 |
ebc4bd |
SCTAB mnSheets;
|
|
 |
ebc4bd |
UpdatedRangeNames maUpdatedNames;
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
- RefUpdateInsertTabContext(SCTAB nInsertPos, SCTAB nSheets);
|
|
 |
ebc4bd |
+ RefUpdateInsertTabContext(ScDocument& rDoc, SCTAB nInsertPos, SCTAB nSheets);
|
|
 |
ebc4bd |
};
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
struct RefUpdateDeleteTabContext
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
+ ScDocument& mrDoc;
|
|
 |
ebc4bd |
SCTAB mnDeletePos;
|
|
 |
ebc4bd |
SCTAB mnSheets;
|
|
 |
ebc4bd |
UpdatedRangeNames maUpdatedNames;
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
- RefUpdateDeleteTabContext(SCTAB nInsertPos, SCTAB nSheets);
|
|
 |
ebc4bd |
+ RefUpdateDeleteTabContext(ScDocument& rDoc, SCTAB nInsertPos, SCTAB nSheets);
|
|
 |
ebc4bd |
};
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
struct RefUpdateMoveTabContext
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
+ ScDocument& mrDoc;
|
|
 |
ebc4bd |
SCTAB mnOldPos;
|
|
 |
ebc4bd |
SCTAB mnNewPos;
|
|
 |
ebc4bd |
UpdatedRangeNames maUpdatedNames;
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
- RefUpdateMoveTabContext(SCTAB nOldPos, SCTAB nNewPos);
|
|
 |
ebc4bd |
+ RefUpdateMoveTabContext(ScDocument& rDoc, SCTAB nOldPos, SCTAB nNewPos);
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
SCTAB getNewTab(SCTAB nOldTab) const;
|
|
 |
ebc4bd |
};
|
|
 |
ebc4bd |
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
|
|
 |
ebc4bd |
index 79e6f63..5e73cb9 100644
|
|
 |
ebc4bd |
--- a/sc/source/core/data/documen2.cxx
|
|
 |
ebc4bd |
+++ b/sc/source/core/data/documen2.cxx
|
|
 |
ebc4bd |
@@ -744,7 +744,7 @@ bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos, ScProgress* pProgress )
|
|
 |
ebc4bd |
// Referenz-Updaterei
|
|
 |
ebc4bd |
//! mit UpdateReference zusammenfassen!
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
- sc::RefUpdateMoveTabContext aCxt(nOldPos, nNewPos);
|
|
 |
ebc4bd |
+ sc::RefUpdateMoveTabContext aCxt( *this, nOldPos, nNewPos);
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
SCsTAB nDz = ((SCsTAB)nNewPos) - (SCsTAB)nOldPos;
|
|
 |
ebc4bd |
ScRange aSourceRange( 0,0,nOldPos, MAXCOL,MAXROW,nOldPos );
|
|
 |
ebc4bd |
@@ -820,7 +820,7 @@ bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pOnlyM
|
|
 |
ebc4bd |
bValid = !GetTable( aName, nDummy );
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
sc::AutoCalcSwitch aACSwitch(*this, false);
|
|
 |
ebc4bd |
- sc::RefUpdateInsertTabContext aCxt(nNewPos, 1);
|
|
 |
ebc4bd |
+ sc::RefUpdateInsertTabContext aCxt( *this, nNewPos, 1);
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
if (bValid)
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
|
|
 |
ebc4bd |
index 524f97f..cfa6c7c 100644
|
|
 |
ebc4bd |
--- a/sc/source/core/data/document.cxx
|
|
 |
ebc4bd |
+++ b/sc/source/core/data/document.cxx
|
|
 |
ebc4bd |
@@ -494,7 +494,7 @@ bool ScDocument::InsertTab(
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
if (ValidTab(nPos) && (nPos < nTabCount))
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
- sc::RefUpdateInsertTabContext aCxt(nPos, 1);
|
|
 |
ebc4bd |
+ sc::RefUpdateInsertTabContext aCxt( *this, nPos, 1);
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
ScRange aRange( 0,0,nPos, MAXCOL,MAXROW,MAXTAB );
|
|
 |
ebc4bd |
xColNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,1 );
|
|
 |
ebc4bd |
@@ -588,7 +588,7 @@ bool ScDocument::InsertTabs( SCTAB nPos, const std::vector<OUString>& rNames,
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
if (ValidTab(nPos) && (nPos < nTabCount))
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
- sc::RefUpdateInsertTabContext aCxt(nPos, nNewSheets);
|
|
 |
ebc4bd |
+ sc::RefUpdateInsertTabContext aCxt( *this, nPos, nNewSheets);
|
|
 |
ebc4bd |
ScRange aRange( 0,0,nPos, MAXCOL,MAXROW,MAXTAB );
|
|
 |
ebc4bd |
xColNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,nNewSheets );
|
|
 |
ebc4bd |
xRowNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,nNewSheets );
|
|
 |
ebc4bd |
@@ -666,7 +666,7 @@ bool ScDocument::DeleteTab( SCTAB nTab )
|
|
 |
ebc4bd |
if (nTabCount > 1)
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
sc::AutoCalcSwitch aACSwitch(*this, false);
|
|
 |
ebc4bd |
- sc::RefUpdateDeleteTabContext aCxt(nTab, 1);
|
|
 |
ebc4bd |
+ sc::RefUpdateDeleteTabContext aCxt( *this, nTab, 1);
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
ScRange aRange( 0, 0, nTab, MAXCOL, MAXROW, nTab );
|
|
 |
ebc4bd |
DelBroadcastAreasInRange( aRange );
|
|
 |
ebc4bd |
@@ -752,7 +752,7 @@ bool ScDocument::DeleteTabs( SCTAB nTab, SCTAB nSheets )
|
|
 |
ebc4bd |
if (nTabCount > nSheets)
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
sc::AutoCalcSwitch aACSwitch(*this, false);
|
|
 |
ebc4bd |
- sc::RefUpdateDeleteTabContext aCxt(nTab, nSheets);
|
|
 |
ebc4bd |
+ sc::RefUpdateDeleteTabContext aCxt( *this, nTab, nSheets);
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
for (SCTAB aTab = 0; aTab < nSheets; ++aTab)
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
diff --git a/sc/source/core/data/refupdatecontext.cxx b/sc/source/core/data/refupdatecontext.cxx
|
|
 |
ebc4bd |
index 8bf52985..6727765 100644
|
|
 |
ebc4bd |
--- a/sc/source/core/data/refupdatecontext.cxx
|
|
 |
ebc4bd |
+++ b/sc/source/core/data/refupdatecontext.cxx
|
|
 |
ebc4bd |
@@ -61,14 +61,14 @@ RefUpdateResult::RefUpdateResult(const RefUpdateResult& r) :
|
|
 |
ebc4bd |
mbReferenceModified(r.mbReferenceModified),
|
|
 |
ebc4bd |
mbNameModified(r.mbNameModified) {}
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
-RefUpdateInsertTabContext::RefUpdateInsertTabContext(SCTAB nInsertPos, SCTAB nSheets) :
|
|
 |
ebc4bd |
- mnInsertPos(nInsertPos), mnSheets(nSheets) {}
|
|
 |
ebc4bd |
+RefUpdateInsertTabContext::RefUpdateInsertTabContext(ScDocument& rDoc, SCTAB nInsertPos, SCTAB nSheets) :
|
|
 |
ebc4bd |
+ mrDoc(rDoc), mnInsertPos(nInsertPos), mnSheets(nSheets) {}
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
-RefUpdateDeleteTabContext::RefUpdateDeleteTabContext(SCTAB nDeletePos, SCTAB nSheets) :
|
|
 |
ebc4bd |
- mnDeletePos(nDeletePos), mnSheets(nSheets) {}
|
|
 |
ebc4bd |
+RefUpdateDeleteTabContext::RefUpdateDeleteTabContext(ScDocument& rDoc, SCTAB nDeletePos, SCTAB nSheets) :
|
|
 |
ebc4bd |
+ mrDoc(rDoc), mnDeletePos(nDeletePos), mnSheets(nSheets) {}
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
-RefUpdateMoveTabContext::RefUpdateMoveTabContext(SCTAB nOldPos, SCTAB nNewPos) :
|
|
 |
ebc4bd |
- mnOldPos(nOldPos), mnNewPos(nNewPos) {}
|
|
 |
ebc4bd |
+RefUpdateMoveTabContext::RefUpdateMoveTabContext(ScDocument& rDoc, SCTAB nOldPos, SCTAB nNewPos) :
|
|
 |
ebc4bd |
+ mrDoc(rDoc), mnOldPos(nOldPos), mnNewPos(nNewPos) {}
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
SCTAB RefUpdateMoveTabContext::getNewTab(SCTAB nOldTab) const
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
|
|
 |
ebc4bd |
index 9961b58..a83ba8e 100644
|
|
 |
ebc4bd |
--- a/sc/source/core/tool/token.cxx
|
|
 |
ebc4bd |
+++ b/sc/source/core/tool/token.cxx
|
|
 |
ebc4bd |
@@ -42,6 +42,7 @@
|
|
 |
ebc4bd |
#include "types.hxx"
|
|
 |
ebc4bd |
#include "globstr.hrc"
|
|
 |
ebc4bd |
#include "addincol.hxx"
|
|
 |
ebc4bd |
+#include "dbdata.hxx"
|
|
 |
ebc4bd |
#include <svl/sharedstring.hxx>
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
using ::std::vector;
|
|
 |
ebc4bd |
@@ -2748,9 +2749,6 @@ bool expandRangeByEdge( const sc::RefUpdateContext& rCxt, ScRange& rRefRange, co
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
bool isNameModified( const sc::UpdatedRangeNames& rUpdatedNames, SCTAB nOldTab, const formula::FormulaToken& rToken )
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
- if (rToken.GetOpCode() != ocName)
|
|
 |
ebc4bd |
- return false;
|
|
 |
ebc4bd |
-
|
|
 |
ebc4bd |
SCTAB nTab = -1;
|
|
 |
ebc4bd |
if (!rToken.IsGlobal())
|
|
 |
ebc4bd |
nTab = nOldTab;
|
|
 |
ebc4bd |
@@ -2759,6 +2757,16 @@ bool isNameModified( const sc::UpdatedRangeNames& rUpdatedNames, SCTAB nOldTab,
|
|
 |
ebc4bd |
return rUpdatedNames.isNameUpdated(nTab, rToken.GetIndex());
|
|
 |
ebc4bd |
}
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
+bool isDBDataModified( const ScDocument& rDoc, const formula::FormulaToken& rToken )
|
|
 |
ebc4bd |
+{
|
|
 |
ebc4bd |
+ // Check if this DBData has been modified.
|
|
 |
ebc4bd |
+ const ScDBData* pDBData = rDoc.GetDBCollection()->getNamedDBs().findByIndex( rToken.GetIndex());
|
|
 |
ebc4bd |
+ if (!pDBData)
|
|
 |
ebc4bd |
+ return false;
|
|
 |
ebc4bd |
+
|
|
 |
ebc4bd |
+ return pDBData->IsModified();
|
|
 |
ebc4bd |
+}
|
|
 |
ebc4bd |
+
|
|
 |
ebc4bd |
}
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateContext& rCxt, const ScAddress& rOldPos )
|
|
 |
ebc4bd |
@@ -2897,7 +2905,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateCon
|
|
 |
ebc4bd |
break;
|
|
 |
ebc4bd |
case svIndex:
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
|
|
 |
ebc4bd |
+ if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) ||
|
|
 |
ebc4bd |
+ ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p)))
|
|
 |
ebc4bd |
aRes.mbNameModified = true;
|
|
 |
ebc4bd |
}
|
|
 |
ebc4bd |
break;
|
|
 |
ebc4bd |
@@ -2965,7 +2974,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove(
|
|
 |
ebc4bd |
break;
|
|
 |
ebc4bd |
case svIndex:
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
|
|
 |
ebc4bd |
+ if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) ||
|
|
 |
ebc4bd |
+ ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p)))
|
|
 |
ebc4bd |
aRes.mbNameModified = true;
|
|
 |
ebc4bd |
}
|
|
 |
ebc4bd |
break;
|
|
 |
ebc4bd |
@@ -3489,7 +3499,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnDeletedTab( sc::RefUpdateDele
|
|
 |
ebc4bd |
break;
|
|
 |
ebc4bd |
case svIndex:
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
|
|
 |
ebc4bd |
+ if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) ||
|
|
 |
ebc4bd |
+ ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p)))
|
|
 |
ebc4bd |
aRes.mbNameModified = true;
|
|
 |
ebc4bd |
}
|
|
 |
ebc4bd |
break;
|
|
 |
ebc4bd |
@@ -3533,7 +3544,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnInsertedTab( sc::RefUpdateIns
|
|
 |
ebc4bd |
break;
|
|
 |
ebc4bd |
case svIndex:
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
|
|
 |
ebc4bd |
+ if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) ||
|
|
 |
ebc4bd |
+ ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p)))
|
|
 |
ebc4bd |
aRes.mbNameModified = true;
|
|
 |
ebc4bd |
}
|
|
 |
ebc4bd |
break;
|
|
 |
ebc4bd |
@@ -3598,7 +3610,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMovedTab( sc::RefUpdateMoveTa
|
|
 |
ebc4bd |
break;
|
|
 |
ebc4bd |
case svIndex:
|
|
 |
ebc4bd |
{
|
|
 |
ebc4bd |
- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
|
|
 |
ebc4bd |
+ if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) ||
|
|
 |
ebc4bd |
+ ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p)))
|
|
 |
ebc4bd |
aRes.mbNameModified = true;
|
|
 |
ebc4bd |
}
|
|
 |
ebc4bd |
break;
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
--------------erAck-patch-parts--
|
|
 |
ebc4bd |
|
|
 |
ebc4bd |
|