Skip junk nodes when comparing UNION target list lengths.
This commit is contained in:
parent
585c967720
commit
19c4e862d4
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.33 1999/05/17 17:03:32 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.34 1999/05/17 18:22:18 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -767,8 +767,17 @@ transformUnionClause(List *unionClause, List *targetlist)
|
|||||||
Query *query = (Query *) lfirst(qlist_item);
|
Query *query = (Query *) lfirst(qlist_item);
|
||||||
List *prev_target = targetlist;
|
List *prev_target = targetlist;
|
||||||
List *next_target;
|
List *next_target;
|
||||||
|
int prev_len = 0, next_len = 0;
|
||||||
|
|
||||||
if (length(targetlist) != length(query->targetList))
|
foreach(prev_target, targetlist)
|
||||||
|
if (!((TargetEntry *) lfirst(prev_target))->resdom->resjunk)
|
||||||
|
prev_len++;
|
||||||
|
|
||||||
|
foreach(next_target, query->targetList)
|
||||||
|
if (!((TargetEntry *) lfirst(next_target))->resdom->resjunk)
|
||||||
|
next_len++;
|
||||||
|
|
||||||
|
if (prev_len != next_len)
|
||||||
elog(ERROR, "Each UNION clause must have the same number of columns");
|
elog(ERROR, "Each UNION clause must have the same number of columns");
|
||||||
|
|
||||||
foreach(next_target, query->targetList)
|
foreach(next_target, query->targetList)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.42 1999/05/17 17:03:38 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.43 1999/05/17 18:22:19 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -2762,11 +2762,20 @@ QueryRewrite(Query *parsetree)
|
|||||||
* attributes and the types are compatible */
|
* attributes and the types are compatible */
|
||||||
void check_targetlists_are_compatible(List *prev_target, List *current_target)
|
void check_targetlists_are_compatible(List *prev_target, List *current_target)
|
||||||
{
|
{
|
||||||
List *next_target;
|
List *tl, *next_target;
|
||||||
|
int prev_len = 0, next_len = 0;
|
||||||
|
|
||||||
|
foreach(tl, prev_target)
|
||||||
|
if (!((TargetEntry *) lfirst(tl))->resdom->resjunk)
|
||||||
|
prev_len++;
|
||||||
|
|
||||||
|
foreach(next_target, current_target)
|
||||||
|
if (!((TargetEntry *) lfirst(next_target))->resdom->resjunk)
|
||||||
|
next_len++;
|
||||||
|
|
||||||
if (length(prev_target) !=
|
if (prev_len != next_len)
|
||||||
length(current_target))
|
elog(ERROR,"Each UNION | EXCEPT | INTERSECT query must have the same number of columns.");
|
||||||
elog(ERROR,"Each UNION | EXCEPT | INTERSECT query must have the same number of columns.");
|
|
||||||
foreach(next_target, current_target)
|
foreach(next_target, current_target)
|
||||||
{
|
{
|
||||||
Oid itype;
|
Oid itype;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user