Kaydet (Commit) c9519a21 authored tarafından Eike Rathke's avatar Eike Rathke

TableRef: handle unresolved column specifiers

Change-Id: I8b4fa10da0a39df941f92b8bb074b9031f81fb8e
üst ff349e96
...@@ -3710,6 +3710,9 @@ bool ScCompiler::NextNewToken( bool bInArray ) ...@@ -3710,6 +3710,9 @@ bool ScCompiler::NextNewToken( bool bInArray )
{ {
if (IsTableRefColumn( aOrg )) if (IsTableRefColumn( aOrg ))
return true; return true;
// Do not attempt to resolve as any other name.
aUpper = aOrg; // for ocBad
break; // do; create ocBad token or set error.
} }
mbRewind = false; mbRewind = false;
...@@ -4859,8 +4862,7 @@ bool ScCompiler::HandleTableRef() ...@@ -4859,8 +4862,7 @@ bool ScCompiler::HandleTableRef()
pDBData->GetArea(aDBRange); pDBData->GetArea(aDBRange);
aDBRange.aEnd.SetTab(aDBRange.aStart.Tab()); aDBRange.aEnd.SetTab(aDBRange.aStart.Tab());
ScRange aRange( aDBRange); ScRange aRange( aDBRange);
ScTokenArray* pNew = new ScTokenArray(); sal_uInt16 nError = 0;
bool bAddRange = true;
bool bForwardToClose = false; bool bForwardToClose = false;
ScTableRefToken::Item eItem = pTR->GetItem(); ScTableRefToken::Item eItem = pTR->GetItem();
switch (eItem) switch (eItem)
...@@ -4874,7 +4876,7 @@ bool ScCompiler::HandleTableRef() ...@@ -4874,7 +4876,7 @@ bool ScCompiler::HandleTableRef()
if (pDBData->HasTotals()) if (pDBData->HasTotals())
aRange.aEnd.IncRow(-1); aRange.aEnd.IncRow(-1);
if (aRange.aEnd.Row() < aRange.aStart.Row()) if (aRange.aEnd.Row() < aRange.aStart.Row())
bAddRange = false; nError = errNoRef;
bForwardToClose = true; bForwardToClose = true;
} }
break; break;
...@@ -4888,7 +4890,7 @@ bool ScCompiler::HandleTableRef() ...@@ -4888,7 +4890,7 @@ bool ScCompiler::HandleTableRef()
if (pDBData->HasHeader()) if (pDBData->HasHeader())
aRange.aEnd.SetRow( aRange.aStart.Row()); aRange.aEnd.SetRow( aRange.aStart.Row());
else else
bAddRange = false; nError = errNoRef;
bForwardToClose = true; bForwardToClose = true;
} }
break; break;
...@@ -4903,7 +4905,7 @@ bool ScCompiler::HandleTableRef() ...@@ -4903,7 +4905,7 @@ bool ScCompiler::HandleTableRef()
if (pDBData->HasTotals()) if (pDBData->HasTotals())
aRange.aEnd.IncRow(-1); aRange.aEnd.IncRow(-1);
if (aRange.aEnd.Row() < aRange.aStart.Row()) if (aRange.aEnd.Row() < aRange.aStart.Row())
bAddRange = false; nError = errNoRef;
bForwardToClose = true; bForwardToClose = true;
} }
break; break;
...@@ -4912,7 +4914,7 @@ bool ScCompiler::HandleTableRef() ...@@ -4912,7 +4914,7 @@ bool ScCompiler::HandleTableRef()
if (pDBData->HasTotals()) if (pDBData->HasTotals())
aRange.aStart.SetRow( aRange.aEnd.Row()); aRange.aStart.SetRow( aRange.aEnd.Row());
else else
bAddRange = false; nError = errNoRef;
bForwardToClose = true; bForwardToClose = true;
} }
break; break;
...@@ -4921,7 +4923,7 @@ bool ScCompiler::HandleTableRef() ...@@ -4921,7 +4923,7 @@ bool ScCompiler::HandleTableRef()
if (pDBData->HasHeader()) if (pDBData->HasHeader())
aRange.aStart.IncRow(); aRange.aStart.IncRow();
if (aRange.aEnd.Row() < aRange.aStart.Row()) if (aRange.aEnd.Row() < aRange.aStart.Row())
bAddRange = false; nError = errNoRef;
bForwardToClose = true; bForwardToClose = true;
} }
break; break;
...@@ -4933,7 +4935,7 @@ bool ScCompiler::HandleTableRef() ...@@ -4933,7 +4935,7 @@ bool ScCompiler::HandleTableRef()
aRange.aEnd.SetRow( aPos.Row()); aRange.aEnd.SetRow( aPos.Row());
} }
else else
bAddRange = false; nError = errNoRef;
bForwardToClose = true; bForwardToClose = true;
} }
break; break;
...@@ -4995,6 +4997,11 @@ bool ScCompiler::HandleTableRef() ...@@ -4995,6 +4997,11 @@ bool ScCompiler::HandleTableRef()
eState = sStop; eState = sStop;
} }
break; break;
case ocBad:
eState = sLast;
if (!nError)
nError = errNoName;
break;
default: default:
eState = sStop; eState = sStop;
} }
...@@ -5005,7 +5012,8 @@ bool ScCompiler::HandleTableRef() ...@@ -5005,7 +5012,8 @@ bool ScCompiler::HandleTableRef()
} }
} while (eState != sStop); } while (eState != sStop);
} }
if (bAddRange) ScTokenArray* pNew = new ScTokenArray();
if (!nError)
{ {
if (bColumnRange) if (bColumnRange)
{ {
...@@ -5083,7 +5091,7 @@ bool ScCompiler::HandleTableRef() ...@@ -5083,7 +5091,7 @@ bool ScCompiler::HandleTableRef()
} }
else else
{ {
pTR->SetAreaRefRPN( pNew->Add( new FormulaErrorToken( errNoRef))); pTR->SetAreaRefRPN( pNew->Add( new FormulaErrorToken( nError)));
} }
while (nLevel-- > 0) while (nLevel-- > 0)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment