Postgresql源码(86)varchar的创建与插入分析
/*
* varatt_expand_content
*
* Expand a varlena attribute to the specified number of bytes,
* previously determined to be necessary.
*
* This must NOT be used on any datatype other than varlena.
* It is okay to use on void* if the caller knows the actual datatype.
*/
static inline void
varatt_expand_content(bytea *varlena, Size newlen, bool *too_large)
{
// 如果数据长度小于新长度,则扩展数据长度
if (VARSIZE_ANY(varlena) < newlen)
{
// 如果新长度超出了最大存储长度,则设置too_large为true
if (newlen > BYTEA_MAX_SIZE)
{
*too_large = true;
return;
}
// 否则,设置too_large为false,并扩展数据长度
*too_large = false;
// 使用repalloc确保内存足够,并设置新的大小
varlena = (bytea *) repalloc(varlena, newlen);
// 设置新的大小
SET_VARSIZE(varlena, newlen);
}
}
这个代码实例展示了如何在PostgreSQL中扩展varlena类型的数据长度。这个函数首先检查当前数据长度是否小于需要的新长度。如果小于,它会检查新长度是否超过了bytea类型允许的最大值。如果超过,它会设置too\_large为true并返回,表示数据太大。如果新长度合适,它会使用repalloc重新分配内存,并确保数据有足够的空间。最后,它会更新数据的大小。这个函数是在处理例如bytea类型数据时可能会用到的内部函数。
评论已关闭