xref: /aoo4110/main/sc/inc/dptabdat.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef SC_DPTABDAT_HXX
25*b1cdbd2cSJim Jagielski #define SC_DPTABDAT_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "address.hxx"
28*b1cdbd2cSJim Jagielski #include "dpoutput.hxx"
29*b1cdbd2cSJim Jagielski #include "dpcachetable.hxx"
30*b1cdbd2cSJim Jagielski // Wang Xu Ming -- 2009-8-17
31*b1cdbd2cSJim Jagielski // DataPilot Migration - Cache&&Performance
32*b1cdbd2cSJim Jagielski #include "dptablecache.hxx"
33*b1cdbd2cSJim Jagielski // End Comments
34*b1cdbd2cSJim Jagielski #include <tools/string.hxx>
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include <vector>
37*b1cdbd2cSJim Jagielski #include <set>
38*b1cdbd2cSJim Jagielski #include <hash_map>
39*b1cdbd2cSJim Jagielski #include <hash_set>
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski namespace com { namespace sun { namespace star { namespace sheet {
42*b1cdbd2cSJim Jagielski     struct DataPilotFieldFilter;
43*b1cdbd2cSJim Jagielski }}}}
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski #define SC_DAPI_DATE_HIERARCHIES	3
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski #define SC_DAPI_HIERARCHY_FLAT		0
51*b1cdbd2cSJim Jagielski #define SC_DAPI_HIERARCHY_QUARTER	1
52*b1cdbd2cSJim Jagielski #define SC_DAPI_HIERARCHY_WEEK		2
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski #define SC_DAPI_FLAT_LEVELS		1		// single level for flat dates
55*b1cdbd2cSJim Jagielski #define SC_DAPI_QUARTER_LEVELS	4		// levels in year/quarter/month/day hierarchy
56*b1cdbd2cSJim Jagielski #define SC_DAPI_WEEK_LEVELS		3		// levels in year/week/day hierarchy
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski #define SC_DAPI_LEVEL_YEAR		0
59*b1cdbd2cSJim Jagielski #define SC_DAPI_LEVEL_QUARTER	1
60*b1cdbd2cSJim Jagielski #define SC_DAPI_LEVEL_MONTH		2
61*b1cdbd2cSJim Jagielski #define SC_DAPI_LEVEL_DAY		3
62*b1cdbd2cSJim Jagielski #define SC_DAPI_LEVEL_WEEK		1
63*b1cdbd2cSJim Jagielski #define SC_DAPI_LEVEL_WEEKDAY	2
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------
67*b1cdbd2cSJim Jagielski //
68*b1cdbd2cSJim Jagielski //	base class ScDPTableData to allow implementation with tabular data
69*b1cdbd2cSJim Jagielski //	by deriving only of this
70*b1cdbd2cSJim Jagielski //
71*b1cdbd2cSJim Jagielski #define SC_VALTYPE_EMPTY	0
72*b1cdbd2cSJim Jagielski #define SC_VALTYPE_VALUE	1
73*b1cdbd2cSJim Jagielski #define SC_VALTYPE_STRING	2
74*b1cdbd2cSJim Jagielski #define SC_VALTYPE_ERROR	3
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski struct ScDPValueData
77*b1cdbd2cSJim Jagielski {
78*b1cdbd2cSJim Jagielski 	double	fValue;
79*b1cdbd2cSJim Jagielski 	sal_uInt8	nType;
80*b1cdbd2cSJim Jagielski 
SetScDPValueData81*b1cdbd2cSJim Jagielski 	void	Set( double fV, sal_uInt8 nT ) { fValue = fV; nType = nT; }
82*b1cdbd2cSJim Jagielski };
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski class ScDPResultMember;
85*b1cdbd2cSJim Jagielski class ScDPDimension;
86*b1cdbd2cSJim Jagielski class ScDPLevel;
87*b1cdbd2cSJim Jagielski class ScDPInitState;
88*b1cdbd2cSJim Jagielski class ScDPResultMember;
89*b1cdbd2cSJim Jagielski class ScDocument;
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski  class SC_DLLPUBLIC ScDPTableData
92*b1cdbd2cSJim Jagielski {
93*b1cdbd2cSJim Jagielski 	//	cached data for GetDatePart
94*b1cdbd2cSJim Jagielski 	long 	nLastDateVal;
95*b1cdbd2cSJim Jagielski 	long 	nLastHier;
96*b1cdbd2cSJim Jagielski 	long 	nLastLevel;
97*b1cdbd2cSJim Jagielski 	long 	nLastRet;
98*b1cdbd2cSJim Jagielski     // Wang Xu Ming -- 2009-8-17
99*b1cdbd2cSJim Jagielski     // DataPilot Migration - Cache&&Performance
100*b1cdbd2cSJim Jagielski     long                          mnCacheId;
101*b1cdbd2cSJim Jagielski     const ScDocument*   mpDoc;
102*b1cdbd2cSJim Jagielski     // End Comments
103*b1cdbd2cSJim Jagielski public:
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski     /** This structure stores dimension information used when calculating
106*b1cdbd2cSJim Jagielski         results.  These data are read only during result calculation, so it
107*b1cdbd2cSJim Jagielski         should be passed as a const instance. */
108*b1cdbd2cSJim Jagielski     struct CalcInfo
109*b1cdbd2cSJim Jagielski     {
110*b1cdbd2cSJim Jagielski         ::std::vector<long>             aColLevelDims;
111*b1cdbd2cSJim Jagielski         ::std::vector<ScDPDimension*>   aColDims;
112*b1cdbd2cSJim Jagielski         ::std::vector<ScDPLevel*>       aColLevels;
113*b1cdbd2cSJim Jagielski         ::std::vector<long>             aRowLevelDims;
114*b1cdbd2cSJim Jagielski         ::std::vector<ScDPDimension*>   aRowDims;
115*b1cdbd2cSJim Jagielski         ::std::vector<ScDPLevel*>       aRowLevels;
116*b1cdbd2cSJim Jagielski         ::std::vector<long>             aPageDims;
117*b1cdbd2cSJim Jagielski         ::std::vector<long>             aDataSrcCols;
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski         ScDPInitState*                  pInitState;
120*b1cdbd2cSJim Jagielski         ScDPResultMember*               pColRoot;
121*b1cdbd2cSJim Jagielski         ScDPResultMember*               pRowRoot;
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski         bool                            bRepeatIfEmpty;
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski         CalcInfo();
126*b1cdbd2cSJim Jagielski     };
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski     // Wang Xu Ming -- 2009-8-17
129*b1cdbd2cSJim Jagielski     // DataPilot Migration - Cache&&Performance
130*b1cdbd2cSJim Jagielski     ScDPTableData(ScDocument* pDoc, long nCacheId );
131*b1cdbd2cSJim Jagielski     // End Comments
132*b1cdbd2cSJim Jagielski     virtual		~ScDPTableData();
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski 	long		GetDatePart( long nDateVal, long nHierarchy, long nLevel );
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 				//!	use (new) typed collection instead of ScStrCollection
137*b1cdbd2cSJim Jagielski 				//!	or separate Str and ValueCollection
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 	virtual long					GetColumnCount() = 0;
140*b1cdbd2cSJim Jagielski     // Wang Xu Ming -- 2009-8-17
141*b1cdbd2cSJim Jagielski     // DataPilot Migration - Cache&&Performance
142*b1cdbd2cSJim Jagielski     virtual   const std::vector< SCROW >& GetColumnEntries( long nColumn ) ;
143*b1cdbd2cSJim Jagielski     long                                                     GetCacheId() const;
144*b1cdbd2cSJim Jagielski     // End Comments
145*b1cdbd2cSJim Jagielski     virtual String					getDimensionName(long nColumn) = 0;
146*b1cdbd2cSJim Jagielski     virtual sal_Bool					getIsDataLayoutDimension(long nColumn) = 0;
147*b1cdbd2cSJim Jagielski     virtual sal_Bool					IsDateDimension(long nDim) = 0;
148*b1cdbd2cSJim Jagielski     virtual sal_uLong					GetNumberFormat(long nDim);
149*b1cdbd2cSJim Jagielski 	virtual sal_uInt32					GetNumberFormatByIdx( NfIndexTableOffset );
150*b1cdbd2cSJim Jagielski     virtual void					DisposeData() = 0;
151*b1cdbd2cSJim Jagielski     virtual void					SetEmptyFlags( sal_Bool bIgnoreEmptyRows, sal_Bool bRepeatIfEmpty ) = 0;
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski     virtual bool                    IsRepeatIfEmpty();
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski     virtual void                    CreateCacheTable() = 0;
156*b1cdbd2cSJim Jagielski     virtual void                    FilterCacheTable(const ::std::vector<ScDPCacheTable::Criterion>& rCriteria, const ::std::hash_set<sal_Int32>& rDataDims) = 0;
157*b1cdbd2cSJim Jagielski     virtual void                    GetDrillDownData(const ::std::vector<ScDPCacheTable::Criterion>& rCriteria,
158*b1cdbd2cSJim Jagielski                                                      const ::std::hash_set<sal_Int32>& rCatDims,
159*b1cdbd2cSJim Jagielski                                                      ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > >& rData) = 0;
160*b1cdbd2cSJim Jagielski     virtual void                    CalcResults(CalcInfo& rInfo, bool bAutoShow) = 0;
161*b1cdbd2cSJim Jagielski     virtual const ScDPCacheTable&   GetCacheTable() const = 0;
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski                                     // overloaded in ScDPGroupTableData:
164*b1cdbd2cSJim Jagielski     virtual sal_Bool                    IsBaseForGroup(long nDim) const;
165*b1cdbd2cSJim Jagielski     virtual long                      GetGroupBase(long nGroupDim) const;
166*b1cdbd2cSJim Jagielski     virtual sal_Bool                    IsNumOrDateGroup(long nDim) const;
167*b1cdbd2cSJim Jagielski     virtual sal_Bool                    IsInGroup( const ScDPItemData& rGroupData, long nGroupIndex,
168*b1cdbd2cSJim Jagielski                                                const ScDPItemData& rBaseData, long nBaseIndex ) const;
169*b1cdbd2cSJim Jagielski     virtual sal_Bool                    HasCommonElement( const ScDPItemData& rFirstData, long nFirstIndex,
170*b1cdbd2cSJim Jagielski                                                       const ScDPItemData& rSecondData, long nSecondIndex ) const;
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski     // Wang Xu Ming -- 2009-8-17
173*b1cdbd2cSJim Jagielski     // DataPilot Migration - Cache&&Performance
174*b1cdbd2cSJim Jagielski     virtual long                            GetMembersCount( long nDim );
175*b1cdbd2cSJim Jagielski     virtual const ScDPItemData*   GetMemberByIndex( long nDim, long nIndex );
176*b1cdbd2cSJim Jagielski     virtual const ScDPItemData*   GetMemberById( long nDim, long nId);
177*b1cdbd2cSJim Jagielski     virtual SCROW                        GetIdOfItemData( long  nDim, const ScDPItemData& rData );
178*b1cdbd2cSJim Jagielski     virtual long 				GetSourceDim( long nDim );
179*b1cdbd2cSJim Jagielski     virtual long 				Compare( long nDim, long nDataId1, long nDataId2);
180*b1cdbd2cSJim Jagielski     // End Comments
181*b1cdbd2cSJim Jagielski protected:
182*b1cdbd2cSJim Jagielski     /** This structure stores vector arrays that hold intermediate data for
183*b1cdbd2cSJim Jagielski         each row during cache table iteration. */
184*b1cdbd2cSJim Jagielski     struct CalcRowData
185*b1cdbd2cSJim Jagielski     {
186*b1cdbd2cSJim Jagielski         // Wang Xu Ming -- 2009-8-17
187*b1cdbd2cSJim Jagielski         // DataPilot Migration - Cache&&Performance
188*b1cdbd2cSJim Jagielski         ::std::vector< SCROW >  aColData;
189*b1cdbd2cSJim Jagielski         ::std::vector< SCROW >  aRowData;
190*b1cdbd2cSJim Jagielski         ::std::vector< SCROW >  aPageData;
191*b1cdbd2cSJim Jagielski         // End Comments
192*b1cdbd2cSJim Jagielski         ::std::vector<ScDPValueData> aValues;
193*b1cdbd2cSJim Jagielski     };
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski     void            FillRowDataFromCacheTable(sal_Int32 nRow, const ScDPCacheTable& rCacheTable, const CalcInfo& rInfo, CalcRowData& rData);
196*b1cdbd2cSJim Jagielski     void            ProcessRowData(CalcInfo& rInfo, CalcRowData& rData, bool bAutoShow);
197*b1cdbd2cSJim Jagielski     void            CalcResultsFromCacheTable(const ScDPCacheTable& rCacheTable, CalcInfo& rInfo, bool bAutoShow);
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski private:
200*b1cdbd2cSJim Jagielski     // Wang Xu Ming -- 2009-8-17
201*b1cdbd2cSJim Jagielski     // DataPilot Migration - Cache&&Performance
202*b1cdbd2cSJim Jagielski     void            GetItemData(const ScDPCacheTable& rCacheTable, sal_Int32 nRow,
203*b1cdbd2cSJim Jagielski 		                                  const ::std::vector<long>& rDims, ::std::vector< SCROW >& rItemData);
204*b1cdbd2cSJim Jagielski     // End Comments
205*b1cdbd2cSJim Jagielski };
206*b1cdbd2cSJim Jagielski #endif
207*b1cdbd2cSJim Jagielski 
208