60 lines
2.8 KiB
C
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 */
|