128 lines
4.4 KiB
C
128 lines
4.4 KiB
C
|
|
|||
|
/* critical section guards szDatabaseName and fWait,
|
|||
|
/* fWait gaurds hf open and close
|
|||
|
/* logged modifications counter for database
|
|||
|
/**/
|
|||
|
typedef struct _atchchk
|
|||
|
{
|
|||
|
LGPOS lgposAttach;
|
|||
|
LGPOS lgposConsistent;
|
|||
|
SIGNATURE signDb;
|
|||
|
} ATCHCHK;
|
|||
|
|
|||
|
typedef struct _rangelock
|
|||
|
{
|
|||
|
PGNO pgnoStart;
|
|||
|
PGNO pgnoEnd;
|
|||
|
struct _rangelock *prangelockNext;
|
|||
|
} RANGELOCK;
|
|||
|
|
|||
|
|
|||
|
typedef struct _fmp
|
|||
|
{
|
|||
|
HANDLE hf; /* file handle for read/write the file */
|
|||
|
CHAR *szDatabaseName; /* database file name */
|
|||
|
CRIT critExtendDB; /* critical section for file extension */
|
|||
|
ULONG ulFileSizeLow; /* database file size low DWORD */
|
|||
|
ULONG ulFileSizeHigh; /* database file size high DWORD */
|
|||
|
PIB *ppib; /* exclusive open session */
|
|||
|
|
|||
|
union {
|
|||
|
UINT fFlags;
|
|||
|
struct {
|
|||
|
UINT fWait:1; /* Semaphore for entry being used */
|
|||
|
UINT fExtendingDB:1; /* Semaphore for extending DB file */
|
|||
|
UINT fCreate:1; /* Semaphore for creating DB */
|
|||
|
|
|||
|
UINT fExclusive:1; /* DB Opened exclusively */
|
|||
|
UINT fReadOnly:1; /* ReadOnly database? */
|
|||
|
UINT fLogOn:1; /* logging enabled flag */
|
|||
|
UINT fVersioningOff:1; /* disable versioning flag */
|
|||
|
|
|||
|
UINT fAttachNullDb:1; /* db is missing for attachment */
|
|||
|
UINT fAttached:1; /* DB is in attached state. */
|
|||
|
UINT fFakedAttach:1; /* faked attachement during recovery */
|
|||
|
|
|||
|
#ifdef DEBUG
|
|||
|
UINT fFlush:1; /* DB is in flushing state. */
|
|||
|
#endif
|
|||
|
};
|
|||
|
};
|
|||
|
|
|||
|
QWORD qwDBTimeCurrent; /* timestamp from DB redo operations */
|
|||
|
|
|||
|
ERR errPatch; /* patch file write error */
|
|||
|
HANDLE hfPatch; /* file handle for patch file */
|
|||
|
CHAR *szPatchPath;
|
|||
|
INT cpage; /* patch page count */
|
|||
|
|
|||
|
CRIT critCheckPatch;
|
|||
|
ULONG cPatchIO; /* active IO on patch file */
|
|||
|
PGNO pgnoMost; /* pgno of last database page */
|
|||
|
/* at backup begin */
|
|||
|
PGNO pgnoCopyMost; /* pgno of last page copied during */
|
|||
|
/* backup, 0 == no backup */
|
|||
|
RANGELOCK *prangelock;
|
|||
|
|
|||
|
ATCHCHK *patchchk;
|
|||
|
ATCHCHK *patchchkRestored;
|
|||
|
|
|||
|
DBFILEHDR *pdbfilehdr;
|
|||
|
} FMP;
|
|||
|
|
|||
|
extern FMP *rgfmp;
|
|||
|
|
|||
|
#define FFMPAttached( pfmp ) ( (pfmp)->fAttached )
|
|||
|
#define FMPSetAttached( pfmp ) ( (pfmp)->fAttached = 1 )
|
|||
|
#define FMPResetAttached( pfmp ) ( (pfmp)->fAttached = 0 )
|
|||
|
|
|||
|
#define FDBIDWait( dbid ) ( rgfmp[dbid].fWait )
|
|||
|
#define DBIDSetWait( dbid ) ( rgfmp[dbid].fWait = 1 )
|
|||
|
#define DBIDResetWait( dbid ) ( rgfmp[dbid].fWait = 0 )
|
|||
|
|
|||
|
#define FDBIDExclusive( dbid ) ( rgfmp[dbid].fExclusive )
|
|||
|
#define FDBIDExclusiveByAnotherSession( dbid, ppib ) \
|
|||
|
( ( FDBIDExclusive( dbid ) ) \
|
|||
|
&& ( rgfmp[dbid].ppib != ppib ) )
|
|||
|
#define FDBIDExclusiveBySession( dbid, ppib ) \
|
|||
|
( ( FDBIDExclusive( dbid ) ) \
|
|||
|
&& ( rgfmp[dbid].ppib == ppib ) )
|
|||
|
#define DBIDSetExclusive( dbid, ppib ) \
|
|||
|
rgfmp[dbid].fExclusive = 1; \
|
|||
|
rgfmp[dbid].ppib = ppib;
|
|||
|
#define DBIDResetExclusive( dbid ) ( rgfmp[dbid].fExclusive = 0 )
|
|||
|
|
|||
|
#define FDBIDReadOnly( dbid ) ( rgfmp[dbid].fReadOnly )
|
|||
|
#define DBIDSetReadOnly( dbid ) ( rgfmp[dbid].fReadOnly = 1 )
|
|||
|
#define DBIDResetReadOnly( dbid ) ( rgfmp[dbid].fReadOnly = 0 )
|
|||
|
|
|||
|
#define FDBIDAttachNullDb( dbid ) ( rgfmp[dbid].fAttachNullDb )
|
|||
|
#define DBIDSetAttachNullDb( dbid ) ( rgfmp[dbid].fAttachNullDb = 1 )
|
|||
|
#define DBIDResetAttachNullDb( dbid ) ( rgfmp[dbid].fAttachNullDb = 0 )
|
|||
|
|
|||
|
#define FDBIDAttached( dbid ) ( rgfmp[dbid].fAttached )
|
|||
|
#define DBIDSetAttached( dbid ) ( rgfmp[dbid].fAttached = 1 )
|
|||
|
#define DBIDResetAttached( dbid ) ( rgfmp[dbid].fAttached = 0 )
|
|||
|
|
|||
|
#define FDBIDExtendingDB( dbid ) ( rgfmp[dbid].fExtendingDB )
|
|||
|
#define DBIDSetExtendingDB( dbid ) ( rgfmp[dbid].fExtendingDB = 1 )
|
|||
|
#define DBIDResetExtendingDB( dbid) ( rgfmp[dbid].fExtendingDB = 0 )
|
|||
|
|
|||
|
#define FDBIDFlush( dbid ) ( rgfmp[dbid].fFlush )
|
|||
|
#define DBIDSetFlush( dbid ) ( rgfmp[dbid].fFlush = 1 )
|
|||
|
#define DBIDResetFlush( dbid ) ( rgfmp[dbid].fFlush = 0 )
|
|||
|
|
|||
|
#define FDBIDCreate( dbid ) ( rgfmp[dbid].fCreate )
|
|||
|
#define DBIDSetCreate( dbid ) ( rgfmp[dbid].fCreate = 1 )
|
|||
|
#define DBIDResetCreate( dbid ) ( rgfmp[dbid].fCreate = 0 )
|
|||
|
|
|||
|
#define FDBIDLogOn( dbid ) ( rgfmp[dbid].fLogOn )
|
|||
|
#define DBIDSetLogOn( dbid ) ( rgfmp[dbid].fLogOn = 1 )
|
|||
|
#define DBIDResetLogOn( dbid ) ( rgfmp[dbid].fLogOn = 0 )
|
|||
|
|
|||
|
#define FDBIDVersioningOff( dbid ) ( rgfmp[dbid].fVersioningOff )
|
|||
|
#define DBIDSetVersioningOff( dbid ) ( rgfmp[dbid].fVersioningOff = 1 )
|
|||
|
#define DBIDResetVersioningOff( dbid ) ( rgfmp[dbid].fVersioningOff = 0 )
|
|||
|
|
|||
|
#define HfFMPOfDbid( dbid ) ( rgfmp[dbid].hf )
|
|||
|
|