Leaked source code of windows server 2003
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.
 
 
 
 
 
 

123 lines
3.6 KiB

//---------------------------------------------------------------------------
// RowsetSource.cpp : RowsetSource implementation
//
// Copyright (c) 1996 Microsoft Corporation, All Rights Reserved
// Developed by Sheridan Software Systems, Inc.
//---------------------------------------------------------------------------
#include "stdafx.h"
#include "Notifier.h"
#include "RSSource.h"
#include "MSR2C.h"
SZTHISFILE
//=--------------------------------------------------------------------------=
// CVDRowsetSource - Constructor
//
CVDRowsetSource::CVDRowsetSource()
{
m_bool.fRowsetReleased = FALSE;
m_bool.fInitialized = FALSE;
m_pRowset = NULL;
m_pAccessor = NULL;
m_pRowsetLocate = NULL;
m_pRowsetScroll = NULL;
m_pRowsetChange = NULL;
m_pRowsetUpdate = NULL;
m_pRowsetFind = NULL;
m_pRowsetInfo = NULL;
m_pRowsetIdentity = NULL;
#ifdef _DEBUG
g_cVDRowsetSourceCreated++;
#endif
}
//=--------------------------------------------------------------------------=
// ~CVDRowsetSource - Destructor
//
CVDRowsetSource::~CVDRowsetSource()
{
if (IsRowsetValid())
{
RELEASE_OBJECT(m_pAccessor)
RELEASE_OBJECT(m_pRowsetLocate)
RELEASE_OBJECT(m_pRowsetScroll)
RELEASE_OBJECT(m_pRowsetChange)
RELEASE_OBJECT(m_pRowsetUpdate)
RELEASE_OBJECT(m_pRowsetFind)
RELEASE_OBJECT(m_pRowsetInfo)
RELEASE_OBJECT(m_pRowsetIdentity)
m_pRowset->Release();
}
#ifdef _DEBUG
g_cVDRowsetSourceDestroyed++;
#endif
}
//=--------------------------------------------------------------------------=
// Initialize - Initialize rowset source object
//=--------------------------------------------------------------------------=
// This function QI's and store the IRowset pointers
//
// Parameters:
// pRowset - [in] original IRowset pointer
//
// Output:
// HRESULT - S_OK if successful
// E_INVALIDARG bad parameter
// E_FAIL if already initialized
// VD_E_CANNOTGETMANDATORYINTERFACE unable to get required interface
//
// Notes:
// This function should only be called once
//
HRESULT CVDRowsetSource::Initialize(IRowset * pRowset)
{
ASSERT_POINTER(pRowset, IRowset)
if (!pRowset)
return E_INVALIDARG;
if (m_bool.fInitialized)
{
ASSERT(FALSE, VD_ASSERTMSG_ROWSRCALREADYINITIALIZED)
return E_FAIL;
}
// mandatory interfaces (IAccessor is required for us)
HRESULT hr = pRowset->QueryInterface(IID_IAccessor, (void**)&m_pAccessor);
if (FAILED(hr))
return VD_E_CANNOTGETMANDATORYINTERFACE;
// mandatory interfaces (IRowsetLocate is required for us)
hr = pRowset->QueryInterface(IID_IRowsetLocate, (void**)&m_pRowsetLocate);
if (FAILED(hr))
{
m_pAccessor->Release();
m_pAccessor = NULL;
return VD_E_CANNOTGETMANDATORYINTERFACE;
}
// optional interfaces
pRowset->QueryInterface(IID_IRowsetScroll, (void**)&m_pRowsetScroll);
pRowset->QueryInterface(IID_IRowsetChange, (void**)&m_pRowsetChange);
pRowset->QueryInterface(IID_IRowsetUpdate, (void**)&m_pRowsetUpdate);
pRowset->QueryInterface(IID_IRowsetFind, (void**)&m_pRowsetFind);
pRowset->QueryInterface(IID_IRowsetInfo, (void**)&m_pRowsetInfo);
pRowset->QueryInterface(IID_IRowsetIdentity, (void**)&m_pRowsetIdentity);
m_pRowset = pRowset;
m_pRowset->AddRef();
m_bool.fInitialized = TRUE;
return S_OK;
}