00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #pragma once
00038 #ifndef __TEMPLOG_MS_H__
00039 #define __TEMPLOG_MS_H__
00040
00041 #include "cslib/CSDefs.h"
00042 #include "cslib/CSFile.h"
00043 #include "cslib/CSStream.h"
00044
00045 #include "defs_ms.h"
00046
00047 class MSOpenTable;
00048 class MSDatabase;
00049 class MSTempLog;
00050
00051
00052
00053
00054
00055
00056
00057 #define MS_TEMP_LOG_MAGIC 0xF9E6D7C9
00058 #define MS_TEMP_LOG_VERSION 3
00059 #define MS_TEMP_LOG_HEAD_SIZE 32
00060
00061 #define MS_TL_BLOB_REF 1
00062 #define MS_TL_REPO_REF 2
00063 #define MS_TL_TABLE_REF 3
00064
00065 typedef struct MSTempLogHead {
00066 CSDiskValue4 th_magic_4;
00067 CSDiskValue2 th_version_2;
00068 CSDiskValue2 th_head_size_2;
00069 CSDiskValue2 th_rec_size_2;
00070 CSDiskValue4 th_reserved_4;
00071 } MSTempLogHeadRec, *MSTempLogHeadPtr;
00072
00073 typedef struct MSTempLogItem {
00074 CSDiskValue1 ti_type_1;
00075 CSDiskValue4 ti_table_id_4;
00076 CSDiskValue6 ti_blob_id_6;
00077 CSDiskValue4 ti_auth_code_4;
00078 CSDiskValue4 ti_time_4;
00079 } MSTempLogItemRec, *MSTempLogItemPtr;
00080
00081 class MSTempLogFile : public CSReadBufferedFile {
00082 public:
00083 uint32_t myTempLogID;
00084 MSTempLog *myTempLog;
00085
00086 MSTempLogFile();
00087 ~MSTempLogFile();
00088
00089 friend class MSTempLog;
00090
00091 private:
00092 static MSTempLogFile *newTempLogFile(uint32_t id, MSTempLog *temp_log, CSFile *path);
00093 };
00094
00095 class MSTempLog : public CSRefObject {
00096 public:
00097 uint32_t myLogID;
00098 off64_t myTempLogSize;
00099 int myTemplogRecSize;
00100 size_t myTempLogHeadSize;
00101
00102 MSTempLog(uint32_t id, MSDatabase *db, off64_t file_size);
00103 virtual ~MSTempLog();
00104
00105 void deleteLog();
00106 CSPath *getLogPath();
00107 MSTempLogFile *openTempLog();
00108
00109 #ifdef DEBUG
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119 #endif
00120
00121 friend class MSTempLogThread;
00122
00123 private:
00124 MSDatabase *iLogDatabase;
00125 bool iDeleteLog;
00126
00127 public:
00128
00129 static time_t adjustWaitTime(time_t then, time_t now);
00130 };
00131
00132 class MSTempLogThread : public CSDaemon {
00133 public:
00134 MSTempLogThread(time_t wait_time, MSDatabase *db);
00135 virtual ~MSTempLogThread(){}
00136
00137 void close();
00138
00139 virtual bool doWork();
00140
00141 virtual void *completeWork();
00142
00143 private:
00144 bool try_ReleaseBLOBReference(CSThread *self, CSStringBuffer *buffer, uint32_t tab_id, int type, uint64_t blob_id, uint32_t auth_code);
00145
00146 MSDatabase *iTempLogDatabase;
00147 MSTempLogFile *iTempLogFile;
00148 size_t iLogRecSize;
00149 off64_t iLogOffset;
00150
00151 };
00152
00153 #endif