Collaboration diagram for Tstdb:

Public Member Functions | |
| Tstdb (const char *TCDBName, const char *TCDBLogName, const int ParMaxLogSize, const int ParMaxTime) | |
| void | Initialize (void) |
| bool | Insert (char *key, unsigned int lkey, char *data, unsigned int ldata) |
| bool | Update (char *key, unsigned int lkey, char *data, unsigned int ldata) |
| bool | Fetch (char *key, unsigned int lkey, const char **data, unsigned int *ldata) |
| bool | Delete (char *key, unsigned int lkey) |
| bool | Commit (void) |
| bool | Reorganize () |
| bool | Rollback (void) |
| bool | Firstkey (const char **key, unsigned int *lkey, const char **data, unsigned int *ldata) |
| bool | Nextkey (const char **key, unsigned int *lkey, const char **data, unsigned int *ldata) |
| bool | Getstatus (int *LogStatus, int *CDBStatus) |
| void | Finalize (void) |
| ~Tstdb () | |
Private Types | |
| typedef map< string, string, less< string > > | TDBMemory |
| typedef TDBMemory::value_type | TValue |
| enum | { LogOK, LogCORRUPTION, LogNOFILE } |
| enum | { CDBOK, CDBCORRUPTION, CDBNOFILE } |
| enum | TFunction { INSERT, UPDATE, DELETE } |
Private Member Functions | |
| bool | Getcdbline (ifstream &in, TAction &action, bool &final) |
| bool | Getlogline (ifstream &in, TAction &action, bool &commit, int &size, bool &final) |
| bool | Getline (ifstream &in, TAction &action, int &size) |
| bool | ParserLineOut (string &line, TAction &action) |
| bool | ParserLineDeleteOut (string &line, TAction &action) |
| bool | ReorganizeNecessary () |
Private Attributes | |
| char * | db |
| char * | log |
| int | MaxLogSize |
| int | MaxTime |
| TDBMemory | DBMemory |
| TDBMemory::iterator | index |
| enum Tstdb:: { ... } | OpenLogStatus |
| enum Tstdb:: { ... } | OpenCDBStatus |
| int | ReadBytes |
| stack< TAction, vector< TAction > > | RollBack |
| queue< TAction, list< TAction > > | RedoLog |
Classes | |
| class | TAction |
| Class TAction to contain an action to be done. More... | |
Definition at line 94 of file stdb.h.
|
|
TDBMemory type definition. The database is read from the db file to memory and it is stored into the object DBMemory, a TDBMemory map containing key/value pairs. |
|
|
TValue type definition. This is an abstraction of every single object inside the DBMemory map. |
|
|
Log file possible status. OpenLogStatus indicates the LOG file status, which could be correct corrupted or not existing, resp. Definition at line 149 of file stdb.h. 00149 {LogOK, LogCORRUPTION, LogNOFILE} OpenLogStatus;
|
|
|
Database file possible status. OpenCDBStatus reports the DB file status: OK, CORRUPTED OR NOT EXISTING. Definition at line 156 of file stdb.h. 00156 {CDBOK, CDBCORRUPTION, CDBNOFILE} OpenCDBStatus;
|
|
|
These are possible TAction actions to be done.
Definition at line 166 of file stdb.h. 00166 { INSERT, UPDATE, DELETE };
|
|
||||||||||||||||||||
|
Constructor Tstdb. Features: Truncate the log file if bad format founded Autodetection of cdb remake operation interrumped
Definition at line 68 of file stdb.cpp. References db, Initialize(), log, MaxLogSize, and MaxTime. 00068 {
00069
00070 // MaxLongLog
00071 MaxLogSize = ParMaxLogSize;
00072
00073 // MaxTime
00074 MaxTime = ParMaxTime * 24 * 60 * 60; //In seconds
00075
00076 // Save the path files
00077 db=strdup(TCDBName);
00078 log=strdup(TCDBLogName);
00079
00080 // Transfer database information from files to memory
00081 Initialize();
00082 }
|
|
|
Destructor Tstdb.
Definition at line 785 of file stdb.cpp. 00785 {
00786 }
|
|
|
Commit transaction. Validate current transaction, beginning of the next one is implicit. It's essential to assure transaction integrity.
Definition at line 508 of file stdb.cpp. References Tstdb::TAction::GetFunction(), log, ParserLineDeleteOut(), ParserLineOut(), RedoLog, ReorganizeNecessary(), and RollBack. 00508 {
00509
00510 // Are there movements to log?
00511 if(RedoLog.empty())
00512 return true;
00513
00514 // Transfer the redolog
00515 // queue to LOG file
00516 ofstream logOut(log, ios::out|ios::app);
00517 while(!RedoLog.empty()){
00518 TAction &action = RedoLog.front();
00519
00520 switch(action.GetFunction()){
00521
00522 case INSERT:
00523
00524 case UPDATE:{
00525 // Parser line out:
00526 // Output formatting
00527 string buffer;
00528 ParserLineOut(buffer, action);
00529 // Writting line into LOG file
00530 logOut << buffer;
00531 break;
00532 }
00533 case DELETE:{
00534 // Parser Delete line out:
00535 // Output formatting
00536 string buffer;
00537 ParserLineDeleteOut(buffer, action);
00538 // Writting line into log file
00539 logOut << buffer;
00540 break;
00541 }
00542 }
00543 RedoLog.pop();
00544 }
00545 // Intro COMMIT constant before
00546 // closing LOG file
00547 logOut << COMMIT << endl;
00548
00549 // Flushing the buffer
00550 logOut.flush();
00551
00552 // Erase the RollBack stack
00553 // Pop all Actions from stack
00554 while(!RollBack.empty())
00555 RollBack.pop();
00556
00557 // Verify if Reorganize() is necessary
00558 ReorganizeNecessary();
00559
00560 return true;
00561 }
|
|
||||||||||||
|
Delete key/value pair from database.
Definition at line 477 of file stdb.cpp. References DBMemory, RedoLog, and RollBack. 00477 {
00478 string keys(key,key+lkey);
00479 // Search (key,data) into memory map
00480 TDBMemory::iterator p = DBMemory.find(keys);
00481 if (p != DBMemory.end()){
00482 // Key found
00483 // Pushing an Insert to the RollBack stack
00484 TAction action1(INSERT, keys, p->second);
00485 RollBack.push(action1);
00486
00487 // Pushing a Delete to the RedoLog queue
00488 TAction action2(DELETE, keys, "");
00489 RedoLog.push(action2);
00490
00491 // Erasing (key,data) from map object
00492 DBMemory.erase(keys);
00493
00494 return true;
00495 }
00496 else{
00497 // Not found
00498 // Nothing to do here
00499 return false;
00500 }
00501 }
|
|
||||||||||||||||||||
|
Fetch the value for a given key from the database.
Definition at line 456 of file stdb.cpp. References DBMemory. 00456 {
00457 string keys(key,key+lkey);
00458 // Search (key,data) into memory map
00459 TDBMemory::iterator p = DBMemory.find(keys);
00460 if (p != DBMemory.end()){
00461 // Key has been found
00462 *ldata = p->second.length();
00463 *data = p->second.c_str();
00464 return true;
00465 }
00466 else{
00467 // Key has not been found
00468 return false;
00469 }
00470 }
|
|
|
Finalize: deletes the DB and LOG file. It's not clear... why to delete these? |
|
||||||||||||||||||||
|
Find first key in database.
Definition at line 730 of file stdb.cpp. References DBMemory, and index. 00730 {
00731 // Iterator at the beginning of the map
00732 index = DBMemory.begin();
00733
00734 // Verify if there are elements
00735 if (index == DBMemory.end())
00736 return false;
00737
00738 *lkey = index->first.length();
00739 *key = index->first.c_str();
00740
00741 *ldata = index->second.length();
00742 *data = index->second.c_str();
00743
00744 index++;
00745
00746 return true;
00747 }
|
|
||||||||||||||||
|
Parser Get database file lines. Getcdbline is designed to read an entry from the database file and recover the action it stores.
Definition at line 234 of file stdb.cpp. References Getline(). Referenced by Initialize(). 00234 {
00235
00236 // "+" check
00237 char c;
00238 in.get(c);
00239 if (in.eof()) return false;
00240 if (c=='\n'){
00241 final=true;
00242 in.get(c);
00243 return true;
00244 }
00245 final=false;
00246 if(c!='+') return false;
00247
00248 int size;
00249 return Getline(in, action, size);
00250 }
|
|
||||||||||||||||
|
Parser generic Get line. Getline is designed to read a formatted entry from both the DB and the LOG file. It is called from Getcdbline and Getlogline functions.
Definition at line 293 of file stdb.cpp. Referenced by Getcdbline(), and Getlogline(). 00293 {
00294
00295 // Key long
00296 char buffer[BUFFSIZE],c;
00297 size=1; // Start with '+' character, counts one byte
00298 in.get(buffer, BUFFSIZE, ',');
00299 int lkey;
00300 lkey = atol(buffer);
00301 size+=strlen(buffer);
00302 in.get(c);
00303 if (in.eof())
00304 return false;
00305 if(c!=',')
00306 return false;
00307 size+=1;
00308
00309 // Data long
00310
00311 int ldata;
00312
00313 in.get(buffer, BUFFSIZE, ':');
00314 if (in.eof())
00315 return false;
00316 if(buffer[0]=='-'){
00317 // It's a deleted key
00318 in.get(buffer[1]);
00319 if (in.eof())
00320 return false;
00321 if(buffer[1]=='1'){
00322 ldata=0;
00323 size+=2;
00324 }
00325 else{
00326 // Format error
00327 return false;
00328 }
00329 }
00330 else{
00331 // Usual key
00332 if (in.eof())
00333 return false;
00334 ldata = atol(buffer);
00335 size+=strlen(buffer);
00336 }
00337
00338 in.get(c);
00339 if (in.eof())
00340 return false;
00341 if(c!=':')
00342 return false;
00343 size+=1;
00344
00345 // Get key
00346 in.read(buffer, lkey);
00347 if (in.eof())
00348 return false;
00349 string keys(buffer, buffer+lkey);
00350 size+=lkey;
00351
00352 // Get "->"
00353
00354 in.get(c);
00355 if (in.eof()) return false;
00356 if(c!='-') return false;
00357 in.get(c);
00358 if (in.eof()) return false;
00359 if(c!='>') return false;
00360 size+=2;
00361
00362 // Get data
00363
00364 if(ldata == 0){
00365 // Deleted key
00366 TAction action1(DELETE,keys,"");
00367 action=action1;
00368 }
00369 else{
00370 // Usual key
00371 in.read(buffer, ldata);
00372 string datas(buffer, buffer+ldata);
00373 TAction action1(INSERT,keys,datas);
00374 action=action1;
00375 }
00376 size+=ldata;
00377
00378 // Get '\n', end of line/entry
00379 in.get(c);
00380 if (in.eof())
00381 return false;
00382 if(c!='\n')
00383 return false;
00384 size+=1;
00385 return true;
00386 }
|
|
||||||||||||||||||||||||
|
Parser Get log file lines. Getlogline is designed to read an entry from the LOG file and recover the action it stores.
Definition at line 257 of file stdb.cpp. References Getline(). Referenced by Initialize(). 00257 {
00258
00259 // "C" check
00260 char c;
00261 in.get(c);
00262 if (in.eof()){
00263 // End of file detection
00264 final = true;
00265 in.get(c);
00266 return true;
00267 }
00268 final = false;
00269 if(c==COMMIT){
00270 // A Commit
00271 commit = true;
00272
00273 // Get '\n', end of line
00274 in.get(c);
00275 if(in.eof()) return false;
00276 if(c!='\n') return false;
00277 size = 2;
00278 return true;
00279 }
00280 else{
00281 // Not a Commit
00282 commit = false;
00283 if(c!='+') return false;
00284 return Getline(in, action, size);
00285 }
00286 }
|
|
||||||||||||
|
Return status.
|
|
|
Initialize: transfers DB from file to memory. Initialize reads data from de LOG and DB file and store transactions inside a new DB in memory. Definition at line 89 of file stdb.cpp. References db, DBMemory, Getcdbline(), Tstdb::TAction::GetData(), Tstdb::TAction::GetFunction(), Tstdb::TAction::GetKey(), Getlogline(), log, OpenCDBStatus, OpenLogStatus, ReadBytes, Rollback(), and RollBack. Referenced by Tstdb(). 00089 {
00090
00091 // To truncate the log file if it founds format errors
00092 int ReadBytesTran = 0;
00093
00094 char dbtmp[100];
00095 sprintf(dbtmp, "%s.tmp", db);
00096
00097 // Checking if TMP exists, because it means something went wrong
00098 // during last Reorganize. If it exists, it renames it from TMP
00099 // to DB
00100 ifstream fdtmp(dbtmp, ios::in);
00101 if(fdtmp)
00102 rename(dbtmp,db);
00103 fdtmp.close();
00104
00105 // Opening DB file in read-only mode. Now we're going to transfer
00106 // DB entries saved into the file to a new DBMemory object.
00107
00108 ifstream cdbIn(db , ios::in);
00109 if(!cdbIn){
00110 // If DB file doesn't exist
00111 OpenCDBStatus=CDBNOFILE;
00112 }
00113 else{
00114 // DB file do exist
00115 OpenCDBStatus=CDBOK;
00116
00117 // Loops DB file to fill the map object
00118 // It reads lines from DB file while we don't reach the end of file.
00119 string buffer;
00120 while (!cdbIn.eof()){
00121 bool final;
00122 TAction action;
00123 if (!Getcdbline(cdbIn, action, final)){
00124 // Format error encountered, file corrupted
00125 OpenCDBStatus=CDBCORRUPTION;
00126 break;
00127 }
00128 if(!final){
00129 // Introduce (key,data) into map object
00130 DBMemory.insert(TValue(action.GetKey(),action.GetData()));
00131 }
00132 }
00133 }
00134
00135 // Let's transfer the log file into memory map
00136 ifstream logIn(log, ios::in);
00137 if (!logIn){
00138 // LOG file doesn't exist
00139 OpenLogStatus=LogNOFILE;
00140 }
00141 else{
00142 // LOG file do exist
00143 ReadBytes=0;
00144 // Loop LOG entries/lines to fill map object
00145 string buffer;
00146 while (!logIn.eof()){
00147 // Read line
00148 bool commit, final;
00149 int size;
00150 TAction action;
00151
00152 if (!Getlogline(logIn, action, commit, size, final)){
00153 // Format error
00154 OpenLogStatus=LogCORRUPTION;
00155 break;
00156 }
00157 if(final) continue;
00158 if(commit){
00159 // End of transaction
00160 ReadBytes+=ReadBytesTran+2;
00161 ReadBytesTran = 0;
00162 // Pop all Actions from stack
00163 while(!RollBack.empty()){
00164 RollBack.pop();
00165 }
00166 }
00167 else{
00168 // Not the end of transaction
00169 ReadBytesTran+=size;
00170
00171 // Search (key,data) into memory map
00172 TDBMemory::iterator p = DBMemory.find(action.GetKey());
00173
00174 // Difference between DELETE, UPDATE and INSERT and others
00175 switch(action.GetFunction()){
00176 case DELETE:
00177 // DELETE case
00178 if (p != DBMemory.end()){
00179 // Found
00180 // Update the rollback with update
00181 TAction action2(INSERT, action.GetKey(), p->second);
00182 RollBack.push(action2);
00183 // Erase (key,data) from map object
00184 DBMemory.erase(action.GetKey());
00185 }
00186 else{
00187 // Not found
00188 // Nothing to do here
00189 }
00190 break;
00191
00192 case UPDATE:
00193 case INSERT:
00194 // Distinguish between INSERT and UPDATE
00195 if (p != DBMemory.end()){
00196 // Found
00197 // UPDATE case
00198 // Update the rollback with update
00199 TAction action2(UPDATE, action.GetKey(), action.GetData());
00200 RollBack.push(action2);
00201 // Update (key,data) into map object
00202 DBMemory[action.GetKey()] = action.GetData();
00203 }
00204 else{
00205 // Not found
00206 // INSERT case
00207 // Update the rollback with delete
00208 TAction action2(DELETE, action.GetKey(), "");
00209 RollBack.push(action2);
00210 // Introduce (key,data) into map object
00211 DBMemory.insert(TValue(action.GetKey(),action.GetData()));
00212 }
00213 break;
00214 }
00215 }
00216 }
00217 // If EOF and rollback stack is not empty -> LOG file corrupted
00218 if (OpenLogStatus == LogCORRUPTION){
00219 // Rollback the current transaction
00220 Rollback();
00221 // Truncate the log file
00222 truncate(log, ReadBytes);
00223 }
00224 else
00225 OpenLogStatus=LogOK;
00226 }
00227 }
|
|
||||||||||||||||||||
|
Insert a key/value pair to database.
Definition at line 425 of file stdb.cpp. References DBMemory, RedoLog, and RollBack. 00425 {
00426 string keys(key,key+lkey);
00427 string datas(data,data+ldata);
00428 // Search (key,data) into memory map
00429 TDBMemory::iterator p = DBMemory.find(keys);
00430 if (p != DBMemory.end()){
00431 // Key found,
00432 // not possible to Insert
00433 return false;
00434 }
00435 else{
00436 // Not found
00437 // Pushing a Delete to the RollBack stack
00438 TAction action1(DELETE, keys, "");
00439 RollBack.push(action1);
00440
00441 // Pushing an Insert to the RedoLog queue
00442 TAction action2(INSERT, keys, datas);
00443 RedoLog.push(action2);
00444
00445 // Inserting (key,data) into map object
00446 DBMemory.insert(TValue(keys,datas));
00447 return true;
00448 }
00449 }
|
|
||||||||||||||||||||
|
Find next key in database.
Definition at line 754 of file stdb.cpp. References DBMemory, and index. 00754 {
00755
00756 // Verify if not elements
00757 if (index == DBMemory.end())
00758 return false;
00759
00760 *lkey = index->first.length();
00761 *key = index->first.c_str();
00762
00763 *ldata = index->second.length();
00764 *data = index->second.c_str();
00765
00766 index++;
00767
00768 return true;
00769 }
|
|
||||||||||||
|
Parser line delete out. ParserLineDeleteOut is designed to read a DELETE action and generate a plain text line, formatted to fit into the LOG file.
Definition at line 596 of file stdb.cpp. References Tstdb::TAction::GetKey(). Referenced by Commit(). 00596 {
00597 char buffer[100];
00598
00599 // Output delete format defined here
00600 sprintf(buffer, "+%lu,-1:", (unsigned long) action.GetKey().size());
00601
00602 char *d;
00603 d=buffer+strlen(buffer);
00604 memmove(d,action.GetKey().c_str(), action.GetKey().size());
00605 d+=action.GetKey().size();
00606 *(d++)='-';
00607 *(d++)='>';
00608 *(d++)='\n';
00609
00610 string linermp(buffer,d);
00611 line = linermp;
00612
00613 return true;
00614 }
|
|
||||||||||||
|
Parser Line out. ParserLineOut is designed to read a INSERT or UPDATE action an generate a plain text line, formatted to fit into the LOG file.
Definition at line 568 of file stdb.cpp. References Tstdb::TAction::GetData(), and Tstdb::TAction::GetKey(). Referenced by Commit(), and Reorganize(). 00568 {
00569 char buffer[100];
00570
00571
00572 // Output format is defined here
00573 sprintf(buffer, "+%lu,%lu:", (unsigned long)action.GetKey().size(),
00574 (unsigned long)action.GetData().size());
00575 char *d;
00576 d=buffer+strlen(buffer);
00577 memmove(d,action.GetKey().c_str(), action.GetKey().size());
00578 d+=action.GetKey().size();
00579 *(d++)='-';
00580 *(d++)='>';
00581 memmove(d,action.GetData().c_str(), action.GetData().size());
00582 d+=action.GetData().size();
00583 *(d++)='\n';
00584
00585 string linetmp(buffer,d);
00586 line = linetmp;
00587
00588 return true;
00589 }
|
|
|
Reorganize: transfers logged transactions to DB file. Reorganize writes a new cdb incorporating all the logged changes, delete the log and reopen the new cdb.
Definition at line 659 of file stdb.cpp. References db, DBMemory, log, ParserLineOut(), and Rollback(). Referenced by ReorganizeNecessary(). 00659 {
00660 // Rollback the current transaction if not finished
00661 Rollback();
00662
00663 // Rename the actual DB to DB.tmp
00664 char dbtmp[100];
00665 sprintf(dbtmp, "%s.tmp", db);
00666 rename(db, dbtmp);
00667
00668 // Checking if existing DB
00669 ofstream cdbOut(db);
00670 if (!cdbOut){
00671 return false;
00672 }
00673
00674 // Iterator at the beginning of
00675 // the memory map
00676 TDBMemory::iterator DBIter = DBMemory.begin();
00677
00678 // Loop: rebuilding the DB file
00679 while (DBIter != DBMemory.end()){
00680 TAction action(INSERT,DBIter->first, DBIter->second);
00681 // Parser line out
00682 string buffer;
00683 ParserLineOut(buffer, action);
00684 cdbOut << buffer;
00685 DBIter++;
00686 }
00687
00688 // Closing DB file
00689 cdbOut << endl;
00690
00691 // Erasing the LOG file
00692 unlink(log);
00693
00694 // Erasing the TMP file
00695 unlink(dbtmp);
00696
00697 return true;
00698 }
|
|
|
Reorganize: check if is necessary to remake the cdb file. Depending on the value of MaxLogSize i MaxTime, Commit function will call to Reorganize automatically, to update and rebuild the DB file. Definition at line 705 of file stdb.cpp. References db, log, MaxLogSize, MaxTime, and Reorganize(). Referenced by Commit(). 00705 {
00706
00707 struct stat file_cdb_stats;
00708 struct stat file_log_stats;
00709
00710 if (stat(log, &file_log_stats)!=-1){
00711 // LOG exists
00712 // Verify max size
00713 if (file_log_stats.st_size > MaxLogSize)
00714 return Reorganize();
00715
00716 // Verify max time cdb to log file
00717 if (stat(db, &file_cdb_stats)!=-1){
00718 if(difftime(file_log_stats.st_mtime, file_cdb_stats.st_mtime) > MaxTime)
00719 return Reorganize();
00720 }
00721 }
00722 return true;
00723 }
|
|
|
RollBack transaction. It's like an Undo function.
Definition at line 621 of file stdb.cpp. References DBMemory, Tstdb::TAction::GetData(), Tstdb::TAction::GetFunction(), Tstdb::TAction::GetKey(), RedoLog, and RollBack. Referenced by Initialize(), and Reorganize(). 00621 {
00622 // Redo the last transaction, using the RollBack stack
00623 // Transfer the RedoLog queue to LOG file
00624 while(!RollBack.empty()){
00625 TAction &action = RollBack.top();
00626 switch(action.GetFunction()){
00627
00628 case INSERT:
00629 // Inserting (key,data) into map object
00630 DBMemory.insert(TValue(action.GetKey(),action.GetData()));
00631 break;
00632
00633 case UPDATE:
00634 // Updating (key,data) into map object
00635 DBMemory[action.GetKey()] = action.GetData();
00636 break;
00637
00638 case DELETE:
00639 // Erasing (key,data) from map object
00640 DBMemory.erase(action.GetKey());
00641 break;
00642 }
00643 RollBack.pop();
00644 }
00645
00646 // Empty the RedoLog queue
00647 // Pop all Actions from queue
00648 while(!RedoLog.empty())
00649 RedoLog.pop();
00650
00651 return true;
00652 }
|
|
||||||||||||||||||||
|
Update a key/value pair to database.
Definition at line 393 of file stdb.cpp. References DBMemory, RedoLog, and RollBack. 00393 {
00394 string keys(key,key+lkey);
00395 string datas(data,data+ldata);
00396 // Search (key,data) into memory map
00397 TDBMemory::iterator p = DBMemory.find(keys);
00398 if (p != DBMemory.end()){
00399 // Found key
00400 // Update the rollback with update
00401 TAction action1(UPDATE, keys, p->second);
00402 RollBack.push(action1);
00403
00404 // Update the redolog with update
00405 TAction action2(UPDATE, keys, datas);
00406 RedoLog.push(action2);
00407
00408 // Update (key,data) into map object
00409 DBMemory[keys] = datas;
00410
00411 return true;
00412 }
00413 else{
00414 // Key not found
00415 // Nothing to do
00416 return false;
00417 }
00418 }
|
|
|
Filenames for the database file and the log file. This "db" and "log" char arrays will contain the names of the database and log files, respectively. Definition at line 102 of file stdb.h. Referenced by Initialize(), Reorganize(), ReorganizeNecessary(), and Tstdb(). |
|
|
Declaration of DBMemory map object. This is the DBMemory object containg the database in memory. Definition at line 135 of file stdb.h. Referenced by Delete(), Fetch(), Firstkey(), Initialize(), Insert(), Nextkey(), Reorganize(), Rollback(), and Update(). |
|
|
The index iterator. An iterator is like a pointer designed for STL containers. The index iterator is designed to sequence objects stored into the DBMemory map. Definition at line 142 of file stdb.h. Referenced by Firstkey(), and Nextkey(). |
|
|
Filenames for the database file and the log file. This "db" and "log" char arrays will contain the names of the database and log files, respectively. Definition at line 102 of file stdb.h. Referenced by Commit(), Initialize(), Reorganize(), ReorganizeNecessary(), and Tstdb(). |
|
|
Maximum longitude of the log file to rebuild the database file. The database should remake itself when the log file achieves this size, expressed in bytes. Definition at line 109 of file stdb.h. Referenced by ReorganizeNecessary(), and Tstdb(). |
|
|
Maximum time between cdb and log in days. This integer variable stores the time between de database file and the log file. Definition at line 116 of file stdb.h. Referenced by ReorganizeNecessary(), and Tstdb(). |
|
|
Database file possible status. OpenCDBStatus reports the DB file status: OK, CORRUPTED OR NOT EXISTING. Referenced by Initialize(). |
|
|
Log file possible status. OpenLogStatus indicates the LOG file status, which could be correct corrupted or not existing, resp. Referenced by Initialize(). |
|
|
To truncate the log file if format error. ReadBytes stores the current transaction lenght, in order to truncate the LOG file in case of data corruption. Definition at line 163 of file stdb.h. Referenced by Initialize(). |
|
|
The RedoLog queue. This queue is designed to store actions done to the database in order to store them into the LOG file. Definition at line 250 of file stdb.h. Referenced by Commit(), Delete(), Insert(), Rollback(), and Update(). |
|
|
The RollBack stack. This stack stores inverse actions in order to undo changes done to the database. Definition at line 243 of file stdb.h. Referenced by Commit(), Delete(), Initialize(), Insert(), Rollback(), and Update(). |
1.4.0