このページを編集する際は、[[編集に関する方針]]に従ってください。 *概要 [#n1cb119f] -対象:8.1.4 -言語:C -[[postgresql-8.1.4/src/backend/access/common/heaptuple.c]]にて定義 -[[heap_compute_data_size()/postgresql-8.1.4]]と同様。ただし、[[heap_compute_data_size()/postgresql-8.1.4]]がisnull[]がnullかどうかで小計1、小計2を計算するか判別しているのに対し、本関数ではnulls[]が' 'かどうかで判別している。 *引数 [#wcd947cf] +tupleDesc : TupleDesc型 +values : Datum型へのポインタ +nulls : char型へのポインタ *実装 [#m6ec7f1d] static Size ComputeDataSize(TupleDesc tupleDesc, -以下のメンバを持つ構造体。詳細は[[TupleDesc/postgresql-8.1.4]]参照。 --nattsを、intとして定義。 --attrsを、以下のメンバを持つ構造体Form_pg_attributeへのポインタとして定義。 ---(略) ---attlenを、int2(int16(signed short)の別名)として定義。 ---(略) ---attalignを、charとして定義。 ---(略) --(略) Datum *values, -unsigned longの別名。詳細は[[Datum/postgresql-8.1.4]]参照。 char *nulls) { Size data_length = 0; -size_tの別名。詳細は[[Size/postgresql-8.1.4]]参照。 int i; int numberOfAttributes = tupleDesc->natts; Form_pg_attribute *att = tupleDesc->attrs; -以下のメンバを持つ構造体へのポインタ。詳細は[[Form_pg_attribute/postgresql-8.1.4]]参照。 --(略) --attlenを、int2(int16(signed short)の別名)として定義。 --(略) --attalignを、charとして定義。 --(略) for (i = 0; i < numberOfAttributes; i++) { if (nulls[i] != ' ') continue; data_length = att_align(data_length, att[i]->attalign); -data_lengthに、以下の値を代入。詳細は[[att_align()/postgresql-8.1.4]]参照。 --attalignの値が'i'の場合、data_length以上であるALIGNOF_INTの倍数のうち最小値を返す。 --attalignの値が'c'の場合、data_lengthを(long型にキャストして)そのまま返す。 --attalignの値が'd'の場合、data_length以上であるALIGNOF_DOUBLEの倍数のうち最小値を返す。 --それ以外の場合、data_length以上であるALIGNOF_SHORTの倍数のうち、最小値を返す 。ただし、USE_ASSERT_CHECKING指定してコンパイルしたバイナリの場合、attalignが's'でなければエラーメッセージを出力して終了する。 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の場合と同じ。ただし、USE_ASSERT_CHECKING指定してコンパイルしたバイナリの場合、エラーメッセージを出力してプログラムを終了する。 } return data_length; } *呼出元 [#y4d3c840] -(呼出元の関数を書いてください。) *備考 [#wac9b348] * ComputeDataSize * * Determine size of the data area of a tuple to be constructed * * OLD API with char 'n'/' ' convention for indicating nulls *履歴 [#tff62d2e] -作者:[[testnoda:http://d.hatena.ne.jp/testnoda/about]] -作者:[[testnoda/ページ作者]] -日付:2006/10/8 |更新日|更新者|更新内容| |||| *コメント [#vc40326e] #comment