ЭКПГ
Тема этой статьи Википедии может не соответствовать общему правилу по известности . ( декабрь 2016 г. ) |
ECPG — это стандартный PostgreSQL клиентский программный интерфейс, встроенный в базу данных , для встраивания SQL в программы, написанные на C. языке программирования [1] Он предоставляет возможность доступа к базе данных PostgreSQL непосредственно из кода C в приложении с помощью команд SQL.
Использование
[ редактировать ]Использование можно разделить на 2 этапа. Сначала необходимо создать файл .pgc, состоящий из кода C со встроенным кодом SQL . В таком файле код SQL будет вставлен непосредственно в код C приложения. Команды SQL необходимо вставить в код C следующим образом:
// ... C code ...
EXEC SQL <sql-statements>;
// ... C code ...
Пример подключения к базе данных:
EXEC SQL CONNECT TO databasename[@hostname][:port] [AS connectionname] [USER username];
Часть встроенного SQL будет обработана препроцессором ECPG, где код SQL будет заменен вызовами библиотеки ecpg (libecpg.a или libecpg.so). Файл .pcg также будет предварительно обработан с помощью ecpg , который преобразует его в файл .c в соответствии со стандартами ANSI. Таким образом, на втором этапе созданный файл .c можно напрямую скомпилировать с помощью стандартного компилятора C. [2]
Следующая команда создаст из my_c_file_with_embedded_sql_commands.pcg файла файл my_c_file_with_embedded_sql_commands.c , который можно будет обрабатывать в дальнейшем как чистый код C.
$ ecpg my_c_file_with_embedded_sql_commands.pcg
Исходный код ecpg также доступен в git-репозитории исходного кода PostgreSQL .
Примечание. При компиляции предварительно обработанного кода .c не забудьте связать библиотеку ecpg (libepcg), чтобы сгенерированные вызовы могли найти связанные с ними методы.
Использование переменных хоста
[ редактировать ]Важной частью при встраивании команд базы данных SQL в код приложения является обмен данными между приложением и базой данных. Для этой цели можно использовать переменные хоста. Переменные хоста можно использовать непосредственно из встроенного кода SQL, поэтому нет необходимости генерировать операторы SQL со значениями из кода C вручную в виде строки во время выполнения.
есть переменная с именем имя_переменной Предположим, что в вашем коде C :
EXEC SQL INSERT INTO tablename VALUES (:variablename);
Его можно использовать в любом операторе, оператор INSERT был выбран просто в качестве простого примера для иллюстрации.
В приведенном выше примере показано, как передать переменную C в SQL, но данные можно передавать и в обратном направлении: обратно в приложение. В следующем примере показано, как передать значение из SQL обратно в переменную C приложения.
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR variablename;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT columnname INTO :variablename FROM tablename;
Для простоты предположим, что в таблице table name имеется только одна строка . Этот оператор вставит значение столбца имя_столбца в переменную переменную . Таким образом можно использовать любую команду, поддерживающую предложение INTO , например команду FETCH .
Обработка ошибок
[ редактировать ]Для лучшей обработки ошибок ECPG также предоставляет структуру, называемую областью связи SQL (sqlca) . Эта структура будет заполняться после каждого выполнения оператора sql (каждый поток имеет свой собственный sqlca). [3] ) и содержит информацию о предупреждениях и ошибках, например код возврата. Данные в sqlca будут заполнены в соответствии с ответом базы данных и могут использоваться в целях отладки.
Другие интерфейсы
[ редактировать ]Поскольку ECPG поддерживает встраивание SQL в язык программирования C , он также косвенно поддерживает встраивание в язык программирования C++ . Части SQL преобразуются в вызовы библиотеки C. Они генерируются внутри предложения extern «C» , которое обеспечивает связь между модулями, написанными на разных языках программирования. [4] Использование ECPG с кодом C++ имеет некоторые ограничения, поскольку препроцессор ECPG не понимает специфический синтаксис и зарезервированные слова языка программирования C++. Использование такого синтаксиса и слов может привести к неожиданному поведению приложения. Рекомендуется разделить встроенные команды SQL в связанный модуль C, который будет связан и вызываться из приложения C++. [5]
Помимо внутреннего ECPG, доступны также различные внешние интерфейсы для C++, Java , Lua , .NET , Node.js , Python , PHP и других для базы данных PostgreSQL , которые можно добавить для расширения возможностей встроенного SQL. Существуют также другие базы данных, поддерживающие встроенный SQL, также на других языках, кроме C, таких как Java, .NET, Fortran , COBOL , PL/I .
Ссылки
[ редактировать ]- ^ «Домашняя страница PostgreSQL» . ПостгреСБЛ . Группа глобального развития PostgreSQL . Проверено 6 июня 2015 г.
- ^ Ахмед, Ибрар, Файаз, Асиф и Шахзад, Амджад (27 февраля 2015 г.). Руководство разработчика PostgreSQL . Packt Publishing Ltd, 2015. с. 197. ИСБН 978-1783989034 . Проверено 6 июня 2015 г.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ «SQLCA» . ПостгреСБЛ . Группа глобального развития PostgreSQL . Проверено 23 января 2018 г.
- ^ «Связь ЦПП» . Справочник по ЦПП . Справочник по ЦПП . Проверено 6 июня 2015 г.
- ^ «Приложения C++» . ПостгреСБЛ . Группа глобального развития PostgreSQL . Проверено 23 января 2018 г.