diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index 75d5a50702a..7c0e0d1a332 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/parse_relation.c,v 1.125 2006/10/04 00:29:56 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/parser/parse_relation.c,v 1.125.2.1 2008/04/05 01:58:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1026,6 +1026,16 @@ addRangeTableEntryForJoin(ParseState *pstate, Alias *eref; int numaliases; + /* + * Fail if join has too many columns --- we must be able to reference + * any of the columns with an AttrNumber. + */ + if (list_length(aliasvars) > MaxAttrNumber) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("joins can have at most %d columns", + MaxAttrNumber))); + rte->rtekind = RTE_JOIN; rte->relid = InvalidOid; rte->subquery = NULL; diff --git a/src/include/access/attnum.h b/src/include/access/attnum.h index 75e6f9c5219..741847a1692 100644 --- a/src/include/access/attnum.h +++ b/src/include/access/attnum.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/attnum.h,v 1.22 2006/03/05 15:58:53 momjian Exp $ + * $PostgreSQL: pgsql/src/include/access/attnum.h,v 1.22.2.1 2008/04/05 01:58:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -21,6 +21,7 @@ typedef int16 AttrNumber; #define InvalidAttrNumber 0 +#define MaxAttrNumber 32767 /* ---------------- * support macros