35.10. ÐомпилÑÑÐ¸Ñ Ð¿ÑогÑамм Ñо вÑÑÑаиваемÑм SQL
ТепеÑÑ, когда Ð²Ñ Ð¿Ð¾Ð»ÑÑили пÑедÑÑавление, как пиÑаÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð½Ð° C Ñо вÑÑÑаиваемÑм SQL, Ð²Ñ Ð½Ð°Ð²ÐµÑное Ñ Ð¾ÑиÑе ÑзнаÑÑ, как Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸ÑоваÑÑ. ÐÑежде Ñем компилиÑоваÑÑ ÐºÐ¾Ð´ C, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑопÑÑÑиÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ñй Ñайл ÑеÑез пÑепÑоÑеÑÑÐ¾Ñ Ð²ÑÑÑаиваемого SQL в C, коÑоÑÑй пÑеобÑазÑÐµÑ Ð·Ð°Ð¿Ð¸ÑаннÑе вами опеÑаÑоÑÑ SQL в вÑÐ·Ð¾Ð²Ñ ÑпеÑиалÑнÑÑ ÑÑнкÑий. ÐоÑле компилÑÑии полÑÑеннÑй обÑекÑнÑй код нÑжно ÑкомпоноваÑÑ Ñо ÑпеÑиалÑной библиоÑекой, ÑодеÑжаÑей Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе ÑÑнкÑии. ÐÑи ÑÑнкÑии полÑÑаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· аÑгÑменÑов, вÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL ÑеÑез инÑеÑÑÐµÐ¹Ñ libpq, и помеÑаÑÑ ÑезÑлÑÑÐ°Ñ Ð² аÑгÑменÑÑ, заданнÑе Ð´Ð»Ñ Ð²Ñвода.
ÐÑогÑамма пÑепÑоÑеÑÑоÑа назÑваеÑÑÑ ecpg и вÑ
Ð¾Ð´Ð¸Ñ Ð² ÑоÑÑав обÑÑной инÑÑаллÑÑии Postgres Pro. ÐÑогÑаммам Ñо вÑÑÑаиваемÑм SQL, как пÑавило, даÑÑÑÑ Ð¸Ð¼ÐµÐ½Ð° Ñ ÑаÑÑиÑением .pgc. ÐÑли Ð²Ñ Ñоздали код пÑогÑÐ°Ð¼Ð¼Ñ Ð² Ñайле prog1.pgc, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑабоÑаÑÑ ÐµÐ³Ð¾, пÑоÑÑо вÑполнив:
ecpg prog1.pgc
ÐÑи ÑÑом бÑÐ´ÐµÑ Ñоздан Ñайл prog1.c. ÐÑли имена вÑ
однÑÑ
Ñайлов не ÑледÑÑÑ ÑÑÐ¾Ð¼Ñ ÑоглаÑениÑ, Ð¸Ð¼Ñ Ð²ÑÑ
одного Ñайла можно задаÑÑ Ñвно в аÑгÑменÑе -o.
ÐбÑабоÑаннÑй пÑепÑоÑеÑÑоÑом Ñайл можно ÑкомпилиÑоваÑÑ Ð¾Ð±ÑÑнÑм обÑазом, напÑимеÑ, Ñак:
cc -c prog1.c
Ð ÑгенеÑиÑованнÑе иÑÑ
однÑе ÑÐ°Ð¹Ð»Ñ C вклÑÑаÑÑÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾ÑнÑе ÑÐ°Ð¹Ð»Ñ Ð¸Ð· инÑÑаллÑÑии Postgres Pro, поÑÑÐ¾Ð¼Ñ ÐµÑли Ð²Ñ ÑÑÑановили Postgres Pro Ñак, ÑÑо ÑооÑвеÑÑÑвÑÑÑий каÑалог не пÑоÑмаÑÑиваеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ, вам пÑидÑÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ñказание вида -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, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñдобно вклÑÑиÑÑ Ð² ваÑи ÑбоÑоÑнÑе ÑÐ°Ð¹Ð»Ñ ÑледÑÑÑее неÑвное пÑавило:
ECPG = ecpg
%.c: %.pgc
$(ECPG) $<ÐолнÑй ÑинÑакÑÐ¸Ñ Ð²Ñзова ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ecpg пÑиведÑн в опиÑании ecpg.
ÐиблиоÑека ecpg по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ÑокобезопаÑна. Ðднако Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑии клиенÑÑкого кода могÑÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¿Ð°ÑамеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки Ð´Ð»Ñ Ð½Ð°ÑÑÑойки многопоÑоÑноÑÑи.