|
|
//-----------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: CRSEmbed.hxx
//
// Contents: IUnknown embedder for temptable.
//
// Functions:
//
// Notes:
//
//
// History: 08/30/96 | RenatoB | Created
//----------------------------------------------------------------------------
#ifndef _CREMBED_H_
#define _CREMBED_H_
//-----------------------------------------------------------------------------
// @class CRowsetInfo | ADSI embedding of Rowset,
// to give our IrowsetInfo interface
//
//
//-----------------------------------------------------------------------------
class CRowProvider; class CRowsetInfo; class CCommandObject; class CSessionObject;
class CRowsetInfo : INHERIT_TRACKING, public IRowsetInfo { friend HRESULT CreateTempTable( IRowProvider*, IUnknown*, IUnknown* , CSessionObject* , CCommandObject* , ULONG,DBPROPSET[], ULONG, HACCESSOR[], REFIID, IUnknown** );
public:
DECLARE_STD_REFCOUNTING
DECLARE_IRowsetInfo_METHODS
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
CRowsetInfo( IUnknown *pUnkOuter, IUnknown *pParentObject, CSessionObject *pCSession, CCommandObject *pCCommand );
~CRowsetInfo();
STDMETHODIMP FInit( IUnknown *pRowset //@parm IN| TmpTable interface
);
private:
STDMETHODIMP InitProperties(void); // Frees the memory of an array of PropertySets
STDMETHODIMP_(void) FreePropertySets( ULONG cPropertySets, // Count of property sets
DBPROPSET *rgPropertySets // Array of property sets to be freed
);
STDMETHODIMP_(LONG )SearchGuid( GUID riid // GUID of the DBPROPSET
); STDMETHODIMP_(LONG )SearchPropid( ULONG ibPropertySet, DWORD dwPropertyID );
IUnknown *_pUnkOuter; IUnknown *_pRowset; IUnknown *_pParentObject; CSessionObject *_pCSession; CCommandObject *_pCCommand; CRITICAL_SECTION _csRowsetInfo;
IMalloc* _pMalloc; ULONG _cPropertySets; DBPROPSET *_pPropertySets;
// Status word.
enum Status { STAT_UNINIT = 0x0000, //GetProperties Not initialized
STAT_DIDINIT = 0x0001, //Get Properties initialized successfully
STAT_INITERROR = 0x0002, //Get Properties Failed initialization
}; DWORD _dwStatus; };
class CAutoBlock { friend class CRowsetInfo; friend class CRowsetInfo; friend class CImpIAccessor; private: CAutoBlock( CRITICAL_SECTION *pCrit ); ~CAutoBlock(); void UnBlock(); CRITICAL_SECTION *_pCrit; };
inline CAutoBlock::CAutoBlock( CRITICAL_SECTION *pCrit ) //@parm IN | The critical section.
{ // It is OK to pass a NULL ptr to this routine. It is a NOOP.
// Note that passing NULL to EnterCriticalSection blows up.
if (pCrit) ::EnterCriticalSection( pCrit ); _pCrit = pCrit; };
inline CAutoBlock::~CAutoBlock() { if (_pCrit) ::LeaveCriticalSection( _pCrit ); }
//-----------------------------------------------------------------------------
// @mfunc
// Ends blocking explicitly. Thereafter, the destructor does nothing.
//-----------------------------------------------------------------------------------
inline void CAutoBlock::UnBlock() { // Clear the critical-section member,
// so that the destructor doesn't do anything.
if (_pCrit) ::LeaveCriticalSection( _pCrit ); _pCrit = NULL; }
#endif //_CRSEMBED_H_
|