class name in target list - Mailing list pgsql-patches

From Bruce Momjian
Subject class name in target list
Date
Msg-id 200105200435.f4K4ZrB13023@candle.pha.pa.us
Whole thread Raw
Responses Re: class name in target list  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-patches
Here it is.

--
  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: src/backend/parser/parse_expr.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/parse_expr.c,v
retrieving revision 1.95
diff -c -r1.95 parse_expr.c
*** src/backend/parser/parse_expr.c    2001/05/19 00:33:20    1.95
--- src/backend/parser/parse_expr.c    2001/05/20 04:23:24
***************
*** 585,591 ****
--- 585,594 ----
          Node       *var = colnameToVar(pstate, ident->name);

          if (var != NULL)
+         {
+             ident->isRel = FALSE;
              result = transformIndirection(pstate, var, ident->indirection);
+         }
      }

      if (result == NULL)
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 04:23:24
***************
*** 154,166 ****
          }
          else
          {
!             /* Everything else but Attr */
!             p_target = lappend(p_target,
!                                transformTargetEntry(pstate,
!                                                     res->val,
!                                                     NULL,
!                                                     res->name,
!                                                     false));
          }

          targetlist = lnext(targetlist);
--- 154,186 ----
          }
          else
          {
!             Node       *rteorjoin;
!             int            sublevels_up;
!             Ident       *ident = IsA(res->val, Ident) ?
!                                     (Ident *) res->val : NULL;
!
!             if (ident &&
!                 ident->indirection == NULL &&
!                 (rteorjoin = refnameRangeOrJoinEntry(pstate,
!                                                 ident->name,
!                                                 &sublevels_up)) != NULL)
!             {
!                 /* Expand SELECT tab FROM tab; to SELECT tab.* FROM tab; */
!                 ident->isRel = TRUE;
!                 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);
Index: src/include/nodes/parsenodes.h
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/nodes/parsenodes.h,v
retrieving revision 1.127
diff -c -r1.127 parsenodes.h
*** src/include/nodes/parsenodes.h    2001/05/07 00:43:25    1.127
--- src/include/nodes/parsenodes.h    2001/05/20 04:23:32
***************
*** 1080,1087 ****
      NodeTag        type;
      char       *name;            /* its name */
      List       *indirection;    /* array references */
!     bool        isRel;            /* is a relation - filled in by
!                                  * transformExpr() */
  } Ident;

  /*
--- 1080,1086 ----
      NodeTag        type;
      char       *name;            /* its name */
      List       *indirection;    /* array references */
!     bool        isRel;            /* is this a relation or a column? */
  } Ident;

  /*

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: ANT fix for frequent recompile
Next
From: Tom Lane
Date:
Subject: Re: class name in target list