diff options
author | Bruce Momjian <bruce@momjian.us> | 1998-03-18 15:49:08 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1998-03-18 15:49:08 +0000 |
commit | c530fbfb2fa4177103a44147315a3217c6527dd6 (patch) | |
tree | 708adca73b428d3fa16b9b57f266e86898a08da4 /src/backend/parser/parse_clause.c | |
parent | 94abcc16653a2ac82f2bf52c8669aa675dbebffe (diff) | |
download | postgresql-c530fbfb2fa4177103a44147315a3217c6527dd6.tar.gz postgresql-c530fbfb2fa4177103a44147315a3217c6527dd6.zip |
Add checks for UNION target fields, and add optional TABLE to LOCK
and SELECT manual pages and psql help.
Diffstat (limited to 'src/backend/parser/parse_clause.c')
-rw-r--r-- | src/backend/parser/parse_clause.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index ad38817a0bb..9bd664c4ee3 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.13 1998/02/26 04:33:29 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.14 1998/03/18 15:47:51 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -382,11 +382,26 @@ transformUnionClause(List *unionClause, List *targetlist) if (unionClause) { + /* recursion */ qlist = parse_analyze(unionClause, NULL); for (i = 0; i < qlist->len; i++) + { + List *prev_target = targetlist; + List *next_target; + + if (length(targetlist) != length(qlist->qtrees[i]->targetList)) + elog(ERROR,"Each UNION query must have the same number of columns."); + + foreach(next_target, qlist->qtrees[i]->targetList) + { + if (((TargetEntry *)lfirst(prev_target))->resdom->restype != + ((TargetEntry *)lfirst(next_target))->resdom->restype) + elog(ERROR,"Each UNION query must have identical target types."); + prev_target = lnext(prev_target); + } union_list = lappend(union_list, qlist->qtrees[i]); - /* we need to check return types are consistent here */ + } return union_list; } else |