pg_get_viewdef returns one paren too much

Поиск
Список
Период
Сортировка
От Andreas Pflug
Тема pg_get_viewdef returns one paren too much
Дата
Msg-id 41B9AAB5.4030900@pse-consulting.de
обсуждение исходный текст
Ответы Re: pg_get_viewdef returns one paren too much  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-patches
laurie.burrow@powerconv.alstom.com noticed a problem with pg_get_viewdef
in prettyprint mode.

create table gnrcitm (gnrcitmid int);
create table gnrcitmothrref (idntfyrefid int, gnrcitmid int);
create table other_ref(idntfyrefid int, catnmeclssid text, actvle text);

CREATE OR REPLACE VIEW test_view AS
  SELECT or0.actvle AS treename
    FROM gnrcitm g
    LEFT JOIN (gnrcitmothrref g0
    JOIN other_ref r0 ON g0.idntfyrefid = r0.idntfyrefid AND
r0.catnmeclssid::text = 'Tree Name'::text) or0
  ON g.gnrcitmid = or0.gnrcitmid;

pg_get_viewdef(viewoid, true) will return

CREATE OR REPLACE VIEW test_view AS
  SELECT or0.actvle AS treename
    FROM gnrcitm g
    LEFT JOIN
     ( -- <<<
              (gnrcitmothrref g0
    JOIN other_ref r0 ON g0.idntfyrefid = r0.idntfyrefid AND
r0.catnmeclssid = 'Tree Name'::text) or0
     ) -- <<<
  ON g.gnrcitmid = or0.gnrcitmid;


The attached patch corrects this, without affecting the following:

CREATE OR REPLACE VIEW test_view2 AS
  SELECT r0.actvle AS treename
    FROM gnrcitm g
    LEFT JOIN (gnrcitmothrref g0
    JOIN other_ref r0 ON g0.idntfyrefid = r0.idntfyrefid AND
r0.catnmeclssid::text = 'Tree Name'::text)
  ON g.gnrcitmid = g0.gnrcitmid


Regards,
Andreas


Index: ruleutils.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v
retrieving revision 1.185
diff -u -r1.185 ruleutils.c
--- ruleutils.c    5 Nov 2004 19:16:11 -0000    1.185
+++ ruleutils.c    10 Dec 2004 13:41:17 -0000
@@ -3876,7 +3876,8 @@
         bool        need_paren_on_right;

         need_paren_on_right = PRETTY_PAREN(context) &&
-            !IsA(j->rarg, RangeTblRef);
+          !IsA(j->rarg, RangeTblRef) &&
+          !(IsA(j->rarg, JoinExpr) && ((JoinExpr*)j->rarg)->alias != NULL);

         if (!PRETTY_PAREN(context) || j->alias != NULL)
             appendStringInfoChar(buf, '(');

В списке pgsql-patches по дате отправления:

Предыдущее
От: Weiping
Дата:
Сообщение: 8.0 RC1 NLS translate fo zh_CN
Следующее
От: Euler Taveira de Oliveira
Дата:
Сообщение: pt_BR FAQ update