クエリのパース処理。クエリツリーの構造体
昨日のクエリツリーのデバッグ出力を見ながらデバッグ用の名前と構造体をとりあえず結び付けてみた。ほとんどがそのままだけど、RTEがRangeTblEntryに対応するのは調べるまでわからなかった。
- QUERY
- Query
- RTE
- RangeTblEntry
- 結合していると結合の結果を表すRangeTblEntryが追加される。メンバのjoinaliasvarsに結合の結果を表すVarのリストが格納される。
- relidはリレーションのoid。SQLでは「select oid, * from pg_class」で確認できる。relfilenodeというカラムがoidを表しているように見えるけど、oidとrelfilenodeは一致しないこともあるとどこかで読んだ気がする。
- ALIAS
- Alias
- VAR
- Var
- vartypeはpg_typeのOID。SQLで確認するには「select oid, * from pg_type」。vartypeが23はint4、1042はbpcharのこと。vartypmodとvarlevelsupは何だろう?
- FROMEXPR
- FromExpr
- JOINEXPR
- JoinExpr
- rtindexは結合の結果を表すRangeTblEntryに対応しているよう。
- RANGETBLREF
- RangeTblRef
- rtindexは対応するRangeTblEntryのインデックス。
- OPEXPR
- CONST
- Const
- TARGETENTRY
- TargetEntry
- SELECTではSELECT句に並ぶカラムのことのよう。