Re: Fix for tablename in targetlist - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: Fix for tablename in targetlist
Date
Msg-id 200105200038.f4K0cPP22929@candle.pha.pa.us
Whole thread Raw
In response to Re: Fix for tablename in targetlist  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Fix for tablename in targetlist  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-hackers
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > OK, here is another patch that does this:
>
> That seems considerably uglier than your first patch.  In particular,
> why aren't you looking for isRel being set in the Ident node?  It
> looks to me like you may have changed the behavior in the case where
> the Ident could be either a table or column name.

OK, here is a new patch.  I thought I had to go through
transformTargetEntry() -> transformExpr() -> transformIdent() to get
Ident.isRel set.  Seems it is set earlier too, so the new code is
shorter.  I am still researching the purpose of Ident.isRel.  If someone
knows, please chime in.  I know it says the Ident is a relation, but why
have a field when you can look it up in the rangetable?

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
Index: doc/TODO
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/doc/TODO,v
retrieving revision 1.464
diff -c -r1.464 TODO
*** doc/TODO    2001/05/18 16:28:12    1.464
--- doc/TODO    2001/05/20 00:35:29
***************
*** 140,146 ****
  * Allow RULE recompilation
  * Add BETWEEN ASYMMETRIC/SYMMETRIC
  * Change LIMIT val,val to offset,limit to match MySQL
! * Allow Pl/PgSQL's RAISE function to take expressions
  * ALTER
      * ALTER TABLE ADD COLUMN to inherited table put column in wrong place
        [inheritance]
--- 140,146 ----
  * Allow RULE recompilation
  * Add BETWEEN ASYMMETRIC/SYMMETRIC
  * Change LIMIT val,val to offset,limit to match MySQL
! * Allow PL/PgSQL's RAISE function to take expressions
  * ALTER
      * ALTER TABLE ADD COLUMN to inherited table put column in wrong place
        [inheritance]
Index: src/backend/parser/parse_target.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/parse_target.c,v
retrieving revision 1.66
diff -c -r1.66 parse_target.c
*** src/backend/parser/parse_target.c    2001/03/22 03:59:41    1.66
--- src/backend/parser/parse_target.c    2001/05/20 00:35:30
***************
*** 154,166 ****
          }
          else
          {
!             /* Everything else but Attr */
!             p_target = lappend(p_target,
!                                transformTargetEntry(pstate,
!                                                     res->val,
!                                                     NULL,
!                                                     res->name,
!                                                     false));
          }

          targetlist = lnext(targetlist);
--- 154,182 ----
          }
          else
          {
!             Node       *rteorjoin;
!             int            sublevels_up;
!
!             if (IsA(res->val, Ident) && ((Ident *) res->val)->isRel)
!             {
!                 rteorjoin = refnameRangeOrJoinEntry(pstate,
!                                                 ((Ident *) res->val)->name,
!                                                 &sublevels_up);
!                 Assert(rteorjoin != NULL);
!                 p_target = nconc(p_target,
!                             expandRelAttrs(pstate,
!                                (RangeTblEntry *) rteorjoin));
!             }
!             else
!             {
!                 /* Everything else */
!                 p_target = lappend(p_target,
!                                    transformTargetEntry(pstate,
!                                                         res->val,
!                                                         NULL,
!                                                         res->name,
!                                                         false));
!             }
          }

          targetlist = lnext(targetlist);

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Functions returning sets
Next
From: Tom Lane
Date:
Subject: Re: Functions returning sets