BUG #6693: Potential Bug in rewriteManip.c
От | msrbugzilla@gmail.com |
---|---|
Тема | BUG #6693: Potential Bug in rewriteManip.c |
Дата | |
Msg-id | E1Serzh-0008Qv-6o@wrigleys.postgresql.org обсуждение исходный текст |
Ответы |
Re: BUG #6693: Potential Bug in rewriteManip.c
(Tom Lane <tgl@sss.pgh.pa.us>)
|
Список | pgsql-bugs |
The following bug has been logged on the website: Bug reference: 6693 Logged by: Ken Cheung Email address: msrbugzilla@gmail.com PostgreSQL version: 9.1.3 Operating system: Linux Description:=20=20=20=20=20=20=20=20 I observed a code clone in the following files. In these functions, qry->resultRelation is computed differently but the comment above mentions the same functionality. I wonder if this is a bug. Hope it helps. function : ChangeVarNodes @ (file: "postgresql-9.1.3/src/backend/rewrite/rewriteManip.c", line: 570)~608 context.rt_index =3D rt_index; context.new_index =3D new_index; context.sublevels_up =3D sublevels_up; /* * Must be prepared to start with a Query or a bare expression tree; if * it's a Query, go straight to query_tree_walker to make sure that * sublevels_up doesn't get incremented prematurely. */ if (node && IsA(node, Query)) { Query *qry =3D (Query *) node; /* * If we are starting at a Query, and sublevels_up is zero, then we * must also fix rangetable indexes in the Query itself --- namely * resultRelation and rowMarks entries. sublevels_up cannot be zero * when recursing into a subquery, so there's no need to have the same * logic inside ChangeVarNodes_walker. */ if (sublevels_up =3D=3D 0) { ListCell *l; if (qry->resultRelation =3D=3D rt_index) qry->resultRelation =3D new_index; foreach(l, qry->rowMarks) { RowMarkClause *rc =3D (RowMarkClause *) lfirst(l); if (rc->rti =3D=3D rt_index) rc->rti =3D new_index; } } query_tree_walker(qry, ChangeVarNodes_walker, (void *) &context, 0); } else ChangeVarNodes_walker(node, &context); function : OffsetVarNodes @ (file: "postgresql-9.1.3/src/backend/rewrite/rewriteManip.c", line: 402)~438 context.offset =3D offset; context.sublevels_up =3D sublevels_up; /* * Must be prepared to start with a Query or a bare expression tree; if * it's a Query, go straight to query_tree_walker to make sure that * sublevels_up doesn't get incremented prematurely. */ if (node && IsA(node, Query)) { Query *qry =3D (Query *) node; /* * If we are starting at a Query, and sublevels_up is zero, then we * must also fix rangetable indexes in the Query itself --- namely * resultRelation and rowMarks entries. sublevels_up cannot be zero * when recursing into a subquery, so there's no need to have the same * logic inside OffsetVarNodes_walker. */ if (sublevels_up =3D=3D 0) { ListCell *l; if (qry->resultRelation) qry->resultRelation +=3D offset; foreach(l, qry->rowMarks) { RowMarkClause *rc =3D (RowMarkClause *) lfirst(l); rc->rti +=3D offset; } } query_tree_walker(qry, OffsetVarNodes_walker, (void *) &context, 0); } else OffsetVarNodes_walker(node, &context);
В списке pgsql-bugs по дате отправления:
Следующее
От: phb.emaj@free.frДата:
Сообщение: BUG #6694: 9.2 beta 2 : psql commands \db and \db+ fail