]> granicus.if.org Git - postgresql/commitdiff
[ Revert patch ]
authorBruce Momjian <bruce@momjian.us>
Thu, 13 Feb 2003 05:53:46 +0000 (05:53 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 13 Feb 2003 05:53:46 +0000 (05:53 +0000)
> =================================================================
> User interface proposal for multi-row function targetlist entries
> =================================================================
> 1. Only one targetlist entry may return a set.
> 2. Each targetlist item (other than the set returning one) is
>    repeated for each item in the returned set.
>

Having gotten no objections (actually, no response at all), I can only
assume no one had heartburn with this change. The attached patch covers
the first of the two proposals, i.e. restricting the target list to only
one set returning function.

Joe Conway

src/backend/parser/parse_clause.c
src/backend/parser/parse_target.c
src/include/parser/parse_target.h

index 85af5359eaf3648fbd5edc0b7701acc7260fb315..a68442b69a91d74f1387d1e91aae14092bf884b8 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.107 2003/02/13 05:06:34 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.108 2003/02/13 05:53:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1118,7 +1118,7 @@ findTargetlistEntry(ParseState *pstate, Node *node, List *tlist, int clause)
         * the end of the target list.  This target is given resjunk = TRUE so
         * that it will not be projected into the final tuple.
         */
-       target_result = transformTargetEntry(pstate, node, expr, NULL, true, NULL);
+       target_result = transformTargetEntry(pstate, node, expr, NULL, true);
        lappend(tlist, target_result);
 
        return target_result;
index 0bc5e665d6fb49a65dff7404326628bc34aaf9c5..70aaf18ef5884fc0ce1831aba3df432d43fa8924 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.96 2003/02/13 05:06:35 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.97 2003/02/13 05:53:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,16 +42,13 @@ static int  FigureColnameInternal(Node *node, char **name);
  * colname     the column name to be assigned, or NULL if none yet set.
  * resjunk     true if the target should be marked resjunk, ie, it is not
  *                     wanted in the final projected tuple.
- * retset      if non-NULL, and the entry is a function expression, pass back
- *                     expr->funcretset
  */
 TargetEntry *
 transformTargetEntry(ParseState *pstate,
                                         Node *node,
                                         Node *expr,
                                         char *colname,
-                                        bool resjunk,
-                                        bool *retset)
+                                        bool resjunk)
 {
        Oid                     type_id;
        int32           type_mod;
@@ -64,9 +61,6 @@ transformTargetEntry(ParseState *pstate,
        if (IsA(expr, RangeVar))
                elog(ERROR, "You can't use relation names alone in the target list, try relation.*.");
 
-       if (retset && IsA(expr, FuncExpr))
-               *retset = ((FuncExpr *) expr)->funcretset;
-
        type_id = exprType(expr);
        type_mod = exprTypmod(expr);
 
@@ -99,12 +93,10 @@ transformTargetEntry(ParseState *pstate,
 List *
 transformTargetList(ParseState *pstate, List *targetlist)
 {
-       bool            retset = false;
        List       *p_target = NIL;
 
        while (targetlist != NIL)
        {
-               bool            entry_retset = false;
                ResTarget  *res = (ResTarget *) lfirst(targetlist);
 
                if (IsA(res->val, ColumnRef))
@@ -181,8 +173,7 @@ transformTargetList(ParseState *pstate, List *targetlist)
                                                                                                                res->val,
                                                                                                                NULL,
                                                                                                                res->name,
-                                                                                                               false,
-                                                                                                               &entry_retset));
+                                                                                                               false));
                        }
                }
                else if (IsA(res->val, InsertDefault))
@@ -203,16 +194,9 @@ transformTargetList(ParseState *pstate, List *targetlist)
                                                                                                        res->val,
                                                                                                        NULL,
                                                                                                        res->name,
-                                                                                                       false,
-                                                                                                       &entry_retset));
+                                                                                                       false));
                }
 
-               if (retset && entry_retset)
-                       elog(ERROR, "Only one target list entry may return a set result");
-
-               if (entry_retset)
-                       retset = true;
-
                targetlist = lnext(targetlist);
        }
 
index 3fa67cbf41fc384c9ead58c759370700cf2e6d68..b89ed3a30d6643fcd7f2c9c52358aaf27fa407dd 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parse_target.h,v 1.28 2003/02/13 05:06:35 momjian Exp $
+ * $Id: parse_target.h,v 1.29 2003/02/13 05:53:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -20,7 +20,7 @@
 extern List *transformTargetList(ParseState *pstate, List *targetlist);
 extern TargetEntry *transformTargetEntry(ParseState *pstate,
                                         Node *node, Node *expr,
-                                        char *colname, bool resjunk, bool *retset);
+                                        char *colname, bool resjunk);
 extern void updateTargetListEntry(ParseState *pstate, TargetEntry *tle,
                                          char *colname, int attrno,
                                          List *indirection);