今天看了openGauss的MOT引擎中,InsertRow的部分.记录一下
- 行插入在FDW的入口函数是MOTExecForeignInsert,这个函数会创建一个MOTFdwStateSt,然后用事务ID,TxnManager,table等对象以及属性使用和修改的指针对其初始化.
- fdwState初始化完成后,调用MOTAdaptor::InsertRow(fdwState, slot)函数,slot是保存了行数据相关信息的数据结构
- 在InsertRow中,先调用table的CreateRow函数,创建一个Row*,并获取数据的地址给newRowData,然后调用Pack函数将slot数据复制到newRowData中,再调用table的InsertRow(row, fdwState->m_currTxn).
- table的InsertRow方法中,先根据代理键设置RowId,获取主索引ix后,调用txn(TxnManager)的GetTxnKey(ix),创建一个新key,然后将数据和key添加到索引中
网友评论