mirror of
https://github.com/postgres/postgres.git
synced 2026-02-13 15:53:13 -05:00
Move a few very simple node-creation and node-type-testing functions from the planner's clauses.c to nodes/makefuncs and nodes/nodeFuncs. There's nothing planner-specific about them, as evidenced by the number of other places that were using them. While at it, rename and_clause() etc to is_andclause() etc, to clarify that they are node-type-testing functions not node-creation functions. And use "static inline" implementations for the shortest ones. Also, modify flatten_join_alias_vars() and some subsidiary functions to take a Query not a PlannerInfo to define the join structure that Vars should be translated according to. They were only using the "parse" field of the PlannerInfo anyway, so this just requires removing one level of indirection. The advantage is that now parse_agg.c can use flatten_join_alias_vars() without the horrid kluge of creating an incomplete PlannerInfo, which will allow that file to be decoupled from relation.h in a subsequent patch. Discussion: https://postgr.es/m/11460.1548706639@sss.pgh.pa.us
40 lines
1.5 KiB
C
40 lines
1.5 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* var.h
|
|
* prototypes for optimizer/util/var.c.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/optimizer/var.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef VAR_H
|
|
#define VAR_H
|
|
|
|
#include "nodes/relation.h"
|
|
|
|
/* Bits that can be OR'd into the flags argument of pull_var_clause() */
|
|
#define PVC_INCLUDE_AGGREGATES 0x0001 /* include Aggrefs in output list */
|
|
#define PVC_RECURSE_AGGREGATES 0x0002 /* recurse into Aggref arguments */
|
|
#define PVC_INCLUDE_WINDOWFUNCS 0x0004 /* include WindowFuncs in output list */
|
|
#define PVC_RECURSE_WINDOWFUNCS 0x0008 /* recurse into WindowFunc arguments */
|
|
#define PVC_INCLUDE_PLACEHOLDERS 0x0010 /* include PlaceHolderVars in
|
|
* output list */
|
|
#define PVC_RECURSE_PLACEHOLDERS 0x0020 /* recurse into PlaceHolderVar
|
|
* arguments */
|
|
|
|
|
|
extern Relids pull_varnos(Node *node);
|
|
extern Relids pull_varnos_of_level(Node *node, int levelsup);
|
|
extern void pull_varattnos(Node *node, Index varno, Bitmapset **varattnos);
|
|
extern List *pull_vars_of_level(Node *node, int levelsup);
|
|
extern bool contain_var_clause(Node *node);
|
|
extern bool contain_vars_of_level(Node *node, int levelsup);
|
|
extern int locate_var_of_level(Node *node, int levelsup);
|
|
extern List *pull_var_clause(Node *node, int flags);
|
|
extern Node *flatten_join_alias_vars(Query *query, Node *node);
|
|
|
|
#endif /* VAR_H */
|