EOH是一种扩展数据结构,之前有几篇博客讨论过了,最近在改相关代码加深了一些理解。
EOH目前支持ER_methods、EA_methods两套实现,分别是record类型展开和数组类型展开。
在内存中的样子大概是(EA为例)
typedef struct ExpandedArrayHeader
{
ExpandedObjectHeader hdr;
int ea_magic;
int ndims; /* # of dimensions */
int *dims; /* array dimensions */
int *lbound; /* index lower bounds for each dimension */
Oid element_type; /* element type OID */
int16 typlen; /* needed info about element datatype */
bool typbyval;
char typalign;
...
...
...
使用时经常需要一层转换,例如这里:
EOH使用EOH_flatten_into后会拉平数据,输出到result中紧凑存放。
一般的处理逻辑都可以适配EOH或这种紧凑形式,无需互相转换。
这就是为什么EOH只有flatten接口,没有生成EOH的接口,因为使用者适配了。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有