windows-nt/Source/XPSP1/NT/inetsrv/query/cindex/fresh.hxx
2020-09-26 16:20:57 +08:00

121 lines
3 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1991 - 1998.
//
// File: FRESH.HXX
//
// Contents: Fresh indexes
//
// Classes: CFresh
//
// History: 16-May-91 BartoszM Created.
//
//----------------------------------------------------------------------------
#pragma once
#include <xact.hxx>
#include <freshlog.hxx>
#include "fretest.hxx"
#include "dqueue.hxx"
class CIndexTrans;
class CMergeTrans;
class PStorage;
class CWidArray;
class CDocList;
class CResManager;
class CPartList;
class CPartition;
class CWordList;
class PSaveProgressTracker;
class CEnumWorkid;
//+---------------------------------------------------------------------------
//
// Class: CFresh
//
// Purpose: Contains the mapping of work id's into the most current
// indexes for these work id's.
//
// History: 16-May-91 BartoszM Created.
//
//----------------------------------------------------------------------------
class CFresh
{
friend class CFreshTest;
friend class CResManager;
friend class CMerge;
public:
CFresh ( PStorage& storage, CTransaction& xact,
CPartList & partList );
~CFresh ();
void LokInit();
CFreshTest* LokGetFreshTest();
unsigned LokCount() const { return _master->Count(); }
unsigned LokDeleteCount() const { return _master->DeleteCount(); }
WORKID LokUpdate ( CMerge & merge, CMergeTrans& xact,
CPersFresh & newFreshLog,
INDEXID new_iid,
int cInd,
INDEXID aIidOld[],
XPtr<CFreshTest> & xFreshTestAtMerge );
void LokAddIndex ( CIndexTrans& xact,
INDEXID iid, INDEXID iidDeleted,
CDocList& docList,
CWordList const & wordList );
WORKID LokRemoveIndexes ( CMergeTrans& xact, CPersFresh & newFreshLog,
unsigned cInd,
INDEXID aIidOld[],
INDEXID iidOldDeleted );
void LokDeleteDocuments (
CIndexTrans& xact,
CDocList& docList,
INDEXID iidDeleted );
void LokReleaseFreshTest( CFreshTest* test );
void LokCommitMaster ( CFreshTest* newMaster );
void LokEmpty();
void LokMakeFreshLogBackup( PStorage & storage,
PSaveProgressTracker & progressTracker,
XInterface<ICiEnumWorkids> & xWorkidEnum );
#if DEVL == 1
void Dump ();
#endif
#ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf);
#endif
private:
WORKID LokBuildNewFreshLog( CFreshTest *newFreTest,
CPersFresh & newFreshLog,
CIdxSubstitution& subst);
PStorage & _storage;
CFreshTest* _master; // master copy of in-memory fresh test
CPersFresh _persFresh;
CPartList & _partList; // PartList
};