Создание буфера с тем же именем, что и таблица базы данных - PullRequest
5 голосов
/ 30 марта 2011

Я наткнулся на этот код в нескольких местах:

DEFINE BUFFER Customer FOR Customer. 

У меня есть два вопроса:

  1. Какова цель этого?Почему выгодно создавать буфер с тем же именем, что и таблица?

  2. При написании кода для доступа к этой таблице / буферу, как Progress узнает, получить ли доступ к БД напрямую или черезбуфер?

1 Ответ

8 голосов
/ 30 марта 2011

1: Обычно это делается для управления областью действия буферов.

Если у вас есть, например, процедура с несколькими внутренними процедурами, которые все обращаются к одной и той же таблице, то буфер по умолчанию для этой таблицы в конечном итоге будет ограничен блоком процедур верхнего уровня.Например, -

procedure p1:
    find first customer no-lock.
end.

procedure p2:
    find last customer no-lock.
end.

в конечном итоге приведет к ограничению буфера клиента для содержащей процедуры.Если вы пытаетесь держать свои внутренние процедуры свободно связанными и самодостаточными, то вам может не понадобиться такое поведение.Таким образом, вы должны определить буфер внутри каждой из внутренних процедур.

Obv, есть и другие причины для определения буферов, но когда вы видите код, который определяет буфер с тем же именем, что и таблица, обычно речь идет о области видимости..

2: всегда получает доступ к БД через буфер.Каждая таблица имеет буфер по умолчанию с тем же именем, что и таблица, поэтому

find first <buffername>.

будет искать буфер с именем buffername, который может быть явно заданным буфером или неявным буфером по умолчанию.Приоритет перейдет в явно определенный буфер, если он существует.

...