//+-------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1996-1998 // // File: kpdesc.h // // Contents: Licensed Pack Description Table // // History: // //--------------------------------------------------------------------------- #ifndef __TLS_KPDESC_H__ #define __TLS_KPDESC_H__ #include "JetBlue.h" #include "TlsDb.h" #define LICPACKDESCRECORD_TABLE_SEARCH_KEYPACKID LSKEYPACK_SEARCH_KEYPACKID #define LICPACKDESCRECORD_TABLE_SEARCH_LANGID LSKEYPACK_SEARCH_LANGID #define LICPACKDESCRECORD_TABLE_SEARCH_COMPANYNAME LSKEYPACK_SEARCH_COMPANYNAME #define LICPACKDESCRECORD_TABLE_SEARCH_PRODUCTNAME LSKEYPACK_SEARCH_PRODUCTNAME #define LICPACKDESCRECORD_TABLE_SEARCH_PRODUCTDESC LSKEYPACK_SEARCH_PRODUCTDESC #define LICPACKDESCRECORD_TABLE_PROCESS_KEYPACKID LICPACKDESCRECORD_TABLE_SEARCH_KEYPACKID #define LICPACKDESCRECORD_TABLE_PROCESS_LANGID LICPACKDESCRECORD_TABLE_SEARCH_LANGID #define LICPACKDESCRECORD_TABLE_PROCESS_COMPANYNAME LICPACKDESCRECORD_TABLE_SEARCH_COMPANYNAME #define LICPACKDESCRECORD_TABLE_PROCESS_PRODUCTNAME LICPACKDESCRECORD_TABLE_SEARCH_PRODUCTNAME #define LICPACKDESCRECORD_TABLE_PROCESS_PRODUCTDESC LICPACKDESCRECORD_TABLE_SEARCH_PRODUCTDESC #define LICPACKDESCRECORD_TABLE_PROCESS_LASTMODIFYTIME 0x80000000 #define LICPACKDESCRECORD_TABLE_PROCESS_ENTRYSTATUS (LICPACKDESCRECORD_TABLE_PROCESS_LASTMODIFYTIME >> 1) // // Table definition for KeyPack Desc table // typedef TLSReplLicPackDesc LICPACKDESC; typedef LICPACKDESC* LPLICPACKDESC; typedef LICPACKDESC* PLICPACKDESC; typedef LICPACKDESC LICPACKDESCRECORD; typedef PLICPACKDESC PLICPACKDESCRECORD; typedef LPLICPACKDESC LPLICPACKDESCRECORD; #define LICPACKDESCRECORD_TABLE_NAME _TEXT("LICPACKDESCRECORD") #define LICPACKDESCRECORD_ID_COLUMN _TEXT("InternalKeyPackId") #define LICPACKDESCRECORD_LANGID _TEXT("LangId") #define LICPACKDESCRECORD_LASTMODIFYTIME _TEXT("LastModifyTime") #define LICPACKDESCRECORD_ENTRYSTATUS _TEXT("EntryStatus") #define LICPACKDESCRECORD_COMPANY_NAME _TEXT("CompanyName") #define LICPACKDESCRECORD_PRODUCT_NAME _TEXT("ProductName") #define LICPACKDESCRECORD_PRODUCT_DESC _TEXT("ProductDesc") // // LICPACKDESCRECORD_KeyPackId_idx // #define LICPACKDESCRECORD_ID_INDEXNAME \ LICPACKDESCRECORD_TABLE_NAME SEPERATOR LICPACKDESCRECORD_ID_COLUMN SEPERATOR INDEXNAME // // Primary Index on keyPack ID "+KeyPackId\0" // #define LICPACKDESCRECORD_ID_INDEXNAME_INDEXKEY \ INDEX_SORT_ASCENDING LICPACKDESCRECORD_ID_COLUMN INDEX_END_COLNAME //------------------------------------------------------------- // Index structure for KeyPack description //------------------------------------------------------------- typedef struct __JBKPDescIndexKeyPackId : public JBKeyBase { // // Primay Index on KeyPack ID // DWORD dwKeyPackId; static LPCTSTR pszIndexName; static LPCTSTR pszIndexKey; //----------------------------------------------- __JBKPDescIndexKeyPackId( const LICPACKDESCRECORD& v ) : JBKeyBase() /*++ ++*/ { *this = v; } //----------------------------------------------- __JBKPDescIndexKeyPackId( const LICPACKDESCRECORD* v=NULL ) : JBKeyBase() /*++ ++*/ { if(v) { *this = *v; } } //----------------------------------------------- __JBKPDescIndexKeyPackId& operator=(const LICPACKDESCRECORD& v) { dwKeyPackId = v.dwKeyPackId; SetEmptyValue(FALSE); return *this; } //-------------------------------------------------------- LPCTSTR GetIndexName() { return pszIndexName; } //-------------------------------------------------------- LPCTSTR GetIndexKey() { 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 = &(dwKeyPackId); *cbData = sizeof(dwKeyPackId); *grbit = JET_bitNewKey; return TRUE; } } TLSKpDescIndexKpId; //------------------------------------------------------------- // // LICPACKDESCRECORD_KeyPackId_LangId_idx // #define LICPACKDESCRECORD_ID_LANGID_INDEXNAME \ LICPACKDESCRECORD_TABLE_NAME SEPERATOR LICPACKDESCRECORD_ID_COLUMN SEPERATOR LICPACKDESCRECORD_LANGID SEPERATOR INDEXNAME // // "+KeyPackId\0+LangId\0" // #define LICPACKDESCRECORD_ID_LANGID_INDEXNAME_INDEXKEY \ INDEX_SORT_ASCENDING LICPACKDESCRECORD_ID_COLUMN INDEX_END_COLNAME \ INDEX_SORT_ASCENDING LICPACKDESCRECORD_LANGID INDEX_END_COLNAME typedef struct __JBKPDescIndexKeyPackLangId : public JBKeyBase { // // Primary index on KeyPack and language Id // DWORD dwKeyPackId; DWORD dwLanguageId; static LPCTSTR pszIndexName; static LPCTSTR pszIndexKey; //--------------------------------------------------- __JBKPDescIndexKeyPackLangId( const LICPACKDESCRECORD* v=NULL ) : JBKeyBase() /*++ ++*/ { if(v) { *this = *v; } } //--------------------------------------------------- __JBKPDescIndexKeyPackLangId( const LICPACKDESCRECORD& v ) : JBKeyBase() /*++ ++*/ { *this = v; } //--------------------------------------------------- __JBKPDescIndexKeyPackLangId& operator=(const LICPACKDESCRECORD& v) { dwKeyPackId = v.dwKeyPackId; dwLanguageId = v.dwLanguageId; SetEmptyValue(FALSE); return *this; } //-------------------------------------------------------- LPCTSTR GetIndexName() { return pszIndexName; } //-------------------------------------------------------- LPCTSTR GetIndexKey() { return pszIndexKey; } //-------------------------------------------------------- DWORD GetNumKeyComponents() { return 2; } //-------------------------------------------------------- BOOL GetSearchKey( DWORD dwComponentIndex, PVOID* pbData, unsigned long* cbData, JET_GRBIT* grbit, DWORD dwSearchParm ) /*++ ++*/ { BOOL retCode = TRUE; if(dwComponentIndex >= GetNumKeyComponents()) { JB_ASSERT(FALSE); return FALSE; } *cbData = 0; switch(dwComponentIndex) { case 0: *pbData = &dwKeyPackId; *cbData = sizeof(dwKeyPackId); *grbit = JET_bitNewKey; break; case 1: *pbData = &dwLanguageId; *cbData = sizeof(dwLanguageId); *grbit = 0; break; default: JB_ASSERT(FALSE); retCode = FALSE; break; } return retCode; } } TLSKpDescIndexKpLangId; ///////////////////////////////////////////////////////////////////////// // KeyPack_LastModifyTime_idx // #define LICPACKDESCRECORD_LASTMODIFYTIME_INDEXNAME \ LICPACKDESCRECORD_TABLE_NAME SEPERATOR LICPACKDESCRECORD_LASTMODIFYTIME SEPERATOR INDEXNAME // // Index "+LastModifyTime\0" // #define LICPACKDESCRECORD_LASTMODIFYTIME_INDEXNAME_INDEXKEY \ INDEX_SORT_ASCENDING LICPACKDESCRECORD_LASTMODIFYTIME INDEX_END_COLNAME typedef struct __LICPACKDESCRECORDIdxOnModifyTime : public JBKeyBase { FILETIME ftLastModifyTime; static LPCTSTR pszIndexName; static LPCTSTR pszIndexKey; //-------------------------------------------------------- __LICPACKDESCRECORDIdxOnModifyTime( const LICPACKDESCRECORD& v ) : JBKeyBase() /*++ ++*/ { *this = v; } //-------------------------------------------------------- __LICPACKDESCRECORDIdxOnModifyTime( const LICPACKDESCRECORD* v=NULL ) : JBKeyBase() /*++ ++*/ { if(v) { *this = *v; } } //-------------------------------------------------------- __LICPACKDESCRECORDIdxOnModifyTime& operator=(const LICPACKDESCRECORD& v) { ftLastModifyTime = v.ftLastModifyTime; SetEmptyValue(FALSE); return *this; } //-------------------------------------------------------- LPCTSTR GetIndexName() { return pszIndexName; } //-------------------------------------------------------- LPCTSTR GetIndexKey() { 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 = &(ftLastModifyTime); *cbData = sizeof(ftLastModifyTime); *grbit = JET_bitNewKey; return TRUE; } } TLSLICPACKDESCRECORDIndexLastModifyTime; // /////////////////////////////////////////////////////////////////////// // // /////////////////////////////////////////////////////////////////////// // class LicPackDescTable : public TLSTable { private: static LPCTSTR pszTableName; TLSColumnUchar ucEntryStatus; TLSColumnDword dwKeyPackId; TLSColumnDword dwLanguageId; TLSColumnFileTime ftLastModifyTime; TLSColumnText szCompanyName; TLSColumnText szProductName; TLSColumnText szProductDesc; BOOL ProcessSingleColumn( BOOL bFetch, TLSColumnBase& column, DWORD offset, PVOID pbData, DWORD cbData, PDWORD pcbDataReturn, LPCTSTR szColumnName ); BOOL ProcessRecord( LICPACKDESCRECORD* v, BOOL bFetch, // TRUE - fetch, FALSE insert DWORD dwParam, BOOL bUpdate ); public: virtual LPCTSTR GetTableName() { return pszTableName; } //-------------------------------------------------------- LicPackDescTable( JBDatabase& database ) : TLSTable(database) /* */ { } //-------------------------------------------------------- virtual BOOL ResolveToTableColumn(); //-------------------------------------------------------- virtual BOOL FetchRecord( LICPACKDESCRECORD& kpRecord, 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(&kpRecord, TRUE, dwParam, FALSE); } //-------------------------------------------------------- virtual BOOL InsertRecord( LICPACKDESCRECORD& kpRecord, 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(&kpRecord, FALSE, dwParam, FALSE); } //------------------------------------------------------- virtual BOOL UpdateRecord( LICPACKDESCRECORD& kpRecord, 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(&kpRecord, FALSE, dwParam, TRUE); } //------------------------------------------------------- virtual BOOL Initialize() { return TRUE; } //------------------------------------------------------- virtual JBKeyBase* EnumerationIndex( IN BOOL bMatchAll, IN DWORD dwParam, IN LICPACKDESCRECORD* kpDesc, IN OUT BOOL* bCompareKey ); virtual BOOL EqualValue( LICPACKDESCRECORD& s1, LICPACKDESCRECORD& s2, BOOL bMatchAll, DWORD dwParam ); }; #endif