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