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 по дате отправления:

Предыдущее
От: msrbugzilla@gmail.com
Дата:
Сообщение: BUG #6692: Potential Bug in equalfuncs.c
Следующее
От: phb.emaj@free.fr
Дата:
Сообщение: BUG #6694: 9.2 beta 2 : psql commands \db and \db+ fail