このページを編集する際は、編集に関する方針に従ってください。
概要 †
引数 †
- tupleDesc : TupleDesc 型
- values : Datum 型へのポインタ
- isnull : bool 型へのポインタ
実装 †
Size
heap_compute_data_size(TupleDesc tupleDesc,
- 以下のメンバを持つ構造体。詳細はTupleDesc/postgresql-8.1.4参照。
- nattsを、intとして定義。
- attrsを、以下のメンバを持つ構造体Form_pg_attributeへのポインタとして定義。
- (中略)
- attlenを、int2(int16(signed short)の別名)として定義。
- (中略)
- attalignを、charとして定義。
- (中略)
- (後略)
Datum *values,
bool *isnull)
{
Size data_length = 0;
int i;
int numberOfAttributes = tupleDesc->natts;
Form_pg_attribute *att = tupleDesc->attrs;
for (i = 0; i < numberOfAttributes; i++)
{
if (isnull[i])
continue;
data_length = att_align(data_length, att[i]->attalign);
data_length = att_addlength(data_length, att[i]->attlen, values[i]);
- data_lengthに、以下の値を加算した値を取得。詳細はatt_addlength()/postgresql-8.1.4参照。
- att[i]->attlenが0より大きい場合、att[i]->attlenの値。
- att[i]->attlenが-1の場合、values[i]をvarattrib*型にキャストしてva_headerメンバの値を取得し、上位2ビットを除外した値。
- att[i]->attlenが-2の場合、values[i]を文字列としてサイズを算出した結果。
- それ以外の場合は、-2の場合と同じ。ただし、AssertMacro()/postgresql-8.1.4が有効であれば、エラーメッセージを出力してプログラムを終了する。
}
return data_length;
}
呼出元 †
備考 †
* heap_compute_data_size
* Determine size of the data area of a tuple to be constructed
履歴 †
コメント †