美文网首页
openGauss源码#RowLookup:行数据的查找相关

openGauss源码#RowLookup:行数据的查找相关

作者: upup果 | 来源:发表于2020-12-26 08:46 被阅读0次

在更新和删除一行数据前,首先需要通过RowLookup函数找到需要操作的Row.今天介绍一下相关函数:

  • txn_access
    这个是最底层的调用,首先,RowLookup会在m_rowSet中寻找指定sentinel的access,如果找到,设置其为LastAccess,如果没找到就返回nullptr.AccessLookup,使用RowLookup找到的access,如果access为空就返回NOT_FOUND.如果不空,根据access的访问类型有不同的返回结果:
    ①访问类型为RD,RD_FOR_UPDATE,WR:返回RC_LOCAL_ROW_FOUND,row为access的m_localRow
    ②如果访问类型是DEL:返回RC_LOCAL_ROW_DELETED
    ③如果访问类型是INS:下一个是WR或者是RD_FOR_UPDATE时,new一个新row给access的m_localRow.返回RC_LOCAL_ROW_FOUND,如果是upgrade,返回access的m_auxRow,否则返回m_loaclInsertRow.
  • txn
    这是事务中的上层调用,主要是调用txn_access.RowLookup:调用txn_access中的RowLookup,根据返回值做不同的处理.RC_LOCAL_ROW_DELETED则返回空,RC_LOCAL_ROW_FOUND则返回找到的row,RC_LOCAL_ROW_NOT_FOUND:如果是读已提交隔离级别,并且操作类型是RD,则通过GetReadCommitedRow方法获取提交的row,否则就新建一个access,并添加到MapRowtoLocalTable,返回这个新建access的row.

相关文章

网友评论

      本文标题:openGauss源码#RowLookup:行数据的查找相关

      本文链接:https://www.haomeiwen.com/subject/gbkynktx.html