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.
|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 2000.
//
// File: wqiter.hxx
//
// Contents: WEB Query iter class
//
// History: 96/Jan/3 DwightKr Created
//
//----------------------------------------------------------------------------
#pragma once
class CWQueryItem; class COutputFormat;
const ULONG ITER_CACHE_SIZE = 20; // A guess at the avg max # rows per page
const ULONG NUMBER_INLINE_COLS = 10;// Number of output columns to buffer
// in-line. If cCols > 10, then we'll
// have to allocate a buffer
//+---------------------------------------------------------------------------
//
// Class: COutputColumn
//
// Purpose: The results of a single output column from an OLEDB query.
//
// History: 96/Jan/23 DwightKr Created
//
//----------------------------------------------------------------------------
class COutputColumn { public:
PROPVARIANT * GetVariant() { return _pVariant; }
private: PROPVARIANT * _pVariant; };
//+---------------------------------------------------------------------------
//
// Class CBaseQueryResultsIter - protocol class; all query result iterators
// must inherit from this class
//
//----------------------------------------------------------------------------
class CBaseQueryResultsIter { public:
CBaseQueryResultsIter( CWQueryItem & item, HACCESSOR hAccessor, ULONG cCols );
virtual ~CBaseQueryResultsIter();
virtual void Init( CVariableSet & VariableSet, COutputFormat & outputFormat ) = 0;
virtual void Next() = 0;
virtual COutputColumn * GetRowData() = 0;
BOOL AtEnd() { return _lRecordsToRetrieve == 0 && _iCurrentCachedRow == _cRowsReturnedToCache; }
LONG GetNextRecordNumber() const { return _lNextRecordNumber; } LONG GetFirstRecordNumber() const { return _lFirstRecordNumber; } LONG GetMaxRecordsPerPage() const { return _lMaxRecordsPerPage; }
CVariableSet & GetVariableSet() const { return *_pVariableSet; } ULONG GetColumnCount() const { return _cColumns; }
protected:
void InitializeLocalVariables( CVariableSet & variableSet, COutputFormat & outputFormat );
HROW _ahCachedRows[ITER_CACHE_SIZE]; // cached rows
DBCOUNTITEM _cRowsReturnedToCache; // # rows in cache
ULONG _iCurrentCachedRow; // current row in cache
CWQueryItem & _item; // Query item we're iterating over
COutputColumn * _pOutputColumns; // ptr to output columns
COutputColumn _aOutputColumns[NUMBER_INLINE_COLS];
HACCESSOR _hAccessor; // Accessor to query results
LONG _cColumns; // # columns in query results
LONG _lFirstRecordNumber; // # of first record available
LONG _lNextRecordNumber; // # of next record available
LONG _lMaxRecordsPerPage; // Max # records per page
LONG _lRecordsToRetrieve; // # records remaining to read
DBROWCOUNT _lTotalMatchedRecords; // # of records matching query
CVariableSet * _pVariableSet; // Our replaceable parameters
};
//+---------------------------------------------------------------------------
//
// Class: CQueryResultsIter
//
// Purpose: A non-sequential iterator over a CQueryItem's query results
//
// History: 96/Jan/23 DwightKr Created
//
//----------------------------------------------------------------------------
class CQueryResultsIter : public CBaseQueryResultsIter { INLINE_UNWIND(CQueryResultsIter)
public: CQueryResultsIter( CWQueryItem & item, IRowsetScroll * pRowsetScroll, HACCESSOR hAccessor, ULONG cCols );
~CQueryResultsIter();
void Init( CVariableSet & VariableSet, COutputFormat & outputFormat );
void Next();
COutputColumn * GetRowData();
private:
void FillRowsetCache(); void ReleaseRowsetCache(); void InitializeLocalVariables( CVariableSet & variableSet, COutputFormat & outputFormat );
IRowsetScroll * _pIRowsetScroll; // Rowset interface
};
//+---------------------------------------------------------------------------
//
// Class: CSeqQueryResultsIter
//
// Purpose: A sequential iterator over a CQueryItem's query results
//
// History: 96/Jan/23 DwightKr Created
//
//----------------------------------------------------------------------------
class CSeqQueryResultsIter : public CBaseQueryResultsIter { INLINE_UNWIND(CSeqQueryResultsIter)
public: CSeqQueryResultsIter( CWQueryItem & item, IRowset * pRowset, HACCESSOR hAccessor, ULONG cCols, ULONG ulNextRecordNumber );
~CSeqQueryResultsIter();
void Init( CVariableSet & VariableSet, COutputFormat & outputFormat );
void Next();
COutputColumn * GetRowData();
private:
void FillRowsetCache( ULONG cRowsToSkip ); void ReleaseRowsetCache(); void InitializeLocalVariables( CVariableSet & variableSet, COutputFormat & outputFormat );
IRowset * _pIRowset; };
void SetCGIVariables( CVariableSet & variableSet, CWebServer & webServer );
|