34.10. Обработка встроенных программ SQL#

34.10. Обработка встроенных программ SQL

34.10. Обработка встроенных программ SQL

Теперь, когда у вас есть представление о том, как формировать встроенные программы на языке C с использованием SQL, вам, вероятно, интересно узнать, как их компилировать. Перед компиляцией вы должны пропустить файл через встроенный препроцессор SQL C, который преобразует использованные вами SQL-запросы в специальные функциональные вызовы. После компиляции необходимо связать программу с специальной библиотекой, которая содержит необходимые функции. Эти функции извлекают информацию из аргументов, выполняют SQL-команду с использованием интерфейса libpq и помещают результат в указанные аргументы для вывода.

Препроцессорная программа называется ecpg и включена в стандартную установку Tantor SE. Встроенные SQL-программы обычно имеют расширение .pgc. Если у вас есть файл программы с именем prog1.pgc, вы можете его предварительно обработать, просто вызвав:

ecpg prog1.pgc

Это создаст файл с именем prog1.c. Если ваши входные файлы не соответствуют предложенному шаблону именования, вы можете явно указать выходной файл, используя опцию -o.

Предварительно обработанный файл может быть скомпилирован нормально, например:

cc -c prog1.c

Сгенерированные исходные файлы на языке C включают заголовочные файлы из установки Tantor SE, поэтому, если вы установили Tantor SE в место, которое не ищется по умолчанию, необходимо добавить опцию, например, -I/usr/local/pgsql/include, в командную строку компиляции.

Для связи с встроенной программой SQL необходимо включить библиотеку libecpg, как показано ниже:

cc -o myprog prog1.o prog2.o ... -lecpg

Снова, вам может потребоваться добавить опцию, например -L/usr/local/pgsql/lib, к этой командной строке.

Вы можете использовать pg_config или pkg-config с именем пакета libecpg для получения путей для вашей установки.

Если вы управляете процессом сборки крупного проекта с использованием make, может быть удобно добавить следующее неявное правило в ваши make-файлы:

ECPG = ecpg

%.c: %.pgc
        $(ECPG) $<

Полный синтаксис команды ecpg подробно описан в ecpg.

Библиотека ecpg по умолчанию является потокобезопасной. Однако, вам может потребоваться использовать некоторые опции командной строки для компиляции вашего клиентского кода.