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