xref: /trunk/main/connectivity/source/inc/odbc/OStatement.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _CONNECTIVITY_ODBC_OSTATEMENT_HXX_
29 #define _CONNECTIVITY_ODBC_OSTATEMENT_HXX_
30 
31 #include <com/sun/star/sdbc/XStatement.hpp>
32 #include <com/sun/star/sdbc/XWarningsSupplier.hpp>
33 #include <com/sun/star/sdbc/XMultipleResults.hpp>
34 #include <com/sun/star/sdbc/XBatchExecution.hpp>
35 #include <com/sun/star/sdbc/XCloseable.hpp>
36 #include <com/sun/star/sdbc/SQLWarning.hpp>
37 #include <com/sun/star/sdbc/XGeneratedResultSet.hpp>
38 #include <com/sun/star/util/XCancellable.hpp>
39 #include <comphelper/proparrhlp.hxx>
40 #include <cppuhelper/compbase6.hxx>
41 #include <comphelper/uno3.hxx>
42 #include "connectivity/CommonTools.hxx"
43 #include "odbc/OFunctions.hxx"
44 #include "odbc/OConnection.hxx"
45 #include "odbc/odbcbasedllapi.hxx"
46 #include <list>
47 #include <com/sun/star/lang/XServiceInfo.hpp>
48 #include <comphelper/broadcasthelper.hxx>
49 
50 namespace connectivity
51 {
52     namespace odbc
53     {
54 
55         typedef ::cppu::WeakComponentImplHelper6<   ::com::sun::star::sdbc::XStatement,
56                                                     ::com::sun::star::sdbc::XWarningsSupplier,
57                                                     ::com::sun::star::util::XCancellable,
58                                                     ::com::sun::star::sdbc::XCloseable,
59                                                     ::com::sun::star::sdbc::XGeneratedResultSet,
60                                                     ::com::sun::star::sdbc::XMultipleResults> OStatement_BASE;
61 
62         class OResultSet;
63         //**************************************************************
64         //************ Class: java.sql.Statement
65         //**************************************************************
66         class OOO_DLLPUBLIC_ODBCBASE OStatement_Base :
67                                         public comphelper::OBaseMutex,
68                                         public  OStatement_BASE,
69                                         public  ::cppu::OPropertySetHelper,
70                                         public  ::comphelper::OPropertyArrayUsageHelper<OStatement_Base>
71 
72         {
73         ::com::sun::star::sdbc::SQLWarning                                           m_aLastWarning;
74         protected:
75             ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XResultSet>   m_xResultSet;   // The last ResultSet created
76             ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XStatement>       m_xGeneratedStatement;
77             //  for this Statement
78 
79             ::std::list< ::rtl::OUString>   m_aBatchList;
80             ::rtl::OUString                 m_sSqlStatement;
81 
82             OConnection*                    m_pConnection;// The owning Connection object
83             SQLHANDLE                       m_aStatementHandle;
84             SQLUSMALLINT*                   m_pRowStatusArray;
85             ::cppu::OBroadcastHelper&       rBHelper;
86 
87         protected:
88 
89             sal_Int32 getQueryTimeOut()         const;
90             sal_Int32 getMaxFieldSize()         const;
91             sal_Int32 getMaxRows()              const;
92             sal_Int32 getResultSetConcurrency() const;
93             sal_Int32 getResultSetType()        const;
94             sal_Int32 getFetchDirection()       const;
95             sal_Int32 getFetchSize()            const;
96             ::rtl::OUString getCursorName()     const;
97             sal_Bool isUsingBookmarks()         const;
98             sal_Bool getEscapeProcessing()      const;
99             sal_Int32 getStmtOption (short fOption) const;
100 
101             void setQueryTimeOut(sal_Int32 _par0)           ;
102             void setMaxFieldSize(sal_Int32 _par0)           ;
103             void setMaxRows(sal_Int32 _par0)                ;
104             void setFetchDirection(sal_Int32 _par0)         ;
105             void setFetchSize(sal_Int32 _par0)              ;
106             void setCursorName(const ::rtl::OUString &_par0);
107             void setEscapeProcessing( const sal_Bool _bEscapeProc );
108 
109             virtual void setResultSetConcurrency(sal_Int32 _par0)   ;
110             virtual void setResultSetType(sal_Int32 _par0)          ;
111             virtual void setUsingBookmarks(sal_Bool _bUseBookmark)  ;
112 
113             void reset () throw( ::com::sun::star::sdbc::SQLException);
114             void clearMyResultSet () throw( ::com::sun::star::sdbc::SQLException);
115             void setWarning (const  ::com::sun::star::sdbc::SQLWarning &ex) throw( ::com::sun::star::sdbc::SQLException);
116             sal_Bool lockIfNecessary (const ::rtl::OUString& sql) throw( ::com::sun::star::sdbc::SQLException);
117             sal_Int32 getColumnCount () throw( ::com::sun::star::sdbc::SQLException);
118 
119             //--------------------------------------------------------------------
120             // getResultSet
121             // getResultSet returns the current result as a ResultSet.  It
122             // returns NULL if the current result is not a ResultSet.
123             //--------------------------------------------------------------------
124             ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > getResultSet (sal_Bool checkCount) throw( ::com::sun::star::sdbc::SQLException);
125             /**
126                 creates the driver specific resultset (factory)
127             */
128             virtual OResultSet* createResulSet();
129 
130             SQLLEN getRowCount () throw( ::com::sun::star::sdbc::SQLException);
131 
132 
133             void disposeResultSet();
134 
135             // OPropertyArrayUsageHelper
136             virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const;
137             // OPropertySetHelper
138             virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
139             virtual sal_Bool SAL_CALL convertFastPropertyValue(
140                                 ::com::sun::star::uno::Any & rConvertedValue,
141                                 ::com::sun::star::uno::Any & rOldValue,
142                                 sal_Int32 nHandle,
143                                 const ::com::sun::star::uno::Any& rValue )
144                             throw (::com::sun::star::lang::IllegalArgumentException);
145             virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
146                                     sal_Int32 nHandle,
147                                     const ::com::sun::star::uno::Any& rValue
148                                                      )
149                                  throw (::com::sun::star::uno::Exception);
150             virtual void SAL_CALL getFastPropertyValue(
151                                     ::com::sun::star::uno::Any& rValue,
152                                     sal_Int32 nHandle
153                                          ) const;
154             virtual ~OStatement_Base();
155 
156         public:
157             OStatement_Base(OConnection* _pConnection );
158             using OStatement_BASE::operator ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >;
159 
160             inline oslGenericFunction getOdbcFunction(sal_Int32 _nIndex)  const
161             {
162                 return m_pConnection->getOdbcFunction(_nIndex);
163             }
164             // OComponentHelper
165             virtual void SAL_CALL disposing(void);
166             // XInterface
167             virtual void SAL_CALL release() throw();
168             virtual void SAL_CALL acquire() throw();
169             // XInterface
170             virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
171             //XTypeProvider
172             virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw(::com::sun::star::uno::RuntimeException);
173 
174             // XPropertySet
175             virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw(::com::sun::star::uno::RuntimeException);
176             // XStatement
177             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) ;
178             virtual sal_Int32 SAL_CALL executeUpdate( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) ;
179             virtual sal_Bool SAL_CALL execute( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) ;
180             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) ;
181             // XWarningsSupplier
182             virtual ::com::sun::star::uno::Any SAL_CALL getWarnings(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
183             virtual void SAL_CALL clearWarnings(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
184             // XCancellable
185             virtual void SAL_CALL cancel(  ) throw(::com::sun::star::uno::RuntimeException);
186             // XCloseable
187             virtual void SAL_CALL close(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
188             // XMultipleResults
189             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);
190             virtual sal_Int32 SAL_CALL getUpdateCount(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
191             virtual sal_Bool SAL_CALL getMoreResults(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
192             //XGeneratedResultSet
193             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);
194 
195             // other methods
196             SQLHANDLE getConnectionHandle() { return m_pConnection->getConnection(); }
197             OConnection* getOwnConnection() const { return m_pConnection;}
198             /** getCursorProperties return the properties for a specific cursor type
199                 @param _nCursorType     the CursorType
200                 @param bFirst           when true the first property set is returned
201 
202                 @return the cursor properties
203             */
204             SQLUINTEGER getCursorProperties(SQLINTEGER _nCursorType,sal_Bool bFirst);
205 
206         protected:
207             using OPropertySetHelper::getFastPropertyValue;
208         };
209 
210         class OOO_DLLPUBLIC_ODBCBASE OStatement_BASE2 :
211                                  public OStatement_Base
212                                 ,public ::connectivity::OSubComponent<OStatement_BASE2, OStatement_BASE>
213 
214         {
215             friend class OSubComponent<OStatement_BASE2, OStatement_BASE>;
216         public:
217             OStatement_BASE2(OConnection* _pConnection ) :  OStatement_Base(_pConnection ),
218                                     ::connectivity::OSubComponent<OStatement_BASE2, OStatement_BASE>((::cppu::OWeakObject*)_pConnection, this){}
219             // OComponentHelper
220             virtual void SAL_CALL disposing(void);
221             // XInterface
222             virtual void SAL_CALL release() throw();
223         };
224 
225         class OOO_DLLPUBLIC_ODBCBASE OStatement :
226                             public OStatement_BASE2,
227                             public ::com::sun::star::sdbc::XBatchExecution,
228                             public ::com::sun::star::lang::XServiceInfo
229         {
230         protected:
231             virtual ~OStatement(){}
232         public:
233             // ein Konstruktor, der fuer das Returnen des Objektes benoetigt wird:
234             OStatement( OConnection* _pConnection) : OStatement_BASE2( _pConnection){}
235             DECLARE_SERVICE_INFO();
236 
237             virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
238             virtual void SAL_CALL acquire() throw();
239             virtual void SAL_CALL release() throw();
240             // XBatchExecution
241             virtual void SAL_CALL addBatch( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
242             virtual void SAL_CALL clearBatch(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
243             virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL executeBatch(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
244         };
245     }
246 }
247 #endif // _CONNECTIVITY_ODBC_OSTATEMENT_HXX_
248 
249