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.
 
 
 
 
 
 

169 lines
8.4 KiB

//---------------------------------------------------------------------------
// Cursor.h : CVDCursor header file
//
// Copyright (c) 1996 Microsoft Corporation, All Rights Reserved
// Developed by Sheridan Software Systems, Inc.
//---------------------------------------------------------------------------
#ifndef __CVDCURSOR__
#define __CVDCURSOR__
#define VD_ADJUST_VARIANT_TO_BYTE 1
#define VD_ADJUST_VARIANT_TO_WSTR 2
#define VD_ADJUST_VARIANT_TO_STR 3
class CVDCursor : public CVDNotifier,
public CVDCursorBase,
public ICursorUpdateARow,
public ICursorFind,
public IEntryID
{
protected:
// Construction/Destruction
CVDCursor();
virtual ~CVDCursor();
// Helper functions
CVDRowsetColumn * GetRowsetColumn(ULONG ulOrdinal);
CVDRowsetColumn * GetRowsetColumn(CURSOR_DBCOLUMNID& cursorColumnID);
HRESULT GetOrdinal(CURSOR_DBCOLUMNID& cursorColumnID, ULONG * pulOrdinal);
DWORD StatusToCursorInfo(DBSTATUS dwStatus);
DBSTATUS CursorInfoToStatus(DWORD dwCursorInfo);
HRESULT ValidateCursorBindParams(CURSOR_DBCOLUMNID * pCursorColumnID, CURSOR_DBBINDPARAMS * pCursorBindParams,
CVDRowsetColumn ** ppRowsetColumn);
HRESULT ValidateEntryID(ULONG cbEntryID, BYTE * pEntryID, CVDRowsetColumn ** ppColumn, HROW * phRow);
HRESULT QueryEntryIDInterface(CVDRowsetColumn * pColumn, HROW hRow, DWORD dwFlags, REFIID riid, IUnknown ** ppUnknown);
#ifndef VD_DONT_IMPLEMENT_ISTREAM
HRESULT CreateEntryIDStream(CVDRowsetColumn * pColumn, HROW hRow, IStream ** ppStream);
#endif //VD_DONT_IMPLEMENT_ISTREAM
HRESULT MakeAdjustments(ULONG ulBindings, DBBINDING * pBindings, ULONG * pulIndex, ULONG ulTotalBindings,
HACCESSOR ** prghAdjustAccessors, DWORD ** ppdwAdjustFlags, BOOL fBefore);
HRESULT ReCreateAccessors(ULONG ulNewCursorBindings, CURSOR_DBCOLUMNBINDING * pNewCursorBindings, DWORD dwFlags);
void ReleaseAccessorArray(HACCESSOR * rghAccessors);
void DestroyAccessors();
HRESULT ReCreateColumns();
void DestroyColumns();
HRESULT FilterNewRow(ULONG *pcRowsObtained, HROW *rghrow, HRESULT hr);
HRESULT UseAdjustments(HROW hRow, BYTE * pData);
HRESULT FillConsumersBuffer(HRESULT hrFetch,
CURSOR_DBFETCHROWS *pFetchParams,
ULONG cRowsObtained,
HROW * rghRows);
HRESULT FetchAtBookmark(ULONG cbBookmark,
void *pBookmark,
LARGE_INTEGER dlOffset,
CURSOR_DBFETCHROWS *pFetchParams);
HRESULT InsertNewRow();
HRESULT GetOriginalColumn(CVDRowsetColumn * pColumn, CURSOR_DBBINDPARAMS * pBindParams);
HRESULT GetModifiedColumn(CVDColumnUpdate * pColumnUpdate, CURSOR_DBBINDPARAMS * pBindParams);
public:
static HRESULT Create(CVDCursorPosition * pCursorPosition, CVDCursor ** ppCursor, CVDResourceDLL * pResourceDLL);
// Access functions
CVDCursorMain * GetCursorMain() const {return m_pCursorPosition->GetCursorMain();}
BOOL IsRowsetValid() const {return m_pCursorPosition->GetRowsetSource()->IsRowsetValid();}
IRowset * GetRowset() const {return m_pCursorPosition->GetRowsetSource()->GetRowset();}
IAccessor * GetAccessor() const {return m_pCursorPosition->GetRowsetSource()->GetAccessor();}
IRowsetLocate * GetRowsetLocate() const {return m_pCursorPosition->GetRowsetSource()->GetRowsetLocate();}
IRowsetScroll * GetRowsetScroll() const {return m_pCursorPosition->GetRowsetSource()->GetRowsetScroll();}
IRowsetChange * GetRowsetChange() const {return m_pCursorPosition->GetRowsetSource()->GetRowsetChange();}
IRowsetUpdate * GetRowsetUpdate() const {return m_pCursorPosition->GetRowsetSource()->GetRowsetUpdate();}
IRowsetFind * GetRowsetFind() const {return m_pCursorPosition->GetRowsetSource()->GetRowsetFind();}
IRowsetInfo * GetRowsetInfo() const {return m_pCursorPosition->GetRowsetSource()->GetRowsetInfo();}
IRowsetIdentity * GetRowsetIdentity() const {return m_pCursorPosition->GetRowsetSource()->GetRowsetIdentity();}
// Other
virtual BOOL SupportsScroll() {return (BOOL)m_pCursorPosition->GetRowsetSource()->GetRowsetScroll();}
protected:
// Retrieving data
HACCESSOR m_hAccessor; // fixed length buffer accessor
HACCESSOR m_hVarHelper; // variable length buffer accessors helper
ULONG m_ulVarBindings; // number of variable length buffer bindings
HACCESSOR * m_rghVarAccessors; // variable length buffer accessors
HACCESSOR * m_rghAdjustAccessors; // adjusted fixed length buffer accessors
DWORD * m_pdwAdjustFlags; // adjusted fixed length buffer accessors flags
CVDRowsetColumn ** m_ppColumns; // rowset columns associated with current bindings
// Other
CVDCursorPosition * m_pCursorPosition; // backwards pointer to CVDCursorPosition
CVDNotifyDBEventsConnPtCont * m_pConnPtContainer; // INotifyDBEvent connection points
// overridden virtual functions from CVDNotifier
HRESULT NotifyFail (DWORD, ULONG, CURSOR_DBNOTIFYREASON[]);
HRESULT NotifyOKToDo (DWORD, ULONG, CURSOR_DBNOTIFYREASON[]);
HRESULT NotifySyncBefore(DWORD, ULONG, CURSOR_DBNOTIFYREASON[]);
HRESULT NotifyAboutToDo (DWORD, ULONG, CURSOR_DBNOTIFYREASON[]);
HRESULT NotifySyncAfter (DWORD, ULONG, CURSOR_DBNOTIFYREASON[]);
HRESULT NotifyDidEvent (DWORD, ULONG, CURSOR_DBNOTIFYREASON[]);
HRESULT NotifyCancel (DWORD, ULONG, CURSOR_DBNOTIFYREASON[]);
public:
//=--------------------------------------------------------------------------=
// IUnknown methods implemented
//
STDMETHOD(QueryInterface)(REFIID riid, void **ppvObjOut);
STDMETHOD_(ULONG, AddRef)(void);
STDMETHOD_(ULONG, Release)(void);
//=--------------------------------------------------------------------------=
// ICursor methods implemented
//
STDMETHOD(GetColumnsCursor)(REFIID riid, IUnknown **ppvColumnsCursor, ULONG *pcRows);
STDMETHOD(SetBindings)(ULONG cCol, CURSOR_DBCOLUMNBINDING rgBoundColumns[], ULONG cbRowLength, DWORD dwFlags);
STDMETHOD(GetNextRows)(LARGE_INTEGER udlRowsToSkip, CURSOR_DBFETCHROWS *pFetchParams);
STDMETHOD(Requery)(void);
//=--------------------------------------------------------------------------=
// ICursorMove methods implemented
//
STDMETHOD(Move)(ULONG cbBookmark, void *pBookmark, LARGE_INTEGER dlOffset, CURSOR_DBFETCHROWS *pFetchParams);
STDMETHOD(GetBookmark)(CURSOR_DBCOLUMNID *pBookmarkType, ULONG cbMaxSize, ULONG *pcbBookmark, void *pBookmark);
STDMETHOD(Clone)(DWORD dwFlags, REFIID riid, IUnknown **ppvClonedCursor);
//=--------------------------------------------------------------------------=
// ICursorScroll methods implemented
//
STDMETHOD(Scroll)(ULONG ulNumerator, ULONG ulDenominator, CURSOR_DBFETCHROWS *pFetchParams);
STDMETHOD(GetApproximatePosition)(ULONG cbBookmark, void *pBookmark, ULONG *pulNumerator, ULONG *pulDenominator);
STDMETHOD(GetApproximateCount)(LARGE_INTEGER *pudlApproxCount, DWORD *pdwFullyPopulated);
//=--------------------------------------------------------------------------=
// ICursorUpdateARow methods
//
STDMETHOD(BeginUpdate)(DWORD dwFlags);
STDMETHOD(SetColumn)(CURSOR_DBCOLUMNID *pcid, CURSOR_DBBINDPARAMS *pBindParams);
STDMETHOD(GetColumn)(CURSOR_DBCOLUMNID *pcid, CURSOR_DBBINDPARAMS *pBindParams, DWORD *pdwFlags);
STDMETHOD(GetEditMode)(DWORD *pdwState);
STDMETHOD(Update)(CURSOR_DBCOLUMNID *pBookmarkType, ULONG *pcbBookmark, void **ppBookmark);
STDMETHOD(Cancel)(void);
STDMETHOD(Delete)(void);
//=--------------------------------------------------------------------------=
// ICursorFind methods
//
STDMETHOD(FindByValues)(ULONG cbBookmark, LPVOID pBookmark, DWORD dwFindFlags, ULONG cValues,
CURSOR_DBCOLUMNID rgColumns[], CURSOR_DBVARIANT rgValues[], DWORD rgdwSeekFlags[],
CURSOR_DBFETCHROWS FAR *pFetchParams);
//=--------------------------------------------------------------------------=
// IEnrtyID methods
//
STDMETHOD(GetInterface)(ULONG cbEntryID, void *pEntryID, DWORD dwFlags, REFIID riid, IUnknown **ppvObj);
};
#endif //__CVDCURSOR__