/* structure used by BMExpungelink to fix indexes /**/ typedef struct _bmfix { PIB *ppib; /* bm cleanup thread */ FUCB *pfucb; /* cursor to node */ FUCB *pfucbSrc; /* cursor to backlink */ BF **rgpbf; /* wait latched buffers required for bmfix */ INT cpbf; INT cpbfMax; SRID sridOld; SRID sridNew; } BMFIX; /* structure used by BMDeleteNode /**/ typedef struct _bmdelnode { SRID sridFather; PN pn; INT fUndeletableNodeSeen :1; INT fConflictSeen :1; INT fVersionedNodeSeen :1; INT fNodeDeleted :1; INT fPageRemoved :1; INT fLastNode :1; INT fLastNodeWithLinks :1; INT fInternalPage :1; // is the current page leaf-level? INT fAttemptToDeleteMaxKey :1; } BMDELNODE; /* register pages for bookmark cleanup. To register a page, the pn /* of the page, pgno of domain FDP and srid of visible father are /* needed. /**/ ERR ErrMPLInit( VOID ); VOID MPLTerm( VOID ); VOID MPLRegister( FCB *pfcb, SSIB *pssib, PN pn, SRID sridFather ); VOID MPLPurge(DBID dbid); VOID MPLPurgeFDP( DBID dbid, PGNO pgnoFDP ); VOID MPLPurgePgno( DBID dbid, PGNO pgnoFirst, PGNO pgnoLast ); ERR ErrMPLStatus( VOID ); extern PIB *ppibBMClean; ERR ErrBMInit( VOID ); ERR ErrBMTerm( VOID ); ERR ErrBMDoEmptyPage( FUCB *pfucb, RMPAGE *prmpage, BOOL fAllocBuf, BOOL *pfRmParent, BOOL fSkipDelete); ERR ErrBMDoMerge( FUCB *pfucb, FUCB *pfucbRight, SPLIT *psplit, LRMERGE *plrmerge ); ERR ErrBMDoMergeParentPageUpdate( FUCB *pfucb, SPLIT *psplit ); ERR ErrBMAddToLatchedBFList( RMPAGE *prmpage, BF *pbfLatched ); ERR ErrBMCleanBeforeSplit( PIB *ppib, FCB *pfcb, PN pn ); ERR ErrBMClean( PIB *ppib ); BOOL FBMMaxKeyInPage( FUCB *pfucb ); #ifdef DEBUG VOID AssertNotInMPL( DBID dbid, PGNO pgnoFirst, PGNO pgnoLast ); VOID AssertMPLPurgeFDP( DBID dbid, PGNO pgnoFDP ); BOOL FMPLLookupPN( PN pn ); //#define OLC_DEBUG 1 #endif