Files
openGauss-server/src/include/parser/parse_clause.h
2022-09-03 16:22:35 +08:00

60 lines
2.8 KiB
C

/* -------------------------------------------------------------------------
*
* parse_clause.h
* handle clauses in parser
*
*
* Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
* Portions Copyright (c) 2021, openGauss Contributors
*
* src/include/parser/parse_clause.h
*
* -------------------------------------------------------------------------
*/
#ifndef PARSE_CLAUSE_H
#define PARSE_CLAUSE_H
#include "nodes/relation.h"
#include "parser/parse_node.h"
extern void transformFromClause(ParseState* pstate, List* frmList, bool isFirstNode = true, bool isCreateView = false,
bool isUpdate = false);
extern List* setTargetTables(ParseState* pstate, List* relation, bool expandInh, bool alsoSource, AclMode requiredPerms);
extern bool interpretInhOption(InhOption inhOpt);
extern bool interpretOidsOption(List* defList);
extern Node* transformFromClauseItem(ParseState* pstate, Node* n, RangeTblEntry** top_rte, int* top_rti,
RangeTblEntry** right_rte, int* right_rti, List** relnamespace, bool isFirstNode = true,
bool isCreateView = false, bool isMergeInto = false, bool isUpdate = false);
extern Node* transformJoinOnClause(ParseState* pstate, JoinExpr* j, RangeTblEntry* l_rte, RangeTblEntry* r_rte,
List* relnamespace);
extern Node* transformWhereClause(ParseState* pstate, Node* clause, const char* constructName);
extern Node* transformLimitClause(ParseState* pstate, Node* clause, const char* constructName);
extern List* transformGroupClause(
ParseState* pstate, List* grouplist, List** groupingSets, List** targetlist, List* sortClause, bool useSQL99);
extern List* transformSortClause(
ParseState* pstate, List* orderlist, List** targetlist, bool resolveUnknown, bool useSQL99);
extern List* transformWindowDefinitions(ParseState* pstate, List* windowdefs, List** targetlist);
extern List* transformDistinctClause(ParseState* pstate, List** targetlist, List* sortClause, bool is_agg);
extern List* transformDistinctOnClause(ParseState* pstate, List* distinctlist, List** targetlist, List* sortClause);
extern Index assignSortGroupRef(TargetEntry* tle, List* tlist);
extern bool targetIsInSortList(TargetEntry* tle, Oid sortop, List* sortList);
extern List* addTargetToSortList(
ParseState* pstate, TargetEntry* tle, List* sortlist, List* targetlist, SortBy* sortby, bool resolveUnknown);
extern ParseNamespaceItem *makeNamespaceItem(RangeTblEntry *rte, bool lateral_only, bool lateral_ok);
/*
* StartWith support transformStartWith() is the only entry point for START WITH...CONNECT BY
* processing in parser/transformar layer
*/
extern void transformStartWith(ParseState *pstate, SelectStmt *stmt, Query *qry);
extern void AddStartWithCTEPseudoReturnColumns(CommonTableExpr *cte, RangeTblEntry *rte, Index rte_index);
#endif /* PARSE_CLAUSE_H */