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


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


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

Имеется класс предложений SQL, для которых процесс компиляции заканчивается на втором шаге оптимизатора, - класс "интерпретируемых" предложений. К этому классу относятся такие предложения, как CREATE TABLE, CREATE IMAGE и т.д. Выполнение такого типа предложений производится по жесткой предопределенной для каждого вида предложений схеме, и было бы расточительностью генерировать для каждого предложения рабочую программу, которая, в сущности, является стандартной подпрограммой. Такие предложения и выполняются в System R стандартными подпрограммами подсистемы поддержки времени выполнения. Прекомпилятор же для запроса этого класса формирует специальную секцию модуля доступа, которая содержит необходимую информацию для вызова соответствующей стандартной подпрограммы при выполнении запроса.

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




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