[Libreoffice-commits] core.git: Branch 'feature/formula-core-rework' - 97 commits - connectivity/source cui/source dbaccess/source desktop/scripts epm/epm-3.7.patch filter/source helpcontent2 i18nlangtag/source include/connectivity include/i18nlangtag include/oox include/sfx2 include/xmloff oox/source poppler/ExternalProject_poppler.mk poppler/poppler-mac-fake.patch.1 poppler/UnpackedTarball_poppler.mk reportdesign/source Repository.mk scaddins/source sc/CppunitTest_sc_filters_test.mk sc/CppunitTest_sc_subsequent_export_test.mk sc/CppunitTest_sc_subsequent_filters_test.mk sc/CppunitTest_sc_ucalc.mk sc/inc sc/Library_scqahelper.mk sc/Module_sc.mk scp2/source sc/qa sc/source sc/uiconfig sdext/Executable_xpdfimport.mk sdext/source sd/source sfx2/source slideshow/source starmath/qa starmath/source stoc/source store/source svtools/source svx/source sw/CppunitTest_sw_filters_test.mk sw/inc sw/qa sw/source sw/uiconfig sw/UIConfig_swriter.mk unoidl/source vcl/source vcl/unx writerfilter/source xm loff/inc xmloff/source

Kohei Yoshida kohei.yoshida at gmail.com
Tue Jul 9 21:26:01 PDT 2013


Rebased ref, commits from common ancestor:
commit 881e520806f1fc50de1c4bd8ae5c17c6e0598547
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 9 23:47:03 2013 -0400

    Nobody uses this marker method now.
    
    Change-Id: I06aea5100280c6dee756d8023e6e2fadb09662d7

diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 9f96975..d024007 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -516,13 +516,6 @@ public:
     void RegroupFormulaCells();
 
     /**
-     * Regroup existing formula cells when a new cell is inserted.
-     *
-     * @param nRow row at which a new cell is inserted.
-     */
-    void RegroupFormulaCells( SCROW nRow );
-
-    /**
      * Regroup existing formula cells when a range of new cells are inserted.
      *
      * @param nRow1 first row of inserted new cell span.
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 512dc8b7..aa4dd0e 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -1530,10 +1530,6 @@ void ScColumn::CellStorageModified()
 #endif
 }
 
-void ScColumn::RegroupFormulaCells( SCROW /*nRow*/ )
-{
-}
-
 void ScColumn::RegroupFormulaCells( SCROW /*nRow1*/, SCROW /*nRow2*/ )
 {
 }
commit a251d77ed57cf3c9c8f8d7b5defbe013faf301bb
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 9 23:43:37 2013 -0400

    Check formula cell group boundaries to optionally merge.
    
    Just in case...
    
    Change-Id: If1feac9f144a8ab7d53823a0625560a499d57b68

diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 68795f4..ad51473 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1373,9 +1373,22 @@ public:
                 // Group the cloned formula cells.
                 groupFormulaCells(aCloned);
 
-                maDestPos.miCellPos = mrDestCol.GetCellStore().set(
+                sc::CellStoreType& rDestCells = mrDestCol.GetCellStore();
+                maDestPos.miCellPos = rDestCells.set(
                     maDestPos.miCellPos, nTopRow, aCloned.begin(), aCloned.end());
 
+                // Merge adjacent formula cell groups (if applicable).
+                sc::CellStoreType::position_type aPos =
+                    rDestCells.position(maDestPos.miCellPos, nTopRow);
+                maDestPos.miCellPos = aPos.first;
+                mrDestCol.JoinFormulaCellAbove(aPos);
+                size_t nLastRow = nTopRow + nDataSize;
+                if (nLastRow < static_cast<size_t>(MAXROW))
+                {
+                    aPos = rDestCells.position(maDestPos.miCellPos, nLastRow+1);
+                    mrDestCol.JoinFormulaCellAbove(aPos);
+                }
+
                 setDefaultAttrsToDest(nTopRow, nDataSize);
             }
             break;
commit 08686dce2670aa667e380be4425d789a0594309f
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 9 23:27:37 2013 -0400

    Formula cell grouping in CopyUpdated should already be done.
    
    Since it uses the same function object CopyToClipHandler which I added
    grouping support to earlier.
    
    Change-Id: I8964f95041b5170ca1c7fbe073f85fcf77367c9f

diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index ae463b7..68795f4 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1994,10 +1994,7 @@ void ScColumn::CopyUpdated( const ScColumn& rPosCol, ScColumn& rDestCol ) const
     sc::CellStoreType::const_iterator itPos = maCells.begin();
     sc::SingleColumnSpanSet::SpansType::const_iterator it = aRanges.begin(), itEnd = aRanges.end();
     for (; it != itEnd; ++it)
-    {
         itPos = sc::ParseBlock(itPos, maCells, aFunc, it->mnRow1, it->mnRow2);
-        rDestCol.RegroupFormulaCells(it->mnRow1, it->mnRow2);
-    }
 
     rDestCol.CellStorageModified();
 }
commit 101ab3a270baf2e828360433f3a17ed56903a7bf
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 9 23:17:07 2013 -0400

    Remove this marker.
    
    Change-Id: Ia6216631aea17492ed7d864e6033b4677b6d7eb9

diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 7ce2d5b..ae463b7 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1957,7 +1957,6 @@ void ScColumn::CopyToColumn(
             sc::ParseBlock(maCells.begin(), maCells, aFunc, nRow1, nRow2);
         }
 
-        rColumn.RegroupFormulaCells(nRow1, nRow2);
         rColumn.CellStorageModified();
     }
 }
commit 1d23b58c053805d6d76d5515d1b4534e7bf3432a
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 9 23:04:50 2013 -0400

    Add test for formula grouping during undo.
    
    Change-Id: Ifab98b1eedf4420ed5b609e0684422c8aae0d33c

diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 78005fe..06c5b83 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -5755,16 +5755,13 @@ void Test::testCopyPaste()
     ScDocument aClipDoc(SCDOCMODE_CLIP);
     copyToClip(m_pDoc, aRange, &aClipDoc);
 
-    sal_uInt16 nFlags = IDF_ALL;
     aRange = ScRange(0,1,1,2,1,1);//target: Sheet2.A2:C2
     ScDocument* pUndoDoc = new ScDocument(SCDOCMODE_UNDO);
     pUndoDoc->InitUndo(m_pDoc, 1, 1, true, true);
-    ScMarkData aMarkData2;
-    aMarkData2.SetMarkArea(aRange);
-    ScRefUndoData* pRefUndoData= new ScRefUndoData(m_pDoc);
-    ScUndoPaste aUndo(
-        &getDocShell(), aRange, aMarkData2, pUndoDoc, NULL, IDF_ALL, pRefUndoData, false);
-    m_pDoc->CopyFromClip(aRange, aMarkData2, nFlags, NULL, &aClipDoc);
+    boost::scoped_ptr<ScUndoPaste> pUndo(createUndoPaste(getDocShell(), aRange, pUndoDoc));
+    ScMarkData aMark;
+    aMark.SetMarkArea(aRange);
+    m_pDoc->CopyFromClip(aRange, aMark, IDF_ALL, NULL, &aClipDoc);
 
     //check values after copying
     OUString aString;
@@ -5786,13 +5783,13 @@ void Test::testCopyPaste()
 
 
     //check undo and redo
-    aUndo.Undo();
+    pUndo->Undo();
     fValue = m_pDoc->GetValue(ScAddress(1,1,1));
     ASSERT_DOUBLES_EQUAL_MESSAGE("after undo formula should return nothing", fValue, 0);
     aString = m_pDoc->GetString(2, 1, 1);
     CPPUNIT_ASSERT_MESSAGE("after undo string should be removed", aString.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("")));
 
-    aUndo.Redo();
+    pUndo->Redo();
     fValue = m_pDoc->GetValue(ScAddress(1,1,1));
     ASSERT_DOUBLES_EQUAL_MESSAGE("formula should return 2 after redo", fValue, 2);
     aString = m_pDoc->GetString(2, 1, 1);
@@ -6957,6 +6954,17 @@ void Test::pasteFromClip(ScDocument* pDestDoc, const ScRange& rDestRange, ScDocu
     pDestDoc->CopyFromClip(rDestRange, aMark, IDF_ALL, NULL, pClipDoc);
 }
 
