Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
API
Разделы на этой странице:
API
Функция API, которая выполняет эквивалентную работу, называется isc_start_transaction()[102]
Запуск каждой транзакции имеет три части:
1. Создание (при необходимости) и инициализация дескриптора транзакции.
2. Создание (при необходимости) и заполнение буфера параметров транзакции (Transaction Parameter Buffer, TPB) для хранения данных конфигурации. Это не обязательно.
3. вызов isc_start_transaction().
При отсутствии необязательного TPB клиент запускает транзакцию точно так же, как и транзакцию по умолчанию, которая стартует при выдаче оператора SET TRANSACTION.
Дескриптор транзакции
Каждый раз, когда вы собираетесь вызвать эту функцию, вы должны иметь переменную, длинный указатель - называемую дескриптором транзакции - уже объявленную в вашем приложении и инициализированную нулем[103]. Приложение должно иметь один дескриптор транзакции для каждой конкурирующей транзакции, вы также можете повторно использовать дескрипторы, заново проинициализировав их.
Дескриптор транзакции должен быть установлен в ноль при его инициализации до запуска транзакции. Транзакция завершится с ошибкой, если ей будет передан ненулевой дескриптор.
Буфер параметров транзакции
TPB является байтовым массивом (или вектором) констант, каждая из которых представляет параметр транзакции и начинается с префикса isc_tpb_. Первым параметром всегда является константа isc_tpb_version3, которая определяет версию структуры TPB[104]. Все последующие элементы массива являются константами, которые представляют эквивалентные SQL атрибуты транзакции.
В табл. 27.1 показаны параметры транзакции SQL и эквивалентные им константы TPB.
Типичное объявление TPB в языке С выглядит следующим образом:
static char isc_tpb[] =
{
isc_tpb_version3,
isc_tpb_write,
isc_tpb_wait,
isc_read_committed,
isc_tpb_no_rec_version
};
Этот TPB по своему действию идентичен следующему:
SET TRANSACTION READ WRITE WAIT READ COMMITTED NO RECORD_VERSION;
Вы можете использовать один TPB для всех транзакций, которым требуются одинаковые характеристики. Хорошим решением также является использование отдельного TPB для каждой транзакции. Классы транзакций обычно создают экземпляр TPB при необходимости, каждый экземпляр хранит установки интерфейса времени проектирования или времени выполнения в виде свойств, допускающих чтение и запись (или, иначе, элементы данных).
В большинстве случаев вы можете распознать константу TPB по имени свойства (табл. 27.1). В стандартных драйверах DBC имена классов и их элементов больше всего диктуются требованиями стандарта и описывают атрибуты с большим соответствием задаваемой функциональности.
Таблица 27.1. Атрибуты транзакции и эквивалентные константы TPB
Тип атрибута |
Атрибут SQL |
Константа TPB |
Режим доступа |
READ ONLY |
isc_tpb_read |
READ WRITE |
isc_tpb_write |
|
Уровень изоляции |
READ COMMITTED |
isc_tpb_read committed |
SNAPSHOT |
isc_tpb_concurrency |
|
SNAPSHOT TABLE STABILITY |
isc_tpb_consistency |
|
Режим разрешения блокировок |
WAIT |
isc_tpb_wait |
NO WAIT |
isc_tpb_nowait |
|
Версия записи |
RECORD_VERSION |
isc_rec version |
NO RECORD_VERSION |
isc_no_rec_version |
|
Резервирование таблиц |
SHARED |
isc_tpb_shared |
PROTECTED |
isc_tpb_protected |
|
READ |
isc_tpb_lock_read |
|
WRITE |
isc_tpb_lock_write |
|
Нет эквивалента SQL |
Отключает протокол автоотмены |
isc_tpb_no auto undo |
Протокол автоотмены
По умолчанию сервер поддерживает в памяти протокол внутренних точек сохранения (internal savepoint log) для добавляемых и изменяемых строк. При нормальном течении процесса записи протокола удаляются при каждом подтверждении или откате транзакции. Однако при некоторых условиях система отказывается от протокола и напрямую обращается к глобальному образу состояния транзакции (TSB). Такой переход обычно происходит, когда отменится очень большое количество добавлений или транзакция, использующая множество пользовательских точек сохранения (см. разд. "Вложенные транзакции"), исчерпает возможности этого протокола.
Приложение может отключить использование в транзакции этого протокола автоотмены, передав константу isc_tpb_no_auto_undo в TPB.
- 12.5.4. Ruby и Windows API
- Новые функции API для работы с Blob и массивами
- Windows API Tutorials
- Другие способы создания GUI — платформно-независимые оконные API
- Reshaping Data
- 10.5. API сигналов System V Release 3: sigset() и др.
- API, POSIX и библиотека С
- Книги по API Unix
- За рамками Windows API
- Изменения, связанные с использованием API
- Глава 5.Советы и секреты программирования Что такое API?
- Новые игрушки! API JavaScript