Jump to content

ЭКПГ

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 .

  1. ^ «Домашняя страница PostgreSQL» . ПостгреСБЛ . Группа глобального развития PostgreSQL . Проверено 6 июня 2015 г.
  2. ^ Ахмед, Ибрар, Файаз, Асиф и Шахзад, Амджад (27 февраля 2015 г.). Руководство разработчика PostgreSQL . Packt Publishing Ltd, 2015. с. 197. ИСБН  978-1783989034 . Проверено 6 июня 2015 г. {{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  3. ^ «SQLCA» . ПостгреСБЛ . Группа глобального развития PostgreSQL . Проверено 23 января 2018 г.
  4. ^ «Связь ЦПП» . Справочник по ЦПП . Справочник по ЦПП . Проверено 6 июня 2015 г.
  5. ^ «Приложения C++» . ПостгреСБЛ . Группа глобального развития PostgreSQL . Проверено 23 января 2018 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d8b6fcdd16537b5f8a3f228700689ff3__1696782780
URL1:https://arc.ask3.ru/arc/aa/d8/f3/d8b6fcdd16537b5f8a3f228700689ff3.html
Заголовок, (Title) документа по адресу, URL1:
ECPG - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)