+ScUndoPaste* Test::createUndoPaste(ScDocShell& rDocSh, const ScRange& rRange, ScDocument* pUndoDoc)
+{
+    ScDocument* pDoc = rDocSh.GetDocument();
+    ScMarkData aMarkData;
+    aMarkData.SetMarkArea(rRange);
+    ScRefUndoData* pRefUndoData = new ScRefUndoData(pDoc);
+
+    return new ScUndoPaste(
+        &rDocSh, rRange, aMarkData, pUndoDoc, NULL, IDF_ALL, pRefUndoData, false);
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 9530614..0489683 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -13,6 +13,7 @@
 #include "helper/qahelper.hxx"
 
 struct TestImpl;
+class ScUndoPaste;
 
 /**
  * Temporarily set formula grammar.
@@ -33,6 +34,7 @@ public:
     static void clearRange(ScDocument* pDoc, const ScRange& rRange);
     static void copyToClip(ScDocument* pSrcDoc, const ScRange& rRange, ScDocument* pClipDoc);
     static void pasteFromClip(ScDocument* pDestDoc, const ScRange& rDestRange, ScDocument* pClipDoc);
+    static ScUndoPaste* createUndoPaste(ScDocShell& rDocSh, const ScRange& rRange, ScDocument* pUndoDoc);
 
     Test();
     ~Test();
diff --git a/sc/qa/unit/ucalc_sharedformula.cxx b/sc/qa/unit/ucalc_sharedformula.cxx
index 035f4ea..2c49a16 100644
--- a/sc/qa/unit/ucalc_sharedformula.cxx
+++ b/sc/qa/unit/ucalc_sharedformula.cxx
@@ -13,6 +13,7 @@
 #include "cellvalue.hxx"
 #include "docsh.hxx"
 #include "clipparam.hxx"
+#include "undoblk.hxx"
 
 #include "formula/grammar.hxx"
 
@@ -266,6 +267,43 @@ void Test::testSharedFormulasCopyPaste()
     CPPUNIT_ASSERT_EQUAL(1, pFC->GetSharedTopRow());
     CPPUNIT_ASSERT_EQUAL(9, pFC->GetSharedLength());
 
+    ScRange aRange(1,0,0,1,9,0); // B1:B10
+    ScDocument* pUndoDoc = new ScDocument(SCDOCMODE_UNDO);
+    pUndoDoc->InitUndo(m_pDoc, 0, 0, true, true);
+    m_pDoc->CopyToDocument(aRange, IDF_CONTENTS, false, pUndoDoc);
+    boost::scoped_ptr<ScUndoPaste> pUndo(createUndoPaste(*m_xDocShRef, aRange, pUndoDoc));
+
+    // First, make sure the formula cells are shared in the undo document.
+    aPos.SetCol(1);
+    for (SCROW i = 0; i <= 9; ++i)
+    {
+        aPos.SetRow(i);
+        pFC = pUndoDoc->GetFormulaCell(aPos);
+        CPPUNIT_ASSERT_MESSAGE("Must be a formula cell.", pFC);
+        CPPUNIT_ASSERT_EQUAL(0, pFC->GetSharedTopRow());
+        CPPUNIT_ASSERT_EQUAL(10, pFC->GetSharedLength());
+    }
+
+    // Overwrite B1:B10.
+    for (SCROW i = 0; i <= 9; ++i)
+        m_pDoc->SetValue(ScAddress(1,i,0), i*10);
+
+    for (SCROW i = 0; i <= 9; ++i)
+        CPPUNIT_ASSERT_MESSAGE("Numeric cell was expected.", m_pDoc->GetCellType(ScAddress(1,i,0)) == CELLTYPE_VALUE);
+
+    // Undo the action to fill B1:B10 with formula cells again.
+    pUndo->Undo();
+
+    aPos.SetCol(1);
+    for (SCROW i = 0; i <= 9; ++i)
+    {
+        aPos.SetRow(i);
+        pFC = m_pDoc->GetFormulaCell(aPos);
+        CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC);
+        CPPUNIT_ASSERT_EQUAL(0, pFC->GetSharedTopRow());
+        CPPUNIT_ASSERT_EQUAL(10, pFC->GetSharedLength());
+    }
+
     m_pDoc->DeleteTab(0);
 }
 
commit b61ffbc4b63ed1be09475066a8a6511306fd1e9b
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 9 22:56:30 2013 -0400

    Grouping of formula cells during undo.
    
    Change-Id: I57693eee34a073cd3f39fdd4f5a74eafb12c9dc7

diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index c69a3c1..7ce2d5b 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1572,7 +1572,6 @@ class CopyAsLinkHandler
     sc::ColumnBlockPosition maDestPos;
     sc::ColumnBlockPosition* mpDestPos;
     sal_uInt16 mnCopyFlags;
-    std::vector<ScFormulaCell*> maCellBuffer;
 
     void setDefaultAttrToDest(size_t nRow)
     {
@@ -1602,13 +1601,12 @@ class CopyAsLinkHandler
     {
         size_t nTopRow = aNode.position + nOffset;
 
-        maCellBuffer.clear();
-        maCellBuffer.reserve(nDataSize);
-
         for (size_t i = 0; i < nDataSize; ++i)
-            maCellBuffer.push_back(createRefCell(nTopRow + i));
+        {
+            SCROW nRow = nTopRow + i;
+            mrDestCol.SetFormulaCell(maDestPos, nRow, createRefCell(nRow));
+        }
 
-        maDestPos.miCellPos = mrDestCol.GetCellStore().set(maDestPos.miCellPos, nTopRow, maCellBuffer.begin(), maCellBuffer.end());
         setDefaultAttrsToDest(nTopRow, nDataSize);
     }
 
@@ -1727,7 +1725,7 @@ class CopyByCloneHandler
             // Clone as formula cell.
             ScFormulaCell* pCell = new ScFormulaCell(rSrcCell, mrDestCol.GetDoc(), aDestPos);
             pCell->SetDirtyVar();
-            maDestPos.miCellPos = mrDestCol.GetCellStore().set(maDestPos.miCellPos, nRow, pCell);
+            mrDestCol.SetFormulaCell(maDestPos, nRow, pCell);
             setDefaultAttrToDest(nRow);
             return;
         }
@@ -1743,8 +1741,7 @@ class CopyByCloneHandler
                 // error codes are cloned with values
                 ScFormulaCell* pErrCell = new ScFormulaCell(&mrDestCol.GetDoc(), aDestPos);
                 pErrCell->SetErrCode(nErr);
-                maDestPos.miCellPos = mrDestCol.GetCellStore().set(
-                    maDestPos.miCellPos, nRow, new ScFormulaCell(rSrcCell, mrDestCol.GetDoc(), aDestPos));
+                mrDestCol.SetFormulaCell(maDestPos, nRow, pErrCell);
                 setDefaultAttrToDest(nRow);
                 return;
             }
commit 3009e908b304b3df5adfb4e9bdff4243e431014d
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 9 00:54:46 2013 -0400

    Group a new formula cell in CopyCellToDocument.
    
    Change-Id: I8a8a24f4d40210700979ef249636b85b6b81e8cd

diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index ea48739..c69a3c1 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1535,7 +1535,7 @@ void ScColumn::CopyCellToDocument( SCROW nSrcRow, SCROW nDestRow, ScColumn& rDes
             ScAddress aDestPos = p->aPos;
             aDestPos.SetRow(nDestRow);
             ScFormulaCell* pNew = new ScFormulaCell(*p, *rDestCol.pDocument, aDestPos);
-            rDestCol.maCells.set(nDestRow, pNew);
+            rDestCol.SetFormulaCell(nDestRow, pNew);
         }
         break;
         case sc::element_type_empty:
@@ -1550,7 +1550,6 @@ void ScColumn::CopyCellToDocument( SCROW nSrcRow, SCROW nDestRow, ScColumn& rDes
     else
         rDestCol.maCellTextAttrs.set_empty(nDestRow, nDestRow);
 
-    rDestCol.RegroupFormulaCells(nDestRow);
     rDestCol.CellStorageModified();
 }
 
commit 8e4c37e2f3dad18611988e2510f03382f11f1f57
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 9 00:48:01 2013 -0400

    Remove these markers.
    
    CopyToClip is covered by the previous commit.
    CopyStaticToClip doesn't copy any formula cells.
    
    Change-Id: Iaca9d1875396629e00a86b6a9ec8048553ec3053

diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index bb6677d..ea48739 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1395,7 +1395,6 @@ void ScColumn::CopyToClip(
 
     CopyToClipHandler aFunc(*this, rColumn, rCxt.getBlockPosition(rColumn.nTab, rColumn.nCol));
     sc::ParseBlock(maCells.begin(), maCells, aFunc, nRow1, nRow2);
-    rColumn.RegroupFormulaCells(nRow1, nRow2);
     rColumn.CellStorageModified();
 }
 
@@ -1502,7 +1501,6 @@ void ScColumn::CopyStaticToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol
             break;
     }
 
-    rDestCol.RegroupFormulaCells(nRow1, nRow2);
     rDestCol.CellStorageModified();
 }
 
commit 7bf086e2e790a23c0815a5acfeffc70a3f9278b2
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 9 00:40:50 2013 -0400

    Add test for formula grouping during copy and paste.
    
    Change-Id: I19604b753801073366058527c19020cc5db812d0

diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 49bd3ca..78005fe 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -87,6 +87,17 @@ struct TestImpl
     ScDocShellRef m_xDocShell;
 };
 
+FormulaGrammarSwitch::FormulaGrammarSwitch(ScDocument* pDoc, formula::FormulaGrammar::Grammar eGrammar) :
+    mpDoc(pDoc), meOldGrammar(pDoc->GetGrammar())
+{
+    mpDoc->SetGrammar(eGrammar);
+}
+
+FormulaGrammarSwitch::~FormulaGrammarSwitch()
+{
+    mpDoc->SetGrammar(meOldGrammar);
+}
+
 void printRange(ScDocument* pDoc, const ScRange& rRange, const char* pCaption)
 {
     SCROW nRow1 = rRange.aStart.Row(), nRow2 = rRange.aEnd.Row();
@@ -129,26 +140,6 @@ ScRange insertRangeData(ScDocument* pDoc, const ScAddress& rPos, const char* aDa
     return aRange;
 }
 
-/**
- * Temporarily set formula grammar.
- */
-class FormulaGrammarSwitch
-{
-    ScDocument* mpDoc;
-    formula::FormulaGrammar::Grammar meOldGrammar;
-public:
-    FormulaGrammarSwitch(ScDocument* pDoc, formula::FormulaGrammar::Grammar eGrammar) :
-        mpDoc(pDoc), meOldGrammar(pDoc->GetGrammar())
-    {
-        mpDoc->SetGrammar(eGrammar);
-    }
-
-    ~FormulaGrammarSwitch()
-    {
-        mpDoc->SetGrammar(meOldGrammar);
-    }
-};
-
 class MeasureTimeSwitch
 {
     double& mrDiff;
@@ -5761,11 +5752,8 @@ void Test::testCopyPaste()
 
     //copy Sheet1.A1:C1 to Sheet2.A2:C2
     ScRange aRange(0,0,0,2,0,0);
-    ScClipParam aClipParam(aRange, false);
-    ScMarkData aMark;
-    aMark.SetMarkArea(aRange);
     ScDocument aClipDoc(SCDOCMODE_CLIP);
-    m_pDoc->CopyToClip(aClipParam, &aClipDoc, &aMark);
+    copyToClip(m_pDoc, aRange, &aClipDoc);
 
     sal_uInt16 nFlags = IDF_ALL;
     aRange = ScRange(0,1,1,2,1,1);//target: Sheet2.A2:C2
@@ -6954,6 +6942,21 @@ void Test::clearRange(ScDocument* pDoc, const ScRange& rRange)
         rRange.aEnd.Col(), rRange.aEnd.Row(), aMarkData, IDF_CONTENTS);
 }
 
