|
|
//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996-1998
//
// File: kpDesc.cpp
//
// Contents:
// KeyPackDesc Table related function.
//
// History:
// Feb. 4, 98 HueiWang Created.
//
// Note :
// Bind Parameter and Bind Column need to to in sync with select column
//---------------------------------------------------------------------------
#include "pch.cpp"
#include "lkpdesc.h"
#include "globals.h"
//---------------------------------------------------------------------------
// Functions : LSDBLockKeyPackDescTable()
// LSDBUnlockKeyPackDescTable()
//
// Abstract : Lock and Unlock single access to key pack desc. table.
//---------------------------------------------------------------------------
void TLSDBLockKeyPackDescTable() { DBGPrintf( DBG_INFORMATION, DBG_FACILITY_LOCK, DBGLEVEL_FUNCTION_TRACE, _TEXT("Locking table KeyPackDescTable\n") );
LicPackDescTable::LockTable(); return; }
void TLSDBUnlockKeyPackDescTable() { DBGPrintf( DBG_INFORMATION, DBG_FACILITY_LOCK, DBGLEVEL_FUNCTION_TRACE, _TEXT("Unlocking table KeyPackDescTable\n") );
LicPackDescTable::UnlockTable(); return; }
//++--------------------------------------------------------------------
DWORD TLSDBKeyPackDescEnumBegin( IN PTLSDbWorkSpace pDbWkSpace, IN BOOL bMatchAll, IN DWORD dwSearchParm, IN PLICPACKDESC lpKeyPackDesc ) /*++
Abstract:
Begin enumeration of license pack description table.
Parameters:
pDbWkSpace : Workspace handle. bMatchAll : TRUE if matching all license pack description search value, FALSE otherwise dwSearchParam : Field that will be search on. lpKeyPackDesc : value to be search, subject to bMatchAll criteral
Returns:
*/ { DWORD dwStatus=ERROR_SUCCESS; BOOL bSuccess=TRUE;
if(pDbWkSpace == NULL) { SetLastError(dwStatus = ERROR_INVALID_PARAMETER); TLSASSERT(FALSE); return dwStatus; }
bSuccess = pDbWkSpace->m_LicPackDescTable.EnumerateBegin( bMatchAll, dwSearchParm, lpKeyPackDesc );
if(bSuccess == FALSE) { LPTSTR pString = NULL; TLSGetESEError( pDbWkSpace->m_LicPackDescTable.GetLastJetError(), &pString );
TLSLogEvent( EVENTLOG_ERROR_TYPE, TLS_E_DBGENERAL, TLS_E_JB_BASE, pDbWkSpace->m_LicPackDescTable.GetLastJetError(), (pString != NULL) ? pString : _TEXT("") );
if(pString != NULL) { LocalFree(pString); }
SetLastError(dwStatus = SET_JB_ERROR(pDbWkSpace->m_LicPackDescTable.GetLastJetError())); TLSASSERT(FALSE); }
return dwStatus; }
//++----------------------------------------------------------------------
DWORD TLSDBKeyPackDescEnumNext( IN PTLSDbWorkSpace pDbWkSpace, IN OUT PLICPACKDESC lpKeyPackDesc ) /*++
Abstract:
Fetch next record in LicPackDesc table that match search condition.
Parameter:
pDbWkSpace : Workspace handle. lpKeyPackDesc : return record that match search condition.
Returns:
++*/ { DWORD dwStatus=ERROR_SUCCESS;
if(pDbWkSpace == NULL) { SetLastError(dwStatus = ERROR_INVALID_PARAMETER); TLSASSERT(FALSE); return dwStatus; }
switch(pDbWkSpace->m_LicPackDescTable.EnumerateNext(*lpKeyPackDesc)) { case RECORD_ENUM_ERROR: { LPTSTR pString = NULL; TLSGetESEError( pDbWkSpace->m_LicPackDescTable.GetLastJetError(), &pString );
TLSLogEvent( EVENTLOG_ERROR_TYPE, TLS_E_DBGENERAL, TLS_E_JB_BASE, pDbWkSpace->m_LicPackDescTable.GetLastJetError(), (pString != NULL) ? pString : _TEXT("") );
if(pString != NULL) { LocalFree(pString); } }
dwStatus = SET_JB_ERROR(pDbWkSpace->m_LicPackDescTable.GetLastJetError()); TLSASSERT(FALSE); break;
case RECORD_ENUM_MORE_DATA: dwStatus = ERROR_SUCCESS; break;
case RECORD_ENUM_END: dwStatus = TLS_I_NO_MORE_DATA; } return dwStatus; }
//++-----------------------------------------------------------------------
DWORD TLSDBKeyPackDescEnumEnd( IN PTLSDbWorkSpace pDbWkSpace ) /*++
Abstract:
End enumeration of LicPackDesc. table
Parameter:
pdbWkSpace : Workspace handle.
Returns:
++*/ { pDbWkSpace->m_LicPackDescTable.EnumerateEnd(); return ERROR_SUCCESS; }
//++-----------------------------------------------------------------------
DWORD TLSDBKeyPackDescAddEntry( IN PTLSDbWorkSpace pDbWkSpace, IN PLICPACKDESC lpKeyPackDesc ) /*++
Abstract:
Add a record into licensepackdesc table.
Parameter:
pDbWkSpace : workspace handle. lpKeyPackDesc : record to be added into table.
Returns:
++*/ { DWORD dwStatus = ERROR_SUCCESS; LicPackDescTable& kpDescTable = pDbWkSpace->m_LicPackDescTable;
//
// Check for duplicate entry
//
dwStatus = TLSDBKeyPackDescFind( pDbWkSpace, TRUE, LICPACKDESCRECORD_TABLE_SEARCH_KEYPACKID | LICPACKDESCRECORD_TABLE_SEARCH_LANGID, lpKeyPackDesc, NULL );
if(dwStatus == ERROR_SUCCESS) { SetLastError(dwStatus = TLS_E_DUPLICATE_RECORD); goto cleanup; } else if(dwStatus != TLS_E_RECORD_NOTFOUND) { goto cleanup; } SetLastError(dwStatus = ERROR_SUCCESS); if(kpDescTable.InsertRecord(*lpKeyPackDesc) == FALSE) { if(kpDescTable.GetLastJetError() == JET_errKeyDuplicate) { SetLastError(dwStatus=TLS_E_DUPLICATE_RECORD); } else { LPTSTR pString = NULL; TLSGetESEError(kpDescTable.GetLastJetError(), &pString);
TLSLogEvent( EVENTLOG_ERROR_TYPE, TLS_E_DBGENERAL, TLS_E_JB_BASE, kpDescTable.GetLastJetError(), (pString != NULL) ? pString : _TEXT("") );
if(pString != NULL) { LocalFree(pString); }
SetLastError(dwStatus = SET_JB_ERROR(kpDescTable.GetLastJetError())); TLSASSERT(FALSE); } }
cleanup: return dwStatus; }
//++------------------------------------------------------------------------
DWORD TLSDBKeyPackDescDeleteEntry( IN PTLSDbWorkSpace pDbWkSpace, IN PLICPACKDESC lpKeyPackDesc ) /*++
Abstract:
Delete all record from LicPackDesc table that match the keypack id
Parameter:
pDbWkSpace : workspace handle. lpKeyPackDesc : keypack Id to be deleted
Returns:
*/ { DWORD dwStatus = ERROR_SUCCESS; LicPackDescTable& kpDescTable = pDbWkSpace->m_LicPackDescTable; BOOL bSuccess;
bSuccess = kpDescTable.DeleteAllRecord( TRUE, LICPACKDESCRECORD_TABLE_SEARCH_KEYPACKID, *lpKeyPackDesc );
if( bSuccess == FALSE ) { SetLastError(dwStatus = SET_JB_ERROR(kpDescTable.GetLastJetError()));
// ignore record not found error
if(kpDescTable.GetLastJetError() != JET_errRecordNotFound) { LPTSTR pString = NULL; TLSGetESEError(kpDescTable.GetLastJetError(), &pString);
TLSLogEvent( EVENTLOG_ERROR_TYPE, TLS_E_DBGENERAL, TLS_E_JB_BASE, kpDescTable.GetLastJetError(), (pString != NULL) ? pString : _TEXT("") );
if(pString != NULL) { LocalFree(pString); }
TLSASSERT(kpDescTable.GetLastJetError() == JET_errRecordNotFound); } }
return dwStatus; }
//++------------------------------------------------------------------------
DWORD TLSDBKeyPackDescUpdateEntry( IN PTLSDbWorkSpace pDbWkSpace, IN DWORD dwUpdateParm, IN PLICPACKDESC lpKeyPackDesc ) /*++
Abstract:
Update column value of record in LicPackDescTable that match the keypackid
Parameter:
pDbWkSpace : Work space handle. dwUpdateParm : Fields that will be updated, note, keypack ID and language ID can't be update. lpKeyPackDesc : Record/value to be update
Returns:
Note:
dwKeyPackId and dwLangId can't be update.
++*/ { DWORD dwStatus = ERROR_SUCCESS; LicPackDescTable& kpDescTable = pDbWkSpace->m_LicPackDescTable; BOOL bSuccess;
//
// Check for duplicate entry
//
dwStatus = TLSDBKeyPackDescFind( pDbWkSpace, TRUE, LICPACKDESCRECORD_TABLE_SEARCH_KEYPACKID | LICPACKDESCRECORD_TABLE_SEARCH_LANGID, lpKeyPackDesc, NULL );
if(dwStatus != ERROR_SUCCESS) { TLSASSERT(dwStatus == ERROR_SUCCESS); goto cleanup; }
bSuccess = kpDescTable.UpdateRecord( *lpKeyPackDesc, dwUpdateParm & ~(LICPACKDESCRECORD_TABLE_SEARCH_KEYPACKID | LICPACKDESCRECORD_TABLE_SEARCH_LANGID) );
if(bSuccess == FALSE) { LPTSTR pString = NULL; TLSGetESEError(kpDescTable.GetLastJetError(), &pString);
TLSLogEvent( EVENTLOG_ERROR_TYPE, TLS_E_DBGENERAL, TLS_E_JB_BASE, kpDescTable.GetLastJetError(), (pString != NULL) ? pString : _TEXT("") );
if(pString != NULL) { LocalFree(pString); }
SetLastError(dwStatus = SET_JB_ERROR(kpDescTable.GetLastJetError())); TLSASSERT(FALSE); }
cleanup: return dwStatus; }
//++----------------------------------------------------------------------
DWORD TLSDBKeyPackDescSetValue( PTLSDbWorkSpace pDbWkSpace, DWORD dwSetParm, PLICPACKDESC lpKeyPackDesc ) /*++
Abstract:
Add/Delete/Update a record in LicPackDescTable.
Parameter:
pDbWkSpace : workspace handle. dwSetParm : Columns to be update. lpKeyPackDesc : record/value to be update/delete/add.
Return:
Note: Wrapper around TLSDBKeyPackDescDeleteEntry(), TLSDBKeyPackDescAddEntry(), TLSDBKeyPackDescUpdateEntry() base on dwSetParm value. ++*/ { DWORD dwStatus=ERROR_SUCCESS;
if(pDbWkSpace == NULL || lpKeyPackDesc == NULL) { SetLastError(dwStatus = ERROR_INVALID_PARAMETER); goto cleanup; }
TLSDBLockKeyPackDescTable();
if(dwSetParm & KEYPACKDESC_SET_DELETE_ENTRY) { dwStatus = TLSDBKeyPackDescDeleteEntry( pDbWkSpace, lpKeyPackDesc ); } else if(dwSetParm & KEYPACKDESC_SET_ADD_ENTRY) { dwStatus = TLSDBKeyPackDescAddEntry( pDbWkSpace, lpKeyPackDesc ); } else { dwStatus = TLSDBKeyPackDescUpdateEntry( pDbWkSpace, dwSetParm, lpKeyPackDesc ); }
TLSDBUnlockKeyPackDescTable();
cleanup: return dwStatus; }
//++---------------------------------------------------------------------
DWORD TLSDBKeyPackDescFind( IN PTLSDbWorkSpace pDbWkSpace, IN BOOL bMatchAllParam, IN DWORD dwSearchParm, IN PLICPACKDESC lpKeyPackDesc, IN OUT PLICPACKDESC lpKeyPackDescFound ) /*
Abstract:
Find a LicPackDesc record based on search parameters.
Parameter:
pDbWkSpace - workspace handle. bMatchAllParam - TRUE match all search parameters, FALSE otherwise. dwSearchParam - Fields that will participate in search. lpKeyPackDesc - value to be search. lpKeyPackDescFound - return found record.
Returns:
Note:
*/ { DWORD dwStatus=ERROR_SUCCESS; BOOL bSuccess; LICPACKDESC kpDescFound;
if(pDbWkSpace == NULL || lpKeyPackDesc == NULL) { SetLastError(dwStatus = ERROR_INVALID_PARAMETER); TLSASSERT(pDbWkSpace != NULL); return dwStatus; }
LicPackDescTable& kpDescTable = pDbWkSpace->m_LicPackDescTable;
bSuccess = kpDescTable.FindRecord( bMatchAllParam, dwSearchParm, *lpKeyPackDesc, kpDescFound );
if(bSuccess != TRUE) { if(kpDescTable.GetLastJetError() == JET_errRecordNotFound) { SetLastError(dwStatus = TLS_E_RECORD_NOTFOUND); } else { LPTSTR pString = NULL; TLSGetESEError(kpDescTable.GetLastJetError(), &pString);
TLSLogEvent( EVENTLOG_ERROR_TYPE, TLS_E_DBGENERAL, TLS_E_JB_BASE, kpDescTable.GetLastJetError(), (pString != NULL) ? pString : _TEXT("") );
if(pString != NULL) { LocalFree(pString); }
SetLastError( dwStatus = (SET_JB_ERROR(kpDescTable.GetLastJetError())) );
TLSASSERT(kpDescTable.GetLastJetError() == JET_errRecordNotFound); } } else { if(lpKeyPackDescFound != NULL) { *lpKeyPackDescFound = kpDescFound; } } return dwStatus; }
|