4

我正在研究 postgresql 8.4 源代码。我需要从查询中推断出限定词(其中部分)。

例如,如果查询是: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(第二个 foreach),但我不明白我必须如何使用限定符。

这是可导航的查询结构http://doxygen.postgresql.org/structQuery.html

4

1 回答 1

1

我怀疑你会在这里得到答案。一般来说,破解 PostgreSQL 源代码可能没有足够的人来回答这个问题,这样的一般网站会有所帮助。但是,我不想留下任何此类资源,而是提供一份资源列表,用于回答此类问题,以及作为在 Pg 上构建事物的经验丰富的人阅读文档。

本质上,您要做的是浏览查询的解析树。在我看来,setOperations 成员可能只是因为我想不出其他任何地方,并且因为这可能有助于连接条件和 where 子句过滤器(请记住,规划者认为这些是可互换的)。但是我在这方面的经验很少,所以我可能是错的。

我完全赞成 pgsql-hackers 列表可能是提出此类问题的最佳场所的建议。你可能会在那里得到更好的答案。

于 2013-05-06T02:14:00.043 回答