From: Bruce Momjian Date: Tue, 6 Aug 2002 05:33:29 +0000 (+0000) Subject: The attached patch disallows the use of coldeflists for functions that X-Git-Tag: REL7_3~1002 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dd6513a5b662e0a3e0de378f616741b7d77f3d32;p=postgresql The attached patch disallows the use of coldeflists for functions that 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 --- diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index 872c03ca9f..6732dc54b5 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -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') { /*