1 /*-------------------------------------------------------------------------
4 * Definitions for "primitive" node types, those that are used in more
5 * than one of the parse/plan/execute stages of the query pipeline.
6 * Currently, these are mostly nodes for executable expressions
10 * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
11 * Portions Copyright (c) 1994, Regents of the University of California
13 * $Id: primnodes.h,v 1.74 2002/12/13 19:46:00 tgl Exp $
15 *-------------------------------------------------------------------------
20 #include "access/attnum.h"
21 #include "nodes/pg_list.h"
24 /* ----------------------------------------------------------------
26 * ----------------------------------------------------------------
29 /*--------------------
30 * Resdom (Result Domain)
33 * ressortgroupref is the parse/plan-time representation of ORDER BY and
34 * GROUP BY items. Targetlist entries with ressortgroupref=0 are not
35 * sort/group items. If ressortgroupref>0, then this item is an ORDER BY or
36 * GROUP BY value. No two entries in a targetlist may have the same nonzero
37 * ressortgroupref --- but there is no particular meaning to the nonzero
38 * values, except as tags. (For example, one must not assume that lower
39 * ressortgroupref means a more significant sort key.) The order of the
40 * associated SortClause or GroupClause lists determine the semantics.
42 * reskey and reskeyop are the execution-time representation of sorting.
43 * reskey must be zero in any non-sort-key item. The reskey of sort key
44 * targetlist items for a sort plan node is 1,2,...,n for the n sort keys.
45 * The reskeyop of each such targetlist item is the sort operator's OID.
46 * reskeyop will be zero in non-sort-key items.
48 * Both reskey and reskeyop are typically zero during parse/plan stages.
49 * The executor does not pay any attention to ressortgroupref.
55 AttrNumber resno; /* attribute number */
56 Oid restype; /* type of the value */
57 int32 restypmod; /* type-specific modifier of the value */
58 char *resname; /* name of the resdom (could be NULL) */
59 Index ressortgroupref;
60 /* nonzero if referenced by a sort/group clause */
61 Index reskey; /* order of key in a sort (for those > 0) */
62 Oid reskeyop; /* sort operator's Oid */
63 bool resjunk; /* set to true to eliminate the attribute
64 * from final target list */
70 * specifies an alias for a range variable; the alias might also
71 * specify renaming of columns within the table.
76 char *aliasname; /* aliased rel name (never qualified) */
77 List *colnames; /* optional list of column aliases */
78 /* Note: colnames is a list of Value nodes (always strings) */
81 typedef enum InhOption
83 INH_NO, /* Do NOT scan child tables */
84 INH_YES, /* DO scan child tables */
85 INH_DEFAULT /* Use current SQL_inheritance option */
89 * RangeVar - range variable, used in FROM clauses
91 * Also used to represent table names in utility statements; there, the alias
92 * field is not used, and inhOpt shows whether to apply the operation
93 * recursively to child tables. In some contexts it is also useful to carry
94 * a TEMP table indication here.
96 typedef struct RangeVar
99 char *catalogname; /* the catalog (database) name, or NULL */
100 char *schemaname; /* the schema name, or NULL */
101 char *relname; /* the relation/sequence name */
102 InhOption inhOpt; /* expand rel by inheritance? recursively
103 * act on children? */
104 bool istemp; /* is this a temp relation/sequence? */
105 Alias *alias; /* table alias & optional column aliases */
109 /* ----------------------------------------------------------------
110 * node types for executable expressions
111 * ----------------------------------------------------------------
115 * Expr - generic superclass for executable-expression nodes
117 * All node types that are used in executable expression trees should derive
118 * from Expr (that is, have Expr as their first field). Since Expr only
119 * contains NodeTag, this is a formality, but it is an easy form of
120 * documentation. See also the ExprState node types in execnodes.h.
128 * Var - expression node representing a variable (ie, a table column)
130 * Note: during parsing/planning, varnoold/varoattno are always just copies
131 * of varno/varattno. At the tail end of planning, Var nodes appearing in
132 * upper-level plan nodes are reassigned to point to the outputs of their
133 * subplans; for example, in a join node varno becomes INNER or OUTER and
134 * varattno becomes the index of the proper element of that subplan's target
135 * list. But varnoold/varoattno continue to hold the original values.
136 * The code doesn't really need varnoold/varoattno, but they are very useful
137 * for debugging and interpreting completed plans, so we keep them around.
142 #define PRS2_OLD_VARNO 1
143 #define PRS2_NEW_VARNO 2
148 Index varno; /* index of this var's relation in the
149 * range table (could also be INNER or
151 AttrNumber varattno; /* attribute number of this var, or zero
153 Oid vartype; /* pg_type tuple OID for the type of this
155 int32 vartypmod; /* pg_attribute typmod value */
159 * for subquery variables referencing outer relations; 0 in a normal
160 * var, >0 means N levels up
162 Index varnoold; /* original value of varno, for debugging */
163 AttrNumber varoattno; /* original value of varattno */
172 Oid consttype; /* PG_TYPE OID of the constant's datatype */
173 int constlen; /* typlen of the constant's datatype */
174 Datum constvalue; /* the constant's value */
175 bool constisnull; /* whether the constant is null (if true,
176 * constvalue is undefined) */
177 bool constbyval; /* whether this datatype is passed by value.
178 * If true, then all the information is
179 * stored in the Datum.
180 * If false, then the Datum contains a
181 * pointer to the information. */
186 * paramkind - specifies the kind of parameter. The possible values
187 * for this field are specified in "params.h", and they are:
189 * PARAM_NAMED: The parameter has a name, i.e. something
190 * like `$.salary' or `$.foobar'.
191 * In this case field `paramname' must be a valid name.
193 * PARAM_NUM: The parameter has only a numeric identifier,
194 * i.e. something like `$1', `$2' etc.
195 * The number is contained in the `paramid' field.
197 * PARAM_EXEC: The parameter is an internal executor parameter.
198 * It has a number contained in the `paramid' field.
204 int paramkind; /* kind of parameter. See above */
205 AttrNumber paramid; /* numeric ID for parameter ("$1") */
206 char *paramname; /* name for parameter ("$.foo") */
207 Oid paramtype; /* PG_TYPE OID of parameter's datatype */
213 typedef struct Aggref
216 Oid aggfnoid; /* pg_proc Oid of the aggregate */
217 Oid aggtype; /* type Oid of result of the aggregate */
218 Expr *target; /* expression we are aggregating on */
219 bool aggstar; /* TRUE if argument was really '*' */
220 bool aggdistinct; /* TRUE if it's agg(DISTINCT ...) */
224 * ArrayRef: describes an array subscripting operation
226 * An ArrayRef can describe fetching a single element from an array,
227 * fetching a subarray (array slice), storing a single element into
228 * an array, or storing a slice. The "store" cases work with an
229 * initial array value and a source value that is inserted into the
230 * appropriate part of the array; the result of the operation is an
231 * entire new modified array value.
233 * If reflowerindexpr = NIL, then we are fetching or storing a single array
234 * element at the subscripts given by refupperindexpr. Otherwise we are
235 * fetching or storing an array slice, that is a rectangular subarray
236 * with lower and upper bounds given by the index expressions.
237 * reflowerindexpr must be the same length as refupperindexpr when it
240 * Note: array types can be fixed-length (refattrlength > 0), but only
241 * when the element type is itself fixed-length. Otherwise they are
242 * varlena structures and have refattrlength = -1. In any case,
243 * an array type is never pass-by-value.
245 * Note: refrestype is NOT the element type, but the array type,
246 * when doing subarray fetch or either type of store. It might be a good
247 * idea to include a refelemtype field as well.
250 typedef struct ArrayRef
253 Oid refrestype; /* type of the result of the ArrayRef
255 int refattrlength; /* typlen of array type */
256 int refelemlength; /* typlen of the array element type */
257 bool refelembyval; /* is the element type pass-by-value? */
258 char refelemalign; /* typalign of the element type */
259 List *refupperindexpr;/* expressions that evaluate to upper
261 List *reflowerindexpr;/* expressions that evaluate to lower
263 Expr *refexpr; /* the expression that evaluates to an
265 Expr *refassgnexpr; /* expression for the source value, or
270 * CoercionContext - distinguishes the allowed set of type casts
272 * NB: ordering of the alternatives is significant; later (larger) values
273 * allow more casts than earlier ones.
275 typedef enum CoercionContext
277 COERCION_IMPLICIT, /* coercion in context of expression */
278 COERCION_ASSIGNMENT, /* coercion in context of assignment */
279 COERCION_EXPLICIT /* explicit cast operation */
283 * CoercionForm - information showing how to display a function-call node
285 typedef enum CoercionForm
287 COERCE_EXPLICIT_CALL, /* display as a function call */
288 COERCE_EXPLICIT_CAST, /* display as an explicit cast */
289 COERCE_IMPLICIT_CAST, /* implicit cast, so hide it */
290 COERCE_DONTCARE /* special case for pathkeys */
294 * FuncExpr - expression node for a function call
296 typedef struct FuncExpr
299 Oid funcid; /* PG_PROC OID of the function */
300 Oid funcresulttype; /* PG_TYPE OID of result value */
301 bool funcretset; /* true if function returns set */
302 CoercionForm funcformat; /* how to display this function call */
303 List *args; /* arguments to the function */
307 * OpExpr - expression node for an operator invocation
309 * Semantically, this is essentially the same as a function call.
311 * Note that opfuncid is not necessarily filled in immediately on creation
312 * of the node. The planner makes sure it is valid before passing the node
313 * tree to the executor, but during parsing/planning opfuncid is typically 0.
315 typedef struct OpExpr
318 Oid opno; /* PG_OPERATOR OID of the operator */
319 Oid opfuncid; /* PG_PROC OID of underlying function */
320 Oid opresulttype; /* PG_TYPE OID of result value */
321 bool opretset; /* true if operator returns set */
322 List *args; /* arguments to the operator (1 or 2) */
326 * DistinctExpr - expression node for "x IS DISTINCT FROM y"
328 * Except for the nodetag, this is represented identically to an OpExpr
329 * referencing the "=" operator for x and y.
330 * We use "=", not the more obvious "<>", because more datatypes have "="
331 * than "<>". This means the executor must invert the operator result.
332 * Note that the operator function won't be called at all if either input
333 * is NULL, since then the result can be determined directly.
335 typedef OpExpr DistinctExpr;
338 * BoolExpr - expression node for the basic Boolean operators AND, OR, NOT
340 * Notice the arguments are given as a List. For NOT, of course the list
341 * must always have exactly one element. For AND and OR, the executor can
342 * handle any number of arguments. The parser treats AND and OR as binary
343 * and so it only produces two-element lists, but the optimizer will flatten
344 * trees of AND and OR nodes to produce longer lists when possible.
346 typedef enum BoolExprType
348 AND_EXPR, OR_EXPR, NOT_EXPR
351 typedef struct BoolExpr
355 List *args; /* arguments to this expression */
361 * A SubLink represents a subselect appearing in an expression, and in some
362 * cases also the combining operator(s) just above it. The subLinkType
363 * indicates the form of the expression represented:
364 * EXISTS_SUBLINK EXISTS(SELECT ...)
365 * ALL_SUBLINK (lefthand) op ALL (SELECT ...)
366 * ANY_SUBLINK (lefthand) op ANY (SELECT ...)
367 * MULTIEXPR_SUBLINK (lefthand) op (SELECT ...)
368 * EXPR_SUBLINK (SELECT with single targetlist item ...)
369 * For ALL, ANY, and MULTIEXPR, the lefthand is a list of expressions of the
370 * same length as the subselect's targetlist. MULTIEXPR will *always* have
371 * a list with more than one entry; if the subselect has just one target
372 * then the parser will create an EXPR_SUBLINK instead (and any operator
373 * above the subselect will be represented separately). Note that both
374 * MULTIEXPR and EXPR require the subselect to deliver only one row.
375 * ALL, ANY, and MULTIEXPR require the combining operators to deliver boolean
376 * results. These are reduced to one result per row using OR or AND semantics
377 * depending on the "useor" flag. ALL and ANY combine the per-row results
378 * using AND and OR semantics respectively.
380 * SubLink is classed as an Expr node, but it is not actually executable;
381 * it must be replaced in the expression tree by a SubPlanExpr node during
384 * NOTE: lefthand and oper have varying meanings depending on where you look
385 * in the parse/plan pipeline:
386 * 1. gram.y delivers a list of the (untransformed) lefthand expressions in
387 * lefthand, and sets oper to a single A_Expr (not a list!) containing
388 * the string name of the operator, but no arguments.
389 * 2. The parser's expression transformation transforms lefthand normally,
390 * and replaces oper with a list of OpExpr nodes, one per lefthand
391 * expression. These nodes represent the parser's resolution of exactly
392 * which operator to apply to each pair of lefthand and targetlist
393 * expressions. However, we have not constructed complete Expr trees for
394 * these operations yet: the args fields of the OpExpr nodes are NIL.
395 * This is the representation seen in saved rules and in the rewriter.
396 * 3. Finally, the planner converts the oper list to a list of normal OpExpr
397 * nodes representing the application of the operator(s) to the lefthand
398 * expressions and values from the inner targetlist. The inner
399 * targetlist items are represented by placeholder Param nodes.
400 * The lefthand field is set to NIL, since its expressions are now in
401 * the Expr list. This representation is passed to the executor.
403 * Planner routines that might see either representation 2 or 3 can tell
404 * the difference by checking whether lefthand is NIL or not. Also,
405 * representation 2 appears in a "bare" SubLink, while representation 3 is
406 * found in SubLinks that are children of SubPlanExpr nodes.
408 * In EXISTS and EXPR SubLinks, both lefthand and oper are unused and are
409 * always NIL. useor is not significant either for these sublink types.
412 typedef enum SubLinkType
414 EXISTS_SUBLINK, ALL_SUBLINK, ANY_SUBLINK, MULTIEXPR_SUBLINK, EXPR_SUBLINK
418 typedef struct SubLink
421 SubLinkType subLinkType; /* EXISTS, ALL, ANY, MULTIEXPR, EXPR */
422 bool useor; /* TRUE to combine column results with
424 List *lefthand; /* list of outer-query expressions on the
426 List *oper; /* list of OpExpr nodes for combining
427 * operators, or final list of executable
429 Node *subselect; /* subselect as Query* or parsetree */
433 * SubPlanExpr - executable expression node for a subplan (sub-SELECT)
435 * The planner replaces SubLink nodes in expression trees with SubPlanExpr
436 * nodes after it has finished planning the subquery. See notes above.
438 typedef struct SubPlanExpr
441 Oid typeOid; /* PG_TYPE OID of the expression result */
442 struct Plan *plan; /* subselect plan itself */
443 int plan_id; /* dummy thing because of we haven't equal
444 * funcs for plan nodes... actually, we
445 * could put *plan itself somewhere else
446 * (TopPlan node ?)... */
447 List *rtable; /* range table for subselect */
448 /* setParam and parParam are lists of integers (param IDs) */
449 List *setParam; /* non-correlated EXPR & EXISTS subqueries
450 * have to set some Params for paren Plan */
451 List *parParam; /* indices of input Params from parent plan */
452 List *args; /* exprs to pass as parParam values */
453 SubLink *sublink; /* SubLink node from parser; holds info
454 * about what to do with subselect's
461 * FieldSelect represents the operation of extracting one field from a tuple
462 * value. At runtime, the input expression is expected to yield a Datum
463 * that contains a pointer-to-TupleTableSlot. The specified field number
464 * is extracted and returned as a Datum.
468 typedef struct FieldSelect
471 Expr *arg; /* input expression */
472 AttrNumber fieldnum; /* attribute number of field to extract */
473 Oid resulttype; /* type of the field (result type of this
475 int32 resulttypmod; /* output typmod (usually -1) */
481 * RelabelType represents a "dummy" type coercion between two binary-
482 * compatible datatypes, such as reinterpreting the result of an OID
483 * expression as an int4. It is a no-op at runtime; we only need it
484 * to provide a place to store the correct type to be attributed to
485 * the expression result during type resolution. (We can't get away
486 * with just overwriting the type field of the input expression node,
487 * so we need a separate node to show the coercion's result type.)
491 typedef struct RelabelType
494 Expr *arg; /* input expression */
495 Oid resulttype; /* output type of coercion expression */
496 int32 resulttypmod; /* output typmod (usually -1) */
497 CoercionForm relabelformat; /* how to display this node */
501 * CaseExpr - a CASE expression
503 typedef struct CaseExpr
506 Oid casetype; /* type of expression result */
507 Expr *arg; /* implicit equality comparison argument */
508 List *args; /* the arguments (list of WHEN clauses) */
509 Expr *defresult; /* the default result (ELSE clause) */
513 * CaseWhen - an argument to a CASE expression
515 typedef struct CaseWhen
518 Expr *expr; /* condition expression */
519 Expr *result; /* substitution result */
525 * NullTest represents the operation of testing a value for NULLness.
526 * Currently, we only support scalar input values, but eventually a
527 * row-constructor input should be supported.
528 * The appropriate test is performed and returned as a boolean Datum.
532 typedef enum NullTestType
537 typedef struct NullTest
540 Expr *arg; /* input expression */
541 NullTestType nulltesttype; /* IS NULL, IS NOT NULL */
547 * BooleanTest represents the operation of determining whether a boolean
548 * is TRUE, FALSE, or UNKNOWN (ie, NULL). All six meaningful combinations
549 * are supported. Note that a NULL input does *not* cause a NULL result.
550 * The appropriate test is performed and returned as a boolean Datum.
553 typedef enum BoolTestType
555 IS_TRUE, IS_NOT_TRUE, IS_FALSE, IS_NOT_FALSE, IS_UNKNOWN, IS_NOT_UNKNOWN
558 typedef struct BooleanTest
561 Expr *arg; /* input expression */
562 BoolTestType booltesttype; /* test type */
568 * ConstraintTest represents the operation of testing a value to see whether
569 * it meets a constraint. If so, the input value is returned as the result;
570 * if not, an error is raised.
573 typedef enum ConstraintTestType
577 } ConstraintTestType;
579 typedef struct ConstraintTest
582 Expr *arg; /* input expression */
583 ConstraintTestType testtype; /* test type */
584 char *name; /* name of constraint (for error msgs) */
585 char *domname; /* name of domain (for error messages) */
586 Expr *check_expr; /* for CHECK test, a boolean expression */
590 * Placeholder node for the value to be processed by a domain's check
591 * constraint. This is effectively like a Param, but can be implemented more
592 * simply since we need only one replacement value at a time.
594 * Note: the typeId/typeMod will be set from the domain's base type, not
595 * the domain itself. This is because we shouldn't consider the value to
596 * be a member of the domain if we haven't yet checked its constraints.
598 typedef struct ConstraintTestValue
601 Oid typeId; /* type for substituted value */
602 int32 typeMod; /* typemod for substituted value */
603 } ConstraintTestValue;
608 * a target entry (used in query target lists)
610 * Strictly speaking, a TargetEntry isn't an expression node (since it can't
611 * be evaluated by ExecEvalExpr). But we treat it as one anyway, since in
612 * very many places it's convenient to process a whole query targetlist as a
613 * single expression tree.
615 * The separation between TargetEntry and Resdom is historical. One of these
616 * days, Resdom should probably get folded into TargetEntry.
618 typedef struct TargetEntry
621 Resdom *resdom; /* descriptor for targetlist item */
622 Expr *expr; /* expression to evaluate */
626 /* ----------------------------------------------------------------
627 * node types for join trees
629 * The leaves of a join tree structure are RangeTblRef nodes. Above
630 * these, JoinExpr nodes can appear to denote a specific kind of join
631 * or qualified join. Also, FromExpr nodes can appear to denote an
632 * ordinary cross-product join ("FROM foo, bar, baz WHERE ...").
633 * FromExpr is like a JoinExpr of jointype JOIN_INNER, except that it
634 * may have any number of child nodes, not just two. Also, there is an
635 * implementation-defined difference: the planner is allowed to join the
636 * children of a FromExpr using whatever join order seems good to it.
637 * At present, JoinExpr nodes are always joined in exactly the order
638 * implied by the jointree structure (except the planner may choose to
639 * swap inner and outer members of a join pair).
641 * NOTE: the top level of a Query's jointree is always a FromExpr.
642 * Even if the jointree contains no rels, there will be a FromExpr.
644 * NOTE: the qualification expressions present in JoinExpr nodes are
645 * *in addition to* the query's main WHERE clause, which appears as the
646 * qual of the top-level FromExpr. The reason for associating quals with
647 * specific nodes in the jointree is that the position of a qual is critical
648 * when outer joins are present. (If we enforce a qual too soon or too late,
649 * that may cause the outer join to produce the wrong set of NULL-extended
650 * rows.) If all joins are inner joins then all the qual positions are
651 * semantically interchangeable.
653 * NOTE: in the raw output of gram.y, a join tree contains RangeVar,
654 * RangeSubselect, and RangeFunction nodes, which are all replaced by
655 * RangeTblRef nodes during the parse analysis phase. Also, the top-level
656 * FromExpr is added during parse analysis; the grammar regards FROM and
658 * ----------------------------------------------------------------
662 * RangeTblRef - reference to an entry in the query's rangetable
664 * We could use direct pointers to the RT entries and skip having these
665 * nodes, but multiple pointers to the same node in a querytree cause
666 * lots of headaches, so it seems better to store an index into the RT.
668 typedef struct RangeTblRef
675 * JoinExpr - for SQL JOIN expressions
677 * isNatural, using, and quals are interdependent. The user can write only
678 * one of NATURAL, USING(), or ON() (this is enforced by the grammar).
679 * If he writes NATURAL then parse analysis generates the equivalent USING()
680 * list, and from that fills in "quals" with the right equality comparisons.
681 * If he writes USING() then "quals" is filled with equality comparisons.
682 * If he writes ON() then only "quals" is set. Note that NATURAL/USING
683 * are not equivalent to ON() since they also affect the output column list.
685 * alias is an Alias node representing the AS alias-clause attached to the
686 * join expression, or NULL if no clause. NB: presence or absence of the
687 * alias has a critical impact on semantics, because a join with an alias
688 * restricts visibility of the tables/columns inside it.
690 * During parse analysis, an RTE is created for the Join, and its index
691 * is filled into rtindex. This RTE is present mainly so that Vars can
692 * be created that refer to the outputs of the join.
695 typedef struct JoinExpr
698 JoinType jointype; /* type of join */
699 bool isNatural; /* Natural join? Will need to shape table */
700 Node *larg; /* left subtree */
701 Node *rarg; /* right subtree */
702 List *using; /* USING clause, if any (list of String) */
703 Node *quals; /* qualifiers on join, if any */
704 Alias *alias; /* user-written alias clause, if any */
705 int rtindex; /* RT index assigned for join */
709 * FromExpr - represents a FROM ... WHERE ... construct
711 * This is both more flexible than a JoinExpr (it can have any number of
712 * children, including zero) and less so --- we don't need to deal with
713 * aliases and so on. The output column set is implicitly just the union
714 * of the outputs of the children.
717 typedef struct FromExpr
720 List *fromlist; /* List of join subtrees */
721 Node *quals; /* qualifiers on join, if any */
724 #endif /* PRIMNODES_H */