XA协议函数
XA协议是X/Open组织提出的分布式事务处理标准,为应用程序和数据库管理系统(DBMS)提供一致的接口,以支持分布式事务处理。
xa_switch_t结构体包含了XA协议一系列的函数指针。libpq提供的xa_switch_t的变量名为xagsw。
相关信息说明如下:
| 变量名称 | 说明 |
|---|---|
| char name[RMNAMESZ] | 资源管理器名称。libpq指定值为gauss_xa。 |
| long flags | 资源管理器提供的选项。libpq指定值为TMNOMIGRATE。 |
| long version | 资源管理器的版本。 |
| int (*xa_open_entry)(char *, int, long) | xa_open函数指针。 |
| int (*xa_close_entry)(char *, int, long) | xa_close函数指针。 |
| int (*xa_start_entry)(XID *, int, long) | xa_start函数指针。 |
| int (*xa_end_entry)(XID *, int, long) | xa_end函数指针。 |
| int (*xa_rollback_entry)(XID *, int, long) | xa_rollback函数指针。 |
| int (*xa_prepare_entry)(XID *, int, long) | xa_prepare函数指针。 |
| int (*xa_commit_entry)(XID *, int, long) | xa_commit函数指针。 |
| int (*xa_recover_entry)(XID *, long, int, long) | xa_recover函数指针。 |
| int (*xa_forget_entry)(XID *, int, long) | xa_forget函数指针。libpq暂不支持。 |
| int (*xa_complete_entry)(int *, int *, int, long) | xa_complete函数指针。libpq暂不支持。 |
| 变量名称 | 说明 |
|---|---|
| long formatID | 格式标识符。 |
| long gtrid_length | 全局事务标识的字节长度。最大值为64。 |
| long bqual_length | 分支标识的字节长度。最大值为64。 |
| char data[XIDDATASIZE] | 全局事务标识和分支标识的组合数据,总共128个字节。 |
| 常量名称 | 说明 |
|---|---|
| TMNOFLAGS | 无特殊标志,使用默认行为。 |
| TMSUCCESS | 操作成功执行。 |
| 常量名称 | 说明 |
|---|---|
| XA_OK | 操作成功完成。 |
| XAER_RMERR | 资源管理器内部错误。 |
| XAER_INVAL | 调用参数无效。 |
| XAER_PROTO | 违反XA协议状态机。 |
| XAER_DUPID | 重复的事务分支ID。 |
| XA_RBROLLBACK | 回滚是由未指明的原因引起的。 |
| XAER_NOTA | 指定XID不存在。 |
- libpq的XA协议函数只支持A兼容库,推荐单线程调用。
- xa_recover函数仅支持查询使用libpq的XA协议函数prepare的事务列表。
- 应在调用xa_start和xa_end函数之间执行业务SQL操作。