このページを編集する際は、[[編集に関する方針]]に従ってください。
*概要 [#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 -- [[\'\");|]*{
<