+void Test::copyToClip(ScDocument* pSrcDoc, const ScRange& rRange, ScDocument* pClipDoc)
+{
+    ScClipParam aClipParam(rRange, false);
+    ScMarkData aMark;
+    aMark.SetMarkArea(rRange);
+    pSrcDoc->CopyToClip(aClipParam, pClipDoc, &aMark);
+}
+
+void Test::pasteFromClip(ScDocument* pDestDoc, const ScRange& rDestRange, ScDocument* pClipDoc)
+{
+    ScMarkData aMark;
+    aMark.SetMarkArea(rDestRange);
+    pDestDoc->CopyFromClip(rDestRange, aMark, IDF_ALL, NULL, pClipDoc);
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 2d7a41a..9530614 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -14,11 +14,25 @@
 
 struct TestImpl;
 
+/**
+ * Temporarily set formula grammar.
+ */
+class FormulaGrammarSwitch
+{
+    ScDocument* mpDoc;
+    formula::FormulaGrammar::Grammar meOldGrammar;
+public:
+    FormulaGrammarSwitch(ScDocument* pDoc, formula::FormulaGrammar::Grammar eGrammar);
+    ~FormulaGrammarSwitch();
+};
+
 class Test : public test::BootstrapFixture
 {
 public:
 
     static void clearRange(ScDocument* pDoc, const ScRange& rRange);
+    static void copyToClip(ScDocument* pSrcDoc, const ScRange& rRange, ScDocument* pClipDoc);
+    static void pasteFromClip(ScDocument* pDestDoc, const ScRange& rDestRange, ScDocument* pClipDoc);
 
     Test();
     ~Test();
@@ -162,6 +176,7 @@ public:
     void testUpdateReference();
     void testSearchCells();
     void testSharedFormulas();
+    void testSharedFormulasCopyPaste();
     void testFormulaPosition();
 
     /**
@@ -280,6 +295,7 @@ public:
     CPPUNIT_TEST(testUpdateReference);
     CPPUNIT_TEST(testSearchCells);
     CPPUNIT_TEST(testSharedFormulas);
+    CPPUNIT_TEST(testSharedFormulasCopyPaste);
     CPPUNIT_TEST(testFormulaPosition);
     CPPUNIT_TEST(testJumpToPrecedentsDependents);
     CPPUNIT_TEST(testSetBackgroundColor);
diff --git a/sc/qa/unit/ucalc_sharedformula.cxx b/sc/qa/unit/ucalc_sharedformula.cxx
index 59aa7a4..035f4ea 100644
--- a/sc/qa/unit/ucalc_sharedformula.cxx
+++ b/sc/qa/unit/ucalc_sharedformula.cxx
@@ -12,6 +12,9 @@
 #include "formulacell.hxx"
 #include "cellvalue.hxx"
 #include "docsh.hxx"
+#include "clipparam.hxx"
+
+#include "formula/grammar.hxx"
 
 void Test::testSharedFormulas()
 {
@@ -227,4 +230,43 @@ void Test::testSharedFormulas()
     m_pDoc->DeleteTab(0);
 }
 
+void Test::testSharedFormulasCopyPaste()
+{
+    m_pDoc->InsertTab(0, "Test");
+    FormulaGrammarSwitch aFGSwitch(m_pDoc, formula::FormulaGrammar::GRAM_ENGLISH_XL_R1C1);
+
+    // Fill formula cells B1:B10.
+    for (SCROW i = 0; i <= 9; ++i)
+        m_pDoc->SetString(1, i, 0, "=RC[-1]");
+
+    ScAddress aPos(1, 8, 0); // B9
+    ScFormulaCell* pFC = m_pDoc->GetFormulaCell(aPos);
+    CPPUNIT_ASSERT_MESSAGE("B9 should be a formula cell.", pFC);
+    CPPUNIT_ASSERT_EQUAL(0, pFC->GetSharedTopRow());
+    CPPUNIT_ASSERT_EQUAL(10, pFC->GetSharedLength());
+
+    // Copy formulas in B6:B9 to the clipboard doc.
+    ScRange aSrcRange(1,5,0,1,8,0); // B6:B9
+    ScDocument aClipDoc(SCDOCMODE_CLIP);
+    copyToClip(m_pDoc, aSrcRange, &aClipDoc);
+    pFC = aClipDoc.GetFormulaCell(aPos);
+    CPPUNIT_ASSERT_MESSAGE("B9 in the clip doc should be a formula cell.", pFC);
+    CPPUNIT_ASSERT_EQUAL(5, pFC->GetSharedTopRow());
+    CPPUNIT_ASSERT_EQUAL(4, pFC->GetSharedLength());
+
+    // Paste them to C2:C10.
+    ScRange aDestRange(2,1,0,2,9,0);
+    OUString aRS;
+    aDestRange.Format(aRS, SCR_ABS);
+    pasteFromClip(m_pDoc, aDestRange, &aClipDoc);
+    aPos.SetCol(2);
+    aPos.SetRow(1);
+    pFC = m_pDoc->GetFormulaCell(aPos);
+    CPPUNIT_ASSERT_MESSAGE("C2 should be a formula cell.", pFC);
+    CPPUNIT_ASSERT_EQUAL(1, pFC->GetSharedTopRow());
+    CPPUNIT_ASSERT_EQUAL(9, pFC->GetSharedLength());
+
+    m_pDoc->DeleteTab(0);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit df168ac73149d3a48c82b375144ab59e3338de02
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 9 00:39:26 2013 -0400

    Group formula cells when copying to clip, prevent crash during pasting.
    
    Change-Id: I6a33301d74d9845e8c0fa77894fbd89bea40fd1b

diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index bd48bad..bb6677d 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1257,6 +1257,40 @@ class CopyToClipHandler
             maDestPos.miCellTextAttrPos, nRow, aAttrs.begin(), aAttrs.end());
     }
 
+    void groupFormulaCells(std::vector<ScFormulaCell*>& rCells)
+    {
+        if (rCells.empty())
+            return;
+
+        std::vector<ScFormulaCell*>::iterator it = rCells.begin(), itEnd = rCells.end();
+        ScFormulaCell* pPrev = *it;
+        ScFormulaCell* pCur = NULL;
+        for (++it; it != itEnd; ++it, pPrev = pCur)
+        {
+            pCur = *it;
+            ScFormulaCell::CompareState eState = pPrev->CompareByTokenArray(*pPrev);
+            if (eState == ScFormulaCell::NotEqual)
+                continue;
+
+            ScFormulaCellGroupRef xGroup = pPrev->GetCellGroup();
+            if (xGroup)
+            {
+                // Extend the group.
+                ++xGroup->mnLength;
+                pCur->SetCellGroup(xGroup);
+                continue;
+            }
+
+            // Create a new group.
+            xGroup.reset(new ScFormulaCellGroup);
+            xGroup->mnStart = pPrev->aPos.Row();
+            xGroup->mnLength = 2;
+            xGroup->mbInvariant = (eState == ScFormulaCell::EqualInvariant);
+            pPrev->SetCellGroup(xGroup);
+            pCur->SetCellGroup(xGroup);
+        }
+    }
+
 public:
     CopyToClipHandler(const ScColumn& rSrcCol, ScColumn& rDestCol, sc::ColumnBlockPosition* pDestPos) :
         mrSrcCol(rSrcCol), mrDestCol(rDestCol), mpDestPos(pDestPos)
@@ -1336,6 +1370,9 @@ public:
                     aCloned.push_back(new ScFormulaCell(rOld, mrDestCol.GetDoc(), aDestPos));
                 }
 
+                // Group the cloned formula cells.
+                groupFormulaCells(aCloned);
+
                 maDestPos.miCellPos = mrDestCol.GetCellStore().set(
                     maDestPos.miCellPos, nTopRow, aCloned.begin(), aCloned.end());
 
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index d99a6ec..8352d46 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -897,6 +897,7 @@ class CopyCellsFromClipHandler
     SCCOL mnCol;
     long mnRowOffset;
     sc::ColumnBlockPosition maDestBlockPos;
+    sc::ColumnBlockPosition* mpDestBlockPos; // to save it for next iteration.
 
     bool isDateCell(SCROW nSrcRow) const
     {
@@ -928,15 +929,22 @@ public:
         mrDestCol(rDestCol),
         mnTab(nDestTab),
         mnCol(nDestCol),
-        mnRowOffset(nRowOffset)
+        mnRowOffset(nRowOffset),
+        mpDestBlockPos(mrCxt.getBlockPosition(nDestTab, nDestCol))
     {
-        sc::ColumnBlockPosition* p = mrCxt.getBlockPosition(nDestTab, nDestCol);
-        if (p)
-            maDestBlockPos = *p;
+        if (mpDestBlockPos)
+            maDestBlockPos = *mpDestBlockPos;
         else
             mrDestCol.InitBlockPosition(maDestBlockPos);
     }
 
+    ~CopyCellsFromClipHandler()
+    {
+        if (mpDestBlockPos)
+            // Don't forget to save this to the context!
+            *mpDestBlockPos = maDestBlockPos;
+    }
+
     void operator() (const sc::CellStoreType::value_type& node, size_t nOffset, size_t nDataSize)
     {
         if (node.type == sc::element_type_empty)
commit 7f3bef3d14791f2936b862295d2f5de848561987
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jul 10 02:58:32 2013 +0200

    don't use empty table name
    
    Change-Id: I9c8c3882f659747d53a047481ccabf1785835c99

diff --git a/dbaccess/source/core/api/SingleSelectQueryComposer.cxx b/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
index c7c5776..1cbb0d1 100644
--- a/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
+++ b/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
@@ -508,10 +508,13 @@ OUString OSingleSelectQueryComposer::impl_getColumnName_throw(const Reference< X
                     ::dbtools::qualifiedNameComponents(m_xMetaData,sTableName,aCatlog,aSchema,aTable,::dbtools::eInDataManipulation);
                     sTableName = ::dbtools::composeTableName( m_xMetaData, aCatlog, aSchema, aTable, sal_True, ::dbtools::eInDataManipulation );
                 }
-                else
+                else if (!sTableName.isEmpty())
                     sTableName = ::dbtools::quoteName(aQuote,sTableName);
 
-                aNewName =  sTableName + "." + ::dbtools::quoteName(aQuote,sRealName);
+                if(sTableName.isEmpty())
+                    aNewName =  ::dbtools::quoteName(aQuote,sRealName);
+                else
+                    aNewName =  sTableName + "." + ::dbtools::quoteName(aQuote,sRealName);
             }
         }
         else
commit 83076c22e1ffbad06f4b250b69cd239758fbb1ba
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jul 10 02:58:01 2013 +0200

    TODO note
    
    Change-Id: I1b310119c08052949e975bfa3838e229d4e140b2

diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx
index bb271b9..0ae7b83 100644
--- a/connectivity/source/parse/sqliterator.cxx
+++ b/connectivity/source/parse/sqliterator.cxx
@@ -589,6 +589,13 @@ const OSQLParseNode* OSQLParseTreeIterator::getTableNode( OSQLTables& _rTables,
                 if ( SQL_ISRULE( pQueryExpression, select_statement ) )
                 {
                     getSelect_statement( *m_pImpl->m_pSubTables, pQueryExpression );
+                    // LEM TODO: now, we need to setup a OSQLTable from pQueryExpression in some way
+                    //           and stick it in _rTables[rTableRange]. Probably fake it by
+                    //           setting up a full OSQLParseTreeIterator on pQueryExpression
+                    //           and using its m_aSelectColumns
+                    //           This is necessary in stuff like "SELECT * FROM tbl1 INNER JOIN (SELECT foo, bar FROM tbl2) AS tbl3"
+                    //           so that setSelectColumnName() can expand the "*" correctly.
+                    //           See e.g. R_UserAndLastSubscription query of https://bugs.freedesktop.org/attachment.cgi?id=71871
                 }
                 else
                 {
commit c9a8f238e03f7b4e54f5a963a6593888759ae3fa
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jul 10 01:13:32 2013 +0200

    remove bogus test
    
    the TABLENAME property contains the *original* tablename, but this column should have the query table alias as table name
    
    Change-Id: Ieeb362f38b701b92998e293dda474bad36e5e577

diff --git a/connectivity/source/parse/PColumn.cxx b/connectivity/source/parse/PColumn.cxx
index 006a584..60ed5b0 100644
--- a/connectivity/source/parse/PColumn.cxx
+++ b/connectivity/source/parse/PColumn.cxx
@@ -214,9 +214,6 @@ OOrderColumn::OOrderColumn( const Reference<XPropertySet>& _xColumn, const OUStr
     ,m_bAscending(_bAscending)
 {
     construct();
-    OSL_ENSURE( getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME))).isEmpty() ||
-                i_rOriginatingTableName == getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME)) ),
-                "dbaccess::OOrderColumn::OOrderColumn: forced originating table name != underlying column table name" );
 }
 
 // -----------------------------------------------------------------------------
commit f220c3913a167b0d9702aca2b623839abe8665f1
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jul 10 00:52:04 2013 +0200

    make SQL grammar Generalised LR
    
    This fixes parsing failures, like e.g.
    warn:legacy.osl:30429:1:dbaccess/source/core/api/SingleSelectQueryComposer.cxx:783: OSingleSelectQueryComposer::getColumns: could not parse the column retrieval statement!
    when opening query "Balance" of https://bugs.freedesktop.org/attachment.cgi?id=71964
    
    OTOH, since we have reduce/reduce conflicts, we might have true
    ambiguities in our grammar. This change makes the parsing fail
    in the presence of full-expression ambiguities instead of making
    a ~arbitrary choice.
    
    Change-Id: I88574da91045dd52f198f193c78d144302f298a4

diff --git a/connectivity/source/parse/sqlbison.y b/connectivity/source/parse/sqlbison.y
index c2b02ce..160852f 100644
--- a/connectivity/source/parse/sqlbison.y
+++ b/connectivity/source/parse/sqlbison.y
@@ -1,3 +1,4 @@
+%glr-parser
 %token-table
 %{
 /*
@@ -304,7 +305,7 @@ op_schema:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	;
@@ -349,9 +350,9 @@ base_table_def:
 		$$->append($1);
 		$$->append($2);
 		$$->append($3);
-		$$->append($4 = newNode("(", SQL_NODE_PUNCTUATION));
+		$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 		$$->append($5);
-		$$->append($6 = newNode(")", SQL_NODE_PUNCTUATION));}
+		$$->append(newNode(")", SQL_NODE_PUNCTUATION));}
 	;
 
 base_table_element_commalist:
@@ -424,9 +425,9 @@ column_def_opt:
 	|       SQL_TOKEN_CHECK '(' search_condition ')'
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));}
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));}
 	|       SQL_TOKEN_REFERENCES table_node
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
@@ -435,53 +436,53 @@ column_def_opt:
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
 			$$->append($2);
-			$$->append($3 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($4);
-			$$->append($5 = newNode(")", SQL_NODE_PUNCTUATION));}
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));}
 	;
 
 table_constraint_def:
 		unique_spec '(' column_commalist ')'
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));}
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));}
 	|       SQL_TOKEN_FOREIGN SQL_TOKEN_KEY '(' column_commalist ')' SQL_TOKEN_REFERENCES table_node
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
 			$$->append($2);
-			$$->append($3 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($4);
-			$$->append($5 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 			$$->append($6);
 			$$->append($7);}
 	|       SQL_TOKEN_FOREIGN SQL_TOKEN_KEY '(' column_commalist ')' SQL_TOKEN_REFERENCES table_node '(' column_commalist ')'
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
 			$$->append($2);
-			$$->append($3 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($4);
-			$$->append($5 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 			$$->append($6);
 			$$->append($7);
-			$$->append($8 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($9);
-			$$->append($10 = newNode(")", SQL_NODE_PUNCTUATION));}
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));}
 	|       SQL_TOKEN_CHECK '(' search_condition ')'
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));}
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));}
 	;
 op_column_commalist:
 	/* empty */ {$$ = SQL_NEW_RULE;}
 	| '(' column_commalist ')'
 		{$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 column_commalist:
@@ -518,9 +519,9 @@ opt_column_commalist:
 		/* empty */         {$$ = SQL_NEW_RULE;}
 	|       '(' column_commalist ')'
 			{$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));}
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));}
 	;
 
 privilege_def:
