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