|
|
//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996-1998
//
// File: kpdtab.cpp
//
// Contents: Licensed Pack Description Table
//
// History:
//
//---------------------------------------------------------------------------
#include "KpDesc.h"
LPCTSTR __JBKPDescIndexKeyPackId::pszIndexName = LICPACKDESCRECORD_ID_INDEXNAME; LPCTSTR __JBKPDescIndexKeyPackId::pszIndexKey = LICPACKDESCRECORD_ID_INDEXNAME_INDEXKEY; LPCTSTR __JBKPDescIndexKeyPackLangId::pszIndexName = LICPACKDESCRECORD_ID_LANGID_INDEXNAME; LPCTSTR __JBKPDescIndexKeyPackLangId::pszIndexKey = LICPACKDESCRECORD_ID_LANGID_INDEXNAME_INDEXKEY; LPCTSTR __LICPACKDESCRECORDIdxOnModifyTime::pszIndexName = LICPACKDESCRECORD_LASTMODIFYTIME_INDEXNAME; LPCTSTR __LICPACKDESCRECORDIdxOnModifyTime::pszIndexKey = LICPACKDESCRECORD_LASTMODIFYTIME_INDEXNAME_INDEXKEY;
LPCTSTR LicPackDescTable::pszTableName = LICPACKDESCRECORD_TABLE_NAME; CCriticalSection LicPackDescTable::g_TableLock; //----------------------------------------------------------
TLSJBIndex LicPackDescTable::g_TableIndex[] = { { LICPACKDESCRECORD_ID_INDEXNAME, LICPACKDESCRECORD_ID_INDEXNAME_INDEXKEY, -1, JET_bitIndexIgnoreNull, //JET_bitIndexUnique,
TLSTABLE_INDEX_DEFAULT_DENSITY },
{ LICPACKDESCRECORD_ID_LANGID_INDEXNAME, LICPACKDESCRECORD_ID_LANGID_INDEXNAME_INDEXKEY, -1, JET_bitIndexPrimary, TLSTABLE_INDEX_DEFAULT_DENSITY } };
int LicPackDescTable::g_NumTableIndex = sizeof(LicPackDescTable::g_TableIndex) / sizeof(LicPackDescTable::g_TableIndex[0]);
TLSJBColumn LicPackDescTable::g_Columns[] = { { LICPACKDESCRECORD_ENTRYSTATUS, JET_coltypUnsignedByte, 0, JET_bitColumnFixed, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID },
{ LICPACKDESCRECORD_ID_COLUMN, JET_coltypLong, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, { LICPACKDESCRECORD_LASTMODIFYTIME, JET_coltypBinary, sizeof(FILETIME), JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID },
{ LICPACKDESCRECORD_LANGID, JET_coltypLong, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, { LICPACKDESCRECORD_COMPANY_NAME, //JET_coltypLongText,
JB_COLTYPE_TEXT, (MAX_JETBLUE_TEXT_LENGTH + 1)*sizeof(TCHAR), 0, JBSTRING_NULL, _tcslen(JBSTRING_NULL), TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID },
{ LICPACKDESCRECORD_PRODUCT_NAME, //JET_coltypLongText,
JB_COLTYPE_TEXT, (MAX_JETBLUE_TEXT_LENGTH + 1)*sizeof(TCHAR), 0, JBSTRING_NULL, _tcslen(JBSTRING_NULL), TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, { LICPACKDESCRECORD_PRODUCT_DESC, //JET_coltypLongText,
JB_COLTYPE_TEXT, (MAX_JETBLUE_TEXT_LENGTH + 1)*sizeof(TCHAR), 0, JBSTRING_NULL, _tcslen(JBSTRING_NULL), TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, };
int LicPackDescTable::g_NumColumns = sizeof(LicPackDescTable::g_Columns) / sizeof(LicPackDescTable::g_Columns[0]);
//--------------------------------------------------------------------------
BOOL LicPackDescTable::ResolveToTableColumn() /*
*/ { if(IsValid() == FALSE) { DebugOutput( _TEXT("Table %s is not valid...\n"), GetTableName() );
JB_ASSERT(FALSE); SetLastJetError(JET_errNotInitialized); goto cleanup; }
m_JetErr = ucEntryStatus.AttachToTable( *this, LICPACKDESCRECORD_ENTRYSTATUS );
if(IsSuccess() == FALSE) goto cleanup;
m_JetErr = dwKeyPackId.AttachToTable( *this, LICPACKDESCRECORD_ID_COLUMN ); if(IsSuccess() == FALSE) goto cleanup;
m_JetErr = dwLanguageId.AttachToTable( *this, LICPACKDESCRECORD_LANGID ); if(IsSuccess() == FALSE) goto cleanup;
m_JetErr = ftLastModifyTime.AttachToTable( *this, LICPACKDESCRECORD_LASTMODIFYTIME ); if(IsSuccess() == FALSE) goto cleanup;
m_JetErr = szCompanyName.AttachToTable( *this, LICPACKDESCRECORD_COMPANY_NAME ); if(IsSuccess() == FALSE) goto cleanup;
m_JetErr = szProductName.AttachToTable( *this, LICPACKDESCRECORD_PRODUCT_NAME ); if(IsSuccess() == FALSE) goto cleanup;
m_JetErr = szProductDesc.AttachToTable( *this, LICPACKDESCRECORD_PRODUCT_DESC );
cleanup: return IsSuccess(); }
//-------------------------------------------------------------------------
CLASS_PRIVATE BOOL LicPackDescTable::ProcessSingleColumn( BOOL bFetch, TLSColumnBase& column, DWORD offset, PVOID pbData, DWORD cbData, PDWORD pcbDataReturn, LPCTSTR szColumnName ) /*
*/ { if(bFetch) { m_JetErr = column.FetchColumnValue( pbData, cbData, offset, pcbDataReturn ); } else { m_JetErr = column.InsertColumnValue( pbData, cbData, offset ); }
REPORTPROCESSFAILED( bFetch, GetTableName(), szColumnName, m_JetErr ); return IsSuccess(); }
//--------------------------------------------------------------------------
CLASS_PRIVATE BOOL LicPackDescTable::ProcessRecord( LICPACKDESCRECORD* record, BOOL bFetch, DWORD dwParam, BOOL bUpdate ) /*
*/ { DWORD dwSize;
if(bFetch == FALSE) { //BeginTransaction();
BeginUpdate(bUpdate);
if(!(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_LASTMODIFYTIME)) { JB_ASSERT(FALSE); dwParam |= LICPACKDESCRECORD_TABLE_PROCESS_LASTMODIFYTIME; } } else { SetLastJetError(JET_errSuccess); }
if(IsSuccess() == FALSE) return FALSE;
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_ENTRYSTATUS) { ProcessSingleColumn( bFetch, ucEntryStatus, 0, &(record->ucEntryStatus), sizeof(record->ucEntryStatus), &dwSize, LICPACKDESCRECORD_ENTRYSTATUS ); }
if(IsSuccess() == FALSE) goto cleanup;
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_KEYPACKID) { ProcessSingleColumn( bFetch, dwKeyPackId, 0, &(record->dwKeyPackId), sizeof(record->dwKeyPackId), &dwSize, LICPACKDESCRECORD_ID_COLUMN ); }
if(IsSuccess() == FALSE) goto cleanup; if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_LANGID) { ProcessSingleColumn( bFetch, dwLanguageId, 0, &(record->dwLanguageId), sizeof(record->dwLanguageId), &dwSize, LICPACKDESCRECORD_LANGID ); }
if(IsSuccess() == FALSE) goto cleanup;
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_LASTMODIFYTIME) { ProcessSingleColumn( bFetch, ftLastModifyTime, 0, &(record->ftLastModifyTime), sizeof(record->ftLastModifyTime), &dwSize, LICPACKDESCRECORD_LASTMODIFYTIME ); }
if(IsSuccess() == FALSE) goto cleanup;
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_COMPANYNAME) { ProcessSingleColumn( bFetch, szCompanyName, 0, record->szCompanyName, sizeof(record->szCompanyName), &dwSize, LICPACKDESCRECORD_COMPANY_NAME ); }
if(IsSuccess() == FALSE) goto cleanup;
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_PRODUCTNAME) { ProcessSingleColumn( bFetch, szProductName, 0, record->szProductName, sizeof(record->szProductName), &dwSize, LICPACKDESCRECORD_PRODUCT_NAME ); }
if(IsSuccess() == FALSE) goto cleanup;
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_PRODUCTDESC) { ProcessSingleColumn( bFetch, szProductDesc, 0, record->szProductDesc, sizeof(record->szProductDesc), &dwSize, LICPACKDESCRECORD_PRODUCT_DESC ); }
cleanup:
//
// For inserting/updating record
if(bFetch == FALSE) { JET_ERR jetErr; jetErr = GetLastJetError();
EndUpdate(IsSuccess() == FALSE);
if(jetErr != JET_errSuccess && IsSuccess() == FALSE) SetLastJetError(jetErr); }
return IsSuccess(); }
//----------------------------------------------------------------------------
JBKeyBase* LicPackDescTable::EnumerationIndex( BOOL bMatchAll, DWORD dwSearchParam, LICPACKDESCRECORD* kpDesc, BOOL* bCompareKey ) /*
*/ { JBKeyBase* index=NULL;
*bCompareKey = bMatchAll;
// derive a index to use
//
if( bMatchAll == TRUE && dwSearchParam & LICPACKDESCRECORD_TABLE_SEARCH_KEYPACKID && dwSearchParam & LICPACKDESCRECORD_TABLE_SEARCH_LANGID) { index = new TLSKpDescIndexKpLangId(kpDesc); } else { index = new TLSKpDescIndexKpId(kpDesc);
*bCompareKey = (bMatchAll && (dwSearchParam & LICPACKDESCRECORD_TABLE_SEARCH_KEYPACKID)); }
return index; }
//---------------------------------------------------------------------------
BOOL LicPackDescTable::EqualValue( LICPACKDESCRECORD& src, LICPACKDESCRECORD& dest, BOOL bMatchAll, DWORD dwParam ) /*
*/ { BOOL bRetCode = TRUE;
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_ENTRYSTATUS) { bRetCode = (src.ucEntryStatus == dest.ucEntryStatus); if(bMatchAll != bRetCode) goto cleanup; }
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_KEYPACKID) { bRetCode = (src.dwKeyPackId == dest.dwKeyPackId);
//
// bMatchAll == TRUE and bRetCode == FALSE -> return FALSE
// bMatchAll == FALSE and bRetCode == TRUE -> return TRUE
if(bMatchAll != bRetCode) goto cleanup; }
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_LANGID) { bRetCode = (src.dwLanguageId == dest.dwLanguageId);
if(bMatchAll != bRetCode) goto cleanup; }
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_COMPANYNAME) { bRetCode = (_tcscmp(src.szCompanyName, dest.szCompanyName) == 0);
if(bMatchAll != bRetCode) goto cleanup; }
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_PRODUCTNAME) { bRetCode = (_tcscmp(src.szProductName, dest.szProductName) == 0);
if(bMatchAll != bRetCode) goto cleanup; }
if(dwParam & LICPACKDESCRECORD_TABLE_PROCESS_PRODUCTDESC) { bRetCode = (_tcscmp(src.szProductDesc, dest.szProductDesc) == 0); }
cleanup:
return bRetCode; }
|