diff options
Diffstat (limited to 'src/backend/nodes/parsenodes.h')
-rw-r--r-- | src/backend/nodes/parsenodes.h | 736 |
1 files changed, 0 insertions, 736 deletions
diff --git a/src/backend/nodes/parsenodes.h b/src/backend/nodes/parsenodes.h deleted file mode 100644 index d8ca5b9243e..00000000000 --- a/src/backend/nodes/parsenodes.h +++ /dev/null @@ -1,736 +0,0 @@ -/*------------------------------------------------------------------------- - * - * parsenodes.h-- - * definitions for parse tree nodes - * - * - * Copyright (c) 1994, Regents of the University of California - * - * $Id: parsenodes.h,v 1.5 1996/08/26 06:30:54 scrappy Exp $ - * - *------------------------------------------------------------------------- - */ -#ifndef PARSENODES_H -#define PARSENODES_H - -#include "nodes/nodes.h" -#include "nodes/pg_list.h" -#include "nodes/primnodes.h" -#include "utils/tqual.h" - -/***************************************************************************** - * Query Tree - *****************************************************************************/ - -/* - * Query - - * all statments are turned into a Query tree (via transformStmt) - * for further processing by the optimizer - * utility statements (i.e. non-optimizable statements) - * have the *utilityStmt field set. - * - * we need the isPortal flag because portal names can be null too; can - * get rid of it if we support CURSOR as a commandType. - * - */ -typedef struct Query { - NodeTag type; - - CmdType commandType; /* select|insert|update|delete|utility */ - - Node *utilityStmt; /* non-null if this is a non-optimizable - statement */ - - int resultRelation; /* target relation (index to rtable) */ - char *into; /* portal (cursor) name */ - bool isPortal; /* is this a retrieve into portal? */ - bool isBinary; /* binary portal? */ - - char *uniqueFlag; /* NULL, '*', or Unique attribute name */ - List *sortClause; /* a list of SortClause's */ - - List *rtable; /* list of range table entries */ - List *targetList; /* target list (of TargetEntry) */ - Node *qual; /* qualifications */ - - List *groupClause; /* list of columns to specified in GROUP BY */ - Node *havingQual; /* qualification of each group */ - - int qry_numAgg; /* number of aggregates in the target list */ - Aggreg **qry_aggs; /* the aggregates */ - - /* internal to planner */ - List *base_relation_list_; /* base relation list */ - List *join_relation_list_; /* list of relations generated by joins */ - bool query_is_archival_; /* archival query flag */ -} Query; - - -/***************************************************************************** - * Other Statements (no optimizations required) - * - * Some of them require a little bit of transformation (which is also - * done by transformStmt). The whole structure is then passed on to - * ProcessUtility (by-passing the optimization step) as the utilityStmt - * field in Query. - *****************************************************************************/ - -/* ---------------------- - * Add Column Statement - * ---------------------- - */ -typedef struct AddAttrStmt { - NodeTag type; - char *relname; /* the relation to add attr */ - bool inh; /* add recursively to children? */ - struct ColumnDef *colDef; /* the attribute definition */ -} AddAttrStmt; - -/* ---------------------- - * Change ACL Statement - * ---------------------- - */ -typedef struct ChangeACLStmt { - NodeTag type; - struct AclItem *aclitem; - unsigned modechg; - List *relNames; -} ChangeACLStmt; - -/* ---------------------- - * Close Portal Statement - * ---------------------- - */ -typedef struct ClosePortalStmt { - NodeTag type; - char *portalname; /* name of the portal (cursor) */ -} ClosePortalStmt; - -/* ---------------------- - * Copy Statement - * ---------------------- - */ -typedef struct CopyStmt { - NodeTag type; - bool binary; /* is a binary copy? */ - char *relname; /* the relation to copy */ - bool oids; /* copy oid's? */ - int direction; /* TO or FROM */ - char *filename; /* if NULL, use stdin/stdout */ - char *delimiter; /* delimiter character, \t by default*/ -} CopyStmt; - -/* ---------------------- - * Create Table Statement - * ---------------------- - */ -typedef enum ArchType { - ARCH_NONE, ARCH_LIGHT, ARCH_HEAVY /* archive mode */ -} ArchType; - -typedef struct CreateStmt { - NodeTag type; - char *relname; /* the relation to create */ - List *tableElts; /* column definitions - list of ColumnDef */ - List *inhRelnames; /* relations to inherit from - list of Value (string) */ - ArchType archiveType; /* archive mode (ARCH_NONE if none */ - int location; /* smgrid (-1 if none) */ - int archiveLoc; /* smgrid (-1 if none) */ -} CreateStmt; - -/* ---------------------- - * Create Version Statement - * ---------------------- - */ -typedef struct VersionStmt { - NodeTag type; - char *relname; /* the new relation */ - int direction; /* FORWARD | BACKWARD */ - char *fromRelname; /* relation to create a version */ - char *date; /* date of the snapshot */ -} VersionStmt; - -/* ---------------------- - * Create {Operator|Type|Aggregate} Statement - * ---------------------- - */ -typedef struct DefineStmt { - NodeTag type; - int defType; /* OPERATOR|P_TYPE|AGGREGATE*/ - char *defname; - List *definition; /* a list of DefElem */ -} DefineStmt; - -/* ---------------------- - * Drop Table Statement - * ---------------------- - */ -typedef struct DestroyStmt { - NodeTag type; - List *relNames; /* relations to be dropped */ -} DestroyStmt; - -/* ---------------------- - * Extend Index Statement - * ---------------------- - */ -typedef struct ExtendStmt { - NodeTag type; - char *idxname; /* name of the index */ - Node *whereClause; /* qualifications */ - List *rangetable; /* range table, filled in - by transformStmt() */ -} ExtendStmt; - -/* ---------------------- - * Begin Recipe Statement - * ---------------------- - */ -typedef struct RecipeStmt { - NodeTag type; - char *recipeName; /* name of the recipe*/ -} RecipeStmt; - -/* ---------------------- - * Fetch Statement - * ---------------------- - */ -typedef struct FetchStmt { - NodeTag type; - int direction; /* FORWARD or BACKWARD */ - int howMany; /* amount to fetch ("ALL" --> 0) */ - char *portalname; /* name of portal (cursor) */ -} FetchStmt; - -/* ---------------------- - * Create Index Statement - * ---------------------- - */ -typedef struct IndexStmt { - NodeTag type; - char *idxname; /* name of the index */ - char *relname; /* name of relation to index on */ - char *accessMethod; /* name of acess methood (eg. btree) */ - List *indexParams; /* a list of IndexElem */ - List *withClause; /* a list of ParamString */ - Node *whereClause; /* qualifications */ - List *rangetable; /* range table, filled in - by transformStmt() */ - bool *lossy; /* is index lossy? */ -} IndexStmt; - -/* ---------------------- - * Move Statement (Not implemented) - * ---------------------- - */ -typedef struct MoveStmt { - NodeTag type; - int direction; /* FORWARD or BACKWARD */ - bool to; - int where; - char *portalname; -} MoveStmt; - -/* ---------------------- - * Create Function Statement - * ---------------------- - */ -typedef struct ProcedureStmt { - NodeTag type; - char *funcname; /* name of function to create */ - List *defArgs; /* list of definitions - a list of strings (as Value *) */ - Node *returnType; /* the return type (as a string or - a TypeName (ie.setof) */ - List *withClause; /* a list of ParamString */ - char *as; /* the SQL statement or filename */ - char *language; /* C or SQL */ -} ProcedureStmt; - -/* ---------------------- - * Purge Statement - * ---------------------- - */ -typedef struct PurgeStmt { - NodeTag type; - char *relname; /* relation to purge */ - char *beforeDate; /* purge before this date */ - char *afterDate; /* purge after this date */ -} PurgeStmt; - -/* ---------------------- - * Drop Function Statement - * ---------------------- - */ -typedef struct RemoveFuncStmt { - NodeTag type; - char *funcname; /* function to drop */ - List *args; /* types of the arguments */ -} RemoveFuncStmt; - -/* ---------------------- - * Drop Operator Statement - * ---------------------- - */ -typedef struct RemoveOperStmt { - NodeTag type; - char *opname; /* operator to drop */ - List *args; /* types of the arguments */ -} RemoveOperStmt; - -/* ---------------------- - * Drop {Aggregate|Type|Index|Rule|View} Statement - * ---------------------- - */ -typedef struct RemoveStmt { - NodeTag type; - int removeType; /* AGGREGATE|P_TYPE|INDEX|RULE|VIEW */ - char *name; /* name to drop */ -} RemoveStmt; - -/* ---------------------- - * Alter Table Statement - * ---------------------- - */ -typedef struct RenameStmt { - NodeTag type; - char *relname; /* relation to be altered */ - bool inh; /* recursively alter children? */ - char *column; /* if NULL, rename the relation name - to the new name. Otherwise, rename - this column name. */ - char *newname; /* the new name */ -} RenameStmt; - -/* ---------------------- - * Create Rule Statement - * ---------------------- - */ -typedef struct RuleStmt { - NodeTag type; - char *rulename; /* name of the rule */ - Node *whereClause; /* qualifications */ - CmdType event; /* RETRIEVE */ - struct Attr *object; /* object affected */ - bool instead; /* is a 'do instead'? */ - List *actions; /* the action statements */ -} RuleStmt; - -/* ---------------------- - * Notify Statement - * ---------------------- - */ -typedef struct NotifyStmt { - NodeTag type; - char *relname; /* relation to notify */ -} NotifyStmt; - -/* ---------------------- - * Listen Statement - * ---------------------- - */ -typedef struct ListenStmt { - NodeTag type; - char *relname; /* relation to listen on */ -} ListenStmt; - -/* ---------------------- - * {Begin|Abort|End} Transaction Statement - * ---------------------- - */ -typedef struct TransactionStmt { - NodeTag type; - int command; /* BEGIN|END|ABORT */ -} TransactionStmt; - -/* ---------------------- - * Create View Statement - * ---------------------- - */ -typedef struct ViewStmt { - NodeTag type; - char *viewname; /* name of the view */ - Query *query; /* the SQL statement */ -} ViewStmt; - -/* ---------------------- - * Load Statement - * ---------------------- - */ -typedef struct LoadStmt { - NodeTag type; - char *filename; /* file to load */ -} LoadStmt; - -/* ---------------------- - * Createdb Statement - * ---------------------- - */ -typedef struct CreatedbStmt { - NodeTag type; - char *dbname; /* database to create */ -} CreatedbStmt; - -/* ---------------------- - * Destroydb Statement - * ---------------------- - */ -typedef struct DestroydbStmt { - NodeTag type; - char *dbname; /* database to drop */ -} DestroydbStmt; - -/* ---------------------- - * Cluster Statement (support pbrown's cluster index implementation) - * ---------------------- - */ -typedef struct ClusterStmt { - NodeTag type; - char *relname; /* relation being indexed */ - char *indexname; /* original index defined */ -} ClusterStmt; - -/* ---------------------- - * Vacuum Statement - * ---------------------- - */ -typedef struct VacuumStmt { - NodeTag type; - char *vacrel; /* table to vacuum */ -} VacuumStmt; - -/* ---------------------- - * Explain Statement - * ---------------------- - */ -typedef struct ExplainStmt { - NodeTag type; - Query *query; /* the query */ - List *options; -} ExplainStmt; - - -/***************************************************************************** - * Optimizable Statements - *****************************************************************************/ - -/* ---------------------- - * Insert Statement - * ---------------------- - */ -typedef struct AppendStmt { - NodeTag type; - char *relname; /* relation to insert into */ - List *cols; /* names of the columns */ - List *exprs; /* the expressions (same order as - the columns) */ - List *fromClause; /* the from clause */ - Node *whereClause; /* qualifications */ -} AppendStmt; - -/* ---------------------- - * Delete Statement - * ---------------------- - */ -typedef struct DeleteStmt { - NodeTag type; - char *relname; /* relation to delete from */ - Node *whereClause; /* qualifications */ -} DeleteStmt; - -/* ---------------------- - * Update Statement - * ---------------------- - */ -typedef struct ReplaceStmt { - NodeTag type; - char *relname; /* relation to update */ - List *targetList; /* the target list (of ResTarget) */ - Node *whereClause; /* qualifications */ - List *fromClause; /* the from clause */ -} ReplaceStmt; - -/* ---------------------- - * Create Cursor Statement - * ---------------------- - */ -typedef struct CursorStmt { - NodeTag type; - char *portalname; /* the portal (cursor) to create */ - bool binary; /* a binary (internal) portal? */ - char *unique; /* NULL, "*", or unique attribute name */ - List *targetList; /* the target list (of ResTarget) */ - List *fromClause; /* the from clause */ - Node *whereClause; /* qualifications */ - List *groupClause; /* group by clause */ - List *orderClause; /* sort clause (a list of SortBy's) */ -} CursorStmt; - -/* ---------------------- - * Select Statement - * ---------------------- - */ -typedef struct RetrieveStmt { - NodeTag type; - char *unique; /* NULL, '*', or unique attribute name */ - char *into; /* name of table (for select into - table) */ - List *targetList; /* the target list (of ResTarget) */ - List *fromClause; /* the from clause */ - Node *whereClause; /* qualifications */ - List *groupClause; /* group by clause */ - Node *havingClause; /* having conditional-expression */ - List *orderClause; /* sort clause (a list of SortBy's) */ -} RetrieveStmt; - - -/**************************************************************************** - * Supporting data structures for Parse Trees - ****************************************************************************/ - -/* - * TypeName - specifies a type in definitions - */ -typedef struct TypeName { - NodeTag type; - char *name; /* name of the type */ - bool setof; /* is a set? */ - List *arrayBounds; /* array bounds */ - int typlen; /* length for char() and varchar() */ -} TypeName; - -/* - * ParamNo - specifies a parameter reference - */ -typedef struct ParamNo { - NodeTag type; - int number; /* the number of the parameter */ - TypeName *typename; /* the typecast */ -} ParamNo; - -/* - * A_Expr - binary expressions - */ -typedef struct A_Expr { - NodeTag type; - int oper; /* type of operation - {OP,OR,AND,NOT,ISNULL,NOTNULL} */ - char *opname; /* name of operator/function */ - Node *lexpr; /* left argument */ - Node *rexpr; /* right argument */ -} A_Expr; - -/* - * Attr - - * specifies an Attribute (ie. a Column); could have nested dots or - * array references. - * - */ -typedef struct Attr { - NodeTag type; - char *relname; /* name of relation (can be "*") */ - ParamNo *paramNo; /* or a parameter */ - List *attrs; /* attributes (possibly nested); - list of Values (strings) */ - List *indirection; /* array refs (list of A_Indices') */ -} Attr; - -/* - * A_Const - a constant expression - */ -typedef struct A_Const { - NodeTag type; - Value val; /* the value (with the tag) */ - TypeName *typename; /* typecast */ -} A_Const; - -/* - * ColumnDef - column definition (used in various creates) - */ -typedef struct ColumnDef { - NodeTag type; - char *colname; /* name of column */ - TypeName *typename; /* type of column */ -} ColumnDef; - -/* - * Ident - - * an identifier (could be an attribute or a relation name). Depending - * on the context at transformStmt time, the identifier is treated as - * either a relation name (in which case, isRel will be set) or an - * attribute (in which case, it will be transformed into an Attr). - */ -typedef struct Ident { - NodeTag type; - char *name; /* its name */ - List *indirection; /* array references */ - bool isRel; /* is a relation - filled in by - transformExpr() */ -} Ident; - -/* - * FuncCall - a function/aggregate invocation - */ -typedef struct FuncCall { - NodeTag type; - char *funcname; /* name of function */ - List *args; /* the arguments (list of exprs) */ -} FuncCall; - -/* - * A_Indices - array reference or bounds ([lidx:uidx] or [uidx]) - */ -typedef struct A_Indices { - NodeTag type; - Node *lidx; /* could be NULL */ - Node *uidx; -} A_Indices; - -/* - * ResTarget - - * result target (used in target list of pre-transformed Parse trees) - */ -typedef struct ResTarget { - NodeTag type; - char *name; /* name of the result column */ - List *indirection; /* array references */ - Node *val; /* the value of the result - (A_Expr or Attr) */ -} ResTarget; - -/* - * ParamString - used in with clauses - */ -typedef struct ParamString { - NodeTag type; - char *name; - char *val; -} ParamString; - -/* - * TimeRange - specifies a time range - */ -typedef struct TimeRange { - NodeTag type; - char *startDate; - char *endDate; /* snapshot if NULL */ -} TimeRange; - -/* - * RelExpr - relation expressions - */ -typedef struct RelExpr { - NodeTag type; - char *relname; /* the relation name */ - bool inh; /* inheritance query */ - TimeRange *timeRange; /* the time range */ -} RelExpr; - -/* - * Sortby - for order by clause - */ -typedef struct SortBy { - NodeTag type; - char *range; - char *name; /* name of column to sort on */ - char *useOp; /* operator to use */ -} SortBy; - -/* - * RangeVar - range variable, used in from clauses - */ -typedef struct RangeVar { - NodeTag type; - RelExpr *relExpr; /* the relation expression */ - char *name; /* the name to be referenced - (optional) */ -} RangeVar; - -/* - * IndexElem - index parameters (used in create index) - */ -typedef struct IndexElem { - NodeTag type; - char *name; /* name of index */ - List *args; /* if not NULL, function index */ - char *class; - TypeName *tname; /* type of index's keys (optional) */ -} IndexElem; - -/* - * DefElem - - * a definition (used in definition lists in the form of defname = arg) - */ -typedef struct DefElem { - NodeTag type; - char *defname; - Node *arg; /* a (Value *) or a (TypeName *) */ -} DefElem; - - -/**************************************************************************** - * Nodes for a Query tree - ****************************************************************************/ - -/* - * TargetEntry - - * a target entry (used in the transformed target list) - * - * one of resdom or fjoin is not NULL. a target list is - * ((<resdom | fjoin> expr) (<resdom | fjoin> expr) ...) - */ -typedef struct TargetEntry { - NodeTag type; - Resdom *resdom; /* fjoin overload this to be a list??*/ - Fjoin *fjoin; - Node *expr; /* can be a list too */ -} TargetEntry; - -/* - * RangeTblEntry - - * used in range tables. Some of the following are only used in one of - * the parsing, optimizing, execution stages. - * - * inFromCl marks those range variables that are listed in the from clause. - * In SQL, the targetlist can only refer to range variables listed in the - * from clause but POSTQUEL allows you to refer to tables not specified, in - * which case a range table entry will be generated. We use POSTQUEL - * semantics which is more powerful. However, we need SQL semantics in - * some cases (eg. when expanding a '*') - */ -typedef struct RangeTblEntry { - NodeTag type; - char *relname; /* real name of the relation */ - TimeRange *timeRange; /* time range */ - char *refname; /* the reference name (specified in - the from clause) */ - Oid relid; - bool inh; /* inheritance? */ - bool archive; /* filled in by plan_archive */ - bool inFromCl; /* comes from From Clause */ - TimeQual timeQual; /* filled in by pg_plan */ -} RangeTblEntry; - -/* - * SortClause - - * used in the sort clause for retrieves and cursors - */ -typedef struct SortClause { - NodeTag type; - Resdom *resdom; /* attributes in tlist to be sorted */ - Oid opoid; /* sort operators */ -} SortClause; - -/* - * GroupClause - - * used in the GROUP BY clause - */ -typedef struct GroupClause { - NodeTag type; - Var *grpAttr; /* attributes to group on */ - Oid grpOpoid; /* the sort operator to use */ -} GroupClause; - -#endif /* PARSENODES_H */ |