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_ODBC_OSTATEMENT_HXX_ 25*b1cdbd2cSJim Jagielski #define _CONNECTIVITY_ODBC_OSTATEMENT_HXX_ 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XStatement.hpp> 28*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XWarningsSupplier.hpp> 29*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XMultipleResults.hpp> 30*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XBatchExecution.hpp> 31*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XCloseable.hpp> 32*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/SQLWarning.hpp> 33*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XGeneratedResultSet.hpp> 34*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XCancellable.hpp> 35*b1cdbd2cSJim Jagielski #include <comphelper/proparrhlp.hxx> 36*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase6.hxx> 37*b1cdbd2cSJim Jagielski #include <comphelper/uno3.hxx> 38*b1cdbd2cSJim Jagielski #include "connectivity/CommonTools.hxx" 39*b1cdbd2cSJim Jagielski #include "odbc/OFunctions.hxx" 40*b1cdbd2cSJim Jagielski #include "odbc/OConnection.hxx" 41*b1cdbd2cSJim Jagielski #include "odbc/odbcbasedllapi.hxx" 42*b1cdbd2cSJim Jagielski #include <list> 43*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp> 44*b1cdbd2cSJim Jagielski #include <comphelper/broadcasthelper.hxx> 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski namespace connectivity 47*b1cdbd2cSJim Jagielski { 48*b1cdbd2cSJim Jagielski namespace odbc 49*b1cdbd2cSJim Jagielski { 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski typedef ::cppu::WeakComponentImplHelper6< ::com::sun::star::sdbc::XStatement, 52*b1cdbd2cSJim Jagielski ::com::sun::star::sdbc::XWarningsSupplier, 53*b1cdbd2cSJim Jagielski ::com::sun::star::util::XCancellable, 54*b1cdbd2cSJim Jagielski ::com::sun::star::sdbc::XCloseable, 55*b1cdbd2cSJim Jagielski ::com::sun::star::sdbc::XGeneratedResultSet, 56*b1cdbd2cSJim Jagielski ::com::sun::star::sdbc::XMultipleResults> OStatement_BASE; 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski class OResultSet; 59*b1cdbd2cSJim Jagielski //************************************************************** 60*b1cdbd2cSJim Jagielski //************ Class: java.sql.Statement 61*b1cdbd2cSJim Jagielski //************************************************************** 62*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_ODBCBASE OStatement_Base : 63*b1cdbd2cSJim Jagielski public comphelper::OBaseMutex, 64*b1cdbd2cSJim Jagielski public OStatement_BASE, 65*b1cdbd2cSJim Jagielski public ::cppu::OPropertySetHelper, 66*b1cdbd2cSJim Jagielski public ::comphelper::OPropertyArrayUsageHelper<OStatement_Base> 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski { 69*b1cdbd2cSJim Jagielski ::com::sun::star::sdbc::SQLWarning m_aLastWarning; 70*b1cdbd2cSJim Jagielski protected: 71*b1cdbd2cSJim Jagielski ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XResultSet> m_xResultSet; // The last ResultSet created 72*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XStatement> m_xGeneratedStatement; 73*b1cdbd2cSJim Jagielski // for this Statement 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski ::std::list< ::rtl::OUString> m_aBatchList; 76*b1cdbd2cSJim Jagielski ::rtl::OUString m_sSqlStatement; 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski OConnection* m_pConnection;// The owning Connection object 79*b1cdbd2cSJim Jagielski SQLHANDLE m_aStatementHandle; 80*b1cdbd2cSJim Jagielski SQLUSMALLINT* m_pRowStatusArray; 81*b1cdbd2cSJim Jagielski ::cppu::OBroadcastHelper& rBHelper; 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski protected: 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski sal_Int32 getQueryTimeOut() const; 86*b1cdbd2cSJim Jagielski sal_Int32 getMaxFieldSize() const; 87*b1cdbd2cSJim Jagielski sal_Int32 getMaxRows() const; 88*b1cdbd2cSJim Jagielski sal_Int32 getResultSetConcurrency() const; 89*b1cdbd2cSJim Jagielski sal_Int32 getResultSetType() const; 90*b1cdbd2cSJim Jagielski sal_Int32 getFetchDirection() const; 91*b1cdbd2cSJim Jagielski sal_Int32 getFetchSize() const; 92*b1cdbd2cSJim Jagielski ::rtl::OUString getCursorName() const; 93*b1cdbd2cSJim Jagielski sal_Bool isUsingBookmarks() const; 94*b1cdbd2cSJim Jagielski sal_Bool getEscapeProcessing() const; 95*b1cdbd2cSJim Jagielski sal_Int32 getStmtOption (short fOption) const; 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski void setQueryTimeOut(sal_Int32 _par0) ; 98*b1cdbd2cSJim Jagielski void setMaxFieldSize(sal_Int32 _par0) ; 99*b1cdbd2cSJim Jagielski void setMaxRows(sal_Int32 _par0) ; 100*b1cdbd2cSJim Jagielski void setFetchDirection(sal_Int32 _par0) ; 101*b1cdbd2cSJim Jagielski void setFetchSize(sal_Int32 _par0) ; 102*b1cdbd2cSJim Jagielski void setCursorName(const ::rtl::OUString &_par0); 103*b1cdbd2cSJim Jagielski void setEscapeProcessing( const sal_Bool _bEscapeProc ); 104*b1cdbd2cSJim Jagielski 105*b1cdbd2cSJim Jagielski virtual void setResultSetConcurrency(sal_Int32 _par0) ; 106*b1cdbd2cSJim Jagielski virtual void setResultSetType(sal_Int32 _par0) ; 107*b1cdbd2cSJim Jagielski virtual void setUsingBookmarks(sal_Bool _bUseBookmark) ; 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski void reset () throw( ::com::sun::star::sdbc::SQLException); 110*b1cdbd2cSJim Jagielski void clearMyResultSet () throw( ::com::sun::star::sdbc::SQLException); 111*b1cdbd2cSJim Jagielski void setWarning (const ::com::sun::star::sdbc::SQLWarning &ex) throw( ::com::sun::star::sdbc::SQLException); 112*b1cdbd2cSJim Jagielski sal_Bool lockIfNecessary (const ::rtl::OUString& sql) throw( ::com::sun::star::sdbc::SQLException); 113*b1cdbd2cSJim Jagielski sal_Int32 getColumnCount () throw( ::com::sun::star::sdbc::SQLException); 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- 116*b1cdbd2cSJim Jagielski // getResultSet 117*b1cdbd2cSJim Jagielski // getResultSet returns the current result as a ResultSet. It 118*b1cdbd2cSJim Jagielski // returns NULL if the current result is not a ResultSet. 119*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- 120*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > getResultSet (sal_Bool checkCount) throw( ::com::sun::star::sdbc::SQLException); 121*b1cdbd2cSJim Jagielski /** 122*b1cdbd2cSJim Jagielski creates the driver specific resultset (factory) 123*b1cdbd2cSJim Jagielski */ 124*b1cdbd2cSJim Jagielski virtual OResultSet* createResulSet(); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski SQLLEN getRowCount () throw( ::com::sun::star::sdbc::SQLException); 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski void disposeResultSet(); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski // OPropertyArrayUsageHelper 132*b1cdbd2cSJim Jagielski virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const; 133*b1cdbd2cSJim Jagielski // OPropertySetHelper 134*b1cdbd2cSJim Jagielski virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper(); 135*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL convertFastPropertyValue( 136*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any & rConvertedValue, 137*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any & rOldValue, 138*b1cdbd2cSJim Jagielski sal_Int32 nHandle, 139*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Any& rValue ) 140*b1cdbd2cSJim Jagielski throw (::com::sun::star::lang::IllegalArgumentException); 141*b1cdbd2cSJim Jagielski virtual void SAL_CALL setFastPropertyValue_NoBroadcast( 142*b1cdbd2cSJim Jagielski sal_Int32 nHandle, 143*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Any& rValue 144*b1cdbd2cSJim Jagielski ) 145*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::Exception); 146*b1cdbd2cSJim Jagielski virtual void SAL_CALL getFastPropertyValue( 147*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any& rValue, 148*b1cdbd2cSJim Jagielski sal_Int32 nHandle 149*b1cdbd2cSJim Jagielski ) const; 150*b1cdbd2cSJim Jagielski virtual ~OStatement_Base(); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski public: 153*b1cdbd2cSJim Jagielski OStatement_Base(OConnection* _pConnection ); 154*b1cdbd2cSJim Jagielski using OStatement_BASE::operator ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >; 155*b1cdbd2cSJim Jagielski getOdbcFunction(sal_Int32 _nIndex) const156*b1cdbd2cSJim Jagielski inline oslGenericFunction getOdbcFunction(sal_Int32 _nIndex) const 157*b1cdbd2cSJim Jagielski { 158*b1cdbd2cSJim Jagielski return m_pConnection->getOdbcFunction(_nIndex); 159*b1cdbd2cSJim Jagielski } 160*b1cdbd2cSJim Jagielski // OComponentHelper 161*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing(void); 162*b1cdbd2cSJim Jagielski // XInterface 163*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw(); 164*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw(); 165*b1cdbd2cSJim Jagielski // XInterface 166*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); 167*b1cdbd2cSJim Jagielski //XTypeProvider 168*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski // XPropertySet 171*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); 172*b1cdbd2cSJim Jagielski // XStatement 173*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL executeQuery( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) ; 174*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL executeUpdate( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) ; 175*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL execute( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) ; 176*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) ; 177*b1cdbd2cSJim Jagielski // XWarningsSupplier 178*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 179*b1cdbd2cSJim Jagielski virtual void SAL_CALL clearWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 180*b1cdbd2cSJim Jagielski // XCancellable 181*b1cdbd2cSJim Jagielski virtual void SAL_CALL cancel( ) throw(::com::sun::star::uno::RuntimeException); 182*b1cdbd2cSJim Jagielski // XCloseable 183*b1cdbd2cSJim Jagielski virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 184*b1cdbd2cSJim Jagielski // XMultipleResults 185*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getResultSet( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 186*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL getUpdateCount( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 187*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL getMoreResults( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 188*b1cdbd2cSJim Jagielski //XGeneratedResultSet 189*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getGeneratedValues( ) throw (::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski // other methods getConnectionHandle()192*b1cdbd2cSJim Jagielski SQLHANDLE getConnectionHandle() { return m_pConnection->getConnection(); } getOwnConnection() const193*b1cdbd2cSJim Jagielski OConnection* getOwnConnection() const { return m_pConnection;} 194*b1cdbd2cSJim Jagielski /** getCursorProperties return the properties for a specific cursor type 195*b1cdbd2cSJim Jagielski @param _nCursorType the CursorType 196*b1cdbd2cSJim Jagielski @param bFirst when true the first property set is returned 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski @return the cursor properties 199*b1cdbd2cSJim Jagielski */ 200*b1cdbd2cSJim Jagielski SQLUINTEGER getCursorProperties(SQLINTEGER _nCursorType,sal_Bool bFirst); 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski protected: 203*b1cdbd2cSJim Jagielski using OPropertySetHelper::getFastPropertyValue; 204*b1cdbd2cSJim Jagielski }; 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_ODBCBASE OStatement_BASE2 : 207*b1cdbd2cSJim Jagielski public OStatement_Base 208*b1cdbd2cSJim Jagielski ,public ::connectivity::OSubComponent<OStatement_BASE2, OStatement_BASE> 209*b1cdbd2cSJim Jagielski 210*b1cdbd2cSJim Jagielski { 211*b1cdbd2cSJim Jagielski friend class OSubComponent<OStatement_BASE2, OStatement_BASE>; 212*b1cdbd2cSJim Jagielski public: OStatement_BASE2(OConnection * _pConnection)213*b1cdbd2cSJim Jagielski OStatement_BASE2(OConnection* _pConnection ) : OStatement_Base(_pConnection ), 214*b1cdbd2cSJim Jagielski ::connectivity::OSubComponent<OStatement_BASE2, OStatement_BASE>((::cppu::OWeakObject*)_pConnection, this){} 215*b1cdbd2cSJim Jagielski // OComponentHelper 216*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing(void); 217*b1cdbd2cSJim Jagielski // XInterface 218*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw(); 219*b1cdbd2cSJim Jagielski }; 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski class OOO_DLLPUBLIC_ODBCBASE OStatement : 222*b1cdbd2cSJim Jagielski public OStatement_BASE2, 223*b1cdbd2cSJim Jagielski public ::com::sun::star::sdbc::XBatchExecution, 224*b1cdbd2cSJim Jagielski public ::com::sun::star::lang::XServiceInfo 225*b1cdbd2cSJim Jagielski { 226*b1cdbd2cSJim Jagielski protected: ~OStatement()227*b1cdbd2cSJim Jagielski virtual ~OStatement(){} 228*b1cdbd2cSJim Jagielski public: 229*b1cdbd2cSJim Jagielski // ein Konstruktor, der fuer das Returnen des Objektes benoetigt wird: OStatement(OConnection * _pConnection)230*b1cdbd2cSJim Jagielski OStatement( OConnection* _pConnection) : OStatement_BASE2( _pConnection){} 231*b1cdbd2cSJim Jagielski DECLARE_SERVICE_INFO(); 232*b1cdbd2cSJim Jagielski 233*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); 234*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw(); 235*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw(); 236*b1cdbd2cSJim Jagielski // XBatchExecution 237*b1cdbd2cSJim Jagielski virtual void SAL_CALL addBatch( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 238*b1cdbd2cSJim Jagielski virtual void SAL_CALL clearBatch( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 239*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL executeBatch( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); 240*b1cdbd2cSJim Jagielski }; 241*b1cdbd2cSJim Jagielski } 242*b1cdbd2cSJim Jagielski } 243*b1cdbd2cSJim Jagielski #endif // _CONNECTIVITY_ODBC_OSTATEMENT_HXX_ 244*b1cdbd2cSJim Jagielski 245