ソート

・tuplesort.c: SelectSortFunction()
ソート関数を選択する。

・nodeSort.c: ExecSort()
outer treeのソートを実行。
tuplesort_begin_heap()で,Tuplesortstateを作成する。
ループでouterNodeのタプルを取得して,tpulesort_puttuple()でtuplesortstateへ
登録する。

・tuplesort.c: tuplesort_begin_heap()
Tuplesortstateを作成して,初期化する。
tuplesort_begin_common()でデフォルトのTuplesortstateを作成。
comparetupなどに,heap用の関数を設定する。
SelectSortFunction()やScanKeyInit()で,ScanKeyの情報を設定する。

・tuplesort.c: tuplesort_begin_common()
Tuplesortstateを作成して,初期化する。
palloc0でメモリを確保し,パラメータの初期値を設定する。
statusには,TSS_INITIALが設定される。
availMemには,workMem * 1024が設定される。
ExecSort() -> tuplesort_begin_heap() -> tuplesort_begin_common()と実行
されるときには, workMemにはグローバル変数のwork_memが設定される。
work_memのデフォルト値は1024。

・tuplesort.c: tuplesort_puttuple()
COPYTUPマクロで,tupleをコピーする。
COPUTUPマクロは,state->copytupを実行する。
その後,puttuple_common()を実行する。

・tuplesort.c: puttuple_common()
state->statusがTSS_INITIALのとき,state->memtuplesにtupleを登録していく。
state->memtupcount >= state->memtupsizeになったら,state->memtuplesを
拡張する。
LACKMEMでstateのavailMemをチェックして,まだ空き容量があればリターン。
state->availMem < 0になったら,inittapes()でTSS_BUILDRUNSに移行する。

state->availMem()は,copytup_heap()などを実行するたびに減っていく。
availMemは,FREEMEM, USEMEMで計算している。
メモリを開放したときはFREEMEMを実行し,メモリを確保したときはUSEMEMを実行
している。