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
104 lines
3.1 KiB
C
104 lines
3.1 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* makefuncs.h
|
|
* prototypes for the creator functions (for primitive nodes)
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/nodes/makefuncs.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef MAKEFUNC_H
|
|
#define MAKEFUNC_H
|
|
|
|
#include "nodes/parsenodes.h"
|
|
|
|
|
|
extern A_Expr *makeA_Expr(A_Expr_Kind kind, List *name,
|
|
Node *lexpr, Node *rexpr, int location);
|
|
|
|
extern A_Expr *makeSimpleA_Expr(A_Expr_Kind kind, char *name,
|
|
Node *lexpr, Node *rexpr, int location);
|
|
|
|
extern Var *makeVar(Index varno,
|
|
AttrNumber varattno,
|
|
Oid vartype,
|
|
int32 vartypmod,
|
|
Oid varcollid,
|
|
Index varlevelsup);
|
|
|
|
extern Var *makeVarFromTargetEntry(Index varno,
|
|
TargetEntry *tle);
|
|
|
|
extern Var *makeWholeRowVar(RangeTblEntry *rte,
|
|
Index varno,
|
|
Index varlevelsup,
|
|
bool allowScalar);
|
|
|
|
extern TargetEntry *makeTargetEntry(Expr *expr,
|
|
AttrNumber resno,
|
|
char *resname,
|
|
bool resjunk);
|
|
|
|
extern TargetEntry *flatCopyTargetEntry(TargetEntry *src_tle);
|
|
|
|
extern FromExpr *makeFromExpr(List *fromlist, Node *quals);
|
|
|
|
extern Const *makeConst(Oid consttype,
|
|
int32 consttypmod,
|
|
Oid constcollid,
|
|
int constlen,
|
|
Datum constvalue,
|
|
bool constisnull,
|
|
bool constbyval);
|
|
|
|
extern Const *makeNullConst(Oid consttype, int32 consttypmod, Oid constcollid);
|
|
|
|
extern Node *makeBoolConst(bool value, bool isnull);
|
|
|
|
extern Expr *makeBoolExpr(BoolExprType boolop, List *args, int location);
|
|
|
|
extern Alias *makeAlias(const char *aliasname, List *colnames);
|
|
|
|
extern RelabelType *makeRelabelType(Expr *arg, Oid rtype, int32 rtypmod,
|
|
Oid rcollid, CoercionForm rformat);
|
|
|
|
extern RangeVar *makeRangeVar(char *schemaname, char *relname, int location);
|
|
|
|
extern TypeName *makeTypeName(char *typnam);
|
|
extern TypeName *makeTypeNameFromNameList(List *names);
|
|
extern TypeName *makeTypeNameFromOid(Oid typeOid, int32 typmod);
|
|
|
|
extern ColumnDef *makeColumnDef(const char *colname,
|
|
Oid typeOid, int32 typmod, Oid collOid);
|
|
|
|
extern FuncExpr *makeFuncExpr(Oid funcid, Oid rettype, List *args,
|
|
Oid funccollid, Oid inputcollid, CoercionForm fformat);
|
|
|
|
extern FuncCall *makeFuncCall(List *name, List *args, int location);
|
|
|
|
extern Expr *make_opclause(Oid opno, Oid opresulttype, bool opretset,
|
|
Expr *leftop, Expr *rightop,
|
|
Oid opcollid, Oid inputcollid);
|
|
|
|
extern Expr *make_andclause(List *andclauses);
|
|
extern Expr *make_orclause(List *orclauses);
|
|
extern Expr *make_notclause(Expr *notclause);
|
|
|
|
extern Node *make_and_qual(Node *qual1, Node *qual2);
|
|
extern Expr *make_ands_explicit(List *andclauses);
|
|
extern List *make_ands_implicit(Expr *clause);
|
|
|
|
extern DefElem *makeDefElem(char *name, Node *arg, int location);
|
|
extern DefElem *makeDefElemExtended(char *nameSpace, char *name, Node *arg,
|
|
DefElemAction defaction, int location);
|
|
|
|
extern GroupingSet *makeGroupingSet(GroupingSetKind kind, List *content, int location);
|
|
|
|
extern VacuumRelation *makeVacuumRelation(RangeVar *relation, Oid oid, List *va_cols);
|
|
|
|
#endif /* MAKEFUNC_H */
|