251 lines
6.4 KiB
C++
251 lines
6.4 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1991 - 1998.
|
|
//
|
|
// File: CI.HXX
|
|
//
|
|
// Contents: Main Content Index external interface
|
|
//
|
|
// Classes: CContentIndex - Main content index class
|
|
//
|
|
// History: 26-Feb-91 KyleP Created Interface.
|
|
// 25-Mar-91 BartoszM Implemented.
|
|
// 03-Nov-93 w-PatG Added KeyList methods
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include <lang.hxx>
|
|
|
|
#include "partlst.hxx"
|
|
#include "resman.hxx"
|
|
#include "filtman.hxx"
|
|
|
|
class CCursor;
|
|
class CRestriction;
|
|
class CRWStore;
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CContentIndex (ci)
|
|
//
|
|
// Purpose: External interface to the content index
|
|
//
|
|
// Interface:
|
|
//
|
|
// History: 21-Aug-91 KyleP Removed unused path member
|
|
// 26-Feb-91 KyleP Created.
|
|
// 03-Jan-95 BartoszM Separated Filter Manager
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CContentIndex
|
|
{
|
|
friend class CPartition;
|
|
friend class CResManager;
|
|
public:
|
|
|
|
//
|
|
// Constructors and Destructors
|
|
//
|
|
|
|
CContentIndex ( PStorage & storage,
|
|
CCiFrameworkParams & params,
|
|
ICiCDocStore * pICiCDocStore,
|
|
CI_STARTUP_INFO const & startupInfo,
|
|
IPropertyMapper * pIPropertyMapper,
|
|
CTransaction& xact,
|
|
XInterface<CIndexNotificationTable> & xIndexNotifTable );
|
|
|
|
~CContentIndex();
|
|
|
|
//
|
|
// Document Update
|
|
//
|
|
|
|
unsigned ReserveUpdate( WORKID wid );
|
|
SCODE Update ( unsigned iHint,
|
|
WORKID wid,
|
|
PARTITIONID partid,
|
|
USN usn,
|
|
VOLUMEID volumeId,
|
|
ULONG action );
|
|
void FlushUpdates()
|
|
{
|
|
_resman.FlushUpdates();
|
|
}
|
|
|
|
//
|
|
// Scan support
|
|
//
|
|
|
|
inline void MarkOutOfDate() { _resman.MarkOutOfDate(); }
|
|
inline void MarkUpToDate() { _resman.MarkUpToDate(); }
|
|
|
|
//
|
|
// Queries
|
|
//
|
|
|
|
CCursor* Query( CRestriction const* pRst,
|
|
ULONG* pFlags,
|
|
UINT cPartitions,
|
|
PARTITIONID aPartID[],
|
|
ULONG cPendingChanges,
|
|
ULONG cMaxNodes );
|
|
|
|
//
|
|
// Relevant words
|
|
//
|
|
|
|
CRWStore * ComputeRelevantWords(ULONG cRows,ULONG cRW,
|
|
WORKID *pwid,PARTITIONID partid)
|
|
{ return _resman.ComputeRelevantWords(cRows,cRW,pwid,partid); }
|
|
CRWStore * RetrieveRelevantWords(BOOL fAcquire,PARTITIONID partid)
|
|
{ return _resman.RetrieveRelevantWords(fAcquire,partid); }
|
|
|
|
//
|
|
// Filter proxy
|
|
//
|
|
|
|
SCODE FilterReady ( BYTE * docBuffer, ULONG & cb, ULONG cMaxDocs );
|
|
|
|
SCODE FilterDataReady ( const BYTE * pEntryBuf, ULONG cb );
|
|
|
|
SCODE FilterMore ( const STATUS * aStatus, ULONG count );
|
|
|
|
SCODE FilterStoreValue( WORKID wid,
|
|
CFullPropSpec const & ps,
|
|
CStorageVariant const & var,
|
|
BOOL & fStored );
|
|
|
|
SCODE FilterStoreSecurity( WORKID widFake,
|
|
PSECURITY_DESCRIPTOR pSD,
|
|
ULONG cbSD,
|
|
BOOL & fStored );
|
|
|
|
SCODE FilterDone ( const STATUS * aStatus, ULONG count );
|
|
|
|
SCODE FPSToPROPID( CFullPropSpec const & fps, PROPID & pid );
|
|
|
|
CiProxy & GetFilterProxy()
|
|
{
|
|
return _filterMan;
|
|
}
|
|
|
|
|
|
//
|
|
// Partition Maintenance
|
|
//
|
|
|
|
void CreatePartition(PARTITIONID partID);
|
|
|
|
void DestroyPartition(PARTITIONID partID);
|
|
|
|
void MergePartitions(PARTITIONID partDest,
|
|
PARTITIONID partSrc);
|
|
|
|
NTSTATUS ForceMerge ( PARTITIONID partid, CI_MERGE_TYPE mt )
|
|
{
|
|
return _resman.ForceMerge ( partid, mt );
|
|
}
|
|
|
|
NTSTATUS AbortMerge ( PARTITIONID partid )
|
|
{
|
|
return _resman.StopCurrentMerge();
|
|
}
|
|
|
|
unsigned CountPendingUpdates() { return _resman.CountPendingUpdates() ; }
|
|
|
|
#if CIDBG == 1
|
|
|
|
// Debugging support (debug version only)
|
|
|
|
void DebugStats(/* CIDEBSTATS *pciDebStats */);
|
|
|
|
void DumpIndexes( FILE * pf, INDEXID iid, ULONG fSummaryOnly );
|
|
|
|
void DumpWorkId( BYTE * pb, ULONG cb );
|
|
#endif // CIDBG == 1
|
|
|
|
//KeyList Specific Methods
|
|
|
|
ULONG KeyToId( CKey const * pkey );
|
|
|
|
void IdToKey( ULONG ulKid, CKey & rkey );
|
|
|
|
NTSTATUS Dismount();
|
|
|
|
void SetPartition( PARTITIONID PartId );
|
|
PARTITIONID GetPartition() const;
|
|
|
|
void Empty() { _resman.Empty(); }
|
|
|
|
ULONG GetQueryCount() { return _resman.GetQueryCount(); }
|
|
|
|
BOOL IsEmpty() const { return _resman.IsEmpty(); }
|
|
|
|
|
|
SCODE BackupCiData( PStorage & storage,
|
|
BOOL & fFull,
|
|
XInterface<ICiEnumWorkids> & xEnumWorkids,
|
|
PSaveProgressTracker & progressTracker )
|
|
{
|
|
return _resman.BackupCIData( storage, fFull, xEnumWorkids, progressTracker );
|
|
}
|
|
|
|
NTSTATUS CiState(CIF_STATE & state)
|
|
{
|
|
return _resman.CiState( state );
|
|
}
|
|
|
|
void IndexSize( ULONG & mbIndex ) // size of indexes in MB
|
|
{
|
|
_resman.IndexSize( mbIndex );
|
|
}
|
|
|
|
BOOL IsLowOnDiskSpace()
|
|
{
|
|
return _resman.IsLowOnDiskSpace();
|
|
}
|
|
|
|
BOOL VerifyIfLowOnDiskSpace()
|
|
{
|
|
return _resman.VerifyIfLowOnDiskSpace();
|
|
}
|
|
|
|
NTSTATUS MarkCorruptIndex()
|
|
{
|
|
return _resman.MarkCorruptIndex();
|
|
}
|
|
|
|
BOOL IsCiCorrupt() { return _resman.IsCiCorrupt(); }
|
|
|
|
private:
|
|
|
|
PStorage& _storage;
|
|
|
|
CResManager _resman; // resource manager
|
|
|
|
CFilterManager _filterMan;
|
|
|
|
};
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CContentIndex::~CContentIndex, public
|
|
//
|
|
// Synopsis: Destructor for the content index
|
|
//
|
|
// Effects: Shuts down content index and destroys global state.
|
|
//
|
|
// History: 26-Feb-91 KyleP Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline CContentIndex::~CContentIndex()
|
|
{
|
|
}
|
|
|