Развитие идей и приложений реляционной СУБД System R


Трансляция запросов и поддержка времени выполнения - часть 10


На Рис.5 показано разделение функций для разных типов секций между этапами прекомпиляции и выполнения.

После успешного завершения обработки всех встретившихся в тексте исходной программы предложений SQL прекомпилятор выполняет завершающие действия, которые состоят в формировании из образованных секций модуля доступа - модуля, содержащего программы и данные всех образованных при прекомпиляции секций, который, как мы опишем ниже, специальным образом регистрируется в каталоге базы данных и который загружается в память задачи на стадии выполнения программы. Кроме того, прекомпилятор модифицирует текст исходной программы для обеспечения ее связи с модулем доступа. Эта модификация состоит в том, что все вхождения в текст исходной программы выполняемых предложений SQL заменяются на вызовы стандартной программы поддержки выполнения, называемой в [26] XRDI, с передачей ей параметров, характеризующих соответствующую секцию модуля доступа и требуемую операцию в этой секции.

Мы выделили в предыдущем предложении слово "выполняемых", потому что SQL включает один невыполняемый оператор LET identifier BE <query>. Обработка такого предложения на стадии прекомпиляции приводит к образованию соответствующей секции модуля доступа, по отношению к которой в дальнейшем можно употреблять операторы SQL OPEN, FETCH, DESCRIBE и CLOSE. Семантически идентификатор, с которым связан запрос на выборку, содержащийся в предложении LET, означает идентификатор курсора; он указывается в других операциях, связанных с тем же запросом. Из текста исходной программы оператор LET убирается.

На Рис.6 перечислены типы секций и возможные типы операций, которые могут вызываться в этих секциях (с использованием вызова упомянутой выше стандартной программы XRDI).

Приведем некоторые пояснения по поводу Рис.6. В секциях модуля доступа, полученных при обработке предложений SQL, отличных от запросов на выборку, можно вызвать операции Auxcall, Describecall и Setupcall. Обращение к операции Auxcall вызывает выполнение либо программы в машинных кодах (если секция имеет тип Compilesect), либо соответствующей типу предложения стандартной программы (если секция имеет тип Intersect).




Начало  Назад  Вперед