22 #include <document.hxx>
25 #include <globstr.hrc>
30 #include <osl/diagnose.h>
38 using ::std::unique_ptr;
43 void lcl_uppercase(OUString& rStr)
48 bool lcl_createStarQuery(
70 pParam->
Resize(nNewEntries);
82 lcl_uppercase(aCellStr);
83 if ( aCellStr ==
ScResId(STR_TABLE_AND) )
88 else if ( aCellStr ==
ScResId(STR_TABLE_OR) )
95 if ((nIndex < 1) || bValid)
112 aCellStr = pQueryRef->
getString(2, nRow);
113 lcl_uppercase(aCellStr);
119 else if (p[1] ==
'=')
124 else if (p[0] ==
'>')
131 else if (p[0] ==
'=')
146 while (bValid && (nRow < nRows) );
150 bool lcl_createExcelQuery(
157 vector<SCCOL> aFields(nCols);
159 while (bValid && (nCol < nCols))
161 OUString aQueryStr = pQueryRef->
getString(nCol, 0);
164 aFields[nCol] = nField;
177 OSL_FAIL(
"too many filter criteria");
181 SCSIZE nNewEntries = nVisible;
182 pParam->
Resize( nNewEntries );
192 aCellStr = pQueryRef->
getString(nCol, nRow);
194 if (!aCellStr.isEmpty())
196 if (nIndex < nNewEntries)
201 if (nIndex < nNewEntries)
210 if (nIndex < nNewEntries)
217 bool lcl_fillQueryEntries(
226 bool bValid = lcl_createStarQuery(pDoc, rPool, pParam, pDBRef, pQueryRef);
229 bValid = lcl_createExcelQuery(pDoc, rPool, pParam, pDBRef, pQueryRef);
263 return lcl_fillQueryEntries(
getDoc(),
getDoc()->GetSharedStringPool(), pParam, pDBRef,
this);
302 return (nRows-1)*nCols;
327 return nIndex + nDBCol1 - 1;
334 OUString aUpper = rStr;
335 lcl_uppercase(aUpper);
345 ScAddress aLook( nDBCol1, nDBRow1, nDBTab1 );
346 while (!bFound && (aLook.
Col() <= nDBCol2))
351 lcl_uppercase(aCellStr);
358 return bFound ? nField : -1;
368 pParam->nCol1 = s.
Col();
369 pParam->nRow1 = s.
Row();
370 pParam->nCol2 = e.
Col();
371 pParam->nRow2 = e.
Row();
372 pParam->nTab = s.
Tab();
380 return std::unique_ptr<ScDBQueryParamBase>(std::move(pParam));
418 return (nRows-1)*nCols;
426 return mpMatrix->GetString(nCol, nRow).getString();
442 *pErr = FormulaError::NONE;
444 OUString aUpper = rStr;
445 lcl_uppercase(aUpper);
448 OUString aUpperVal =
mpMatrix->GetString(
i, 0).getString();
449 lcl_uppercase(aUpperVal);
450 if (aUpper == aUpperVal)
466 return std::unique_ptr<ScDBQueryParamBase>(std::move(pParam));
ScDBInternalRange(ScDocument *pDoc, const ScRange &rRange)
virtual SCCOL getColSize() const override
const ScRange & getRange() const
SharedString intern(const OUString &rStr)
static void fillQueryOptions(ScQueryParamBase *pParam)
Populate query options that are always the same for all database queries.
SC_DLLPUBLIC OUString GetInputString(SCCOL nCol, SCROW nRow, SCTAB nTab, bool bForceSystemLocale=false) const
OUString ScResId(TranslateId aId)
virtual SCCOL getColSize() const =0
const Item & GetQueryItem() const
virtual std::unique_ptr< ScDBQueryParamBase > createQueryParam(const ScDBRangeBase *pQueryRef) const override
virtual SCSIZE getVisibleDataCellCount() const override
const ScMatrixRef mpMatrix
virtual SCCOL findFieldColumn(SCCOL nIndex) const override
Get a 0-based column index that corresponds with the passed field index.
size_t SCSIZE
size_t typedef to be able to find places where code was changed from USHORT to size_t and is used to ...
virtual SCSIZE getVisibleDataCellCount() const =0
SC_DLLPUBLIC SCSIZE GetEntryCount() const
SC_DLLPUBLIC const ScQueryEntry & GetEntry(SCSIZE n) const
::boost::intrusive_ptr< ScMatrix > ScMatrixRef
void FillInExcelSyntax(svl::SharedStringPool &rPool, const OUString &aCellStr, SCSIZE nIndex, SvNumberFormatter *pFormatter)
virtual OUString getString(SCCOL nCol, SCROW nRow) const override
Get a string value of a specified cell position.
virtual bool isRangeEqual(const ScRange &rRange) const override
virtual SCROW getRowSize() const override
void IncCol(SCCOL nDelta=1)
bool ValidCol(SCCOL nCol) const
static SC_DLLPUBLIC const CharClass & getCharClass()
Base class for abstracting range data backends for database functions.
virtual ~ScDBRangeBase()=0
OUString uppercase(const OUString &rStr, sal_Int32 nPos, sal_Int32 nCount) const
virtual SCSIZE getVisibleDataCellCount() const override
virtual bool isRangeEqual(const ScRange &rRange) const override
virtual ~ScDBExternalRange() override
virtual std::unique_ptr< ScDBQueryParamBase > createQueryParam(const ScDBRangeBase *pQueryRef) const override
ScDocument * getDoc() const
svl::SharedString maString
virtual SCCOL getFirstFieldColumn() const override
virtual SCCOL findFieldColumn(SCCOL nIndex) const override
Get a 0-based column index that corresponds with the passed field index.
virtual SCCOL getFirstFieldColumn() const override
virtual SCCOL findFieldColumn(SCCOL nIndex) const =0
Get a 0-based column index that corresponds with the passed field index.
virtual SCROW getRowSize() const =0
bool fillQueryEntries(ScQueryParamBase *pParam, const ScDBRangeBase *pDBRef) const
virtual SCCOL getColSize() const override
virtual ~ScDBInternalRange() override
ScDBExternalRange(ScDocument *pDoc, const ScMatrixRef &pMat)
virtual OUString getString(SCCOL nCol, SCROW nRow) const =0
Get a string value of a specified cell position.
static SC_DLLPUBLIC::utl::TransliterationWrapper & GetTransliteration()
FormulaError GetStringForFormula(const ScAddress &rPos, OUString &rString)
Each instance of this struct represents a single filtering criteria.
utl::SearchParam::SearchType eSearchType
virtual SCROW getRowSize() const override
virtual OUString getString(SCCOL nCol, SCROW nRow) const override
Get a string value of a specified cell position.