summaryrefslogtreecommitdiff
path: root/sc/inc/dptablecache.hxx
blob: 4bfb14dad7273b9dd7c89cbe4f7ae4c23e37b0c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * Copyright IBM Corporation 2009.
 * Copyright 2009 by Sun Microsystems, Inc.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/
#ifndef SC_DPTABLECACHE_HXX
#define SC_DPTABLECACHE_HXX

#include "global.hxx"
#include <svl/zforlist.hxx>
#include "dpglobal.hxx"

#include <com/sun/star/sdbc/DataType.hpp>
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/sdbc/XRowSet.hpp>

#include <vector>
#include <boost/ptr_container/ptr_vector.hpp>

struct ScQueryParam;

/**
 * This class represents the cached data part of the datapilot cache table
 * implementation.
 */
class SC_DLLPUBLIC ScDPCache
{
public:
    typedef ::boost::ptr_vector<ScDPItemData>           DataListType;
private:
    typedef ::boost::ptr_vector<DataListType>           DataGridType;
    typedef ::boost::ptr_vector< ::std::vector<SCROW> > RowGridType;

    ScDocument* mpDoc;
    long mnColumnCount;

    /**
     * This container stores only the unique instances of item data in each
     * column. Duplicates are not allowed.
     */
    DataGridType maTableDataValues;

    /**
     * This container stores indices within maTableDataValues pointing to the
     * data.  The order of data are exactly as they appear in the original
     * data source.
     */
    RowGridType maSourceData;

    /**
     * This container stores indices within maTableDataValues.  The order of
     * indices in each column represents ascending order of the actual data.
     */
    RowGridType maGlobalOrder;

    /**
     * This container stores the ranks of each unique data represented by
     * their index.
     */
    mutable RowGridType maIndexOrder;

    DataListType maLabelNames;    // Stores dimension names.
    std::vector<bool> mbEmptyRow; // Keeps track of empty rows.

    mutable ScDPItemDataPool    maAdditionalData;

public:
    SCROW GetIdByItemData( long nDim, const String& sItemData ) const;
    SCROW GetIdByItemData( long nDim, const ScDPItemData& rData ) const;

    SCROW GetAdditionalItemID ( const String& sItemData ) const;
    SCROW GetAdditionalItemID( const ScDPItemData& rData ) const;

    SCCOL GetDimensionIndex( String sName) const;
    const ScDPItemData* GetSortedItemData( SCCOL nDim, SCROW nOrder ) const;
    sal_uLong GetNumType ( sal_uLong nFormat ) const;
    sal_uLong GetNumberFormat( long nDim ) const;
    bool  IsDateDimension( long nDim ) const ;
    sal_uLong GetDimNumType( SCCOL nDim) const;
    SCROW GetDimMemberCount( SCCOL nDim ) const;
    SCROW GetOrder( long nDim, SCROW nIndex ) const;

    SCROW GetSortedItemDataId( SCCOL nDim, SCROW nOrder ) const;
    const DataListType& GetDimMemberValues( SCCOL nDim ) const;
    bool InitFromDoc(ScDocument* pDoc, const ScRange& rRange);
    bool InitFromDataBase(const  ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& xRowSet, const Date& rNullDate);

    SCROW  GetRowCount() const;
    SCROW  GetItemDataId( sal_uInt16 nDim, SCROW nRow, bool bRepeatIfEmpty ) const;
    String GetDimensionName( sal_uInt16 nColumn ) const;
    bool IsEmptyMember( SCROW nRow, sal_uInt16 nColumn ) const;
    bool IsRowEmpty( SCROW nRow ) const;
    bool IsValid() const;
    bool ValidQuery( SCROW nRow, const ScQueryParam& rQueryParam, bool* pSpecial ) const;

    ScDocument* GetDoc() const;//ms-cache-core
    long GetColumnCount() const;

    const ScDPItemData* GetItemDataById( long nDim, SCROW nId ) const;

    bool operator== ( const ScDPCache& r ) const;

    ScDPCache(ScDocument* pDoc);
    ~ScDPCache();

private:
    void AddLabel( ScDPItemData* pData);
    bool AddData(long nDim, ScDPItemData* pData);
};

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */