xref: /trunk/main/connectivity/source/inc/ado/Awrapado.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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 #ifndef _CONNECTIVITY_ADO_AWRAPADO_HXX_
28 #define _CONNECTIVITY_ADO_AWRAPADO_HXX_
29 
30 #include <com/sun/star/beans/PropertyAttribute.hpp>
31 
32 // Includes fuer ADO
33 #include "ado_pre_sys_include.h"
34 #include <oledb.h>
35 #include <ocidl.h>
36 #include <adoint.h>
37 #include "ado_post_sys_include.h"
38 
39 
40 #include "ado/adoimp.hxx"
41 #include "ado/Aolewrap.hxx"
42 #include "ado/Aolevariant.hxx"
43 
44 namespace connectivity
45 {
46     namespace ado
47     {
48         class WpADOConnection;
49         class WpADOCommand;
50         class WpADORecordset;
51         class WpADOField;
52         class WpADOParameter;
53         class WpADOError;
54         class WpADOProperty;
55 
56         typedef WpOLEAppendCollection<  ADOFields,      ADOField,       WpADOField>         WpADOFields;
57         typedef WpOLECollection<        ADOProperties,  ADOProperty,    WpADOProperty>      WpADOProperties;
58 
59         //------------------------------------------------------------------------
60         class WpADOConnection : public WpOLEBase<ADOConnection>
61         {
62             friend class WpADOCommand;
63         public:
64 
65             WpADOConnection(ADOConnection* pInt)    :   WpOLEBase<ADOConnection>(pInt){}
66 
67             WpADOConnection(const WpADOConnection& rhs){operator=(rhs);}
68 
69              WpADOConnection& operator=(const WpADOConnection& rhs)
70                 {WpOLEBase<ADOConnection>::operator=(rhs); return *this;}
71 
72             //////////////////////////////////////////////////////////////////////
73 
74             WpADOProperties get_Properties() const;
75 
76              rtl::OUString GetConnectionString() const;
77 
78              sal_Bool PutConnectionString(const ::rtl::OUString &aCon) const;
79 
80              sal_Int32 GetCommandTimeout() const;
81 
82              void PutCommandTimeout(sal_Int32 nRet);
83 
84              sal_Int32 GetConnectionTimeout() const ;
85 
86              void PutConnectionTimeout(sal_Int32 nRet);
87 
88              sal_Bool Close( ) ;
89 
90              sal_Bool Execute(const ::rtl::OUString& _CommandText,OLEVariant& RecordsAffected,long Options, WpADORecordset** ppiRset);
91 
92              sal_Bool BeginTrans();
93 
94              sal_Bool CommitTrans( ) ;
95 
96              sal_Bool RollbackTrans( );
97 
98              sal_Bool Open(const ::rtl::OUString& ConnectionString, const ::rtl::OUString& UserID,const ::rtl::OUString& Password,long Options);
99 
100              sal_Bool GetErrors(ADOErrors** pErrors);
101 
102              ::rtl::OUString GetDefaultDatabase() const;
103 
104              sal_Bool PutDefaultDatabase(const ::rtl::OUString& _bstr);
105 
106              IsolationLevelEnum get_IsolationLevel() const ;
107 
108              sal_Bool put_IsolationLevel(const IsolationLevelEnum& eNum) ;
109 
110              sal_Int32 get_Attributes() const;
111 
112              sal_Bool put_Attributes(sal_Int32 nRet);
113 
114              CursorLocationEnum get_CursorLocation() const;
115 
116              sal_Bool put_CursorLocation(const CursorLocationEnum &eNum) ;
117 
118              ConnectModeEnum get_Mode() const;
119 
120              sal_Bool put_Mode(const ConnectModeEnum &eNum) ;
121 
122              ::rtl::OUString get_Provider() const;
123 
124              sal_Bool put_Provider(const ::rtl::OUString& _bstr);
125 
126              sal_Int32 get_State() const;
127 
128              sal_Bool OpenSchema(SchemaEnum eNum,OLEVariant& Restrictions,OLEVariant& SchemaID,ADORecordset**pprset);
129 
130              ::rtl::OUString get_Version() const;
131 
132              // special methods
133              ADORecordset* getExportedKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table );
134              ADORecordset* getImportedKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table );
135              ADORecordset* getPrimaryKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table );
136              ADORecordset* getIndexInfo( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, sal_Bool unique, sal_Bool approximate );
137              ADORecordset* getTablePrivileges( const ::com::sun::star::uno::Any& catalog,
138                                                   const ::rtl::OUString& schemaPattern,
139                                                   const ::rtl::OUString& tableNamePattern );
140              ADORecordset* getCrossReference( const ::com::sun::star::uno::Any& primaryCatalog,
141                                                   const ::rtl::OUString& primarySchema,
142                                                   const ::rtl::OUString& primaryTable,
143                                                   const ::com::sun::star::uno::Any& foreignCatalog,
144                                                   const ::rtl::OUString& foreignSchema,
145                                                   const ::rtl::OUString& foreignTable);
146              ADORecordset* getProcedures( const ::com::sun::star::uno::Any& catalog,
147                                                   const ::rtl::OUString& schemaPattern,
148                                                   const ::rtl::OUString& procedureNamePattern );
149              ADORecordset* getProcedureColumns( const ::com::sun::star::uno::Any& catalog,
150                                                   const ::rtl::OUString& schemaPattern,
151                                                   const ::rtl::OUString& procedureNamePattern,
152                                                   const ::rtl::OUString& columnNamePattern );
153              ADORecordset* getTables( const ::com::sun::star::uno::Any& catalog,
154                                                   const ::rtl::OUString& schemaPattern,
155                                                   const ::rtl::OUString& tableNamePattern,
156                                                   const ::com::sun::star::uno::Sequence< ::rtl::OUString >& types );
157              ADORecordset* getColumns( const ::com::sun::star::uno::Any& catalog,
158                                                   const ::rtl::OUString& schemaPattern,
159                                                   const ::rtl::OUString& tableNamePattern,
160                                                   const ::rtl::OUString& columnNamePattern );
161              ADORecordset* getColumnPrivileges( const ::com::sun::star::uno::Any& catalog,
162                                                   const ::rtl::OUString& schemaPattern,
163                                                   const ::rtl::OUString& table,
164                                                   const ::rtl::OUString& columnNamePattern );
165              ADORecordset* getTypeInfo(DataTypeEnum _eType = adEmpty );
166         };
167 
168         //------------------------------------------------------------------------
169         class WpADOCommand : public WpOLEBase<ADOCommand>
170         {
171         public:
172             WpADOCommand(){}
173             // Konstruktoren, operator=
174             // diese rufen nur die Oberklasse
175             WpADOCommand(ADOCommand* pInt)  :   WpOLEBase<ADOCommand>(pInt){}
176 
177             WpADOCommand(const WpADOCommand& rhs){operator=(rhs);}
178 
179              WpADOCommand& operator=(const WpADOCommand& rhs)
180             {
181                 WpOLEBase<ADOCommand>::operator=(rhs); return *this;}
182 
183             //////////////////////////////////////////////////////////////////////
184 
185             sal_Bool putref_ActiveConnection( WpADOConnection *pCon);
186 
187             void put_ActiveConnection(/* [in] */ const OLEVariant& vConn);
188              void Create();
189              sal_Int32 get_State() const;
190              ::rtl::OUString get_CommandText() const;
191              sal_Bool put_CommandText(const ::rtl::OUString &aCon) ;
192              sal_Int32 get_CommandTimeout() const;
193              void put_CommandTimeout(sal_Int32 nRet);
194              sal_Bool get_Prepared() const;
195              sal_Bool put_Prepared(VARIANT_BOOL bPrepared) const;
196              sal_Bool Execute(OLEVariant& RecordsAffected,OLEVariant& Parameters,long Options, ADORecordset** ppiRset);
197              ADOParameter* CreateParameter(const ::rtl::OUString &_bstr,DataTypeEnum Type,ParameterDirectionEnum Direction,long nSize,const OLEVariant &Value);
198 
199              ADOParameters* get_Parameters() const;
200              sal_Bool put_CommandType( /* [in] */ CommandTypeEnum lCmdType);
201              CommandTypeEnum get_CommandType( ) const ;
202             // gibt den Namen des Feldes zur"ueck
203              ::rtl::OUString GetName() const ;
204              sal_Bool put_Name(const ::rtl::OUString& _Name);
205              sal_Bool Cancel();
206         };
207         //------------------------------------------------------------------------
208         class WpADOError : public WpOLEBase<ADOError>
209         {
210         public:
211 
212             // Konstruktoren, operator=
213             // diese rufen nur die Oberklasse
214 
215             WpADOError(ADOError* pInt):WpOLEBase<ADOError>(pInt){}
216 
217             WpADOError(const WpADOError& rhs){operator=(rhs);}
218 
219              WpADOError& operator=(const WpADOError& rhs)
220                 {WpOLEBase<ADOError>::operator=(rhs); return *this;}
221 
222             //////////////////////////////////////////////////////////////////////
223 
224              ::rtl::OUString GetDescription() const;
225 
226              ::rtl::OUString GetSource() const ;
227 
228              sal_Int32 GetNumber() const ;
229              ::rtl::OUString GetSQLState() const ;
230              sal_Int32 GetNativeError() const ;
231         };
232 
233 
234 
235         //------------------------------------------------------------------------
236         class WpADOField : public WpOLEBase<ADOField>
237         {
238             //  friend class WpADOFields;
239         public:
240 
241             // Konstruktoren, operator=
242             // diese rufen nur die Oberklasse
243             WpADOField(ADOField* pInt=NULL):WpOLEBase<ADOField>(pInt){}
244             WpADOField(const WpADOField& rhs){operator=(rhs);}
245 
246              WpADOField& operator=(const WpADOField& rhs)
247                 {WpOLEBase<ADOField>::operator=(rhs); return *this;}
248             //////////////////////////////////////////////////////////////////////
249 
250              WpADOProperties get_Properties();
251              sal_Int32 GetActualSize() const ;
252              sal_Int32 GetAttributes() const ;
253              sal_Int32 GetStatus() const      ;
254              sal_Int32 GetDefinedSize() const ;
255             // gibt den Namen des Feldes zur"ueck
256              ::rtl::OUString GetName() const ;
257              DataTypeEnum GetADOType() const  ;
258              void get_Value(OLEVariant& aValVar) const ;
259              OLEVariant get_Value() const;
260              sal_Bool PutValue(const OLEVariant& aVariant);
261              sal_Int32 GetPrecision() const ;
262              sal_Int32 GetNumericScale() const ;
263              sal_Bool AppendChunk(const OLEVariant& _Variant);
264              OLEVariant GetChunk(long Length) const;
265              void GetChunk(long Length,OLEVariant &aValVar) const;
266              OLEVariant GetOriginalValue() const;
267              void GetOriginalValue(OLEVariant &aValVar) const;
268              OLEVariant GetUnderlyingValue() const;
269 
270              void GetUnderlyingValue(OLEVariant &aValVar) const;
271 
272              sal_Bool PutPrecision(sal_Int8 _prec);
273 
274              sal_Bool PutNumericScale(sal_Int8 _prec);
275 
276              void PutADOType(DataTypeEnum eType) ;
277 
278              sal_Bool PutDefinedSize(sal_Int32 _nDefSize);
279 
280              sal_Bool PutAttributes(sal_Int32 _nDefSize);
281         };
282 
283 
284 
285         //------------------------------------------------------------------------
286         class WpADOProperty: public WpOLEBase<ADOProperty>
287         {
288         public:
289             // Konstruktoren, operator=
290             // diese rufen nur die Oberklasse
291             WpADOProperty(ADOProperty* pInt=NULL):WpOLEBase<ADOProperty>(pInt){}
292             WpADOProperty(const WpADOProperty& rhs){operator=(rhs);}
293              WpADOProperty& operator=(const WpADOProperty& rhs)
294                 {WpOLEBase<ADOProperty>::operator=(rhs); return *this;}
295             //////////////////////////////////////////////////////////////////////
296 
297              OLEVariant GetValue() const;
298              void GetValue(OLEVariant &aValVar) const;
299              sal_Bool PutValue(const OLEVariant &aValVar) ;
300              ::rtl::OUString GetName() const ;
301              DataTypeEnum GetADOType() const ;
302              sal_Int32 GetAttributes() const ;
303              sal_Bool PutAttributes(sal_Int32 _nDefSize);
304         };
305 
306 
307         class WpADORecordset : public WpOLEBase<ADORecordset>
308         {
309 
310         public:
311             // Konstruktoren, operator=
312             // diese rufen nur die Oberklasse
313             WpADORecordset(ADORecordset* pInt=NULL):WpOLEBase<ADORecordset>(pInt){}
314             WpADORecordset(const WpADORecordset& rhs){operator=(rhs);}
315              WpADORecordset& operator=(const WpADORecordset& rhs)
316             {
317                 WpOLEBase<ADORecordset>::operator=(rhs);
318                 return *this;
319             }
320             ~WpADORecordset()
321             {
322                 //  if(pInterface && get_State() == adStateOpen)
323                     //  Close();
324             }
325             //////////////////////////////////////////////////////////////////////
326              void Create();
327              sal_Bool Open(
328                     /* [optional][in] */ VARIANT Source,
329                     /* [optional][in] */ VARIANT ActiveConnection,
330                     /* [defaultvalue][in] */ CursorTypeEnum CursorType,
331                     /* [defaultvalue][in] */ LockTypeEnum LockType,
332                     /* [defaultvalue][in] */ sal_Int32 Options);
333              LockTypeEnum GetLockType();
334              void Close();
335              sal_Bool Cancel() const;
336              sal_Int32 get_State( );
337              sal_Bool Supports( /* [in] */ CursorOptionEnum CursorOptions);
338             PositionEnum get_AbsolutePosition();
339              void GetDataSource(IUnknown** pIUnknown) const ;
340              void PutRefDataSource(IUnknown* pIUnknown);
341              void GetBookmark(VARIANT& var);
342              OLEVariant GetBookmark();
343             CompareEnum CompareBookmarks(const OLEVariant& left,const OLEVariant& right);
344              sal_Bool SetBookmark(const OLEVariant &pSafeAr);
345              WpADOFields GetFields() const;
346              sal_Bool Move(sal_Int32 nRows, VARIANT aBmk);
347              sal_Bool MoveNext();
348              sal_Bool MovePrevious();
349              sal_Bool MoveFirst();
350              sal_Bool MoveLast();
351 
352              sal_Bool IsAtBOF() const;
353              sal_Bool IsAtEOF() const;
354              sal_Bool Delete(AffectEnum eNum);
355              sal_Bool AddNew(const OLEVariant &FieldList,const OLEVariant &Values);
356              sal_Bool Update(const OLEVariant &FieldList,const OLEVariant &Values);
357              sal_Bool CancelUpdate();
358              WpADOProperties get_Properties() const;
359              sal_Bool NextRecordset(OLEVariant& RecordsAffected,ADORecordset** ppiRset);
360              sal_Bool get_RecordCount(sal_Int32 &_nRet) const;
361              sal_Bool get_MaxRecords(sal_Int32 &_nRet) const;
362              sal_Bool put_MaxRecords(sal_Int32 _nRet);
363              sal_Bool get_CursorType(CursorTypeEnum &_nRet) const;
364              sal_Bool put_CursorType(CursorTypeEnum _nRet);
365              sal_Bool get_LockType(LockTypeEnum &_nRet) const;
366              sal_Bool put_LockType(LockTypeEnum _nRet);
367              sal_Bool get_CacheSize(sal_Int32 &_nRet) const;
368              sal_Bool put_CacheSize(sal_Int32 _nRet);
369              sal_Bool UpdateBatch(AffectEnum AffectRecords);
370         };
371 
372         //------------------------------------------------------------------------
373         class WpADOParameter:public WpOLEBase<ADOParameter>
374         {
375         public:
376             // Konstruktoren, operator=
377             // diese rufen nur die Oberklasse
378             WpADOParameter(ADOParameter* pInt):WpOLEBase<ADOParameter>(pInt){}
379             WpADOParameter(const WpADOParameter& rhs):WpOLEBase<ADOParameter>(rhs){}
380              WpADOParameter& operator=(const WpADOParameter& rhs)
381                 {WpOLEBase<ADOParameter>::operator=(rhs); return *this;}
382             //////////////////////////////////////////////////////////////////////
383 
384              ::rtl::OUString GetName() const ;
385              DataTypeEnum GetADOType() const ;
386              void put_Type(const DataTypeEnum& _eType);
387              sal_Bool put_Size(const sal_Int32& _nSize);
388              sal_Int32 GetAttributes() const ;
389              sal_Int32 GetPrecision() const ;
390              sal_Int32 GetNumericScale() const ;
391              ParameterDirectionEnum get_Direction() const;
392              void GetValue(OLEVariant& aValVar) const ;
393              OLEVariant GetValue() const;
394              sal_Bool PutValue(const OLEVariant& aVariant);
395              sal_Bool AppendChunk(const OLEVariant& aVariant);
396         };
397 
398         class OTools
399         {
400         public:
401             /** putValue set the property value at the ado column
402                 @param  _rProps     the properties where to set
403                 @param  _aPosition  which property to set
404                 @param  _aValVar    the value to set
405             */
406             static void             putValue(const WpADOProperties& _rProps,const OLEVariant &_aPosition,const OLEVariant &_aValVar);
407 
408             /** getValue returns a specific property value
409                 @param  _rProps     the properties where to set
410                 @param  _aPosition  the property
411 
412                 @return the property value
413             */
414             static OLEVariant       getValue(const WpADOProperties& _rProps,const OLEVariant &_aPosition);
415         };
416     }
417 }
418 #endif //_CONNECTIVITY_ADO_AWRAPADO_HXX_
419 
420