372 lines
8.4 KiB
C++
372 lines
8.4 KiB
C++
//+--------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996-1998
|
|
//
|
|
// File: workitem.h
|
|
//
|
|
// Contents: backupsource Table
|
|
//
|
|
// History:
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
#ifndef __WORKITEM_H__
|
|
#define __WORKITEM_H__
|
|
#include "tlsdb.h"
|
|
|
|
//
|
|
//
|
|
#define WORKITEM_PROCESS_JOBTIME 0x00000001
|
|
#define WORKITEM_PROCESS_JOBRESTARTTIME (WORKITEM_PROCESS_JOBTIME << 1)
|
|
#define WORKITEM_PROCESS_JOBTYPE (WORKITEM_PROCESS_JOBTIME << 2)
|
|
#define WORKITEM_PROCESS_DATA (WORKITEM_PROCESS_JOBTIME << 3)
|
|
|
|
//
|
|
// Table structure
|
|
//
|
|
#define WORKITEM_TABLE_NAME _TEXT("WorkStorage")
|
|
#define WORKITEM_COLUMN_JOBTIME _TEXT("ScheduledTime")
|
|
#define WORKITEM_COLUMN_JOBRESTARTTIME _TEXT("RestartTime")
|
|
#define WORKITEM_COLUMN_JOBTYPE _TEXT("JobType")
|
|
#define WORKITEM_COLUMN_DATA _TEXT("Data")
|
|
|
|
#define WORKITEM_MAX_DATA_SIZE 16 * 1024 // max of 32 K
|
|
|
|
typedef struct __WorkItemRecord : public TLSReplWorkItem
|
|
{
|
|
__WorkItemRecord&
|
|
operator=(const __WorkItemRecord& v)
|
|
{
|
|
DWORD bSuccess;
|
|
|
|
PBYTE pbOldData=pbData;
|
|
DWORD cbOldData=cbData;
|
|
|
|
if(this == &v)
|
|
return *this;
|
|
|
|
*(TLSReplWorkItem *)this = *(TLSReplWorkItem *)&v;
|
|
|
|
pbData = pbOldData;
|
|
cbData = cbOldData;
|
|
|
|
bSuccess = TLSDBCopyBinaryData(
|
|
v.pbData,
|
|
v.cbData,
|
|
&pbData,
|
|
&cbData
|
|
);
|
|
|
|
JB_ASSERT(bSuccess == TRUE);
|
|
return *this;
|
|
}
|
|
|
|
__WorkItemRecord&
|
|
operator=(const TLSReplWorkItem& v)
|
|
{
|
|
DWORD bSuccess;
|
|
|
|
PBYTE pbOldData=pbData;
|
|
DWORD cbOldData=cbData;
|
|
|
|
*(TLSReplWorkItem *)this = *(TLSReplWorkItem *)&v;
|
|
|
|
pbData = pbOldData;
|
|
cbData = cbOldData;
|
|
|
|
bSuccess = TLSDBCopyBinaryData(
|
|
v.pbData,
|
|
v.cbData,
|
|
&pbData,
|
|
&cbData
|
|
);
|
|
|
|
JB_ASSERT(bSuccess == TRUE);
|
|
return *this;
|
|
}
|
|
|
|
__WorkItemRecord()
|
|
{
|
|
pbData = NULL;
|
|
cbData = 0;
|
|
}
|
|
|
|
~__WorkItemRecord()
|
|
{
|
|
if(pbData)
|
|
{
|
|
FreeMemory(pbData);
|
|
}
|
|
}
|
|
} WORKITEMRECORD;
|
|
|
|
typedef WORKITEMRECORD* LPWORKITEMRECORD;
|
|
typedef WORKITEMRECORD* PWORKITEMRECORD;
|
|
|
|
|
|
/////////////////////////////////////////////////////////
|
|
//
|
|
// Index structure
|
|
//
|
|
/////////////////////////////////////////////////////////
|
|
|
|
//
|
|
//
|
|
#define WORKITEM_INDEX_JOBTIME_INDEXNAME \
|
|
WORKITEM_TABLE_NAME SEPERATOR WORKITEM_COLUMN_JOBTIME SEPERATOR INDEXNAME
|
|
|
|
//
|
|
// Primary Index on KeyPack ID "+KeyPackId\0"
|
|
//
|
|
#define WORKITEM_INDEX_JOBTIME_INDEXKEY \
|
|
INDEX_SORT_ASCENDING WORKITEM_COLUMN_JOBTIME INDEX_END_COLNAME
|
|
|
|
typedef struct __WorkItemIdxOnJobTime : public JBKeyBase {
|
|
DWORD dwScheduledTime;
|
|
|
|
//--------------------------------------------------------
|
|
__WorkItemIdxOnJobTime(
|
|
const WORKITEMRECORD& v
|
|
) :
|
|
JBKeyBase()
|
|
/*++
|
|
++*/
|
|
{
|
|
*this = v;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
__WorkItemIdxOnJobTime(
|
|
const WORKITEMRECORD* v=NULL
|
|
) :
|
|
JBKeyBase()
|
|
/*++
|
|
++*/
|
|
{
|
|
if(v)
|
|
{
|
|
*this = *v;
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
__WorkItemIdxOnJobTime&
|
|
operator=(const WORKITEMRECORD& v)
|
|
{
|
|
dwScheduledTime = v.dwScheduledTime;
|
|
SetEmptyValue(FALSE);
|
|
return *this;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
LPCTSTR
|
|
GetIndexName()
|
|
{
|
|
static LPTSTR pszIndexName=WORKITEM_INDEX_JOBTIME_INDEXNAME;
|
|
return pszIndexName;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
LPCTSTR
|
|
GetIndexKey()
|
|
{
|
|
static LPTSTR pszIndexKey=WORKITEM_INDEX_JOBTIME_INDEXKEY;
|
|
return pszIndexKey;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
DWORD
|
|
GetNumKeyComponents()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
BOOL
|
|
GetSearchKey(
|
|
DWORD dwComponentIndex,
|
|
PVOID* pbData,
|
|
unsigned long* cbData,
|
|
JET_GRBIT* grbit,
|
|
DWORD dwSearchParm
|
|
)
|
|
/*++
|
|
++*/
|
|
{
|
|
if(dwComponentIndex >= GetNumKeyComponents())
|
|
{
|
|
JB_ASSERT(FALSE);
|
|
return FALSE;
|
|
}
|
|
|
|
*pbData = &dwScheduledTime;
|
|
*cbData = sizeof(dwScheduledTime);
|
|
*grbit = JET_bitNewKey;
|
|
return TRUE;
|
|
}
|
|
} TLSWorkItemIdxModifyTime;
|
|
|
|
// -----------------------------------------------------------
|
|
//
|
|
// LicensedPackStatus Table
|
|
//
|
|
// -----------------------------------------------------------
|
|
class WorkItemTable : public TLSTable<WORKITEMRECORD> {
|
|
private:
|
|
|
|
BOOL
|
|
ProcessSingleColumn(
|
|
BOOL bFetch,
|
|
TLSColumnBase& column,
|
|
DWORD offset,
|
|
PVOID pbData,
|
|
DWORD cbData,
|
|
PDWORD pcbDataReturn,
|
|
LPCTSTR szColumnName
|
|
);
|
|
|
|
BOOL
|
|
ProcessRecord(
|
|
WORKITEMRECORD* v,
|
|
BOOL bFetch, // TRUE - fetch, FALSE insert
|
|
DWORD dwParam,
|
|
BOOL bUpdate
|
|
);
|
|
|
|
public:
|
|
TLSColumnDword dwScheduledTime;
|
|
TLSColumnDword dwRestartTime;
|
|
TLSColumnDword dwJobType;
|
|
TLSColumnBinary pbData;
|
|
|
|
//-----------------------------------------------------
|
|
virtual LPCTSTR
|
|
GetTableName()
|
|
{
|
|
static LPTSTR pszTableName=WORKITEM_TABLE_NAME;
|
|
return pszTableName;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------
|
|
WorkItemTable(
|
|
JBDatabase& database
|
|
) :
|
|
TLSTable<WORKITEMRECORD>(database)
|
|
/*
|
|
*/
|
|
{
|
|
}
|
|
|
|
//-----------------------------------------------------
|
|
virtual BOOL
|
|
ResolveToTableColumn();
|
|
|
|
//-----------------------------------------------------
|
|
virtual BOOL
|
|
FetchRecord(
|
|
WORKITEMRECORD& v,
|
|
DWORD dwParam=PROCESS_ALL_COLUMNS
|
|
)
|
|
/*
|
|
*/
|
|
{
|
|
if(IsValid() == FALSE)
|
|
{
|
|
DebugOutput(
|
|
_TEXT("Table %s is not valid...\n"),
|
|
GetTableName()
|
|
);
|
|
|
|
JB_ASSERT(FALSE);
|
|
SetLastJetError(JET_errInvalidParameter);
|
|
return FALSE;
|
|
}
|
|
|
|
//CCriticalSectionLocker Lock(GetTableLock());
|
|
|
|
return ProcessRecord(&v, TRUE, dwParam, FALSE);
|
|
}
|
|
|
|
//-----------------------------------------------------
|
|
virtual BOOL
|
|
InsertRecord(
|
|
WORKITEMRECORD& v,
|
|
DWORD dwParam=PROCESS_ALL_COLUMNS
|
|
)
|
|
/*
|
|
*/
|
|
{
|
|
if(IsValid() == FALSE)
|
|
{
|
|
DebugOutput(
|
|
_TEXT("Table %s is not valid...\n"),
|
|
GetTableName()
|
|
);
|
|
|
|
JB_ASSERT(FALSE);
|
|
SetLastJetError(JET_errInvalidParameter);
|
|
return FALSE;
|
|
}
|
|
|
|
//CCriticalSectionLocker Lock(GetTableLock());
|
|
|
|
return ProcessRecord(&v, FALSE, dwParam, FALSE);
|
|
}
|
|
|
|
//-----------------------------------------------------
|
|
virtual BOOL
|
|
UpdateRecord(
|
|
WORKITEMRECORD& v,
|
|
DWORD dwParam=PROCESS_ALL_COLUMNS
|
|
)
|
|
/*
|
|
*/
|
|
{
|
|
if(IsValid() == FALSE)
|
|
{
|
|
DebugOutput(
|
|
_TEXT("Table %s is not valid...\n"),
|
|
GetTableName()
|
|
);
|
|
|
|
JB_ASSERT(FALSE);
|
|
SetLastJetError(JET_errInvalidParameter);
|
|
return FALSE;
|
|
}
|
|
|
|
//CCriticalSectionLocker Lock(GetTableLock());
|
|
|
|
return ProcessRecord(&v, FALSE, dwParam, TRUE);
|
|
}
|
|
|
|
//-------------------------------------------------------
|
|
virtual BOOL
|
|
Initialize()
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
//-------------------------------------------------------
|
|
virtual JBKeyBase*
|
|
EnumerationIndex(
|
|
IN BOOL bMatchAll,
|
|
IN DWORD dwParam,
|
|
IN WORKITEMRECORD* kp,
|
|
IN OUT BOOL* bCompareKey
|
|
);
|
|
|
|
virtual BOOL
|
|
EqualValue(
|
|
WORKITEMRECORD& s1,
|
|
WORKITEMRECORD& s2,
|
|
BOOL bMatchAll,
|
|
DWORD dwParam
|
|
);
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|