このページを編集する際は、[[編集に関する方針]]に従ってください。 *概要 [#f24310e1] -対象:8.1.4 -言語:C -[[postgresql-8.1.4/src/include/access/heapam.h]]にて定義 -[[postgresql-8.1.4/src/backend/access/common/heaptuple.c]]にて定義 -0から引数tupleDesc->natts-1までの整数について、インデックスiを定義して、以下の小計1、小計2を算出する。 -ただし、isnull[i]<>NULLの場合、以下の小計1、小計2をスキップする。 -小計1として、tupleDesc->attrs[i]->attalignの値で判別し、直前の小計2をもとに、以下の値を取得。 --'i'の場合、直前の小計2以上であるALIGNOF_INTの倍数のうち最小値。 --'c'の場合、直前の小計2を(long型にキャストして)そのまま。 --'d'の場合、直前の小計2以上であるALIGNOF_DOUBLEの倍数のうち最小値。 --それ以外の場合、直前の小計2以上であるALIGNOF_SHORTの倍数のうち、最小値。 -小計2として、tupleDesc->attrs[i]->attlenの値で判別し、小計1に以下の値を加算した値を取得。 --attrs[i]->attlen>0の場合、attrs[i]->attlen。 --attrs[i]->attlen=-1の場合、values[i]->va_header。 --attrs[i]->attlen=-2の場合、values[i]のサイズ。 -iを1増やして、小計1、小計2の算出を繰り返す。 -tupleDesc->natts-1まで加算したら、その小計2を合計値として返す。 **小計1の例 [#afbc0587] -たとえば、以下のようなattrs[]を持つtupleDescがあると仮定する。また、ALIGNOF_INTを4、ALIGNOF_SHORTを2とする。 | |attalign|attlen| |attrs[0]|'c' |15 | |attrs[1]|'s' |2 | |attrs[2]|'i' |4 | -このときは、以下のように計算され、合計サイズは24となる。 | |attalign|ALIGN |ALIGN後の値(小計1)|attlen|小計2| |attrs[0]|'c' |なし |0 |15 |15 | |attrs[1]|'s' |ALIGNOF_SHORT=2 |16 |2 |18 | |attrs[2]|'i' |ALIGNOF_INT=4 |20 |4 |24 | **小計2の例 [#v5ec11be] -たとえば、以下のようなattrs[]を持つtupleDescと、value[]があると仮定する。 |i|attrs[i]->&br;attalign|attrs[i]->&br;attlen|value[i]|value[i]->&br;va_header|value[i]のサイズ| |0|'c' |-1 |'aaaaa' |0x61616161 |5 | |1|'c' |-2 |'bbbbb' |0x62626262 |5 | -このときは、以下のように計算され、合計サイズは1633771878となる。 |i|attrs[i]->&br;attalign|ALIGN |ALIGN後の値(小計1)|attrs[i]->&br;attlen|value[i]|value[i]->&br;va_header |value[i]のサイズ|小計2| |0|'c' |なし |0 |-1 |'aaaaa' |0x61616161 = 1633771873|5 |1633771873| |1|'c' |なし |1633771873 |-2 |'bbbbb' |0x62626262 |5 |1633771878| *引数 [#g50b8c29] +tupleDesc : TupleDesc 型 +values : Datum 型へのポインタ +isnull : bool 型へのポインタ *実装 [#zd00b5ca] 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, -unsigned longの別名。詳細は[[Datum/postgresql-8.1.4]]参照。 bool *isnull) -charの別名。詳細は[[bool/postgresql-8.1.4]]参照。 { 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 (isnull[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; } *呼出元 [#cc070e49] -呼出元の関数を書いてください。 *備考 [#n500dedc] -構成されるタプルのデータ領域のサイズを決定する * heap_compute_data_size * Determine size of the data area of a tuple to be constructed *履歴 [#k4e9ef09] -作者:[[testnoda/ページ作者]] -日付:2006/7/30 |更新日|更新者|更新内容| |2006/9/16|[[testnoda:http://d.hatena.ne.jp/testnoda/about]]|コメントを備考に移動| |2006/10/8|[[testnoda:http://d.hatena.ne.jp/testnoda/about]]|概要を記載| *コメント [#xb9574b7] - G2viSY http://www.FyLitCl7Pf7ojQdDUOLQOuaxTXbj5iNG.com -- [[Barnypok]] &new{2017-01-02 (月) 17:35:56}; - jlMiiG http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com -- [[chaba]] &new{2017-01-30 (月) 00:19:29}; - TbALff http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com -- [[matt]] &new{2017-01-30 (月) 00:21:43}; - c1Vwky http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com -- [[gordon]] &new{2017-02-01 (水) 02:39:02}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:44}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:44}; - ' -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:45}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:45}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:46}; - w3bSc9n -- [[c:\boot.ini]] &new{2018-09-06 (木) 06:17:46}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:46}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:46}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:47}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:47}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:47}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:48}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:48}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:49}; - file://c/ -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:55}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:55}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:55}; - htTps://www.google.com -- [[w3bSc9n]] &new{2018-09-06 (木) 06:17:55}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:18:22}; - |echo $((99333685+99333685))||a -- &new{2018-09-06 (木) 06:18:24}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:18:26}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:18:26}; - w3bSc9n -- [[339914138]] &new{2018-09-06 (木) 06:18:27}; - 560493414 -- [[w3bSc9n]] &new{2018-09-06 (木) 06:18:27}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:18:27}; - wsng;SELECT SLEEP(5);-- -- &new{2018-09-06 (木) 06:18:28}; - 26ping -n 5 8.8.8.8& -- &new{2018-09-06 (木) 06:18:34}; - '+benchmark(1000000,sha1(1))+' -- &new{2018-09-06 (木) 06:18:40}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:01}; - w3bSc9n -- [[-268435455]] &new{2018-09-06 (木) 06:19:01}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:02}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:04}; - 268435455 -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:05}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:13}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:13}; - foo/../$value -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:13}; - w3bSc9n -- [[file://c/]] &new{2018-09-06 (木) 06:19:13}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:13}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:14}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:14}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:14}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:16}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:16}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:16}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:16}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:16}; - w3bSc9n -- [[htTps://www.google.com]] &new{2018-09-06 (木) 06:19:16}; - '492345312 -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:17}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:17}; - w3bSc9n -- [['329330914]] &new{2018-09-06 (木) 06:19:17}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:19}; - w3bSc9n -- [[\']] &new{2018-09-06 (木) 06:19:19}; -- 268435455 -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:20}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:20}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:22}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:22}; - /foo/../$value -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:23}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:24}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:24}; - w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:19:26}; - w3bSc9n -- [[\'\");|]*{ <