You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
2.7 KiB
115 lines
2.7 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
|
//
|
|
// File: QueryUnk.hxx
|
|
//
|
|
// Contents: Controlling IUnknown for IQuery/IRowset
|
|
//
|
|
// History: 18 Jul 1995 AlanW Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
class CRowset;
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CQueryUnknown
|
|
//
|
|
// Purpose: Controlling IUnknown for IQuery to manage the simultaneous
|
|
// destruction of connected rowsets.
|
|
//
|
|
// History: 18 Jul 1995 AlanW Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CQueryUnknown : public IUnknown
|
|
{
|
|
public:
|
|
|
|
//
|
|
// IUnknown methods.
|
|
//
|
|
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void ** ppvObj);
|
|
STDMETHOD_(ULONG,AddRef) (THIS);
|
|
STDMETHOD_(ULONG,Release) (THIS);
|
|
|
|
//
|
|
// Local methods
|
|
//
|
|
|
|
BOOL IsQueryActive( void ) const { return _cRowsets > 0; }
|
|
|
|
void ReInit( ULONG cRowsets = 0, CRowset ** apRowsets = 0 );
|
|
|
|
CQueryUnknown( IUnknown & rUnk ) :
|
|
_rUnk(rUnk),
|
|
_ref(0),
|
|
_cRowsets(0),
|
|
_apRowsets(0) {}
|
|
|
|
~CQueryUnknown();
|
|
|
|
private:
|
|
|
|
ULONG _ref;
|
|
|
|
ULONG _cRowsets;
|
|
CRowset ** _apRowsets;
|
|
|
|
IUnknown & _rUnk;
|
|
};
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CRowsetArray
|
|
//
|
|
// Purpose: Smart container for an array of rowsets.
|
|
//
|
|
// History: 19 Jul 1995 AlanW Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CRowsetArray
|
|
{
|
|
public:
|
|
CRowsetArray( ULONG cRowsets ) :
|
|
_apRowsets(cRowsets)
|
|
{
|
|
if (cRowsets > 0)
|
|
{
|
|
RtlZeroMemory(_apRowsets.GetPointer(), cRowsets * sizeof (CRowset *));
|
|
}
|
|
}
|
|
|
|
~CRowsetArray()
|
|
{
|
|
if (_apRowsets.GetPointer())
|
|
{
|
|
for (unsigned i = 0; i < _apRowsets.Count(); i++)
|
|
if (_apRowsets[i])
|
|
{
|
|
delete _apRowsets[i];
|
|
_apRowsets[i] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
CRowset * * GetPointer() { return _apRowsets.GetPointer(); }
|
|
|
|
CRowset * * Acquire() { return _apRowsets.Acquire(); }
|
|
|
|
CRowset * & operator[](ULONG iElem)
|
|
{ return _apRowsets[iElem]; }
|
|
|
|
unsigned Count() const { return _apRowsets.Count(); }
|
|
|
|
private:
|
|
XArray<CRowset *> _apRowsets;
|
|
};
|
|
|