Управление транзакциями
В любом транзакционном режиме, отличном от 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:
-
сохранение выполняется непосредственно перед каждым вызовом метода linStatement::ExecuteStatement, даже если в реальности BindParameter вызывается однократно. Это связано с тем, что содержание одних и тех же буферов метода BindParameter перед каждым из вызовов ExecuteStatement может отличаться, в зависимости от того, что в них будет записано клиентским приложением;
-
при восстановлении транзакции буферы для BindParameter создаются заново, причём их освобождение происходит только в двух случаях: либо после вызова метода ExecuteStatement, либо при уничтожении объекта класса linStatement, к которому они привязаны.