//+-------------------------------------------------------------------------- // // 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 { 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(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