クエリのパース処理。プランツリーの構造体

おとといのプランツリーのデバッグ出力を見ながらデバッグ用の名前と構造体を結び付けてみた。

  • PLANNEDSTMT
    • PlannedStmt
    • プランツリーを管理する構造体。わかりやすいところでいうとcommandTypeなど、SELECTかUPDATEかなどの区分などをもっている。
  • NESTLOOP
    • NestLoop
    • 内部結合を表す。
    • lefttreeが外側(outer)の処理で使うプラン。
    • righttreeが内側(inner)の処理で使うプラン。
  • INDEXSCAN
    • IndexScan
    • インデックススキャンのプラン。
    • indexidはインデックスのリレーションのoid
  • SEQSCAN
    • SeqScan
    • 順スキャンのプラン。

ほかのデータ構造はパースツリーやクエリツリーで既出。


NestLoop、IndexScan、SeqScanなどのstructはすべてPlanというstructのサブタイプ(Cでこういうか知らないけど)。
継承階層はこうなっていた。ぜんぷplannodes.hに定義されている。

Plan
 +--Result
 +--Append
 +--BitmapAnd
 +--BitmapOr
 +--Scan
     +--SeqScan
     +--IndexScan
     +--BitmapIndexScan
     +--BitmapHeapScan
     +--TidScan
     +--SubqueryScan
     +--FunctionScan
     +--ValuesScan
 +--Join
     +--NestLoop
     +--MergeJoin
     +--HashJoin
 +--Material
 +--Sort
 +--Group
 +--Agg
 +--Unique
 +--Hash
 +--SetOp
 +--Limit

実行計画に登場する用語と一致していると思う。