前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GP/PG从MinimalTuple转换TupleTableSlot需要理解的数据结构

GP/PG从MinimalTuple转换TupleTableSlot需要理解的数据结构

作者头像
yzsDBA
发布2022-06-21 15:53:35
5460
发布2022-06-21 15:53:35
举报

比如在排序中,待排序的结构SortTuple中存储的是MinimalTupleData,里面包含有排序需要的值等信息。排好序后,需要将MinimalTupleData再此转换成TupleTableSlot。

转换由函数tts_minimal_store_tuple完成,可以看到MinimalTupleData并没有解析,而是直接放到了MinimalTupleTableSlot的HeapTuple中。

代码语言:javascript
复制
tts_minimal_store_tuple(TupleTableSlot *slot, MinimalTuple mtup, bool shouldFree)
{
  MinimalTupleTableSlot *mslot = (MinimalTupleTableSlot *) slot;
  tts_minimal_clear(slot);
  slot->tts_flags &= ~TTS_FLAG_EMPTY;
  slot->tts_nvalid = 0;
  mslot->off = 0;

  mslot->mintuple = mtup;
  Assert(mslot->tuple == &mslot->minhdr);
  mslot->minhdr.t_len = mtup->t_len + MINIMAL_TUPLE_OFFSET;
  mslot->minhdr.t_data = (HeapTupleHeader) ((char *) mtup - MINIMAL_TUPLE_OFFSET);
  /* no need to set t_self or t_tableOid since we won't allow access */

  if (shouldFree)
    slot->tts_flags |= TTS_FLAG_SHOULDFREE;
  else
    Assert(!TTS_SHOULDFREE(slot));
}

访问行记录值是,需要再将从MinimalTupleData中将列值读取出来,放到TupleTableSlot的tts_values和tts_isnull数组中。这个过程由函数tts_minimal_getsomeattrs完成:

代码语言:javascript
复制
static void
tts_minimal_getsomeattrs(TupleTableSlot *slot, int natts)
{
  MinimalTupleTableSlot *mslot = (MinimalTupleTableSlot *) slot;
  slot_deform_heap_tuple(slot, mslot->tuple, &mslot->off, natts);
}

重点在slot_deform_heap_tuple函数。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档