Прямой SQL |
Операторы работы с БД, описанные в предыдущих разделах, компилируются во внутренний бинарный код, а потом на этапе выполнения обрабатываются ядром
, и через специальный драйвер БД отправляются в виде строковых запросов на конкретный SQL-сервер.Помимо вышеописанного способа
обеспечивает прямой доступ к SQL-серверам ( ). При этом текст запроса передается на SQL-сервер с минимальными изменениями:текст запроса приводится в соответствие с особенностями реализации SQL на данном сервере;
учитываются настройки Protect-а, из SQL запроса отсекаются данные, доступ к которым запрещен;
транслируемый в СУБД код полностью контролируется. Неизвестные идентификаторы заменяются на NULL (начиная с Атлантис 5.4.23).
Вся оптимизация запроса, подбор индекса, и т.д. осуществляется на SQL-сервере. Для увеличения производительности системы предусмотрены дополнения стандартного синтаксиса - хинты. Хинты могут не поддерживаться на некоторых платформах.
Операторы прямого доступа к SQL-серверам основаны на стандарте языка SQL/92. В
реализовано подмножество SQL/92, совместимое с поддерживаемыми SQL-серверами. Поскольку выбранные платформы достаточно прилично отличаются как по синтаксису, так и по функциональным возможностям, реализуемый синтаксис был максимально приближен к стандарту, а функциональное наполнение соответствует пересечению такового на поддерживаемых платформах.Начиная с Атлантис 5.4.22 в транслятор прямого SQL добавлена проверка возможности в текущей СУБД использовать в функциях вызовы процедур и код, модифицирующий данные БД. В случае невозможности выдаётся сообщение: "СУБД запрещает использовать операторы модификации в ...".
Для проверки возможности использовать в текущей СУБД некоторые потенциально непереносимые конструкции предназначена функция sqlDBMSBoolInfo.
В текущей реализации прямой SQL не работает с транзакциями, соответствующие синтаксические конструкции SQL не доступны. Для работы с транзакциями в Транзакции. ").
можно использовать имеющиеся методы BeginTransaction, EndTransaction, AbortTransaction (см. раздел "При этом на Oracle и MS SQL Server допускается "перемешивание" механизма доступа к одним и тем же данным в рамках одной транзакции в пределах одного алгоритма через прямой SQL и через классический интерфейс. Все будет работать корректно.
Однако на Pervasive SQL доступ через прямой SQL и доступ через классический интерфейс идет через разные коннекты (разные сервисы). В результате доступ через разные механизмы к одним и тем же данным будет приводить к взаимной блокировке.
Необходимо учитывать эти особенности при разработке алгоритмов со смешанным типом доступа к данным.
Перечень реализованных конструкций языка SQL и их краткое описание приведены в разделе "Операторы прямого SQL. ".
Подробности можно найти в соответствующей литературе. Например, в книге "Справочное руководство по SQL" Мартин Грабер, "Лори" 1997.
Запросы передаются на SQL-сервер через функциональный интерфейс ("Функциональный интерфейс к прямому SQL. ") или посредством оператора SQL языка ("Встроенный прямой SQL. ").
Начиная с Атлантис 5.4.23 транслируемый в СУБД код полностью контролируется. Неизвестные идентификаторы заменяются на NULL.
Начиная с Атлантис 5.4.22 добавлена проверка возможности в текущей СУБД использовать в функциях вызовы процедур и код, модифицирующий данные БД.
Начиная с Атлантис 5.2.07.
Функциональный интерфейс к прямому SQL