×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

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

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

4.3.17. Внутреннее устройство

В данном разделе объясняется, как препроцессор ECPG Работает на внутреннем уровне. Эта информация может быть полезна пользователям для понимания принципов работы препроцессор ECPG.

Первые четыре строки, записываемые препроцессором ecpg В выходной поток являются фиксированными строками. Две строки являются комментариями, а еще две — директивами include, необходимыми для взаимодействия с библиотекой. Затем препроцессор ECPG считывает файл и формирует выходные данные. Обычно он просто дублирует все содержимое в выходной файл.

Когда он встречает EXEC SQL оператор, он изменяет его структуру. Команда начинается с EXEC SQL и заканчивается ;. Все, что находится между ними, рассматривается как SQL оператор и анализируется для выполнения подстановки переменных.

Подстановка переменной происходит, когда имя символа начинается с двоеточия (:). Поиск переменной с этим именем выполняется среди переменных, которые были ранее объявлены в EXEC SQL DECLARE section.

Самой важной функцией в библиотеке является функция ECPGdo, которая отвечает за выполнение большинства команд. Она принимает переменное число аргументов. Их количество может легко достигать 50, и мы надеемся, что это не вызовет проблем ни на одной из платформ.

Список аргументов:

Номер строки #

Это номер исходной строки; используется только в сообщениях об ошибках.

Строка #

Это SQL команда, которую необходимо выполнить. Она модифицируется входными переменными, то есть переменными, которые не были известны во время компиляции, но должны быть включены в команду. В тех местах, где должны находиться переменные, строка содержит ?.

Входные переменные #

Каждая входная переменная приводит к созданию десяти аргументов. (См. ниже.)

ECPGt_EOIT #

Значение типа enum указывающее на то, что больше нет входных переменных.

Выходные переменные #

Каждая выходная переменная вызывает создание десяти аргументов. (См. ниже.) Данные переменные заполняются функцией.

ECPGt_EORT #

Значение типа enum сигнализирующий об отсутствии других переменных.

Для каждой переменной, входящей в состав SQL команды, функция получает десять аргументов:

  1. Тип, представленный в виде специального символа.

  2. Указатель на значение или указатель на указатель.

  3. Размер переменной, если она представляет собой тип данных char или varchar.

  4. Количество элементов в массиве (для операций выборки массивов).

  5. Смещение до следующего элемента в массиве (для операций выборки массивов).

  6. Тип переменной-индикатора, представленный в виде специального символа.

  7. Указатель на переменную-индикатор.

  8. 0

  9. Количество элементов в массиве индикаторов (для операций выборки массивов).

  10. Смещение до следующего элемента в массиве индикаторов (для операций выборки массивов).

Обратите внимание, что не все команды SQL обрабатываются таким образом. Например, оператор OPEN для курсора, такой как:

EXEC SQL OPEN курсор;

не копируется в выходной файл. Вместо этого параметры курсора DECLARE команда используется в позиции OPEN команды потому что она действительно открывает курсор.

Ниже приведен полный пример, описывающий результат работы препроцессора ECPG для файла foo.pgc (детали могут меняться в зависимости от конкретной версии препроцессора):

EXEC SQL BEGIN DECLARE SECTION;
int index;
int result;
EXEC SQL END DECLARE SECTION;
...
EXEC SQL SELECT res INTO :result FROM mytable WHERE index = :index;

преобразуется в:

/* Processed by ecpg (2.6.0) */
/* These two include files are added by the preprocessor */
#include ;
#include ;

/* exec sql begin declare section */

#line 1 "foo.pgc"

 int index;
 int result;
/* exec sql end declare section */
...
ECPGdo(__LINE__, NULL, "SELECT res FROM mytable WHERE index = ?     ",
        ECPGt_int,&(index),1L,1L,sizeof(int),
        ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT,
        ECPGt_int,&(result),1L,1L,sizeof(int),
        ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 147 "foo.pgc"

(Отступы здесь добавлены для удобочитаемости и не являются результатом работы препроцессора.)

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению