1*b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*b3f79822SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*b3f79822SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*b3f79822SAndrew Rist * distributed with this work for additional information
6*b3f79822SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*b3f79822SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*b3f79822SAndrew Rist * "License"); you may not use this file except in compliance
9*b3f79822SAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*b3f79822SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*b3f79822SAndrew Rist * software distributed under the License is distributed on an
15*b3f79822SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b3f79822SAndrew Rist * KIND, either express or implied. See the License for the
17*b3f79822SAndrew Rist * specific language governing permissions and limitations
18*b3f79822SAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*b3f79822SAndrew Rist *************************************************************/
21*b3f79822SAndrew Rist
22*b3f79822SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir // INCLUDE ---------------------------------------------------------------
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include "queryparam.hxx"
30cdf0e10cSrcweir
31cdf0e10cSrcweir using ::std::vector;
32cdf0e10cSrcweir
33cdf0e10cSrcweir // ============================================================================
34cdf0e10cSrcweir
ScQueryParamBase()35cdf0e10cSrcweir ScQueryParamBase::ScQueryParamBase()
36cdf0e10cSrcweir {
37cdf0e10cSrcweir Resize( MAXQUERY );
38cdf0e10cSrcweir for (sal_uInt16 i=0; i<MAXQUERY; i++)
39cdf0e10cSrcweir maEntries[i].Clear();
40cdf0e10cSrcweir }
41cdf0e10cSrcweir
ScQueryParamBase(const ScQueryParamBase & r)42cdf0e10cSrcweir ScQueryParamBase::ScQueryParamBase(const ScQueryParamBase& r) :
43cdf0e10cSrcweir bHasHeader(r.bHasHeader), bByRow(r.bByRow), bInplace(r.bInplace), bCaseSens(r.bCaseSens),
44cdf0e10cSrcweir bRegExp(r.bRegExp), bDuplicate(r.bDuplicate), bMixedComparison(r.bMixedComparison),
45cdf0e10cSrcweir maEntries(r.maEntries)
46cdf0e10cSrcweir {
47cdf0e10cSrcweir }
48cdf0e10cSrcweir
~ScQueryParamBase()49cdf0e10cSrcweir ScQueryParamBase::~ScQueryParamBase()
50cdf0e10cSrcweir {
51cdf0e10cSrcweir }
52cdf0e10cSrcweir
GetEntryCount() const53cdf0e10cSrcweir SCSIZE ScQueryParamBase::GetEntryCount() const
54cdf0e10cSrcweir {
55cdf0e10cSrcweir return maEntries.size();
56cdf0e10cSrcweir }
57cdf0e10cSrcweir
GetEntry(SCSIZE n) const58cdf0e10cSrcweir ScQueryEntry& ScQueryParamBase::GetEntry(SCSIZE n) const
59cdf0e10cSrcweir {
60cdf0e10cSrcweir return maEntries[n];
61cdf0e10cSrcweir }
62cdf0e10cSrcweir
Resize(SCSIZE nNew)63cdf0e10cSrcweir void ScQueryParamBase::Resize(SCSIZE nNew)
64cdf0e10cSrcweir {
65cdf0e10cSrcweir if ( nNew < MAXQUERY )
66cdf0e10cSrcweir nNew = MAXQUERY; // nie weniger als MAXQUERY
67cdf0e10cSrcweir
68cdf0e10cSrcweir vector<ScQueryEntry> aNewEntries(nNew);
69cdf0e10cSrcweir SCSIZE nCopy = ::std::min(maEntries.size(), nNew);
70cdf0e10cSrcweir for (SCSIZE i=0; i<nCopy; i++)
71cdf0e10cSrcweir aNewEntries[i] = maEntries[i];
72cdf0e10cSrcweir
73cdf0e10cSrcweir maEntries.swap(aNewEntries);
74cdf0e10cSrcweir }
75cdf0e10cSrcweir
DeleteQuery(SCSIZE nPos)76cdf0e10cSrcweir void ScQueryParamBase::DeleteQuery( SCSIZE nPos )
77cdf0e10cSrcweir {
78cdf0e10cSrcweir if (nPos >= maEntries.size())
79cdf0e10cSrcweir return;
80cdf0e10cSrcweir
81cdf0e10cSrcweir size_t n = maEntries.size();
82cdf0e10cSrcweir vector<ScQueryEntry> aNewEntries;
83cdf0e10cSrcweir aNewEntries.reserve(n);
84cdf0e10cSrcweir for (size_t i = 0; i < n; ++i)
85cdf0e10cSrcweir if (i != nPos)
86cdf0e10cSrcweir aNewEntries.push_back(maEntries[i]);
87cdf0e10cSrcweir
88cdf0e10cSrcweir // Don't forget to append an empty entry to make up for the removed one.
89cdf0e10cSrcweir // The size of the entries is not supposed to change.
90cdf0e10cSrcweir aNewEntries.push_back(ScQueryEntry());
91cdf0e10cSrcweir
92cdf0e10cSrcweir maEntries.swap(aNewEntries);
93cdf0e10cSrcweir }
94cdf0e10cSrcweir
FillInExcelSyntax(String & aCellStr,SCSIZE nIndex)95cdf0e10cSrcweir void ScQueryParamBase::FillInExcelSyntax(String& aCellStr, SCSIZE nIndex)
96cdf0e10cSrcweir {
97cdf0e10cSrcweir if (aCellStr.Len() > 0)
98cdf0e10cSrcweir {
99cdf0e10cSrcweir if ( nIndex >= maEntries.size() )
100cdf0e10cSrcweir Resize( nIndex+1 );
101cdf0e10cSrcweir
102cdf0e10cSrcweir ScQueryEntry& rEntry = GetEntry(nIndex);
103cdf0e10cSrcweir
104cdf0e10cSrcweir rEntry.bDoQuery = sal_True;
105cdf0e10cSrcweir // Operatoren herausfiltern
106cdf0e10cSrcweir if (aCellStr.GetChar(0) == '<')
107cdf0e10cSrcweir {
108cdf0e10cSrcweir if (aCellStr.GetChar(1) == '>')
109cdf0e10cSrcweir {
110cdf0e10cSrcweir *rEntry.pStr = aCellStr.Copy(2);
111cdf0e10cSrcweir rEntry.eOp = SC_NOT_EQUAL;
112cdf0e10cSrcweir }
113cdf0e10cSrcweir else if (aCellStr.GetChar(1) == '=')
114cdf0e10cSrcweir {
115cdf0e10cSrcweir *rEntry.pStr = aCellStr.Copy(2);
116cdf0e10cSrcweir rEntry.eOp = SC_LESS_EQUAL;
117cdf0e10cSrcweir }
118cdf0e10cSrcweir else
119cdf0e10cSrcweir {
120cdf0e10cSrcweir *rEntry.pStr = aCellStr.Copy(1);
121cdf0e10cSrcweir rEntry.eOp = SC_LESS;
122cdf0e10cSrcweir }
123cdf0e10cSrcweir }
124cdf0e10cSrcweir else if (aCellStr.GetChar(0) == '>')
125cdf0e10cSrcweir {
126cdf0e10cSrcweir if (aCellStr.GetChar(1) == '=')
127cdf0e10cSrcweir {
128cdf0e10cSrcweir *rEntry.pStr = aCellStr.Copy(2);
129cdf0e10cSrcweir rEntry.eOp = SC_GREATER_EQUAL;
130cdf0e10cSrcweir }
131cdf0e10cSrcweir else
132cdf0e10cSrcweir {
133cdf0e10cSrcweir *rEntry.pStr = aCellStr.Copy(1);
134cdf0e10cSrcweir rEntry.eOp = SC_GREATER;
135cdf0e10cSrcweir }
136cdf0e10cSrcweir }
137cdf0e10cSrcweir else
138cdf0e10cSrcweir {
139cdf0e10cSrcweir if (aCellStr.GetChar(0) == '=')
140cdf0e10cSrcweir *rEntry.pStr = aCellStr.Copy(1);
141cdf0e10cSrcweir else
142cdf0e10cSrcweir *rEntry.pStr = aCellStr;
143cdf0e10cSrcweir rEntry.eOp = SC_EQUAL;
144cdf0e10cSrcweir }
145cdf0e10cSrcweir }
146cdf0e10cSrcweir }
147cdf0e10cSrcweir
148cdf0e10cSrcweir // ============================================================================
149cdf0e10cSrcweir
ScQueryParamTable()150cdf0e10cSrcweir ScQueryParamTable::ScQueryParamTable()
151cdf0e10cSrcweir {
152cdf0e10cSrcweir }
153cdf0e10cSrcweir
ScQueryParamTable(const ScQueryParamTable & r)154cdf0e10cSrcweir ScQueryParamTable::ScQueryParamTable(const ScQueryParamTable& r) :
155cdf0e10cSrcweir nCol1(r.nCol1),nRow1(r.nRow1),nCol2(r.nCol2),nRow2(r.nRow2),nTab(r.nTab)
156cdf0e10cSrcweir {
157cdf0e10cSrcweir }
158cdf0e10cSrcweir
~ScQueryParamTable()159cdf0e10cSrcweir ScQueryParamTable::~ScQueryParamTable()
160cdf0e10cSrcweir {
161cdf0e10cSrcweir }
162cdf0e10cSrcweir
163cdf0e10cSrcweir // ============================================================================
164cdf0e10cSrcweir
ScQueryParam()165cdf0e10cSrcweir ScQueryParam::ScQueryParam() :
166cdf0e10cSrcweir ScQueryParamBase(),
167cdf0e10cSrcweir ScQueryParamTable(),
168cdf0e10cSrcweir bDestPers(true),
169cdf0e10cSrcweir nDestTab(0),
170cdf0e10cSrcweir nDestCol(0),
171cdf0e10cSrcweir nDestRow(0)
172cdf0e10cSrcweir {
173cdf0e10cSrcweir Clear();
174cdf0e10cSrcweir }
175cdf0e10cSrcweir
176cdf0e10cSrcweir //------------------------------------------------------------------------
177cdf0e10cSrcweir
ScQueryParam(const ScQueryParam & r)178cdf0e10cSrcweir ScQueryParam::ScQueryParam( const ScQueryParam& r ) :
179cdf0e10cSrcweir ScQueryParamBase(r),
180cdf0e10cSrcweir ScQueryParamTable(r),
181cdf0e10cSrcweir bDestPers(r.bDestPers), nDestTab(r.nDestTab), nDestCol(r.nDestCol), nDestRow(r.nDestRow)
182cdf0e10cSrcweir {
183cdf0e10cSrcweir }
184cdf0e10cSrcweir
ScQueryParam(const ScDBQueryParamInternal & r)185cdf0e10cSrcweir ScQueryParam::ScQueryParam( const ScDBQueryParamInternal& r ) :
186cdf0e10cSrcweir ScQueryParamBase(r),
187cdf0e10cSrcweir ScQueryParamTable(r),
188cdf0e10cSrcweir bDestPers(true),
189cdf0e10cSrcweir nDestTab(0),
190cdf0e10cSrcweir nDestCol(0),
191cdf0e10cSrcweir nDestRow(0)
192cdf0e10cSrcweir {
193cdf0e10cSrcweir }
194cdf0e10cSrcweir
195cdf0e10cSrcweir
196cdf0e10cSrcweir //------------------------------------------------------------------------
197cdf0e10cSrcweir
~ScQueryParam()198cdf0e10cSrcweir ScQueryParam::~ScQueryParam()
199cdf0e10cSrcweir {
200cdf0e10cSrcweir }
201cdf0e10cSrcweir
202cdf0e10cSrcweir //------------------------------------------------------------------------
203cdf0e10cSrcweir
Clear()204cdf0e10cSrcweir void ScQueryParam::Clear()
205cdf0e10cSrcweir {
206cdf0e10cSrcweir nCol1=nCol2 = 0;
207cdf0e10cSrcweir nRow1=nRow2 = 0;
208cdf0e10cSrcweir nTab = SCTAB_MAX;
209cdf0e10cSrcweir bHasHeader = bCaseSens = bRegExp = bMixedComparison = sal_False;
210cdf0e10cSrcweir bInplace = bByRow = bDuplicate = sal_True;
211cdf0e10cSrcweir
212cdf0e10cSrcweir Resize( MAXQUERY );
213cdf0e10cSrcweir for (sal_uInt16 i=0; i<MAXQUERY; i++)
214cdf0e10cSrcweir maEntries[i].Clear();
215cdf0e10cSrcweir
216cdf0e10cSrcweir ClearDestParams();
217cdf0e10cSrcweir }
218cdf0e10cSrcweir
ClearDestParams()219cdf0e10cSrcweir void ScQueryParam::ClearDestParams()
220cdf0e10cSrcweir {
221cdf0e10cSrcweir bDestPers = true;
222cdf0e10cSrcweir nDestTab = 0;
223cdf0e10cSrcweir nDestCol = 0;
224cdf0e10cSrcweir nDestRow = 0;
225cdf0e10cSrcweir }
226cdf0e10cSrcweir
227cdf0e10cSrcweir //------------------------------------------------------------------------
228cdf0e10cSrcweir
operator =(const ScQueryParam & r)229cdf0e10cSrcweir ScQueryParam& ScQueryParam::operator=( const ScQueryParam& r )
230cdf0e10cSrcweir {
231cdf0e10cSrcweir nCol1 = r.nCol1;
232cdf0e10cSrcweir nRow1 = r.nRow1;
233cdf0e10cSrcweir nCol2 = r.nCol2;
234cdf0e10cSrcweir nRow2 = r.nRow2;
235cdf0e10cSrcweir nTab = r.nTab;
236cdf0e10cSrcweir nDestTab = r.nDestTab;
237cdf0e10cSrcweir nDestCol = r.nDestCol;
238cdf0e10cSrcweir nDestRow = r.nDestRow;
239cdf0e10cSrcweir bHasHeader = r.bHasHeader;
240cdf0e10cSrcweir bInplace = r.bInplace;
241cdf0e10cSrcweir bCaseSens = r.bCaseSens;
242cdf0e10cSrcweir bRegExp = r.bRegExp;
243cdf0e10cSrcweir bMixedComparison = r.bMixedComparison;
244cdf0e10cSrcweir bDuplicate = r.bDuplicate;
245cdf0e10cSrcweir bByRow = r.bByRow;
246cdf0e10cSrcweir bDestPers = r.bDestPers;
247cdf0e10cSrcweir
248cdf0e10cSrcweir maEntries = r.maEntries;
249cdf0e10cSrcweir
250cdf0e10cSrcweir return *this;
251cdf0e10cSrcweir }
252cdf0e10cSrcweir
253cdf0e10cSrcweir //------------------------------------------------------------------------
254cdf0e10cSrcweir
operator ==(const ScQueryParam & rOther) const255cdf0e10cSrcweir sal_Bool ScQueryParam::operator==( const ScQueryParam& rOther ) const
256cdf0e10cSrcweir {
257cdf0e10cSrcweir sal_Bool bEqual = sal_False;
258cdf0e10cSrcweir
259cdf0e10cSrcweir // Anzahl der Queries gleich?
260cdf0e10cSrcweir SCSIZE nUsed = 0;
261cdf0e10cSrcweir SCSIZE nOtherUsed = 0;
262cdf0e10cSrcweir SCSIZE nEntryCount = GetEntryCount();
263cdf0e10cSrcweir SCSIZE nOtherEntryCount = rOther.GetEntryCount();
264cdf0e10cSrcweir
265cdf0e10cSrcweir while ( nUsed<nEntryCount && maEntries[nUsed].bDoQuery ) ++nUsed;
266cdf0e10cSrcweir while ( nOtherUsed<nOtherEntryCount && rOther.maEntries[nOtherUsed].bDoQuery )
267cdf0e10cSrcweir ++nOtherUsed;
268cdf0e10cSrcweir
269cdf0e10cSrcweir if ( (nUsed == nOtherUsed)
270cdf0e10cSrcweir && (nCol1 == rOther.nCol1)
271cdf0e10cSrcweir && (nRow1 == rOther.nRow1)
272cdf0e10cSrcweir && (nCol2 == rOther.nCol2)
273cdf0e10cSrcweir && (nRow2 == rOther.nRow2)
274cdf0e10cSrcweir && (nTab == rOther.nTab)
275cdf0e10cSrcweir && (bHasHeader == rOther.bHasHeader)
276cdf0e10cSrcweir && (bByRow == rOther.bByRow)
277cdf0e10cSrcweir && (bInplace == rOther.bInplace)
278cdf0e10cSrcweir && (bCaseSens == rOther.bCaseSens)
279cdf0e10cSrcweir && (bRegExp == rOther.bRegExp)
280cdf0e10cSrcweir && (bMixedComparison == rOther.bMixedComparison)
281cdf0e10cSrcweir && (bDuplicate == rOther.bDuplicate)
282cdf0e10cSrcweir && (bDestPers == rOther.bDestPers)
283cdf0e10cSrcweir && (nDestTab == rOther.nDestTab)
284cdf0e10cSrcweir && (nDestCol == rOther.nDestCol)
285cdf0e10cSrcweir && (nDestRow == rOther.nDestRow) )
286cdf0e10cSrcweir {
287cdf0e10cSrcweir bEqual = sal_True;
288cdf0e10cSrcweir for ( SCSIZE i=0; i<nUsed && bEqual; i++ )
289cdf0e10cSrcweir bEqual = maEntries[i] == rOther.maEntries[i];
290cdf0e10cSrcweir }
291cdf0e10cSrcweir return bEqual;
292cdf0e10cSrcweir }
293cdf0e10cSrcweir
294cdf0e10cSrcweir //------------------------------------------------------------------------
295cdf0e10cSrcweir
MoveToDest()296cdf0e10cSrcweir void ScQueryParam::MoveToDest()
297cdf0e10cSrcweir {
298cdf0e10cSrcweir if (!bInplace)
299cdf0e10cSrcweir {
300cdf0e10cSrcweir SCsCOL nDifX = ((SCsCOL) nDestCol) - ((SCsCOL) nCol1);
301cdf0e10cSrcweir SCsROW nDifY = ((SCsROW) nDestRow) - ((SCsROW) nRow1);
302cdf0e10cSrcweir SCsTAB nDifZ = ((SCsTAB) nDestTab) - ((SCsTAB) nTab);
303cdf0e10cSrcweir
304cdf0e10cSrcweir nCol1 = sal::static_int_cast<SCCOL>( nCol1 + nDifX );
305cdf0e10cSrcweir nRow1 = sal::static_int_cast<SCROW>( nRow1 + nDifY );
306cdf0e10cSrcweir nCol2 = sal::static_int_cast<SCCOL>( nCol2 + nDifX );
307cdf0e10cSrcweir nRow2 = sal::static_int_cast<SCROW>( nRow2 + nDifY );
308cdf0e10cSrcweir nTab = sal::static_int_cast<SCTAB>( nTab + nDifZ );
309cdf0e10cSrcweir size_t n = maEntries.size();
310cdf0e10cSrcweir for (size_t i=0; i<n; i++)
311cdf0e10cSrcweir maEntries[i].nField += nDifX;
312cdf0e10cSrcweir
313cdf0e10cSrcweir bInplace = sal_True;
314cdf0e10cSrcweir }
315cdf0e10cSrcweir else
316cdf0e10cSrcweir {
317cdf0e10cSrcweir DBG_ERROR("MoveToDest, bInplace == TRUE");
318cdf0e10cSrcweir }
319cdf0e10cSrcweir }
320cdf0e10cSrcweir
321cdf0e10cSrcweir // ============================================================================
322cdf0e10cSrcweir
ScDBQueryParamBase(DataType eType)323cdf0e10cSrcweir ScDBQueryParamBase::ScDBQueryParamBase(DataType eType) :
324cdf0e10cSrcweir ScQueryParamBase(),
325cdf0e10cSrcweir mnField(-1),
326cdf0e10cSrcweir mbSkipString(true),
327cdf0e10cSrcweir meType(eType)
328cdf0e10cSrcweir {
329cdf0e10cSrcweir }
330cdf0e10cSrcweir
~ScDBQueryParamBase()331cdf0e10cSrcweir ScDBQueryParamBase::~ScDBQueryParamBase()
332cdf0e10cSrcweir {
333cdf0e10cSrcweir }
334cdf0e10cSrcweir
GetType() const335cdf0e10cSrcweir ScDBQueryParamBase::DataType ScDBQueryParamBase::GetType() const
336cdf0e10cSrcweir {
337cdf0e10cSrcweir return meType;
338cdf0e10cSrcweir }
339cdf0e10cSrcweir
340cdf0e10cSrcweir // ============================================================================
341cdf0e10cSrcweir
ScDBQueryParamInternal()342cdf0e10cSrcweir ScDBQueryParamInternal::ScDBQueryParamInternal() :
343cdf0e10cSrcweir ScDBQueryParamBase(ScDBQueryParamBase::INTERNAL),
344cdf0e10cSrcweir ScQueryParamTable()
345cdf0e10cSrcweir {
346cdf0e10cSrcweir }
347cdf0e10cSrcweir
~ScDBQueryParamInternal()348cdf0e10cSrcweir ScDBQueryParamInternal::~ScDBQueryParamInternal()
349cdf0e10cSrcweir {
350cdf0e10cSrcweir }
351cdf0e10cSrcweir
352cdf0e10cSrcweir // ============================================================================
353cdf0e10cSrcweir
ScDBQueryParamMatrix()354cdf0e10cSrcweir ScDBQueryParamMatrix::ScDBQueryParamMatrix() :
355cdf0e10cSrcweir ScDBQueryParamBase(ScDBQueryParamBase::MATRIX)
356cdf0e10cSrcweir {
357cdf0e10cSrcweir }
358cdf0e10cSrcweir
~ScDBQueryParamMatrix()359cdf0e10cSrcweir ScDBQueryParamMatrix::~ScDBQueryParamMatrix()
360cdf0e10cSrcweir {
361cdf0e10cSrcweir }
362cdf0e10cSrcweir
363