@@ -671,9 +672,9 @@ manipulative_statement:
 	|		'{' odbc_call_spec '}'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("{", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("{", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode("}", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("}", SQL_NODE_PUNCTUATION));
 		}
 	;
 
@@ -738,9 +739,9 @@ values_or_query_spec:
 		SQL_TOKEN_VALUES '(' table_value_const_list ')'
 		{$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 
@@ -765,9 +766,9 @@ row_value_constructor:
 /*	  |		'(' row_value_const_list ')'
 			{
 				$$ = SQL_NEW_RULE;
-				$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+				$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 				$$->append($2);
-				$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+				$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 			}
 			*/
 	;
@@ -891,7 +892,7 @@ selection:
 		'*'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("*", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("*", SQL_NODE_PUNCTUATION));
 		}
 	|	scalar_exp_commalist
 	;
@@ -1033,17 +1034,17 @@ table_ref:
 	|	'{' SQL_TOKEN_OJ joined_table '}'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("{", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("{", SQL_NODE_PUNCTUATION));
 			$$->append($2);
 			$$->append($3);
-			$$->append($4 = newNode("}", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("}", SQL_NODE_PUNCTUATION));
 		}
 	|	'(' joined_table ')'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 where_clause:
@@ -1097,9 +1098,9 @@ boolean_primary:
 	|   '(' search_condition ')'
 		{ // boolean_primary: rule 2
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	row_value_constructor_elem  /*[^')' ',']*/
 		{
@@ -1130,9 +1131,9 @@ parenthesized_boolean_value_expression:
    '(' search_condition ')'
 	{ // boolean_primary: rule 2
 		$$ = SQL_NEW_RULE;
-		$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+		$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 		$$->append($2);
-		$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+		$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 	}
 	;
 boolean_test:
@@ -1381,10 +1382,10 @@ opt_escape:
 	|	'{' SQL_TOKEN_ESCAPE SQL_TOKEN_STRING '}'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("{", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("{", SQL_NODE_PUNCTUATION));
 			$$->append($2);
 			$$->append($3);
-			$$->append($4 = newNode("}", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("}", SQL_NODE_PUNCTUATION));
 		}
 	;
 
@@ -1426,9 +1427,9 @@ in_predicate_value:
 		}
 	  | '(' value_exp_commalist ')'
 		{$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 in_predicate_part_2:
@@ -1515,9 +1516,9 @@ unique_test:
 subquery:
 		'(' query_exp ')'
 			{$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));}
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));}
 	;
 
 	/* scalar expressions */
@@ -1538,8 +1539,8 @@ select_sublist:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode(".", SQL_NODE_PUNCTUATION));
-			$$->append($3 = newNode("*", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("*", SQL_NODE_PUNCTUATION));
 		}
 */
 		derived_column
@@ -1564,14 +1565,14 @@ op_like:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("*", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("*", SQL_NODE_PUNCTUATION));
 			xxx_pGLOBAL_SQLPARSER->reduceLiteral($$, sal_False);
 		}
 	|	op_like '?'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("?", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("?", SQL_NODE_PUNCTUATION));
 			xxx_pGLOBAL_SQLPARSER->reduceLiteral($$, sal_False);
 		}
 	;
@@ -1651,19 +1652,19 @@ position_exp:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			$$->append($4);
 			$$->append($5);
