Управление транзакциями

В любом транзакционном режиме, отличном от mAutocommit, осуществляется автоматическое сохранение вызовов ряда методов, а затем, в случае разрыва и восстановления соединения, сохранённые методы вызываются заново. Буфер для сохранения вызова методов (и их параметров) привязан к соединению (в случае, если установлен режим сохранения вызова методов SetUseConnQBuf(L_TFALSE), то к курсору) и является двухуровневым. Первый уровень имеет размер 64 Кбайта. В случае если размер буфера окажется недостаточным, данные вытесняются во временный файл на диске.

В буфере сохраняются вызовы и их параметры для следующих методов:

  • linConnection::SetConnectOption;

  • linCursor::ExecuteDirect;

  • linCursor::LockRow;

  • linCursor::UnlockRow;

  • linCursor::ClearBlob;

  • linCursor::PurgeBlob;

  • linCursor::AppendBlob;

  • linCursor::AddBlob;

  • linCursor::SetBlobType;

  • linCursor::SetCursorOption;

  • linCursor::Fetch;

  • linCursor::CreateStatement;

  • linCursor::CommitCursor;

  • linCursor::RollBackCursor;

  • linStatement::ExecuteStatement;

  • linStatement::SetStatementOption;

  • linStatement::BindParameter.

Особенности сохранения и восстановления метода linStatement::BindParameter:

  1. сохранение выполняется непосредственно перед каждым вызовом метода linStatement::ExecuteStatement, даже если в реальности BindParameter вызывается однократно. Это связано с тем, что содержание одних и тех же буферов метода BindParameter перед каждым из вызовов ExecuteStatement может отличаться, в зависимости от того, что в них будет записано клиентским приложением;

  2. при восстановлении транзакции буферы для BindParameter создаются заново, причём их освобождение происходит только в двух случаях: либо после вызова метода ExecuteStatement, либо при уничтожении объекта класса linStatement, к которому они привязаны.