82 lines
3.1 KiB
C
Executable File
82 lines
3.1 KiB
C
Executable File
/* -------------------------------------------------------------------------
|
|
*
|
|
* analyze.h
|
|
* parse analysis for optimizable statements
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/parser/analyze.h
|
|
*
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
#ifndef ANALYZE_H
|
|
#define ANALYZE_H
|
|
|
|
#include "parser/parse_node.h"
|
|
#include "utils/plancache.h"
|
|
|
|
/* Hook for plugins to get control at end of parse analysis */
|
|
typedef void (*post_parse_analyze_hook_type)(ParseState* pstate, Query* query);
|
|
|
|
extern THR_LOCAL PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;
|
|
|
|
extern Query* parse_analyze(Node* parseTree, const char* sourceText, Oid* paramTypes, int numParams,
|
|
bool isFirstNode = true, bool isCreateView = false);
|
|
extern Query* parse_analyze_varparams(Node* parseTree, const char* sourceText, Oid** paramTypes, int* numParams, char** paramTypeNames);
|
|
|
|
extern Query* parse_sub_analyze(Node* parseTree, ParseState* parentParseState, CommonTableExpr* parentCTE,
|
|
bool locked_from_parent, bool resolve_unknowns);
|
|
|
|
extern List* transformInsertRow(ParseState* pstate, List* exprlist, List* stmtcols, List* icolumns, List* attrnos);
|
|
extern Query* transformTopLevelStmt(
|
|
ParseState* pstate, Node* parseTree, bool isFirstNode = true, bool isCreateView = false);
|
|
extern Query* transformStmt(ParseState* pstate, Node* parseTree, bool isFirstNode = true, bool isCreateView = false);
|
|
|
|
extern bool analyze_requires_snapshot(Node* parseTree);
|
|
|
|
extern void CheckSelectLocking(Query* qry);
|
|
extern void applyLockingClause(Query* qry, Index rtindex, bool forUpdate, bool noWait, bool pushedDown);
|
|
extern void CheckTablesStorageEngine(Query* qry, StorageEngineType* type);
|
|
extern bool IsMMIndexedColumnUpdate(Query* qry);
|
|
|
|
/* Record the rel name and corresponding columan name info */
|
|
typedef struct RelColumnInfo {
|
|
char* relname;
|
|
List* colnames;
|
|
} RelColumnInfo;
|
|
|
|
typedef struct PlusJoinRTEItem {
|
|
RangeTblEntry* rte; /* The RTE that the column referennce */
|
|
bool hasplus; /* Does the Expr contains ''(+)" ? */
|
|
} PlusJoinRTEItem;
|
|
|
|
typedef struct OperatorPlusProcessContext {
|
|
List* jointerms; /* List of Jointerm */
|
|
bool contain_plus_outerjoin;
|
|
ParseState* ps; /* ParseState of Current level */
|
|
Node** whereClause;
|
|
bool in_orclause;
|
|
bool contain_joinExpr;
|
|
} OperatorPlusProcessContext;
|
|
|
|
typedef struct RTEDetectorContext {
|
|
bool isMotTable;
|
|
bool isPageTable;
|
|
List* queryNodes;
|
|
int sublevels_up;
|
|
} RTEDetectorContext;
|
|
|
|
extern void transformOperatorPlus(ParseState* pstate, Node** whereClause);
|
|
extern bool IsColumnRefPlusOuterJoin(const ColumnRef* cf);
|
|
extern PlusJoinRTEItem* makePlusJoinRTEItem(RangeTblEntry* rte, bool hasplus);
|
|
extern void setIgnorePlusFlag(ParseState* pstate, bool ignore);
|
|
extern void resetOperatorPlusFlag();
|
|
extern bool getOperatorPlusFlag();
|
|
|
|
extern void fixResTargetNameWithTableNameRef(Relation rd, RangeVar* rel, ResTarget* res);
|
|
extern void fixResTargetListWithTableNameRef(Relation rd, RangeVar* rel, List* clause_list);
|
|
|
|
#endif /* ANALYZE_H */
|