-			$$->append($6 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	SQL_TOKEN_POSITION '(' value_exp_commalist ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 num_value_fct:
@@ -1676,17 +1677,17 @@ char_length_exp:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	SQL_TOKEN_SQL_TOKEN_INTNUM '(' value_exp ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 
 	;
@@ -1695,9 +1696,9 @@ octet_length_exp:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 bit_length_exp:
@@ -1705,9 +1706,9 @@ bit_length_exp:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 length_exp:
@@ -1773,11 +1774,11 @@ extract_exp:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			$$->append($4);
 			$$->append($5);
-			$$->append($6 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 unsigned_value_spec:
@@ -1805,63 +1806,63 @@ set_fct_spec:
 	|	'{' odbc_fct_spec '}'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("{", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("{", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode("}", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("}", SQL_NODE_PUNCTUATION));
 		}
 	|	function_name '(' ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	function_name0 '(' ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	function_name1 '(' function_arg ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	function_name2 '(' function_arg_commalist2 ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	function_name3 '(' function_arg_commalist3 ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	string_function_4Argument '(' function_arg_commalist4 ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	function_name '(' function_args_commalist ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	function_name12 '(' function_args_commalist ')'
 		{
@@ -1869,9 +1870,9 @@ set_fct_spec:
 			{
 				$$ = SQL_NEW_RULE;
 				$$->append($1);
-				$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+				$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 				$$->append($3);
-				$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+				$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 			}
 			else
 				YYERROR;
@@ -1882,9 +1883,9 @@ set_fct_spec:
 			{
 				$$ = SQL_NEW_RULE;
 				$$->append($1);
-				$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+				$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 				$$->append($3);
-				$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+				$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 			}
 			else
 				YYERROR;
@@ -2024,15 +2025,15 @@ window_function_type :
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	SQL_TOKEN_ROW_NUMBER '(' ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	| general_set_fct
 	| ntile_function
@@ -2045,9 +2046,9 @@ ntile_function :
 	{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 	}
 	;
 dynamic_parameter_specification:
@@ -2065,15 +2066,15 @@ opt_lead_or_lag_function:
 	| ',' offset
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode(",", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(",", SQL_NODE_PUNCTUATION));
 			$$->append($2);
 		}
 	| ',' offset ',' default_expression
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode(",", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(",", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(",", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(",", SQL_NODE_PUNCTUATION));
 			$$->append($4);
 		}
 	;
@@ -2087,10 +2088,10 @@ lead_or_lag_function:
 	{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			$$->append($4);
-			$$->append($5 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 			$$->append($6);
 	}
 	;
@@ -2116,9 +2117,9 @@ first_or_last_value_function:
 	{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 			$$->append($5);
 	}
 	;
@@ -2135,11 +2136,11 @@ nth_value_function:
 	{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(",", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(",", SQL_NODE_PUNCTUATION));
 			$$->append($5);
-			$$->append($6 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 			$$->append($7);
 			$$->append($8);
 	}
@@ -2208,9 +2209,9 @@ window_specification:
 	'(' window_specification_details ')'
 	{
 		$$ = SQL_NEW_RULE;
-		$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+		$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 		$$->append($2);
-		$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+		$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 	}
 	;
 opt_existing_window_name:
@@ -2370,7 +2371,7 @@ op_parameter:
 	|	'?' SQL_EQUAL
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("?", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("?", SQL_NODE_PUNCTUATION));
 			$$->append($2);
 		}
 	;
@@ -2390,9 +2391,9 @@ op_odbc_call_parameter:
 	|	'(' odbc_parameter_commalist ')'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 
@@ -2438,27 +2439,27 @@ general_set_fct:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			$$->append($4);
-			$$->append($5 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	SQL_TOKEN_COUNT '(' '*' ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
-			$$->append($3 = newNode("*", SQL_NODE_PUNCTUATION));
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("*", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	SQL_TOKEN_COUNT '(' opt_all_distinct function_arg ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			$$->append($4);
-			$$->append($5 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	ordered_set_function
 	|	array_aggregate_function
@@ -2489,20 +2490,20 @@ hypothetical_set_function:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 			$$->append($5);
 		}
 	|	rank_function_type '('	hypothetical_set_function_value_expression_list SQL_TOKEN_BY value_exp_commalist ')'	within_group_specification
 	{
 		$$ = SQL_NEW_RULE;
 		$$->append($1);
-		$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+		$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 		$$->append($3);
 		$$->append($4);
 		$$->append($5);
-		$$->append($6 = newNode(")", SQL_NODE_PUNCTUATION));
+		$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		$$->append($7);
 	}
 	;
@@ -2516,9 +2517,9 @@ within_group_specification:
 		$$ = SQL_NEW_RULE;
 		$$->append($1);
 		$$->append($2);
-		$$->append($3 = newNode("(", SQL_NODE_PUNCTUATION));
+		$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 		$$->append($4);
-		$$->append($5 = newNode(")", SQL_NODE_PUNCTUATION));
+		$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 	}
 	;
 hypothetical_set_function_value_expression_list:
@@ -2530,9 +2531,9 @@ inverse_distribution_function:
 	{
 		$$ = SQL_NEW_RULE;
 		$$->append($1);
-		$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+		$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 		$$->append($3);
-		$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+		$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 	}
 	;
 inverse_distribution_function_argument:
@@ -2548,10 +2549,10 @@ array_aggregate_function:
 	{
 		$$ = SQL_NEW_RULE;
 		$$->append($1);
-		$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+		$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 		$$->append($3);
 		$$->append($4);
-		$$->append($5 = newNode(")", SQL_NODE_PUNCTUATION));
+		$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 	}
 	;
 
@@ -2646,9 +2647,9 @@ named_columns_join:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 simple_table:
@@ -2661,9 +2662,9 @@ non_join_query_primary:
 	  | '(' non_join_query_exp ')'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	  ;
 non_join_query_term:
@@ -2721,11 +2722,11 @@ cast_spec:
 	  {
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			$$->append($4);
 			$$->append($5);
-			$$->append($6 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 value_exp_primary:
@@ -2738,9 +2739,9 @@ value_exp_primary:
 	  | '(' value_exp ')'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	  | cast_spec
 	;
@@ -2754,13 +2755,13 @@ factor:
 	|	'-' num_primary  %prec SQL_TOKEN_UMINUS
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("-", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("-", SQL_NODE_PUNCTUATION));
 			$$->append($2);
 		}
 	|	'+' num_primary  %prec SQL_TOKEN_UMINUS
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("+", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("+", SQL_NODE_PUNCTUATION));
 			$$->append($2);
 		}
 	;
@@ -2771,14 +2772,14 @@ term:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("*", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("*", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	  | term '/' factor
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("/", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("/", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	  ;
@@ -2789,14 +2790,14 @@ num_value_exp:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("+", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("+", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	  | num_value_exp '-' term
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("-", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("-", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	  ;
@@ -2878,14 +2879,14 @@ interval_term:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("*", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("*", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	  | interval_term '/' factor
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("/", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("/", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	;
@@ -2900,21 +2901,21 @@ datetime_value_exp:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("+", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("+", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	  | datetime_value_exp '+' interval_term
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("+", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("+", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	  | datetime_value_exp '-' interval_term
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("-", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("-", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 */	;
@@ -2929,24 +2930,24 @@ interval_value_exp:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("+", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("+", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	  | interval_value_exp '-' interval_term
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("-", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("-", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	  | '(' datetime_value_exp '-' datetime_term ')' interval_qualifier
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode("-", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("-", SQL_NODE_PUNCTUATION));
 			$$->append($4);
-			$$->append($5 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 			$$->append($6);
 		}
 	;
@@ -3117,7 +3118,7 @@ concatenation:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("+", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("+", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	|	value_exp SQL_CONCAT value_exp
@@ -3166,12 +3167,12 @@ bit_substring_fct:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			$$->append($4);
 			$$->append($5);
 			$$->append($6);
-			$$->append($7 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 bit_value_exp:
@@ -3193,7 +3194,7 @@ bit_concatenation:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("+", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("+", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	;
@@ -3251,20 +3252,20 @@ char_substring_fct:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			$$->append($4);
 			$$->append($5);
 			$$->append($6);
-			$$->append($7 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	SQL_TOKEN_SUBSTRING '(' value_exp_commalist ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 upper_lower:
@@ -3276,9 +3277,9 @@ fold:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 form_conversion:
@@ -3286,21 +3287,21 @@ form_conversion:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			$$->append($4);
 			$$->append($5);
-			$$->append($6 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	SQL_TOKEN_CONVERT '(' cast_operand ',' cast_target ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($2 = newNode(",", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(",", SQL_NODE_PUNCTUATION));
 			$$->append($5);
-			$$->append($6 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 char_translation:
@@ -3308,11 +3309,11 @@ char_translation:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			$$->append($4);
 			$$->append($5);
-			$$->append($6 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 trim_fct:
@@ -3320,9 +3321,9 @@ trim_fct:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 trim_operands:
@@ -3382,14 +3383,14 @@ catalog_name:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 	|	SQL_TOKEN_NAME ':' schema_name
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode(":", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(":", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 ;
@@ -3398,7 +3399,7 @@ schema_name:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 		}
 ;
@@ -3416,50 +3417,50 @@ column_ref:
 /*	|       table_node '.' column_val %prec '.'
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($3);}
 */
 	|       SQL_TOKEN_NAME '.' column_val %prec '.'
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($3);
 			}
 	|       SQL_TOKEN_NAME '.' SQL_TOKEN_NAME '.' column_val %prec '.'
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($5);}
 	|       SQL_TOKEN_NAME '.' SQL_TOKEN_NAME '.' SQL_TOKEN_NAME '.' column_val %prec '.'
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2= newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($5);
-			$$->append($6 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($7);
 			}
 	|       SQL_TOKEN_NAME ':' SQL_TOKEN_NAME '.' SQL_TOKEN_NAME '.' column_val %prec '.'
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2= newNode(":", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(":", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($5);
-			$$->append($6 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($7);
 			}
 /*	|       SQL_TOKEN_NAME ';' SQL_TOKEN_NAME '.' SQL_TOKEN_NAME '.' column_val
 			{$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2= newNode(";", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(";", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($5);
-			$$->append($6 = newNode(".", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(".", SQL_NODE_PUNCTUATION));
 			$$->append($7);
 			}
 */	;
@@ -3472,7 +3473,7 @@ column_val:
 	|	'*'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("*", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("*", SQL_NODE_PUNCTUATION));
 		}
 	;
 data_type:
@@ -3555,9 +3556,9 @@ paren_char_length:
 	'(' SQL_TOKEN_INTNUM ')'
 	{
 		$$ = SQL_NEW_RULE;
-		$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+		$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 		$$->append($2);
-		$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+		$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 	}
 	;
 opt_paren_char_large_length:
@@ -3568,9 +3569,9 @@ paren_character_large_object_length:
 	'(' large_object_length ')'
 	{
 		$$ = SQL_NEW_RULE;
-		$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+		$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 		$$->append($2);
-		$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+		$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 	}
 	;
 
@@ -3587,27 +3588,27 @@ opt_multiplier:
 	|	'K'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("K", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("K", SQL_NODE_PUNCTUATION));
 		}
 	|	'M'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("M", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("M", SQL_NODE_PUNCTUATION));
 		}
 	|	'G'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("G", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("G", SQL_NODE_PUNCTUATION));
 		}
 	|	'T'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("T", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("T", SQL_NODE_PUNCTUATION));
 		}
 	|	'P'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("P", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("P", SQL_NODE_PUNCTUATION));
 		}
 	;
 character_large_object_type:
@@ -3752,18 +3753,18 @@ opt_paren_precision_scale:
 	|	'(' SQL_TOKEN_INTNUM ')'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	'(' SQL_TOKEN_INTNUM ',' SQL_TOKEN_INTNUM ')'
 		{
 			$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode(",", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(",", SQL_NODE_PUNCTUATION));
 			$$->append($4);
-			$$->append($5 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 exact_numeric_type:
@@ -3795,9 +3796,9 @@ approximate_numeric_type:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	SQL_TOKEN_FLOAT
 	|	SQL_TOKEN_REAL
@@ -3886,25 +3887,25 @@ case_abbreviation:
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	SQL_TOKEN_COALESCE '(' value_exp ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	|	SQL_TOKEN_COALESCE '(' value_exp_commalist ')'
 		{
 			$$ = SQL_NEW_RULE;
 			$$->append($1);
-			$$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("(", SQL_NODE_PUNCTUATION));
 			$$->append($3);
-			$$->append($4 = newNode(")", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(")", SQL_NODE_PUNCTUATION));
 		}
 	;
 case_specification:
@@ -4026,16 +4027,16 @@ module:	SQL_TOKEN_NAME
 parameter:
 		':' SQL_TOKEN_NAME
 			{$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode(":", SQL_NODE_PUNCTUATION));
+			$$->append(newNode(":", SQL_NODE_PUNCTUATION));
 			$$->append($2);}
 	|	'?'
 			{$$ = SQL_NEW_RULE; // test
-			$$->append($1 = newNode("?", SQL_NODE_PUNCTUATION));}
+			$$->append(newNode("?", SQL_NODE_PUNCTUATION));}
 	|	'['	SQL_TOKEN_NAME ']'
 			{$$ = SQL_NEW_RULE;
-			$$->append($1 = newNode("[", SQL_NODE_PUNCTUATION));
+			$$->append(newNode("[", SQL_NODE_PUNCTUATION));
 			$$->append($2);
-			$$->append($3 = newNode("]", SQL_NODE_PUNCTUATION));}
+			$$->append(newNode("]", SQL_NODE_PUNCTUATION));}
 	;
 
 /***
@@ -4179,7 +4180,7 @@ triggered_SQL_statement:
         $$->append($1);
         $$->append($2);
         $$->append($3);
-        $$->append($4 = newNode(";", SQL_NODE_PUNCTUATION));
+        $$->append(newNode(";", SQL_NODE_PUNCTUATION));
         $$->append($5);
     }
 	;
diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx
index 5b034e2..07143e8 100644
--- a/connectivity/source/parse/sqlnode.cxx
+++ b/connectivity/source/parse/sqlnode.cxx
@@ -839,7 +839,7 @@ void OSQLParser::killThousandSeparator(OSQLParseNode* pLiteral)
         }
 }
 // -----------------------------------------------------------------------------
-OSQLParseNode* OSQLParser::convertNode(sal_Int32 nType,OSQLParseNode*& pLiteral)
+OSQLParseNode* OSQLParser::convertNode(sal_Int32 nType,OSQLParseNode*const& pLiteral)
 {
     if ( !pLiteral )
         return NULL;
@@ -957,7 +957,7 @@ OSQLParseNode* OSQLParser::convertNode(sal_Int32 nType,OSQLParseNode*& pLiteral)
     return pReturn;
 }
 // -----------------------------------------------------------------------------
-sal_Int16 OSQLParser::buildPredicateRule(OSQLParseNode*& pAppend,OSQLParseNode* pLiteral,OSQLParseNode*& pCompare,OSQLParseNode* pLiteral2)
+sal_Int16 OSQLParser::buildPredicateRule(OSQLParseNode*& pAppend,OSQLParseNode* const pLiteral,OSQLParseNode*const & pCompare,OSQLParseNode* pLiteral2)
 {
     OSL_ENSURE(inPredicateCheck(),"Only in predicate check allowed!");
     sal_Int16 nErg = 0;
@@ -986,7 +986,7 @@ sal_Int16 OSQLParser::buildPredicateRule(OSQLParseNode*& pAppend,OSQLParseNode*
     return nErg;
 }
 // -----------------------------------------------------------------------------
-sal_Int16 OSQLParser::buildLikeRule(OSQLParseNode*& pAppend, OSQLParseNode*& pLiteral, const OSQLParseNode* pEscape)
+sal_Int16 OSQLParser::buildLikeRule(OSQLParseNode* const& pAppend, OSQLParseNode*& pLiteral, const OSQLParseNode* pEscape)
 {
     sal_Int16 nErg = 0;
     sal_Int32 nType = 0;
diff --git a/include/connectivity/sqlparse.hxx b/include/connectivity/sqlparse.hxx
index 892d3ec..33884e5 100644
--- a/include/connectivity/sqlparse.hxx
+++ b/include/connectivity/sqlparse.hxx
@@ -170,7 +170,7 @@ namespace connectivity
         OSQLParseNode*  buildDate(sal_Int32 _nType,OSQLParseNode*& pLiteral);
         bool            extractDate(OSQLParseNode* pLiteral,double& _rfValue);
         void            killThousandSeparator(OSQLParseNode* pLiteral);
-        OSQLParseNode*  convertNode(sal_Int32 nType,OSQLParseNode*& pLiteral);
+        OSQLParseNode*  convertNode(sal_Int32 nType,OSQLParseNode*const& pLiteral);
         // makes a string out of a number, pLiteral will be deleted
         OSQLParseNode*  buildNode_STR_NUM(OSQLParseNode*& pLiteral);
         OSQLParseNode*  buildNode_Date(const double& fValue, sal_Int32 nType);
@@ -238,9 +238,9 @@ namespace connectivity
 
         sal_Int16 buildComparsionRule(OSQLParseNode*& pAppend,OSQLParseNode* pLiteral);
         // pCompre will be deleted if it is not used
-        sal_Int16 buildPredicateRule(OSQLParseNode*& pAppend,OSQLParseNode* pLiteral,OSQLParseNode*& pCompare,OSQLParseNode* pLiteral2 = NULL);
+        sal_Int16 buildPredicateRule(OSQLParseNode*& pAppend,OSQLParseNode* const pLiteral,OSQLParseNode*const & pCompare,OSQLParseNode* pLiteral2 = NULL);
 
-        sal_Int16 buildLikeRule(OSQLParseNode*& pAppend,OSQLParseNode*& pLiteral,const OSQLParseNode* pEscape);
+        sal_Int16 buildLikeRule(OSQLParseNode* const& pAppend,OSQLParseNode*& pLiteral,const OSQLParseNode* pEscape);
         sal_Int16 buildStringNodes(OSQLParseNode*& pLiteral);
 #else
 #endif
commit 6eb9c378f43e5f507d53d60d060becf4bb7615b8
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jul 10 00:50:11 2013 +0200

    fdo#58644 fix handling of subqueries
    
    don't remove parentheses around subqueries
    (without the parentheses, it is not valid SQL)
    
    Change-Id: I4e9c55cea0276f10b0f97e31bc329949aba5b989

diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx
index 44e7bb2..bb271b9 100644
--- a/connectivity/source/parse/sqliterator.cxx
+++ b/connectivity/source/parse/sqliterator.cxx
@@ -965,6 +965,7 @@ bool OSQLParseTreeIterator::traverseSelectColumnNames(const OSQLParseNode* pSele
                 sal_Bool bFkt(sal_False);
                 pColumnRef = pColumnRef->getChild(0);
                 if (
+                        pColumnRef->getKnownRuleID() != OSQLParseNode::subquery &&
                         pColumnRef->count() == 3 &&
                         SQL_ISPUNCTUATION(pColumnRef->getChild(0),"(") &&
                         SQL_ISPUNCTUATION(pColumnRef->getChild(2),")")
commit 6a9aa432f53b53310ce56588508d151e15112b16
Author: Takeshi Abe <tabe at fixedpoint.jp>
Date:   Wed Jul 10 09:09:14 2013 +0900

    Mark as const
    
    Change-Id: I7fe1441dc09301604bc7a96fa5d63cfa8ca72874

diff --git a/scaddins/source/datefunc/datefunc.cxx b/scaddins/source/datefunc/datefunc.cxx
index 8f016d6..07dcd84 100644
--- a/scaddins/source/datefunc/datefunc.cxx
+++ b/scaddins/source/datefunc/datefunc.cxx
@@ -532,7 +532,7 @@ sal_Bool IsLeapYear( sal_uInt16 nYear )
 
 sal_uInt16 DaysInMonth( sal_uInt16 nMonth, sal_uInt16 nYear )
 {
-    static sal_uInt16 aDaysInMonth[12] = { 31, 28, 31, 30, 31, 30,
+    static const sal_uInt16 aDaysInMonth[12] = { 31, 28, 31, 30, 31, 30,
                                         31, 31, 30, 31, 30, 31 };
 
     if ( nMonth != 2 )
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
index 5f70417..b714db9 100644
--- a/sd/source/core/sdpage.cxx
+++ b/sd/source/core/sdpage.cxx
@@ -1112,7 +1112,7 @@ LayoutDescriptor::LayoutDescriptor( int nLayout, int k0, int k1, int k2, int k3,
 
 static const LayoutDescriptor& GetLayoutDescriptor( AutoLayout eLayout )
 {
-    static LayoutDescriptor aLayouts[AUTOLAYOUT__END-AUTOLAYOUT__START] =
+    static const LayoutDescriptor aLayouts[AUTOLAYOUT__END-AUTOLAYOUT__START] =
     {
         LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_TEXT ),                                 // AUTOLAYOUT_TITLE
         LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_OUTLINE ),                              // AUTOLAYOUT_ENUM
@@ -2881,7 +2881,7 @@ void SdPage::CalculateHandoutAreas( SdDrawDocument& rModel, AutoLayout eLayout,
 
         const bool bLandscape = aArea.Width() > aArea.Height();
 
-        static sal_uInt16 aOffsets[5][9] =
+        static const sal_uInt16 aOffsets[5][9] =
         {
             { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, // AUTOLAYOUT_HANDOUT9, Portrait, Horizontal order
             { 0, 2, 4, 1, 3, 5, 0, 0, 0 }, // AUTOLAYOUT_HANDOUT3, Landscape, Vertical
@@ -2890,7 +2890,7 @@ void SdPage::CalculateHandoutAreas( SdDrawDocument& rModel, AutoLayout eLayout,
             { 0, 3, 6, 1, 4, 7, 2, 5, 8 }, // AUTOLAYOUT_HANDOUT9, Landscape, Vertical
         };
 
-        sal_uInt16* pOffsets = aOffsets[0];
+        const sal_uInt16* pOffsets = aOffsets[0];
         sal_uInt16  nColCnt = 0, nRowCnt = 0;
         switch ( eLayout )
         {
diff --git a/sd/source/filter/eppt/eppt.cxx b/sd/source/filter/eppt/eppt.cxx
index d7eeb5d..4debddf 100644
--- a/sd/source/filter/eppt/eppt.cxx
+++ b/sd/source/filter/eppt/eppt.cxx
@@ -502,7 +502,7 @@ sal_Bool PPTWriter::ImplCreateDocumentSummaryInformation()
     if (xDocProps.is()) {
 
         // no idea what this is...
-        static sal_uInt8 aGuid[ 0x52 ] =
+        static const sal_uInt8 aGuid[ 0x52 ] =
         {
             0x4e, 0x00, 0x00, 0x00,
             '{',0,'D',0,'B',0,'1',0,'A',0,'C',0,'9',0,'6',0,'4',0,'-',0,
diff --git a/sd/source/filter/html/htmlex.cxx b/sd/source/filter/html/htmlex.cxx
index 3bbbf63..adf36cb 100644
--- a/sd/source/filter/html/htmlex.cxx
+++ b/sd/source/filter/html/htmlex.cxx
@@ -2735,7 +2735,7 @@ String HtmlExport::CreateImage( const String& aImage, const String& aAltText,
 // =====================================================================
 String HtmlExport::ColorToHTMLString( Color aColor )
 {
-    static char hex[] = "0123456789ABCDEF";
+    static const char hex[] = "0123456789ABCDEF";
     String aStr( "#xxxxxx" );
     aStr.SetChar(1, hex[(aColor.GetRed() >> 4) & 0xf] );
     aStr.SetChar(2, hex[aColor.GetRed()   & 0xf] );
diff --git a/sd/source/ui/table/TableDesignPane.cxx b/sd/source/ui/table/TableDesignPane.cxx
index 484b467..adeecf6 100644
--- a/sd/source/ui/table/TableDesignPane.cxx
+++ b/sd/source/ui/table/TableDesignPane.cxx
@@ -330,7 +330,7 @@ IMPL_LINK_NOARG(TableDesignPane, implCheckBoxHdl)
 
 void TableDesignPane::ApplyOptions()
 {
-    static sal_uInt16 gParamIds[CB_BANDED_COLUMNS-CB_HEADER_ROW+1] =
+    static const sal_uInt16 gParamIds[CB_BANDED_COLUMNS-CB_HEADER_ROW+1] =
     {
         ID_VAL_USEFIRSTROWSTYLE, ID_VAL_USELASTROWSTYLE, ID_VAL_USEBANDINGROWSTYLE,
         ID_VAL_USEFIRSTCOLUMNSTYLE, ID_VAL_USELASTCOLUMNSTYLE, ID_VAL_USEBANDINGCOLUMNSTYLE
@@ -523,7 +523,7 @@ void TableDesignPane::updateLayout()
 
 void TableDesignPane::updateControls()
 {
-    static sal_Bool gDefaults[CB_BANDED_COLUMNS-CB_HEADER_ROW+1] = { sal_True, sal_False, sal_True, sal_False, sal_False, sal_False };
+    static const sal_Bool gDefaults[CB_BANDED_COLUMNS-CB_HEADER_ROW+1] = { sal_True, sal_False, sal_True, sal_False, sal_False, sal_False };
 
     const bool bHasTable = mxSelectedTable.is();
     const OUString* pPropNames = getPropertyNames();
diff --git a/sd/source/ui/unoidl/unoobj.cxx b/sd/source/ui/unoidl/unoobj.cxx
index 1b9590b..2444d69 100644
--- a/sd/source/ui/unoidl/unoobj.cxx
+++ b/sd/source/ui/unoidl/unoobj.cxx
@@ -258,7 +258,7 @@ static SdTypesCache gImplTypesCache;
     }
     static const SfxItemPropertyMapEntry* lcl_GetEmpty_SdXShapePropertyMap_Impl()
     {
-        static SfxItemPropertyMapEntry aEmpty_SdXShapePropertyMap_Impl[] =
+        static const SfxItemPropertyMapEntry aEmpty_SdXShapePropertyMap_Impl[] =
         {
             { 0,0,0,0,0,0}
         };
commit 6e6634b87dc4873e42efb9e2577ffc59776866ec
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue Jul 9 23:55:57 2013 +0200

    Revert "Separate ScDocShell declaration with ScDocShellRef declaration."
    
    This reverts commit 572478433647e9d8a657a2271f0ef6bf349de526.

diff --git a/sc/qa/unit/ucalc_sharedformula.cxx b/sc/qa/unit/ucalc_sharedformula.cxx
index e3995a4..59aa7a4 100644
--- a/sc/qa/unit/ucalc_sharedformula.cxx
+++ b/sc/qa/unit/ucalc_sharedformula.cxx
@@ -11,7 +11,7 @@
 #include "editutil.hxx"
 #include "formulacell.hxx"
 #include "cellvalue.hxx"
-#include "docshell.hxx"
+#include "docsh.hxx"
 
 void Test::testSharedFormulas()
 {
diff --git a/sc/source/ui/inc/docsh.hxx b/sc/source/ui/inc/docsh.hxx
index aeeb4b5..ec2201f 100644
--- a/sc/source/ui/inc/docsh.hxx
+++ b/sc/source/ui/inc/docsh.hxx
@@ -17,14 +17,459 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#ifndef SC_DOCSH_HXX
-#define SC_DOCSH_HXX
+#ifndef SC_DOCSHELL_HXX
+#define SC_DOCSHELL_HXX
+
+
+#include <sfx2/objsh.hxx>
+
+#include <sfx2/docfac.hxx>
+#include <sfx2/sfxmodelfactory.hxx>
+#include <sfx2/viewsh.hxx>
+
+#include "scdllapi.h"
+#include "scdll.hxx"
+#include "document.hxx"
+#include "appoptio.hxx"
+#include "formulaopt.hxx"
+#include "shellids.hxx"
+#include "refreshtimer.hxx"
+#include "optutil.hxx"
+
+#include <boost/unordered_map.hpp>
+#include <cppuhelper/implbase1.hxx>
+
+#include <config_telepathy.h>
+
+class ScEditEngineDefaulter;
+class SfxStyleSheetBasePool;
+class SfxStyleSheetHint;
+class INetURLObject;
+
+class ScViewData;
+class ScDocFunc;
+class ScDrawLayer;
+class ScTabViewShell;
+class ScSbxDocHelper;
+class ScAutoStyleList;
+class ScRange;
+class ScMarkData;
+class ScPaintLockData;
+class ScChangeAction;
+class VirtualDevice;
+class ScImportOptions;
+class ScDocShellModificator;
+class ScOptSolverSave;
+class ScSheetSaveData;
+class ScFlatBoolRowSegments;
+struct ScColWidthParam;
+#if ENABLE_TELEPATHY
+class ScCollaboration;
+#endif
+
+namespace sfx2 { class FileDialogHelper; }
+struct DocShell_Impl;
+
+typedef ::boost::unordered_map< sal_uLong, sal_uLong > ScChangeActionMergeMap;
+
+//==================================================================
+
+//enum ScDBFormat { SC_FORMAT_SDF, SC_FORMAT_DBF };
+
+                                    // Extra flags for Repaint
+#define SC_PF_LINES         1
+#define SC_PF_TESTMERGE     2
+#define SC_PF_WHOLEROWS     4
+
+class SC_DLLPUBLIC ScDocShell: public SfxObjectShell, public SfxListener
+{
+    ScDocument          aDocument;
+
+    String              aDdeTextFmt;
+
+    double              nPrtToScreenFactor;
+    DocShell_Impl*      pImpl;
+    ScDocFunc*          pDocFunc;
+
+    bool                bHeaderOn;
+    bool                bFooterOn;
+    bool                bIsInplace:1;         // Is set by the View
+    bool                bIsEmpty:1;
+    bool                bIsInUndo:1;
+    bool                bDocumentModifiedPending:1;
+    bool                bUpdateEnabled:1;
+    sal_uInt16          nDocumentLock;
+    sal_Int16           nCanUpdate;  // stores the UpdateDocMode from loading a document till update links
+
+    ScDBData*           pOldAutoDBRange;
+
+    ScSbxDocHelper*     pDocHelper;
+
+    ScAutoStyleList*    pAutoStyleList;
+    ScPaintLockData*    pPaintLockData;
+    ScOptSolverSave*    pSolverSaveData;
+    ScSheetSaveData*    pSheetSaveData;
+
+    ScDocShellModificator* pModificator; // #109979#; is used to load XML (created in BeforeXMLLoading and destroyed in AfterXMLLoading)
+#if ENABLE_TELEPATHY
+    ScCollaboration*      mpCollaboration;
+#endif
+
+    SC_DLLPRIVATE void          InitItems();
+    SC_DLLPRIVATE void          DoEnterHandler();
+    SC_DLLPRIVATE void          InitOptions(bool bForLoading);
+    SC_DLLPRIVATE void          ResetDrawObjectShell();
+
+    // SUNWS needs a forward declared friend, otherwise types and members
+    // of the outer class are not accessible.
+    class PrepareSaveGuard;
+    friend class ScDocShell::PrepareSaveGuard;
+    /** Do things that need to be done before saving to our own format and
+        necessary clean ups in dtor. */
+    class PrepareSaveGuard
+    {
+        public:
+            explicit    PrepareSaveGuard( ScDocShell & rDocShell );
+                        ~PrepareSaveGuard();
+        private:
+                        ScDocShell & mrDocShell;
+    };
+
+    SC_DLLPRIVATE sal_Bool            LoadXML( SfxMedium* pMedium, const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& );
+    SC_DLLPRIVATE sal_Bool            SaveXML( SfxMedium* pMedium, const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& );
+    SC_DLLPRIVATE SCTAB         GetSaveTab();
+
+    SC_DLLPRIVATE bool SaveCurrentChart( SfxMedium& rMedium );
+
+    SC_DLLPRIVATE sal_uLong         DBaseImport( const String& rFullFileName, CharSet eCharSet,
+                                             ScColWidthParam aColWidthParam[MAXCOLCOUNT], ScFlatBoolRowSegments& rRowHeightsRecalc );
+    SC_DLLPRIVATE sal_uLong DBaseExport(
+        const OUString& rFullFileName, CharSet eCharSet, bool& bHasMemo );
+
+    SC_DLLPRIVATE static bool       MoveFile( const INetURLObject& rSource, const INetURLObject& rDest );
+    SC_DLLPRIVATE static bool       KillFile( const INetURLObject& rURL );
+    SC_DLLPRIVATE static bool       IsDocument( const INetURLObject& rURL );
+
+    SC_DLLPRIVATE void          LockPaint_Impl(sal_Bool bDoc);
+    SC_DLLPRIVATE void          UnlockPaint_Impl(sal_Bool bDoc);
+    SC_DLLPRIVATE void          LockDocument_Impl(sal_uInt16 nNew);
+    SC_DLLPRIVATE void          UnlockDocument_Impl(sal_uInt16 nNew);
+
+    SC_DLLPRIVATE void          EnableSharedSettings( bool bEnable );
+    SC_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > LoadSharedDocument();
+
+    SC_DLLPRIVATE void          UseSheetSaveEntries();
+
+    SC_DLLPRIVATE ScDocFunc    *CreateDocFunc();
+
+protected:
+
+    virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
+
+public:
+                    TYPEINFO();
+
+                    SFX_DECL_INTERFACE(SCID_DOC_SHELL)
+                    SFX_DECL_OBJECTFACTORY();
+
+                    ScDocShell( const ScDocShell& rDocShell );
+                    ScDocShell( const sal_uInt64 i_nSfxCreationFlags = SFXMODEL_EMBEDDED_OBJECT );
+                    ~ScDocShell();
+
+    using SotObject::GetInterface;
+    using SfxShell::Activate;           // with sal_Bool bMDI
+    using SfxShell::Deactivate;         // with sal_Bool bMDI
+
+#if ENABLE_TELEPATHY
+    SC_DLLPRIVATE ScCollaboration* GetCollaboration();
+#endif
+    virtual void    Activate();
+    virtual void    Deactivate();
+
+    virtual ::svl::IUndoManager*
+                    GetUndoManager();
+
+    virtual void    FillClass( SvGlobalName * pClassName,
+                               sal_uInt32 * pFormat,
+                               OUString * pAppName,
+                               OUString * pFullTypeName,
+                               OUString * pShortTypeName,
+                               sal_Int32 nFileFormat,
+                               sal_Bool bTemplate = false ) const;
+
+    virtual sal_Bool    InitNew( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& );
+    virtual sal_Bool    Load( SfxMedium& rMedium );
+    virtual sal_Bool    LoadFrom( SfxMedium& rMedium );
+    virtual sal_Bool    ConvertFrom( SfxMedium &rMedium );
+    virtual bool        LoadExternal( SfxMedium& rMedium );
+    virtual sal_Bool    Save();
+    virtual sal_Bool    SaveAs( SfxMedium& rMedium );
+    virtual sal_Bool    ConvertTo( SfxMedium &rMedium );
+    virtual sal_uInt16  PrepareClose( sal_Bool bUI = sal_True, sal_Bool bForBrowsing = false );
+    virtual void    PrepareReload();
+    virtual sal_Bool    IsInformationLost();
+    virtual void    LoadStyles( SfxObjectShell &rSource );
+    virtual sal_Bool    Insert( SfxObjectShell &rSource,
+                                sal_uInt16 nSourceIdx1, sal_uInt16 nSourceIdx2, sal_uInt16 nSourceIdx3,
+                                sal_uInt16 &nIdx1, sal_uInt16 &nIdx2, sal_uInt16 &nIdx3, sal_uInt16 &rIdxDeleted );
+
+    virtual sal_Bool    SaveCompleted( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& );      // SfxInPlaceObject
+    virtual sal_Bool    DoSaveCompleted( SfxMedium * pNewStor);     // SfxObjectShell
+    virtual sal_Bool QuerySlotExecutable( sal_uInt16 nSlotId );
+
+    virtual void    Draw( OutputDevice *, const JobSetup & rSetup,
+                                sal_uInt16 nAspect = ASPECT_CONTENT );
+
+    virtual void    SetVisArea( const Rectangle & rVisArea );
+
+    using SfxObjectShell::GetVisArea;
+    virtual Rectangle GetVisArea( sal_uInt16 nAspect ) const;
+
+    virtual Printer* GetDocumentPrinter();
+
+    virtual void    SetModified( sal_Bool = sal_True );
+
+    void            SetVisAreaOrSize( const Rectangle& rVisArea, sal_Bool bModifyStart );
+
+    virtual SfxDocumentInfoDialog*  CreateDocumentInfoDialog( Window *pParent,
+                                                              const SfxItemSet &rSet );
+
+    void    GetDocStat( ScDocStat& rDocStat );
+
+    ScDocument*     GetDocument()   { return &aDocument; }
+    ScDocFunc&      GetDocFunc()    { return *pDocFunc; }
+    void            SetDocFunc( ScDocFunc *pDF ) { pDocFunc = pDF; }
+
+    SfxPrinter*     GetPrinter( sal_Bool bCreateIfNotExist = sal_True );
+    sal_uInt16          SetPrinter( SfxPrinter* pNewPrinter, sal_uInt16 nDiffFlags = SFX_PRINTER_ALL );
+
+    void            UpdateFontList();
+
+    String          CreateObjectName( const String& rPrefix );
+
+    ScDrawLayer*    MakeDrawLayer();
+
+    void            AsciiSave( SvStream& rStream, const ScImportOptions& rOpt );
+
+    void            GetSbxState( SfxItemSet &rSet );
+    void            GetDrawObjState( SfxItemSet &rSet );
+
+    void            Execute( SfxRequest& rReq );
+    void            GetState( SfxItemSet &rSet );
+    void            ExecutePageStyle ( SfxViewShell& rCaller, SfxRequest& rReq, SCTAB nCurTab );
+    void            GetStatePageStyle( SfxViewShell& rCaller, SfxItemSet& rSet, SCTAB nCurTab );
+
+    void            CompareDocument( ScDocument& rOtherDoc );
+    void            MergeDocument( ScDocument& rOtherDoc, bool bShared = false, bool bCheckDuplicates = false, sal_uLong nOffset = 0, ScChangeActionMergeMap* pMergeMap = NULL, bool bInverseMap = false );
+    bool            MergeSharedDocument( ScDocShell* pSharedDocShell );
+
+    ScChangeAction* GetChangeAction( const ScAddress& rPos );
+    void            SetChangeComment( ScChangeAction* pAction, const String& rComment );
+    void            ExecuteChangeCommentDialog( ScChangeAction* pAction, Window* pParent,sal_Bool bPrevNext=sal_True );
+                    /// Protect/unprotect ChangeTrack and return <TRUE/> if
+                    /// protection was successfully changed.
+                    /// If bJustQueryIfProtected==sal_True protection is not
+                    /// changed and <TRUE/> is returned if not protected or
+                    /// password was entered correctly.
+    bool            ExecuteChangeProtectionDialog( Window* _pParent, sal_Bool bJustQueryIfProtected = false );
+
+    void            SetPrintZoom( SCTAB nTab, sal_uInt16 nScale, sal_uInt16 nPages );
+    bool            AdjustPrintZoom( const ScRange& rRange );
+
+    void            LoadStylesArgs( ScDocShell& rSource, bool bReplace, bool bCellStyles, bool bPageStyles );
+
+    void            PageStyleModified( const OUString& rStyleName, sal_Bool bApi );
+
+    void            NotifyStyle( const SfxStyleSheetHint& rHint );
+    void            DoAutoStyle( const ScRange& rRange, const String& rStyle );
+
+    Window*         GetActiveDialogParent();
+    void            ErrorMessage( sal_uInt16 nGlobStrId );
+    sal_Bool            IsEditable() const;
+
+    sal_Bool            AdjustRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab );
+    void            UpdateAllRowHeights( const ScMarkData* pTabMark = NULL );
+    void            UpdatePendingRowHeights( SCTAB nUpdateTab, bool bBefore = false );
+
+    void            RefreshPivotTables( const ScRange& rSource );
+    void            DoConsolidate( const ScConsolidateParam& rParam, sal_Bool bRecord = sal_True );
+    void            UseScenario( SCTAB nTab, const String& rName, sal_Bool bRecord = sal_True );
+    SCTAB           MakeScenario( SCTAB nTab, const String& rName, const String& rComment,
+                                    const Color& rColor, sal_uInt16 nFlags,
+                                    ScMarkData& rMark, sal_Bool bRecord = sal_True );
+    void            ModifyScenario( SCTAB nTab, const String& rName, const String& rComment,
+                                    const Color& rColor, sal_uInt16 nFlags );
+    sal_uLong TransferTab( ScDocShell& rSrcDocShell, SCTAB nSrcPos,
+                                SCTAB nDestPos, sal_Bool bInsertNew,
+                                sal_Bool bNotifyAndPaint );
+
+    sal_Bool            MoveTable( SCTAB nSrcTab, SCTAB nDestTab, sal_Bool bCopy, sal_Bool bRecord );
+
+    void            DoRecalc( bool bApi );
+    void            DoHardRecalc( bool bApi );
+
+    void            UpdateOle( const ScViewData* pViewData, sal_Bool bSnapSize = false);
+    sal_Bool        IsOle();
+
+    void            DBAreaDeleted( SCTAB nTab, SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2 );
+    ScDBData*       GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGetDBSelection eSel );
+    ScDBData*       GetAnonymousDBData(const ScRange& rRange);
+    ScDBData*       GetOldAutoDBRange();    // has to be deleted by caller!
+    void            CancelAutoDBRange();    // called when dialog is cancelled
+
+    virtual void    ReconnectDdeLink(SfxObjectShell& rServer);
+    void            UpdateLinks();
+    sal_Bool            ReloadTabLinks();
+
+    void            SetFormulaOptions(const ScFormulaOptions& rOpt );
+    virtual void    CheckConfigOptions();
+
+    void            PostEditView( ScEditEngineDefaulter* pEditEngine, const ScAddress& rCursorPos );
+
+    void            PostPaint( SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab,
+                            SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab, sal_uInt16 nPart,
+                            sal_uInt16 nExtFlags = 0 );
+    void            PostPaint( const ScRangeList& rRanges, sal_uInt16 nPart, sal_uInt16 nExtFlags = 0 );
+
+    void            PostPaintCell( SCCOL nCol, SCROW nRow, SCTAB nTab );
+    void            PostPaintCell( const ScAddress& rPos );
+    void            PostPaintGridAll();
+    void            PostPaintExtras();
+
+    bool            IsPaintLocked() const { return pPaintLockData != NULL; }
+
+    void            PostDataChanged();
+
+    void            UpdatePaintExt( sal_uInt16& rExtFlags, SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab,
+                                                       SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab );
+    void            UpdatePaintExt( sal_uInt16& rExtFlags, const ScRange& rRange );
+
+    void            SetDocumentModified( sal_Bool bIsModified = sal_True );
+    void            SetDrawModified( sal_Bool bIsModified = sal_True );
+
+    void            LockPaint();
+    void            UnlockPaint();
+    sal_uInt16          GetLockCount() const;
+    void            SetLockCount(sal_uInt16 nNew);
+
+    void            LockDocument();
+    void            UnlockDocument();
+
+    DECL_LINK( DialogClosedHdl, sfx2::FileDialogHelper* );
+
+    virtual SfxStyleSheetBasePool*  GetStyleSheetPool();
+
+    void            SetInplace( bool bInplace );
+    bool            IsEmpty() const;
+    void            SetEmpty(bool bSet);
+
+    bool            IsInUndo() const                { return bIsInUndo; }
+    void            SetInUndo(bool bSet);
+
+    void            CalcOutputFactor();
+    double          GetOutputFactor() const;
+    void            GetPageOnFromPageStyleSet( const SfxItemSet* pStyleSet,
+                                               SCTAB             nCurTab,
+                                               bool&             rbHeader,
+                                               bool&             rbFooter );
+
+    virtual long DdeGetData( const OUString& rItem, const OUString& rMimeType,
+                                ::com::sun::star::uno::Any & rValue );
+    virtual long DdeSetData( const OUString& rItem, const OUString& rMimeType,
+                                const ::com::sun::star::uno::Any & rValue );
+    virtual ::sfx2::SvLinkSource* DdeCreateLinkSource( const OUString& rItem );
+
+    const String& GetDdeTextFmt() const { return aDdeTextFmt; }
+
+    SfxBindings*    GetViewBindings();
+
+    ScTabViewShell* GetBestViewShell( sal_Bool bOnlyVisible = sal_True );
+    ScSbxDocHelper* GetDocHelperObject() { return pDocHelper; }
+
+    void            SetDocumentModifiedPending( bool bVal )
+                        { bDocumentModifiedPending = bVal; }
+    bool            IsDocumentModifiedPending() const
+                        { return bDocumentModifiedPending; }
+
+    bool            IsUpdateEnabled() const
+                        { return bUpdateEnabled; }
+    void            SetUpdateEnabled(bool bValue)
+                        { bUpdateEnabled = bValue; }
+
+    OutputDevice*   GetRefDevice(); // WYSIWYG: Printer, otherwise VirtualDevice...
+
+    static ScViewData* GetViewData();
+    static SCTAB       GetCurTab();
+
+    static ScDocShell* GetShellByNum( sal_uInt16 nDocNo );
+    static String   GetOwnFilterName();
+        static String   GetHtmlFilterName();
+    static String   GetWebQueryFilterName();
+    static String   GetAsciiFilterName();
+    static String   GetLotusFilterName();
+    static String   GetDBaseFilterName();
+    static String   GetDifFilterName();
+    static sal_Bool     HasAutomaticTableName( const String& rFilter );
+
+    DECL_LINK( RefreshDBDataHdl, ScRefreshTimer* );
+
+    void            BeforeXMLLoading();
+    void            AfterXMLLoading(sal_Bool bRet);
+
+    virtual sal_uInt16 GetHiddenInformationState( sal_uInt16 nStates );
+
+    const ScOptSolverSave* GetSolverSaveData() const    { return pSolverSaveData; }     // may be null
+    void            SetSolverSaveData( const ScOptSolverSave& rData );
+    ScSheetSaveData* GetSheetSaveData();
+
+    void ResetKeyBindings( ScOptionsUtil::KeyBindingType eType );
+
+    // password protection for Calc (derived from SfxObjectShell)
+    // see also:    FID_CHG_RECORD, SID_CHG_PROTECT
+    virtual bool    IsChangeRecording() const;
+    virtual bool    HasChangeRecordProtection() const;
+    virtual void    SetChangeRecording( bool bActivate );
+    virtual bool    SetProtectionPassword( const String &rPassword );
+    virtual bool    GetProtectionHash( /*out*/ ::com::sun::star::uno::Sequence< sal_Int8 > &rPasswordHash );
+
+
+    void SnapVisArea( Rectangle& rRect ) const;
+};
+
+
+void UpdateAcceptChangesDialog();
 
-#include "docshell.hxx"
 
 SV_DECL_REF(ScDocShell)
 SV_IMPL_REF(ScDocShell)
 
+
+/** Create before modifications of the document and then destroy.
+    If noted in the ctor AutoCalcShellDisabled and IdleDisabled,
+    switches them off and restores the dtor AutoCalcShellDisabled
+    also before a ScDocShell SetDocumentModified.
+    Call SetDocumentModified after instead of the ScDocShell.
+    In the dtor, if ScDocShell bDocumentModifiedPending is set and
+    bAutoCalcShellDisabled is not set, then SetDocumentModified is called. */
+class SC_DLLPUBLIC ScDocShellModificator
+{
+            ScDocShell&     rDocShell;
+    ScRefreshTimerProtector aProtector;
+            sal_Bool            bAutoCalcShellDisabled;
+            bool            bIdleEnabled;
+
+                            // not implemented
+                            ScDocShellModificator( const ScDocShellModificator& );
+    ScDocShellModificator&  operator=( const ScDocShellModificator& );
+
+public:
+                            ScDocShellModificator( ScDocShell& );
+                            ~ScDocShellModificator();
+            void            SetDocumentModified();
+};
+
+
+
 #endif
 
 
diff --git a/sc/source/ui/inc/docshell.hxx b/sc/source/ui/inc/docshell.hxx
deleted file mode 100644
index 841d40c..0000000
--- a/sc/source/ui/inc/docshell.hxx
+++ /dev/null
@@ -1,466 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef SC_DOCSHELL_HXX
-#define SC_DOCSHELL_HXX
-
-#include <sfx2/objsh.hxx>
-
-#include <sfx2/docfac.hxx>
-#include <sfx2/sfxmodelfactory.hxx>
-#include <sfx2/viewsh.hxx>
-
-#include "scdllapi.h"
-#include "scdll.hxx"
-#include "document.hxx"
-#include "appoptio.hxx"
-#include "formulaopt.hxx"
-#include "shellids.hxx"
-#include "refreshtimer.hxx"
-#include "optutil.hxx"
-
-#include <boost/unordered_map.hpp>
-#include <cppuhelper/implbase1.hxx>
-
-#include <config_telepathy.h>
-
-class ScEditEngineDefaulter;
-class SfxStyleSheetBasePool;
-class SfxStyleSheetHint;
-class INetURLObject;
-
-class ScViewData;
-class ScDocFunc;
-class ScDrawLayer;
-class ScTabViewShell;
-class ScSbxDocHelper;
-class ScAutoStyleList;
-class ScRange;
-class ScMarkData;
-class ScPaintLockData;
-class ScChangeAction;
-class VirtualDevice;
-class ScImportOptions;
-class ScDocShellModificator;
-class ScOptSolverSave;
-class ScSheetSaveData;
-class ScFlatBoolRowSegments;
-struct ScColWidthParam;
-#if ENABLE_TELEPATHY
-class ScCollaboration;
-#endif
-
-namespace sfx2 { class FileDialogHelper; }
-struct DocShell_Impl;
-
-typedef ::boost::unordered_map< sal_uLong, sal_uLong > ScChangeActionMergeMap;
-
-//==================================================================
-
-//enum ScDBFormat { SC_FORMAT_SDF, SC_FORMAT_DBF };
-
-                                    // Extra flags for Repaint
-#define SC_PF_LINES         1
-#define SC_PF_TESTMERGE     2
-#define SC_PF_WHOLEROWS     4
-

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list