Ожидание события

Функция

Определение оператора ожидания события.

Спецификация
   
< ожидание события >::=
WAIT EVENT < выражение-событие >
Синтаксические правила
  1. < Выражение-событие > должно состоять из имен событий, логических условий AND, OR, NOT и группировочных скобок.

    create event EVN1 as delete, insert on tab1;
    create event EVN2 as update on tab2
    create event EVN3 as select * from tab3;
    wait event (EVN1 and EVN3) or (EVN2 and EVN3);
  2. Если модификатор NOT не указан, то происходит ожидание до тех пор, пока заданная в < выражении-событии > комбинация событий даст значение TRUE.

  3. Если модификатор NOT указан, то происходит ожидание до тех пор, пока заданная в < выражении-событии > комбинация событий даст значение FALSE.

  4. Если в < выражении-событии > задано событие, которое к моменту выполнения WAIT EVENT уничтожено другим каналом, фиксируется исключительная ситуация.

Общие правила
  1. Если результат вычисления < выражения-события > TRUE, управление передается в программу, ожидающую комбинацию указанных событий. Сами события при этом из очереди не удаляются.

  2. Информация о том, какое именно событие наступило в < выражении-событии >, возвращается в битовой маске (поле ROWID блока управления запросом CBL) (см. документ «СУБД ЛИНТЕР. Интерфейс нижнего уровня», пункт «Выполнение SQL-запроса») или в переменной ROWIDPCI_ (см. документ «СУБД ЛИНТЕР. Встроенный SQL», подраздел «Псевдопеременные встроенного языка»). Каждый бит маски (начиная с нулевого) соответствует порядковому номеру события в < выражении-событии >. Значение бита 1 – событие наступило.

  3. Битовая маска событий может содержать информацию не более чем о 32 событиях из < выражения-события >, для остальных (с порядковыми номерами больше 32) информация о состоянии события через битовую маску недоступна.

  4. Максимальное количество допустимых событий для команды WAIT EVENT определяется количеством доступных каналов ядра СУБД ЛИНТЕР, т.к. на каждое событие в ядре СУБД открывается отдельный канал.

  5. Если количество событий больше 32 (максимальный размер битовой маски), то в случае наступления запрошенной комбинации событий ядро СУБД все равно вернет управление пользовательскому приложению, но чтобы узнать, какое именно событие произошло, необходимо опрашивать интересуемые события отдельно. Также отдельный опрос событий надо выполнять, если среди них есть события типа AUTORESET.