PostgreSQL解読室:
heap_compute_data_size()/postgresql-8.1.4
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
このページを編集する際は、[[編集に関する方針]]に従ってく...
*概要 [#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までの整数について、インデッ...
-ただし、isnull[i]<>NULLの場合、以下の小計1、小計2をスキ...
-小計1として、tupleDesc->attrs[i]->attalignの値で判別し、...
--'i'の場合、直前の小計2以上であるALIGNOF_INTの倍数のうち...
--'c'の場合、直前の小計2を(long型にキャストして)そのま...
--'d'の場合、直前の小計2以上であるALIGNOF_DOUBLEの倍数の...
--それ以外の場合、直前の小計2以上であるALIGNOF_SHORTの倍...
-小計2として、tupleDesc->attrs[i]->attlenの値で判別し、小...
--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があると仮定...
| |attalign|attlen|
|attrs[0]|'c' |15 |
|attrs[1]|'s' |2 |
|attrs[2]|'i' |4 |
-このときは、以下のように計算され、合計サイズは24となる。
| |attalign|ALIGN |ALIGN後の値(小計1)|at...
|attrs[0]|'c' |なし |0 |15...
|attrs[1]|'s' |ALIGNOF_SHORT=2 |16 |2 ...
|attrs[2]|'i' |ALIGNOF_INT=4 |20 |4 ...
**小計2の例 [#v5ec11be]
-たとえば、以下のようなattrs[]を持つtupleDescと、value[]...
|i|attrs[i]->&br;attalign|attrs[i]->&br;attlen|value[i]|v...
|0|'c' |-1 |'aaaaa' |0x61616161 ...
|1|'c' |-2 |'bbbbb' |0x62626262 ...
-このときは、以下のように計算され、合計サイズは1633771878...
|i|attrs[i]->&br;attalign|ALIGN |ALIGN後の値(小...
|0|'c' |なし |0 |-...
|1|'c' |なし |1633771873 |-...
*引数 [#g50b8c29]
+tupleDesc : TupleDesc 型
+values : Datum 型へのポインタ
+isnull : bool 型へのポインタ
*実装 [#zd00b5ca]
Size
heap_compute_data_size(TupleDesc tupleDesc,
-以下のメンバを持つ構造体。詳細は[[TupleDesc/postgresql-8...
--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_at...
--(略)
--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()/postg...
--attalignの値が'i'の場合、data_length以上であるALIGNOF_I...
--attalignの値が'c'の場合、data_lengthを(long型にキャス...
--attalignの値が'd'の場合、data_length以上であるALIGNOF_D...
--それ以外の場合、data_length以上であるALIGNOF_SHORTの倍...
。ただし、USE_ASSERT_CHECKING指定してコンパイルしたバイナ...
data_length = att_addlength(data_length, att[i]->attlen...
-data_lengthに、以下の値を加算。詳細は[[att_addlength()/p...
-- att[i]->attlenが0より大きい場合、att[i]->attlenの値。
-- att[i]->attlenが-1の場合、values[i]をvarattrib*型にキ...
-- att[i]->attlenが-2の場合、values[i]を文字列としてサイ...
-- それ以外の場合は、-2の場合と同じ。ただし、USE_ASSERT_C...
}
return data_length;
}
*呼出元 [#cc070e49]
-呼出元の関数を書いてください。
*備考 [#n500dedc]
-構成されるタプルのデータ領域のサイズを決定する
* heap_compute_data_size
* Determine size of the data area of a tuple to be cons...
*履歴 [#k4e9ef09]
-作者:[[testnoda/ページ作者]]
-日付:2006/7/30
|更新日|更新者|更新内容|
|2006/9/16|[[testnoda:http://d.hatena.ne.jp/testnoda/abou...
|2006/10/8|[[testnoda:http://d.hatena.ne.jp/testnoda/abou...
*コメント [#xb9574b7]
- G2viSY http://www.FyLitCl7Pf7ojQdDUOLQOuaxTXbj5iNG.com ...
- jlMiiG http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com ...
- TbALff http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com ...
- c1Vwky http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com ...
- 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:4...
- 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 (...
- w3bSc9n -- [[w3bSc9n]] &new{2018-09-06 (木) 06:18:22};
- |echo $((99333685+99333685))||a -- &new{2018-09-06 (木...
- 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:...
- 26ping -n 5 8.8.8.8& -- &new{2018-09-06 (木) 06:18:34};
- '+benchmark(1000000,sha1(1))+' -- &new{2018-09-06 (木)...
- 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...
- 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 (...
- '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:1...
- 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 -- [[\'\");|]*{
<