Возьмите квалификаторы - postgresql
Я работаю над исходным кодом 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;
}
и это работает, и у меня есть идентификатор таблицы student
(с первым foreach) и id name
столбец (со вторым foreach), но я не могу понять, как я должен принять классификатор.
Вот навигационная структура запроса http://doxygen.postgresql.org/structQuery.html
1 ответ
Я сомневаюсь, что вы получите ответ здесь. В общем, для взлома исходного кода PostgreSQL здесь вряд ли найдется достаточно людей, которые могут ответить на него, что такой сайт будет полезен. Однако вместо того, чтобы оставлять это без каких-либо таких ресурсов, я хотел бы ответить, чтобы предоставить список ресурсов для ответов на вопросы, подобные этому, а также для прочтения моей документации как человека, имеющего немного опыта в сборке вещей на Pg.
По сути, вы пытаетесь перемещаться по дереву разбора запроса. Мне кажется, что член setOperations может быть тем местом, где можно искать, просто потому, что я не могу думать ни о чем другом, и потому что это может помочь как с условиями соединения, так и с фильтрами предложений (помните, что планировщик считает их взаимозаменяемыми). Однако у меня мало опыта в этой области, поэтому я могу ошибаться.
Я бы полностью поддержал предположение, что список pgsql-хакеров, вероятно, будет лучшим местом для такого рода вопросов. Вы, вероятно, получите лучший ответ там.