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 _CONNECTIVITY_FILE_FCODE_HXX_ 25*b1cdbd2cSJim Jagielski #define _CONNECTIVITY_FILE_FCODE_HXX_ 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "connectivity/sqliterator.hxx" 28*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/DataType.hpp> 29*b1cdbd2cSJim Jagielski #include "connectivity/CommonTools.hxx" 30*b1cdbd2cSJim Jagielski #include <tools/rtti.hxx> 31*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp> 32*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexAccess.hpp> 33*b1cdbd2cSJim Jagielski #include "connectivity/FValue.hxx" 34*b1cdbd2cSJim Jagielski #include "file/filedllapi.hxx" 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski namespace connectivity 37*b1cdbd2cSJim Jagielski { 38*b1cdbd2cSJim Jagielski class OSQLParseNode; 39*b1cdbd2cSJim Jagielski namespace dbase 40*b1cdbd2cSJim Jagielski { 41*b1cdbd2cSJim Jagielski class ODbaseIndex; 42*b1cdbd2cSJim Jagielski } 43*b1cdbd2cSJim Jagielski namespace file 44*b1cdbd2cSJim Jagielski { 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski class OOperand; 47*b1cdbd2cSJim Jagielski typedef ::std::stack<OOperand*> OCodeStack; 48*b1cdbd2cSJim Jagielski class OBoolOperator; 49*b1cdbd2cSJim Jagielski typedef ::std::map<sal_Int32,sal_Int32> OEvaluateSet; 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski typedef ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> OFileColumns; 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_FILE OCode 55*b1cdbd2cSJim Jagielski { 56*b1cdbd2cSJim Jagielski public: 57*b1cdbd2cSJim Jagielski OCode(); 58*b1cdbd2cSJim Jagielski virtual ~OCode(); 59*b1cdbd2cSJim Jagielski operator new(size_t nSize)60*b1cdbd2cSJim Jagielski inline static void * SAL_CALL operator new( size_t nSize ) SAL_THROW( () ) 61*b1cdbd2cSJim Jagielski { return ::rtl_allocateMemory( nSize ); } operator new(size_t,void * _pHint)62*b1cdbd2cSJim Jagielski inline static void * SAL_CALL operator new( size_t /*nSize*/,void* _pHint ) SAL_THROW( () ) 63*b1cdbd2cSJim Jagielski { return _pHint; } operator delete(void * pMem)64*b1cdbd2cSJim Jagielski inline static void SAL_CALL operator delete( void * pMem ) SAL_THROW( () ) 65*b1cdbd2cSJim Jagielski { ::rtl_freeMemory( pMem ); } operator delete(void *,void *)66*b1cdbd2cSJim Jagielski inline static void SAL_CALL operator delete( void * /*pMem*/,void* /*_pHint*/ ) SAL_THROW( () ) 67*b1cdbd2cSJim Jagielski { } 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski TYPEINFO(); 70*b1cdbd2cSJim Jagielski }; 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski // operands that the parsetree generate 74*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_FILE OOperand : public OCode 75*b1cdbd2cSJim Jagielski { 76*b1cdbd2cSJim Jagielski protected: 77*b1cdbd2cSJim Jagielski sal_Int32 m_eDBType; 78*b1cdbd2cSJim Jagielski OOperand(const sal_Int32 & _rType)79*b1cdbd2cSJim Jagielski OOperand(const sal_Int32& _rType) : m_eDBType(_rType){} OOperand()80*b1cdbd2cSJim Jagielski OOperand() : m_eDBType(::com::sun::star::sdbc::DataType::OTHER){} 81*b1cdbd2cSJim Jagielski 82*b1cdbd2cSJim Jagielski public: 83*b1cdbd2cSJim Jagielski virtual const ORowSetValue& getValue() const = 0; 84*b1cdbd2cSJim Jagielski virtual void setValue(const ORowSetValue& _rVal) = 0; 85*b1cdbd2cSJim Jagielski getDBType() const86*b1cdbd2cSJim Jagielski virtual sal_Int32 getDBType() const {return m_eDBType;} 87*b1cdbd2cSJim Jagielski virtual OEvaluateSet* preProcess(OBoolOperator* pOp, OOperand* pRight = 0); 88*b1cdbd2cSJim Jagielski inline sal_Bool isValid() const; 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski TYPEINFO(); 91*b1cdbd2cSJim Jagielski }; 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_FILE OOperandRow : public OOperand 94*b1cdbd2cSJim Jagielski { 95*b1cdbd2cSJim Jagielski sal_uInt16 m_nRowPos; 96*b1cdbd2cSJim Jagielski protected: 97*b1cdbd2cSJim Jagielski OValueRefRow m_pRow; 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski OOperandRow(sal_uInt16 _nPos, sal_Int32 _rType); 100*b1cdbd2cSJim Jagielski public: getRowPos() const101*b1cdbd2cSJim Jagielski sal_uInt16 getRowPos() const {return m_nRowPos;} 102*b1cdbd2cSJim Jagielski virtual const ORowSetValue& getValue() const; 103*b1cdbd2cSJim Jagielski virtual void setValue(const ORowSetValue& _rVal); 104*b1cdbd2cSJim Jagielski void bindValue(const OValueRefRow& _pRow); // Bindung an den Wert, den der Operand repraesentiert 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski TYPEINFO(); 107*b1cdbd2cSJim Jagielski }; 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski // Attribute aus einer Ergebniszeile 110*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_FILE OOperandAttr : public OOperandRow 111*b1cdbd2cSJim Jagielski { 112*b1cdbd2cSJim Jagielski protected: 113*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> m_xColumn; 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski public: 116*b1cdbd2cSJim Jagielski OOperandAttr(sal_uInt16 _nPos, 117*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn); 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski virtual sal_Bool isIndexed() const; 120*b1cdbd2cSJim Jagielski virtual OEvaluateSet* preProcess(OBoolOperator* pOp, OOperand* pRight = 0); 121*b1cdbd2cSJim Jagielski TYPEINFO(); 122*b1cdbd2cSJim Jagielski }; 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski // Parameter fuer ein Praedikat 125*b1cdbd2cSJim Jagielski class OOperandParam : public OOperandRow 126*b1cdbd2cSJim Jagielski { 127*b1cdbd2cSJim Jagielski public: 128*b1cdbd2cSJim Jagielski OOperandParam(connectivity::OSQLParseNode* pNode, sal_Int32 _nPos); 129*b1cdbd2cSJim Jagielski void describe(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn, ::vos::ORef<connectivity::OSQLColumns> _xParamColumns); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski TYPEINFO(); 132*b1cdbd2cSJim Jagielski }; 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski // WerteOperanden 135*b1cdbd2cSJim Jagielski class OOperandValue : public OOperand 136*b1cdbd2cSJim Jagielski { 137*b1cdbd2cSJim Jagielski protected: 138*b1cdbd2cSJim Jagielski ORowSetValue m_aValue; 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski protected: OOperandValue()141*b1cdbd2cSJim Jagielski OOperandValue(){} OOperandValue(const ORowSetValue & _rVar,sal_Int32 eDbType)142*b1cdbd2cSJim Jagielski OOperandValue(const ORowSetValue& _rVar, sal_Int32 eDbType) 143*b1cdbd2cSJim Jagielski : OOperand(eDbType) 144*b1cdbd2cSJim Jagielski , m_aValue(_rVar) 145*b1cdbd2cSJim Jagielski {} 146*b1cdbd2cSJim Jagielski OOperandValue(sal_Int32 eDbType)147*b1cdbd2cSJim Jagielski OOperandValue(sal_Int32 eDbType) :OOperand(eDbType){} 148*b1cdbd2cSJim Jagielski public: 149*b1cdbd2cSJim Jagielski virtual const ORowSetValue& getValue() const; 150*b1cdbd2cSJim Jagielski virtual void setValue(const ORowSetValue& _rVal); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski TYPEINFO(); 153*b1cdbd2cSJim Jagielski }; 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski // Konstanten 157*b1cdbd2cSJim Jagielski class OOperandConst : public OOperandValue 158*b1cdbd2cSJim Jagielski { 159*b1cdbd2cSJim Jagielski public: 160*b1cdbd2cSJim Jagielski OOperandConst(const connectivity::OSQLParseNode& rColumnRef, const rtl::OUString& aStrValue); 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski TYPEINFO(); 163*b1cdbd2cSJim Jagielski }; 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski // Ergebnis Operanden 167*b1cdbd2cSJim Jagielski class OOperandResult : public OOperandValue 168*b1cdbd2cSJim Jagielski { 169*b1cdbd2cSJim Jagielski protected: OOperandResult(const ORowSetValue & _rVar,sal_Int32 eDbType)170*b1cdbd2cSJim Jagielski OOperandResult(const ORowSetValue& _rVar, sal_Int32 eDbType) 171*b1cdbd2cSJim Jagielski :OOperandValue(_rVar, eDbType) {} OOperandResult(sal_Int32 eDbType)172*b1cdbd2cSJim Jagielski OOperandResult(sal_Int32 eDbType) 173*b1cdbd2cSJim Jagielski :OOperandValue(eDbType) {} 174*b1cdbd2cSJim Jagielski public: OOperandResult(const ORowSetValue & _rVar)175*b1cdbd2cSJim Jagielski OOperandResult(const ORowSetValue& _rVar) 176*b1cdbd2cSJim Jagielski :OOperandValue(_rVar, _rVar.getTypeKind()) {} 177*b1cdbd2cSJim Jagielski TYPEINFO(); 178*b1cdbd2cSJim Jagielski }; 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski class OOperandResultBOOL : public OOperandResult 182*b1cdbd2cSJim Jagielski { 183*b1cdbd2cSJim Jagielski public: OOperandResultBOOL(sal_Bool bResult)184*b1cdbd2cSJim Jagielski OOperandResultBOOL(sal_Bool bResult) : OOperandResult(::com::sun::star::sdbc::DataType::BIT) 185*b1cdbd2cSJim Jagielski { 186*b1cdbd2cSJim Jagielski m_aValue = bResult ? 1.0 : 0.0; 187*b1cdbd2cSJim Jagielski m_aValue.setBound(sal_True); 188*b1cdbd2cSJim Jagielski } 189*b1cdbd2cSJim Jagielski }; 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski class OOperandResultNUM : public OOperandResult 192*b1cdbd2cSJim Jagielski { 193*b1cdbd2cSJim Jagielski public: OOperandResultNUM(double fNum)194*b1cdbd2cSJim Jagielski OOperandResultNUM(double fNum) : OOperandResult(::com::sun::star::sdbc::DataType::DOUBLE) 195*b1cdbd2cSJim Jagielski { 196*b1cdbd2cSJim Jagielski m_aValue = fNum; 197*b1cdbd2cSJim Jagielski m_aValue.setBound(sal_True); 198*b1cdbd2cSJim Jagielski } 199*b1cdbd2cSJim Jagielski }; 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski /** special stop operand 202*b1cdbd2cSJim Jagielski is appended when a list of arguments ends 203*b1cdbd2cSJim Jagielski */ 204*b1cdbd2cSJim Jagielski class OStopOperand : public OOperandValue 205*b1cdbd2cSJim Jagielski { 206*b1cdbd2cSJim Jagielski public: OStopOperand()207*b1cdbd2cSJim Jagielski OStopOperand(){} 208*b1cdbd2cSJim Jagielski TYPEINFO(); 209*b1cdbd2cSJim Jagielski }; 210*b1cdbd2cSJim Jagielski 211*b1cdbd2cSJim Jagielski // Operatoren 212*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_FILE OOperator : public OCode 213*b1cdbd2cSJim Jagielski { 214*b1cdbd2cSJim Jagielski public: 215*b1cdbd2cSJim Jagielski virtual void Exec(OCodeStack&) = 0; 216*b1cdbd2cSJim Jagielski virtual sal_uInt16 getRequestedOperands() const; // Anzahl benoetigter Operanden 217*b1cdbd2cSJim Jagielski // Standard ist 2 218*b1cdbd2cSJim Jagielski TYPEINFO(); 219*b1cdbd2cSJim Jagielski }; 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski 222*b1cdbd2cSJim Jagielski // boolsche Operatoren 223*b1cdbd2cSJim Jagielski 224*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_FILE OBoolOperator : public OOperator 225*b1cdbd2cSJim Jagielski { 226*b1cdbd2cSJim Jagielski public: 227*b1cdbd2cSJim Jagielski TYPEINFO(); 228*b1cdbd2cSJim Jagielski virtual void Exec(OCodeStack&); 229*b1cdbd2cSJim Jagielski virtual sal_Bool operate(const OOperand*, const OOperand*) const; 230*b1cdbd2cSJim Jagielski }; 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski class OOp_NOT : public OBoolOperator 233*b1cdbd2cSJim Jagielski { 234*b1cdbd2cSJim Jagielski public: 235*b1cdbd2cSJim Jagielski TYPEINFO(); 236*b1cdbd2cSJim Jagielski 237*b1cdbd2cSJim Jagielski protected: 238*b1cdbd2cSJim Jagielski virtual void Exec(OCodeStack&); 239*b1cdbd2cSJim Jagielski virtual sal_Bool operate(const OOperand*, const OOperand* = NULL) const; 240*b1cdbd2cSJim Jagielski virtual sal_uInt16 getRequestedOperands() const; 241*b1cdbd2cSJim Jagielski }; 242*b1cdbd2cSJim Jagielski 243*b1cdbd2cSJim Jagielski class OOp_AND : public OBoolOperator 244*b1cdbd2cSJim Jagielski { 245*b1cdbd2cSJim Jagielski public: 246*b1cdbd2cSJim Jagielski TYPEINFO(); 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski protected: 249*b1cdbd2cSJim Jagielski virtual sal_Bool operate(const OOperand*, const OOperand*) const; 250*b1cdbd2cSJim Jagielski }; 251*b1cdbd2cSJim Jagielski 252*b1cdbd2cSJim Jagielski class OOp_OR : public OBoolOperator 253*b1cdbd2cSJim Jagielski { 254*b1cdbd2cSJim Jagielski public: 255*b1cdbd2cSJim Jagielski TYPEINFO(); 256*b1cdbd2cSJim Jagielski protected: 257*b1cdbd2cSJim Jagielski virtual sal_Bool operate(const OOperand*, const OOperand*) const; 258*b1cdbd2cSJim Jagielski }; 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_FILE OOp_ISNULL : public OBoolOperator 261*b1cdbd2cSJim Jagielski { 262*b1cdbd2cSJim Jagielski public: 263*b1cdbd2cSJim Jagielski TYPEINFO(); 264*b1cdbd2cSJim Jagielski public: 265*b1cdbd2cSJim Jagielski virtual void Exec(OCodeStack&); 266*b1cdbd2cSJim Jagielski virtual sal_uInt16 getRequestedOperands() const; 267*b1cdbd2cSJim Jagielski virtual sal_Bool operate(const OOperand*, const OOperand* = NULL) const; 268*b1cdbd2cSJim Jagielski }; 269*b1cdbd2cSJim Jagielski 270*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_FILE OOp_ISNOTNULL : public OOp_ISNULL 271*b1cdbd2cSJim Jagielski { 272*b1cdbd2cSJim Jagielski public: 273*b1cdbd2cSJim Jagielski TYPEINFO(); 274*b1cdbd2cSJim Jagielski virtual sal_Bool operate(const OOperand*, const OOperand* = NULL) const; 275*b1cdbd2cSJim Jagielski }; 276*b1cdbd2cSJim Jagielski 277*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_FILE OOp_LIKE : public OBoolOperator 278*b1cdbd2cSJim Jagielski { 279*b1cdbd2cSJim Jagielski public: 280*b1cdbd2cSJim Jagielski TYPEINFO(); 281*b1cdbd2cSJim Jagielski protected: 282*b1cdbd2cSJim Jagielski const sal_Unicode cEscape; 283*b1cdbd2cSJim Jagielski 284*b1cdbd2cSJim Jagielski public: OOp_LIKE(const sal_Unicode cEsc=L'\\0')285*b1cdbd2cSJim Jagielski OOp_LIKE(const sal_Unicode cEsc = L'\0'):cEscape(cEsc){}; 286*b1cdbd2cSJim Jagielski 287*b1cdbd2cSJim Jagielski virtual sal_Bool operate(const OOperand*, const OOperand*) const; 288*b1cdbd2cSJim Jagielski }; 289*b1cdbd2cSJim Jagielski 290*b1cdbd2cSJim Jagielski class OOp_NOTLIKE : public OOp_LIKE 291*b1cdbd2cSJim Jagielski { 292*b1cdbd2cSJim Jagielski public: 293*b1cdbd2cSJim Jagielski TYPEINFO(); 294*b1cdbd2cSJim Jagielski public: OOp_NOTLIKE(const sal_Unicode cEsc=L'\\0')295*b1cdbd2cSJim Jagielski OOp_NOTLIKE(const sal_Unicode cEsc = L'\0'):OOp_LIKE(cEsc){}; 296*b1cdbd2cSJim Jagielski 297*b1cdbd2cSJim Jagielski virtual sal_Bool operate(const OOperand*, const OOperand*) const; 298*b1cdbd2cSJim Jagielski }; 299*b1cdbd2cSJim Jagielski 300*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_FILE OOp_COMPARE : public OBoolOperator 301*b1cdbd2cSJim Jagielski { 302*b1cdbd2cSJim Jagielski sal_Int32 aPredicateType; 303*b1cdbd2cSJim Jagielski 304*b1cdbd2cSJim Jagielski public: 305*b1cdbd2cSJim Jagielski TYPEINFO(); OOp_COMPARE(sal_Int32 aPType)306*b1cdbd2cSJim Jagielski OOp_COMPARE(sal_Int32 aPType) 307*b1cdbd2cSJim Jagielski :aPredicateType(aPType) {} 308*b1cdbd2cSJim Jagielski getPredicateType() const309*b1cdbd2cSJim Jagielski inline sal_Int32 getPredicateType() const { return aPredicateType; } 310*b1cdbd2cSJim Jagielski virtual sal_Bool operate(const OOperand*, const OOperand*) const; 311*b1cdbd2cSJim Jagielski }; 312*b1cdbd2cSJim Jagielski 313*b1cdbd2cSJim Jagielski // numerische Operatoren 314*b1cdbd2cSJim Jagielski 315*b1cdbd2cSJim Jagielski class ONumOperator : public OOperator 316*b1cdbd2cSJim Jagielski { 317*b1cdbd2cSJim Jagielski public: 318*b1cdbd2cSJim Jagielski virtual void Exec(OCodeStack&); 319*b1cdbd2cSJim Jagielski 320*b1cdbd2cSJim Jagielski TYPEINFO(); 321*b1cdbd2cSJim Jagielski 322*b1cdbd2cSJim Jagielski protected: 323*b1cdbd2cSJim Jagielski virtual double operate(const double& fLeft,const double& fRight) const = 0; 324*b1cdbd2cSJim Jagielski }; 325*b1cdbd2cSJim Jagielski 326*b1cdbd2cSJim Jagielski class OOp_ADD : public ONumOperator 327*b1cdbd2cSJim Jagielski { 328*b1cdbd2cSJim Jagielski protected: 329*b1cdbd2cSJim Jagielski virtual double operate(const double& fLeft,const double& fRight) const; 330*b1cdbd2cSJim Jagielski }; 331*b1cdbd2cSJim Jagielski 332*b1cdbd2cSJim Jagielski class OOp_SUB : public ONumOperator 333*b1cdbd2cSJim Jagielski { 334*b1cdbd2cSJim Jagielski protected: 335*b1cdbd2cSJim Jagielski virtual double operate(const double& fLeft,const double& fRight) const; 336*b1cdbd2cSJim Jagielski }; 337*b1cdbd2cSJim Jagielski 338*b1cdbd2cSJim Jagielski class OOp_MUL : public ONumOperator 339*b1cdbd2cSJim Jagielski { 340*b1cdbd2cSJim Jagielski protected: 341*b1cdbd2cSJim Jagielski virtual double operate(const double& fLeft,const double& fRight) const; 342*b1cdbd2cSJim Jagielski }; 343*b1cdbd2cSJim Jagielski 344*b1cdbd2cSJim Jagielski class OOp_DIV : public ONumOperator 345*b1cdbd2cSJim Jagielski { 346*b1cdbd2cSJim Jagielski protected: 347*b1cdbd2cSJim Jagielski virtual double operate(const double& fLeft,const double& fRight) const; 348*b1cdbd2cSJim Jagielski }; 349*b1cdbd2cSJim Jagielski isValid() const350*b1cdbd2cSJim Jagielski inline sal_Bool OOperand::isValid() const 351*b1cdbd2cSJim Jagielski { 352*b1cdbd2cSJim Jagielski return getValue().getDouble() != double(0.0); 353*b1cdbd2cSJim Jagielski } 354*b1cdbd2cSJim Jagielski 355*b1cdbd2cSJim Jagielski // operator 356*b1cdbd2cSJim Jagielski class ONthOperator : public OOperator 357*b1cdbd2cSJim Jagielski { 358*b1cdbd2cSJim Jagielski public: 359*b1cdbd2cSJim Jagielski virtual void Exec(OCodeStack&); 360*b1cdbd2cSJim Jagielski 361*b1cdbd2cSJim Jagielski TYPEINFO(); 362*b1cdbd2cSJim Jagielski 363*b1cdbd2cSJim Jagielski protected: 364*b1cdbd2cSJim Jagielski virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const = 0; 365*b1cdbd2cSJim Jagielski }; 366*b1cdbd2cSJim Jagielski 367*b1cdbd2cSJim Jagielski class OBinaryOperator : public OOperator 368*b1cdbd2cSJim Jagielski { 369*b1cdbd2cSJim Jagielski public: 370*b1cdbd2cSJim Jagielski virtual void Exec(OCodeStack&); 371*b1cdbd2cSJim Jagielski 372*b1cdbd2cSJim Jagielski TYPEINFO(); 373*b1cdbd2cSJim Jagielski 374*b1cdbd2cSJim Jagielski protected: 375*b1cdbd2cSJim Jagielski virtual ORowSetValue operate(const ORowSetValue& lhs,const ORowSetValue& rhs) const = 0; 376*b1cdbd2cSJim Jagielski }; 377*b1cdbd2cSJim Jagielski 378*b1cdbd2cSJim Jagielski class OUnaryOperator : public OOperator 379*b1cdbd2cSJim Jagielski { 380*b1cdbd2cSJim Jagielski public: 381*b1cdbd2cSJim Jagielski virtual void Exec(OCodeStack&); 382*b1cdbd2cSJim Jagielski virtual sal_uInt16 getRequestedOperands() const; 383*b1cdbd2cSJim Jagielski virtual ORowSetValue operate(const ORowSetValue& lhs) const = 0; 384*b1cdbd2cSJim Jagielski 385*b1cdbd2cSJim Jagielski TYPEINFO(); 386*b1cdbd2cSJim Jagielski 387*b1cdbd2cSJim Jagielski }; 388*b1cdbd2cSJim Jagielski } 389*b1cdbd2cSJim Jagielski } 390*b1cdbd2cSJim Jagielski 391*b1cdbd2cSJim Jagielski #endif // _CONNECTIVITY_FILE_FCODE_HXX_ 392*b1cdbd2cSJim Jagielski 393