OSDN Git Service

The attached patch disallows the use of coldeflists for functions that
authorBruce Momjian <bruce@momjian.us>
Tue, 6 Aug 2002 05:33:29 +0000 (05:33 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 6 Aug 2002 05:33:29 +0000 (05:33 +0000)
don't return type RECORD. It also catches a core dump condition when a
function returning RECORD had an alias list instead of a coldeflist.

Now both conditions throw an ERROR.

Joe Conway

src/backend/parser/parse_relation.c

index 872c03c..6732dc5 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.73 2002/08/05 02:30:50 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.74 2002/08/06 05:33:29 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -729,6 +729,27 @@ addRangeTableEntryForFunction(ParseState *pstate,
         */
        functyptype = get_typtype(funcrettype);
 
+       if (coldeflist != NIL)
+       {
+               /*
+                * we *only* allow a coldeflist for functions returning a
+                * RECORD pseudo-type
+                */
+               if (functyptype != 'p' || (functyptype == 'p' && funcrettype != RECORDOID))
+                       elog(ERROR, "A column definition list is only allowed for"
+                                               " functions returning RECORD");
+       }
+       else
+       {
+               /*
+                * ... and a coldeflist is *required* for functions returning a
+                * RECORD pseudo-type
+                */
+               if (functyptype == 'p' && funcrettype == RECORDOID)
+                       elog(ERROR, "A column definition list is required for functions"
+                                               " returning RECORD");
+       }
+
        if (functyptype == 'c')
        {
                /*