PostgreSQL/src/backend/nodes/nodeFuncs.c
Tom Lane bee217924d Support expressions of the form 'scalar op ANY (array)' and
'scalar op ALL (array)', where the operator is applied between the
lefthand scalar and each element of the array.  The operator must
yield boolean; the result of the construct is the OR or AND of the
per-element results, respectively.

Original coding by Joe Conway, after an idea of Peter's.  Rewritten
by Tom to keep the implementation strictly separate from subqueries.
2003-06-29 00:33:44 +00:00

75 lines
1.6 KiB
C

/*-------------------------------------------------------------------------
*
* nodeFuncs.c
* All node routines more complicated than simple access/modification
*
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/nodes/nodeFuncs.c,v 1.22 2003/06/29 00:33:43 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
#include "nodes/nodeFuncs.h"
static bool var_is_inner(Var *var);
/*
* single_node -
* Returns t if node corresponds to a single-noded expression
*/
bool
single_node(Node *node)
{
if (IsA(node, Const) ||
IsA(node, Var) ||
IsA(node, Param))
return true;
else
return false;
}
/*****************************************************************************
* VAR nodes
*****************************************************************************/
/*
* var_is_outer
* var_is_inner
* var_is_mat
* var_is_rel
*
* Returns t iff the var node corresponds to (respectively):
* the outer relation in a join
* the inner relation of a join
* a materialized relation
* a base relation (i.e., not an attribute reference, a variable from
* some lower join level, or a sort result)
* var node is an array reference
*
*/
bool
var_is_outer(Var *var)
{
return (bool) (var->varno == OUTER);
}
static bool
var_is_inner(Var *var)
{
return (bool) (var->varno == INNER);
}
bool
var_is_rel(Var *var)
{
return (bool)
!(var_is_inner(var) || var_is_outer(var));
}