33.7. ÐÑмена запÑоÑов в пÑоÑеÑÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ #
ÐлиенÑÑкое пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑоÑиÑÑ Ð¾ÑÐ¼ÐµÐ½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, коÑоÑÐ°Ñ ÐµÑÑ Ð¾Ð±ÑабаÑÑваеÑÑÑ ÑеÑвеÑом, иÑполÑзÑÑ ÑÑнкÑии, опиÑаннÑе в ÑÑом Ñазделе.
PQgetCancel#СоздаÑÑ ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑодеÑжаÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð´Ð»Ñ Ð¾ÑÐ¼ÐµÐ½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, запÑÑенной ÑеÑез конкÑеÑное подклÑÑение к базе даннÑÑ .
PGcancel *PQgetCancel(PGconn *conn);
ФÑнкÑиÑ
PQgetCancelÑоздаÑÑ Ð¾Ð±ÑекÑPGcancel, полÑÑив обÑекÑPGconn, опиÑÑваÑÑий подклÑÑение. Ðна возвÑаÑиÑNULL, еÑли паÑамеÑÑconnÑавенNULLили пÑедÑÑавлÑÐµÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑное подклÑÑение. ÐбÑекÑPGcancelÑвлÑеÑÑÑ Ð½ÐµÐ¿ÑозÑаÑной ÑÑÑÑкÑÑÑой, коÑоÑÐ°Ñ Ð½Ðµ пÑедназнаÑена Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ñиложение обÑаÑалоÑÑ Ðº ней напÑÑмÑÑ; ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко пеÑедаваÑÑ ÑÑнкÑииPQcancelилиPQfreeCancel.PQfreeCancel#ÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¿Ð°Ð¼ÑÑÑ, занимаемÑÑ ÑÑÑÑкÑÑÑой даннÑÑ , Ñозданной ÑÑнкÑией
PQgetCancel.void PQfreeCancel(PGcancel *cancel);
PQfreeCancelоÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¿Ð°Ð¼ÑÑÑ, занимаемÑÑ Ð¾Ð±ÑекÑом, пÑедваÑиÑелÑно ÑозданнÑм ÑÑнкÑиейPQgetCancel.PQcancel#ТÑебÑеÑ, ÑÑÐ¾Ð±Ñ ÑеÑÐ²ÐµÑ Ð¿ÑекÑаÑил обÑабоÑÐºÑ ÑекÑÑей командÑ.
int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize);
ÐозвÑаÑаемое знаÑение Ñавно 1, еÑли запÑÐ¾Ñ Ð½Ð° оÑÐ¼ÐµÐ½Ñ Ð±Ñл ÑÑпеÑно оÑпÑавлен, и 0 в пÑоÑивном ÑлÑÑае. Ð ÑлÑÑае неÑдаÑной оÑпÑавки
errbufзаполнÑеÑÑÑ Ð¿Ð¾ÑÑниÑелÑнÑм ÑообÑением об оÑибке.errbufдолжен бÑÑÑ Ð¼Ð°ÑÑивом Ñимволов, имеÑÑим ÑазмеÑerrbufsize(ÑекомендÑемÑй ÑÐ°Ð·Ð¼ÐµÑ ÑоÑÑавлÑÐµÑ 256 байÑ).УÑпеÑÐ½Ð°Ñ Ð¾ÑпÑавка еÑÑ Ð½Ðµ ÑвлÑеÑÑÑ Ð³Ð°ÑанÑией Ñого, ÑÑо запÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо ÑÑÑекÑ. ÐÑли оÑмена ÑÑабоÑала, ÑекÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° завеÑÑиÑÑÑ Ð´Ð¾ÑÑоÑно и возвÑаÑÐ¸Ñ Ð² каÑеÑÑве ÑезÑлÑÑаÑа оÑибкÑ. ÐÑли же оÑмена не полÑÑиÑÑÑ (напÑимеÑ, поÑомÑ, ÑÑо ÑеÑÐ²ÐµÑ Ñже завеÑÑил обÑабоÑÐºÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ), Ñогда вообÑе не бÑÐ´ÐµÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð³Ð¾ ÑезÑлÑÑаÑа.
PQcancelможно безопаÑно вÑзÑваÑÑ Ð¸Ð· обÑабоÑÑика Ñигнала, еÑлиerrbufÑвлÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ñной пеÑеменной в обÑабоÑÑике Ñигнала. ÐбÑекÑPGcancelдоÑÑÑпен ÑолÑко в Ñежиме ÑÑениÑ, пока ÑеÑÑ Ð¸Ð´ÑÑ Ð¾ ÑÑнкÑииPQcancel, поÑÑÐ¾Ð¼Ñ ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñакже вÑзÑваÑÑ Ð¸Ð· поÑока, оÑделÑного Ð¾Ñ Ñого, коÑоÑÑй ÑпÑавлÑÐµÑ Ð¾Ð±ÑекÑомPGconn.
PQrequestCancel#PQrequestCancelÑвлÑеÑÑÑ ÑÑÑаÑевÑим аналогом ÑÑнкÑииPQcancel.int PQrequestCancel(PGconn *conn);
ÐÑдаÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° Ñо, ÑÑÐ¾Ð±Ñ ÑеÑÐ²ÐµÑ Ð¿ÑекÑаÑил обÑабоÑÐºÑ ÑекÑÑей командÑ. ФÑнкÑÐ¸Ñ ÑабоÑÐ°ÐµÑ Ð½Ð°Ð¿ÑÑмÑÑ Ñ Ð¾Ð±ÑекÑом
PGconnи в ÑлÑÑае ÑÐ±Ð¾Ñ ÑÐ¾Ñ ÑанÑÐµÑ ÑообÑение об оÑибке в обÑекÑеPGconn(оÑкÑда его можно извлеÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑPQerrorMessage). ХоÑÑ ÑÑнкÑионалÑноÑÑÑ Ñа же ÑамаÑ, ÑÑÐ¾Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´ небезопаÑен Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¿Ð¾ÑоÑнÑÑ Ð¿ÑогÑамм или обÑабоÑÑиков Ñигналов, поÑколÑÐºÑ Ð¿ÐµÑезапиÑÑ ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑибке, Ñ ÑанÑÑегоÑÑ Ð² обÑекÑеPGconn, Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼ÐµÑаÑÑ Ñ Ð¾Ð´Ñ Ð¾Ð¿ÐµÑаÑии, вÑполнÑемой ÑеÑез данное подклÑÑение.