WaitNextCommit

WaitNextCommit allow for a listening transaction to read a transaction directly from the cyclical log file.
unsigned __int64 WaitNextCommit (
	unsigned int logNumber,
	unsigned int transactionID,
	__int64 length,
	void* buffer = NULL,
	unsigned int milliseconds = 15000 /*or INFINITE*/
);

Parameters

logNumbera value between 0-65,535 that tells the system which cyclical log file this tranaction came from. If this value is -1, then this method returns the last available transaction in the log file
transactionIDthe Transaction ID for the retrieved transaction. This has internal use and should not be changed.
lengththe length on the transaction buffer.
buffera buffer for the next transaction to be read into. If this value is NULL, then this function only sets the length, transactionID and logNumber parameters
millisecondsThe maximum length of wait time before the method will return

Return Values

If the method succeeds, the return value is zero else see error codes for more details.

Remarks

  • This methods is read only and does not require the database to have begun a tranaction.
  • This methods only works if cyclical logging is enabled. See GetDatabaseParameter for more information.
Example Use
CODBPP database, backup;
unsigned int logFile, transactionID;
__int64 length = 0, size, position;
BYTE *buffer = NULL;
char16_t *message;
if((error = database.OpenDatabase(u"YourDatabase")) == NO_ERROR){//production database is read only
   if((error = backup.OpenDatabase(u"YourBackupDatabase")) == NO_ERROR){
      if((error = backup.BeginTransaction(CODBPP::EXCLUSIVE)) == NO_ERROR{//lock backup database from other transactions
         if ((error = backup.WaitNextCommit(&logFile, &position, &transactionID, &size)) == NO_ERROR) {//get last transaction from backup log file
            while (error == NO_ERROR) {
               if ((error = database.WaitNextCommit(&logFile, &position, &transactionID, &size)) == NO_ERROR) {//gets next after the the inputted commit
                  if (length < size || (size << 4) < length) {
                     if(buffer != NULL) delete[] buffer;
                     buffer = new BYTE[(length = (size + 0x3f)&~0x3f)];
                  }
                  size = length;//resets length to maximum size
                  if ((error = database.WaitNextCommit(&logFile, &position, &transactionID, &size, buffer)) == NO_ERROR)//reads the next commit
                     error = backup.AppendTransaction(logFile, transactionID, size, buffer);//append the previous transaction to the backup database
               }
               else if (ERROR_MASK(error) == WAIT_TIMEOUT) error = NO_ERROR;
            }
         }
      }
      backup.EndTransaction();
   }
   backup.CloseDatabase();
}
if(error && database.GetErrorMessage(&message) == NO_ERROR)
  MessageBox(message);
database.CloseDatabase();

Since

Version 4.5

Also See

AppendTransaction
Comments (0)Listen All
Characters left: 2500
 
Ekky Software Homepage Ekky Software Homepage ObjectDatabase++ TScript Ekky Software Homepage Ekky Software Homepage ObjectDatabase++ TScript