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


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


Язык ориентирован на упоминавшийся выше подход к генерации кодов на основе сборки рабочей программы из сравнительно небольшого числа заранее подготовленных фрагментов.

Формированием внутреннего представления запроса на языке ASL завершается работа оптимизатора, и прекомпилятор приступает к выполнению третьей фазы прекомпиляции - генерации рабочей программы выполнения запроса в машинных кодах. Соотвествующая процедура формирует рабочую программу выполнения запроса в кодах IBM/370, используя способ ее сборки из фрагментов (в [16] отмечается, что используется библиотека, включающая около 100 фрагментов). В результате образуется секция модуля доступа.

Мы не упомянули о еще одном специфическом случае - обработке предложения динамического вызова компилятора SQL PREPARE. Прекомпилятор распознает предложения PREPARE (и EXECUTE), и для каждого предложения PREPARE производит специальную "пустую" секцию модуля доступа, содержащую лишь информацию о том, что во время выполнения предложения нужно будет вызвать компилятор SQL с передачей ему динамически полученной текстовой строки.

Итак, при работе прекомпилятора могут образовываться секции модуля доступа четырех типов, называемые в [26] PARSESECT, INTERSECT, COMPILESECT и INDEFSECT. Секция типа PARSESECT соответствует запросу, который успешно прошел грамматический разбор, но в котором употребляются имена отношений, не существующих к моменту прекомпиляции. Такая секция содержит дерево грамматического разбора и начальный текст запроса на SQL. Секция типа INTERSECT соответствует "интерпретируемому" запросу и содержит также дерево запроса (но с именами, замененными на идентификаторы) и начальный текст запроса. Секция типа COMPILESECT содержит машинные коды полученной при прекомпиляции рабочей программы выполнения запроса и исходный текст запроса. Наконец, секция типа INDEFSECT соответствует предложению SQL PREPARE. О содержимом секций такого типа мы уже говорили.

Для каждого обрабатываемого предложения SQL тем самым естественно выделяются фазы грамматического разбора, оптимизации, генерации кодов и собственно выполнения.


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