00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef DATABASE_H
00017 #define DATABASE_H
00018 #include<os.h>
00019 #include<Allocator.h>
00020 #include<Debug.h>
00021
00022
00023 class Bucket;
00024 class Transaction;
00025 class DatabaseMetaData
00026 {
00027 public:
00028 int dbID_;
00029 char dbName_[IDENTIFIER_LENGTH];
00030
00031
00032
00033
00034 int noOfChunks_;
00035
00036 long maxSize_;
00037 long curSize_;
00038
00039
00040 Page *curPage_;
00041
00042
00043
00044 Page *firstPage_;
00045
00046
00047
00048
00049 Mutex dbAllocMutex_;
00050
00051 Mutex dbMutex_;
00052
00053 Mutex dbTransTableMutex_;
00054
00055 Mutex dbProcTableMutex_;
00056
00057
00058
00059 Chunk *hashIndexChunk_;
00060
00061 unsigned char reserved_[1024];
00062 };
00063
00064
00065 class DatabaseManagerImpl;
00066 class Table;
00067 class ProcInfo;
00068 class ThreadInfo;
00069
00070 class Database
00071 {
00072 private:
00073
00074
00075
00076 Database() { metaData_ = NULL; }
00077 DatabaseMetaData *metaData_;
00078
00079
00080 public:
00081
00082 DbRetVal createSystemDatabaseChunk(AllocType type = FixedSizeAllocator,
00083 size_t size = 0, int chunkID=-1);
00084 DbRetVal deleteSystemDatabaseChunk(int id);
00085
00086 Chunk* getSystemDatabaseChunk(int id);
00087 Transaction* getSystemDatabaseTrans(int slot);
00088
00089 ThreadInfo* getThreadInfo(int slot);
00090
00091 bool isLastThread();
00092
00093 void createAllCatalogTables();
00094 void createSystemTables();
00095 void createMetaDataTables();
00096
00097 void* allocLockHashBuckets();
00098 Bucket* getLockHashBuckets();
00099
00100 void incrementChunk() { (metaData_->noOfChunks_)++;}
00101 void decrementChunk() { (metaData_->noOfChunks_)--;}
00102
00103 const char* getName();
00104 int getDatabaseID();
00105 long getMaxSize();
00106 long getCurrentSize();
00107 Page* getCurrentPage();
00108 int getNoOfChunks();
00109 DatabaseMetaData* getMetaDataPtr() { return metaData_; }
00110 Page* getFirstPage();
00111 Chunk* getHashIndexChunk();
00112
00113 void setDatabaseID(int id);
00114 void setName(const char *name);
00115 void setCurrentSize(long size);
00116 void setCurrentPage(Page *page);
00117 void setMaxSize(long size);
00118 void setNoOfChunks(int maxChunks);
00119 void setMetaDataPtr(DatabaseMetaData *ptr) {metaData_ = ptr; }
00120 void setFirstPage(Page *ptr);
00121 void setHashIndexChunk(Chunk* chunk);
00122
00123
00124
00125
00126
00127 Page* getFreePage();
00128 Page* getFreePage(size_t size);
00129
00130 void printStatistics();
00131
00132 int initAllocDatabaseMutex();
00133 DbRetVal getAllocDatabaseMutex(bool procAccount = true);
00134 DbRetVal releaseAllocDatabaseMutex(bool procAccount = true);
00135
00136 int initTransTableMutex();
00137 DbRetVal getTransTableMutex();
00138 DbRetVal releaseTransTableMutex();
00139
00140 int initDatabaseMutex();
00141 DbRetVal getDatabaseMutex(bool procAccount = true);
00142 DbRetVal releaseDatabaseMutex(bool procAccount = true);
00143
00144 int initProcessTableMutex();
00145 DbRetVal getProcessTableMutex(bool procAccount = true);
00146 DbRetVal releaseProcessTableMutex(bool procAccount = true);
00147
00148 int procSlot;
00149 void setProcSlot(int slot) { procSlot =slot;}
00150
00151 bool isValidAddress(void *ptr);
00152 friend class DatabaseManagerImpl;
00153 friend class Table;
00154
00155 };
00156
00157 #endif