mirror of
https://github.com/postgres/postgres.git
synced 2025-06-10 09:21:54 +03:00
Fix for SELECT NOT boolfield FROM table
This commit is contained in:
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.19 1998/09/22 20:28:07 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.20 1998/09/22 21:48:27 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -453,31 +453,23 @@ flatten_tlistentry(Node *tlistentry, List *flat_tlist)
|
|||||||
{
|
{
|
||||||
if (tlistentry == NULL)
|
if (tlistentry == NULL)
|
||||||
{
|
{
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (IsA(tlistentry, Var))
|
else if (IsA(tlistentry, Var))
|
||||||
{
|
{
|
||||||
|
return ((Node *) get_expr(match_varid((Var *) tlistentry,
|
||||||
return
|
|
||||||
((Node *) get_expr(match_varid((Var *) tlistentry,
|
|
||||||
flat_tlist)));
|
flat_tlist)));
|
||||||
}
|
}
|
||||||
else if (IsA(tlistentry, Iter))
|
else if (IsA(tlistentry, Iter))
|
||||||
{
|
{
|
||||||
|
|
||||||
((Iter *) tlistentry)->iterexpr =
|
((Iter *) tlistentry)->iterexpr =
|
||||||
flatten_tlistentry((Node *) ((Iter *) tlistentry)->iterexpr,
|
flatten_tlistentry((Node *) ((Iter *) tlistentry)->iterexpr,
|
||||||
flat_tlist);
|
flat_tlist);
|
||||||
return tlistentry;
|
return tlistentry;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (single_node(tlistentry))
|
else if (single_node(tlistentry))
|
||||||
{
|
{
|
||||||
|
|
||||||
return tlistentry;
|
return tlistentry;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (is_funcclause(tlistentry))
|
else if (is_funcclause(tlistentry))
|
||||||
{
|
{
|
||||||
@ -489,15 +481,12 @@ flatten_tlistentry(Node *tlistentry, List *flat_tlist)
|
|||||||
temp_result = lappend(temp_result,
|
temp_result = lappend(temp_result,
|
||||||
flatten_tlistentry(lfirst(elt), flat_tlist));
|
flatten_tlistentry(lfirst(elt), flat_tlist));
|
||||||
|
|
||||||
return
|
return ((Node *) make_funcclause((Func *) expr->oper, temp_result));
|
||||||
((Node *) make_funcclause((Func *) expr->oper, temp_result));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (IsA(tlistentry, Aggreg))
|
else if (IsA(tlistentry, Aggreg))
|
||||||
{
|
{
|
||||||
|
|
||||||
return tlistentry;
|
return tlistentry;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (IsA(tlistentry, ArrayRef))
|
else if (IsA(tlistentry, ArrayRef))
|
||||||
{
|
{
|
||||||
@ -514,26 +503,26 @@ flatten_tlistentry(Node *tlistentry, List *flat_tlist)
|
|||||||
temp = lappend(temp, flatten_tlistentry(lfirst(elt), flat_tlist));
|
temp = lappend(temp, flatten_tlistentry(lfirst(elt), flat_tlist));
|
||||||
aref->reflowerindexpr = temp;
|
aref->reflowerindexpr = temp;
|
||||||
|
|
||||||
aref->refexpr =
|
aref->refexpr = flatten_tlistentry(aref->refexpr, flat_tlist);
|
||||||
flatten_tlistentry(aref->refexpr, flat_tlist);
|
|
||||||
|
|
||||||
aref->refassgnexpr =
|
aref->refassgnexpr = flatten_tlistentry(aref->refassgnexpr, flat_tlist);
|
||||||
flatten_tlistentry(aref->refassgnexpr, flat_tlist);
|
|
||||||
|
|
||||||
return tlistentry;
|
return tlistentry;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Expr *expr = (Expr *) tlistentry;
|
Expr *expr = (Expr *) tlistentry;
|
||||||
Var *left =
|
|
||||||
(Var *) flatten_tlistentry((Node *) get_leftop(expr),
|
|
||||||
flat_tlist);
|
|
||||||
Var *right =
|
|
||||||
(Var *) flatten_tlistentry((Node *) get_rightop(expr),
|
|
||||||
flat_tlist);
|
|
||||||
|
|
||||||
return ((Node *)
|
Var *left = (Var *) flatten_tlistentry((Node *) get_leftop(expr),
|
||||||
make_opclause((Oper *) expr->oper, left, right));
|
flat_tlist);
|
||||||
|
Var *right = (Var *) flatten_tlistentry((Node *) get_rightop(expr),
|
||||||
|
flat_tlist);
|
||||||
|
Expr *final = make_opclause((Oper *) expr->oper, left, right);
|
||||||
|
|
||||||
|
Assert(IsA(tlistentry, Expr));
|
||||||
|
final->opType = expr->opType;
|
||||||
|
final->typeOid = expr->typeOid;
|
||||||
|
return (Node *)final;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user