//+-------------------------------------------------------------------------- // // Copyright (c) 1997-1999 Microsoft Corporation // // File: wkspace.h // // Contents: // // History: // //--------------------------------------------------------------------------- #ifndef __TLSDBWORKSPACE_H__ #define __TLSDBWORKSPACE_H__ #include "SrvDef.h" // // from TLSDb // #include "JBDef.h" #include "JetBlue.h" #include "TLSDb.h" #include "backup.h" #include "KPDesc.h" #include "Licensed.h" #include "licpack.h" #include "version.h" #include "workitem.h" struct __TLSDbWorkSpace; // // Temporary define workspace to be 32 // #define MAX_WORKSPACE 32 typedef CHandlePool< struct __TlsDbWorkSpace *, MAX_WORKSPACE > TLSDbWorkSpacePool; //--------------------------------------------------------------------------- typedef struct __TlsDbWorkSpace { // one instance for all session static JBInstance g_JbInstance; //------------------------------------------------ // // JetBlue transaction is session based and no // two thread can use same session // JBSession m_JetSession; JBDatabase m_JetDatabase; // // These table should be kept open // LicPackTable m_LicPackTable; LicensedTable m_LicensedTable; // // LicPackDesc table is used by enumeration and // adding license pack open as necessary. // LicPackDescTable m_LicPackDescTable; //----------------------------------------------- BOOL BeginTransaction() { BOOL bSuccess; try { bSuccess = m_JetDatabase.BeginTransaction(); } catch( SE_Exception e ) { bSuccess = FALSE; SetLastError(e.getSeNumber()); } catch(...) { bSuccess = FALSE; SetLastError(TLS_E_INTERNAL); } return bSuccess; } //----------------------------------------------- BOOL CommitTransaction() { BOOL bSuccess; try { bSuccess = m_JetDatabase.CommitTransaction(); } catch( SE_Exception e ) { bSuccess = FALSE; SetLastError(e.getSeNumber()); } catch(...) { bSuccess = FALSE; SetLastError(TLS_E_INTERNAL); } return bSuccess; } //----------------------------------------------- BOOL RollbackTransaction() { BOOL bSuccess; try { bSuccess = m_JetDatabase.RollbackTransaction(); } catch( SE_Exception e ) { bSuccess = FALSE; SetLastError(e.getSeNumber()); } catch(...) { bSuccess = FALSE; SetLastError(TLS_E_INTERNAL); } return bSuccess; } //----------------------------------------------- void Cleanup() { m_LicPackTable.Cleanup(); m_LicPackDescTable.Cleanup(); m_LicensedTable.Cleanup(); } //------------------------------------------------ __TlsDbWorkSpace() : m_JetSession(g_JbInstance), m_JetDatabase(m_JetSession), m_LicPackTable(m_JetDatabase), m_LicPackDescTable(m_JetDatabase), m_LicensedTable(m_JetDatabase) /* */ { // // Force apps to call InitWorkSpace... // } //------------------------------------------------ ~__TlsDbWorkSpace() { m_LicPackTable.CloseTable(); m_LicPackDescTable.CloseTable(); m_LicensedTable.CloseTable(); m_JetDatabase.CloseDatabase(); m_JetSession.EndSession(); } //------------------------------------------------ BOOL InitWorkSpace( BOOL bCreateIfNotExist, LPCTSTR szDatabaseFile, LPCTSTR szUserName=NULL, LPCTSTR szPassword=NULL, IN LPCTSTR szChkPointDirPath=NULL, IN LPCTSTR szTempDirPath=NULL, IN BOOL bUpdatable = FALSE ); } TLSDbWorkSpace, *LPTLSDbWorkSpace, *PTLSDbWorkSpace; #ifdef __cplusplus extern "C" { #endif BOOL TLSJbInstanceInit( IN OUT JBInstance& jbInstance, IN LPCTSTR pszChkPointDirPath, IN LPCTSTR pszTempDirPath, IN LPCTSTR pszLogDirPath ); TLSDbWorkSpace* AllocateWorkSpace( DWORD dwWaitTime ); void ReleaseWorkSpace( PTLSDbWorkSpace *p ); // BOOL InitializeWorkSpacePool( int num_workspace, LPCTSTR szDatabaseFile, LPCTSTR szUserName, LPCTSTR szPassword, LPCTSTR szChkPointDirPath, LPCTSTR szTempDirPath, LPCTSTR szLogDirPath, BOOL bUpdatable ); DWORD CloseWorkSpacePool(); WorkItemTable* GetWorkItemStorageTable(); DWORD GetNumberOfWorkSpaceHandle(); BOOL TLSGetESEError( const JET_ERR jetErrCode, LPTSTR* pszString ); BOOL IsValidAllocatedWorkspace( PTLSDbWorkSpace p ); #ifdef __cplusplus } #endif #endif