4

私はpostgresql 8.4ソースコードに取り組んでいます。クエリから修飾子 (where 部分) を推定する必要があります。

たとえば、クエリが次の場合: select name from student where age > 18 「年齢」と「18」を知る必要があります。

私はすでにこの方法でターゲットリストと範囲リストを取得しました

Query *query_idr = (Query *)linitial(querytree_list);
ListCell *l;
ListCell *tl;
foreach(l, query_idr->rtable){
        Oid tab_idT = ((RangeTblEntry *) lfirst(l)) ->relid;
}
foreach(tl, query_idr->targetList){
        TargetEntry *tle = (TargetEntry *) lfirst(tl);
        Oid col_id = tle->resorigtbl;
}

それは機能し、テーブルのID student(最初のforeachを使用)nameと列のID(2番目のforeachを使用)を取得しましたが、修飾子を取得する方法がわかりません。

ナビゲート可能なクエリ構造は次のとおりですhttp://doxygen.postgresql.org/structQuery.html

4

1 に答える 1

1

ここで答えが得られるとは思えません。一般に、PostgreSQL のソース コードをハッキングしても、このような一般的なサイトが役立つと回答できる人がここにいるとは思えません。ただし、これをそのようなリソースなしで残すのではなく、このような質問に答えるためのリソースのリストを提供するために返信したいと思います。

本質的に、あなたがやろうとしているのは、クエリの解析ツリーをナビゲートすることです。setOperations メンバーは、他に考えられないという理由だけで、結合条件と where 句フィルターの両方に役立つ可能性があるため、探す場所のように見えます (これらはプランナーによって交換可能と見なされていることを思い出してください)。ただし、私はこの分野での経験がほとんどないため、間違っている可能性があります。

pgsql-hackers リストがこの種の質問をするのに最適な場所である可能性が高いという提案に、私は完全に同意します。おそらく、そこでより良い答えが得られるでしょう。

于 2013-05-06T02:14:00.043 に答える