47.10. ÐоддеÑжка двÑÑ Ñазной ÑикÑаÑии Ð´Ð»Ñ Ð»Ð¾Ð³Ð¸ÑеÑкого декодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ #
С базовÑми обÑабоÑÑиками модÑÐ»Ñ Ð²Ñвода (напÑимеÑ, begin_cb, change_cb, commit_cb и message_cb) Ñакие ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´Ð²ÑÑ
Ñазной ÑикÑаÑии, как PREPARE TRANSACTION, COMMIT PREPARED и ROLLBACK PREPARED, не декодиÑÑÑÑÑÑ. ÐÑи ÑÑом PREPARE TRANSACTION игноÑиÑÑеÑÑÑ, COMMIT PREPARED декодиÑÑеÑÑÑ ÐºÐ°Ðº COMMIT, а ROLLBACK PREPARED декодиÑÑеÑÑÑ ÐºÐ°Ðº ROLLBACK.
ÐÐ»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки пеÑедаÑи двÑÑ
ÑазнÑÑ
команд модÑÐ»Ñ Ð²Ñвода должен пÑедоÑÑавлÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе обÑабоÑÑики. ÐпÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð½ÐµÑколÑко обÑзаÑелÑнÑÑ
обÑабоÑÑиков двÑÑ
Ñазной ÑикÑаÑии: (begin_prepare_cb, prepare_cb, commit_prepared_cb, rollback_prepared_cb и stream_prepare_cb) и необÑзаÑелÑнÑй (filter_prepare_cb).
ÐÑли пÑедоÑÑавлÑÑÑÑÑ Ð¾Ð±ÑабоÑÑики модÑÐ»Ñ Ð²Ñвода Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ двÑÑ
Ñазной ÑикÑаÑии, Ñо пÑи вÑполнении PREPARE TRANSACTION декодиÑÑÑÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑой ÑÑанзакÑии, коÑоÑÑе пеÑедаÑÑÑÑ Ð² модÑÐ»Ñ Ð²Ñвода, и вÑзÑваеÑÑÑ Ð¾Ð±ÑабоÑÑик prepare_cb. ÐÑо оÑлиÑаеÑÑÑ Ð¾Ñ Ð¿ÑоÑÑой ÑÑ
ÐµÐ¼Ñ Ð´ÐµÐºÐ¾Ð´Ð¸ÑованиÑ, когда Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÐµÑедаÑÑÑÑ Ð² модÑÐ»Ñ Ð²Ñвода ÑолÑко пÑи ÑикÑиÑовании ÑÑанзакÑии. ÐаÑало подгоÑовленной ÑÑанзакÑии обознаÑаеÑÑÑ Ð²Ñзовом begin_prepare_cb.
Ðогда подгоÑÐ¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÑÑанзакÑÐ¸Ñ Ð¾ÑкаÑÑваеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ROLLBACK PREPARED, вÑзÑваеÑÑÑ Ð¾Ð±ÑабоÑÑик rollback_prepared_cb, а когда подгоÑÐ¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÑÑанзакÑÐ¸Ñ ÑикÑиÑÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ COMMIT PREPARED, вÑзÑваеÑÑÑ Ð¾Ð±ÑабоÑÑик commit_prepared_cb.
ÐодÑÐ»Ñ Ð²Ñвода Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑеделÑÑÑ Ð¿Ñавила ÑилÑÑÑаÑии, воÑполÑзовавÑиÑÑ filter_prepare_cb, ÑÑÐ¾Ð±Ñ Ð´ÐµÐºÐ¾Ð´Ð¸ÑоваÑÑ Ð² две ÑÐ°Ð·Ñ ÑолÑко опÑеделÑннÑе ÑÑанзакÑии. ÐÑо можно ÑеализоваÑÑ, ÑопоÑÑавлÑÑ Ñ Ð½ÐµÐºÐ¾ÑоÑÑм Ñаблоном gid или пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ñ Ð¿Ð¾Ð¸Ñк по xid.
РеализÑÑ Ð´ÐµÐºÐ¾Ð´Ð¸Ñование подгоÑовленнÑÑ ÑÑанзакÑий, ÑледÑÐµÑ ÑÑиÑÑваÑÑ ÑледÑÑÑие моменÑÑ:
ÐÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÑÑанзакÑÐ¸Ñ Ð±Ð»Ð¾ÐºÐ¸ÑÑÐµÑ ÑаблиÑÑ ÐºÐ°Ñалога (в Ñом ÑиÑле полÑзоваÑелÑÑкие) в иÑклÑÑиÑелÑном Ñежиме, декодиÑование PREPARE Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑÑÑ, Ð¾Ð¶Ð¸Ð´Ð°Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¾Ñновной ÑÑанзакÑии.
РеÑение, оÑÑÑеÑÑвлÑÑÑее логиÑеÑкÑÑ ÑепликаÑиÑ, коÑоÑое оÑганизÑÐµÑ ÑаÑпÑеделÑннÑÑ Ð´Ð²ÑÑ ÑазнÑÑ ÑикÑаÑÐ¸Ñ Ñ Ð¸ÑполÑзованием ÑÑой ÑÑнкÑионалÑноÑÑи, Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑÑÑ, еÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÑÑанзакÑÐ¸Ñ Ð² иÑклÑÑиÑелÑном Ñежиме заблокиÑÑÐµÑ ÑаблиÑÑ ÐºÐ°Ñалога (в Ñом ÑиÑле полÑзоваÑелÑÑкие). ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÑого, полÑзоваÑели Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²Ð¾Ð·Ð´ÐµÑжаÑÑÑÑ Ð¾Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовок ÑÐ°Ð±Ð»Ð¸Ñ ÐºÐ°Ñалога (напÑимеÑ, Ñвной командой
LOCK) в ÑÐ°ÐºÐ¸Ñ ÑÑанзакÑиÑÑ . Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 47.8.2.