我正在研究postgresql 8.4源代码。我需要从查询中推断限定符(where part)。
例如,如果查询是: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;
}
并且它有效,并且我已经获得了表student
(带有第一个foreach)和id name
列(带有第二个foreach)的id,但我无法理解我如何参加资格赛。
答案 0 :(得分:1)
我怀疑你会在这里得到答案。一般来说,使用PostgreSQL源代码的人很可能没有足够的人来回答它这样的一般网站会有所帮助。然而,我没有留下任何这样的资源,我想回复提供一个资源列表,用于回答像这样的问题,以及我阅读文档作为具有相当多经验的人在Pg上建立事物。
实质上,您要尝试的是浏览查询的解析树。在我看来,setOperations成员可能只是因为我无法想到其他任何地方,因为这可能有助于连接条件和where子句过滤器(请记住这些被计划者认为是可互换的)。但是我在这方面经验不多,所以我错了。
我完全会认为pgsql-hackers列表可能是提出这类问题的最佳位置。你可能会在那里得到更好的答案。