8.2.0401 KJ氏の確認待ち

pgsql-odbcのバグレポート Rollback transaction doesn't work(KJ氏報告)への対応だが、TRANSACT-SQLを使用すると分散トランザクションの処理中にAUTOCOMMITモードを自動コミットに設定する要求がなされることが原因と判明した。

分散トランザクションの処理が開始されると内部的に手動コミットに切り替えており、その状態で自動コミットへの切り替え要求が行われ思いがけない(ローカルな)COMMIT要求が発行されていたというもの。AUTOCOMMITモードの切り替えに対してCOMMITを発行するのはODBCのスペック通りではあるのだが、手動コミットへの切替えは内部的なものであり、外部的には自動コミットのままであるはずなのだ。そこでAUTOCOMMITモードの外部的/内部的な値を区別して管理するように変更を行った。更に念のため、分散トランザクションの処理中はAUTOCOMMIT(外部的/内部的に関わらず)の切り替えに起因するローカルなCOMMIT発行を抑えるように変更した。
[その他]
・pgenlistモジュールがロードされない時がある。permissionの問題のようなので0755に変更(ってcygwinでだけど...)
・pgenlist(a)内でHKLM\SOFTWARE\Microsoft\MSDTC\XADLLへのpgxalib.dll(がない場合)の登録を行っているが、XADLLのキーそのものがない場合あり。
 ない場合はキーを登録するように変更。

※※ TRANSACT-SQLは分散トランザクションへのenlist要求を出す直前にAUTOCOMMITモードの確認を行う。この時に自動コミットになっていないと分散トランザクションの処理そのものを断念するようだ。