Полудинамические запросы и безопасность базы данных - PullRequest
0 голосов
/ 05 марта 2019

Я знаю, что простой код Progress 4GL со статическими буферами, find, для каждого и т. Д. Защищен базой данных во время компиляции (или дополнительно во время выполнения с опцией «Use Pertime Permissions Checking»).

Динамические запросы подлежат защите базы данных только во время выполнения.

Кто-нибудь знает, как будет вести себя код, подобный приведенному в следующем примере?

define query q for OrderLine.

DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.

hQuery = QUERY q:HANDLE.

hQuery:QUERY-PREPARE("FOR EACH OrderLine NO-LOCK WHERE OrderLine.Itemnum = 100":U).
hQuery:QUERY-OPEN().

get first q.
do while available OrderLine:

  display OrderLine.Qty.

  get next q.

end.

close query q.

1 Ответ

0 голосов
/ 05 марта 2019

QUERY-PREPARE () и QUERY-OPEN () выполняются во время выполнения, компилятор не может оценить аргументы во время компиляции, поэтому во время выполнения применяется защита.

(Дажехотя вы использовали статическую строку для аргументов, компилятор недостаточно умен, чтобы что-то с ней делать.)

...