Возьмите квалификаторы - 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-хакеров, вероятно, будет лучшим местом для такого рода вопросов. Вы, вероятно, получите лучший ответ там.

Другие вопросы по тегам