From dc88e795d19b2874c6fa259379ac80a1979d25ce Mon Sep 17 00:00:00 2001 From: "Thomas G. Lockhart" Date: Thu, 4 Dec 1997 23:55:52 +0000 Subject: [PATCH] Change Constraint structure to be a full node structure. Add new constraint types PRIMARY, UNIQUE. --- src/include/nodes/parsenodes.h | 137 +++++++++++++++++---------------- 1 file changed, 70 insertions(+), 67 deletions(-) diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 8674f456dd..d6f866a445 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: parsenodes.h,v 1.36 1997/12/04 00:28:03 scrappy Exp $ + * $Id: parsenodes.h,v 1.37 1997/12/04 23:55:52 thomas Exp $ * *------------------------------------------------------------------------- */ @@ -61,7 +61,7 @@ typedef struct Query /* internal to planner */ List *base_relation_list_; /* base relation list */ List *join_relation_list_; /* list of relations */ -} Query; +} Query; /***************************************************************************** @@ -82,7 +82,7 @@ typedef struct AddAttrStmt NodeTag type; char *relname; /* the relation to add attr */ bool inh; /* add recursively to children? */ - struct ColumnDef *colDef; /* the attribute definition */ + Node *colDef; /* the attribute definition */ } AddAttrStmt; /* ---------------------- @@ -95,7 +95,7 @@ typedef struct ChangeACLStmt struct AclItem *aclitem; unsigned modechg; List *relNames; -} ChangeACLStmt; +} ChangeACLStmt; /* ---------------------- * Close Portal Statement @@ -105,7 +105,7 @@ typedef struct ClosePortalStmt { NodeTag type; char *portalname; /* name of the portal (cursor) */ -} ClosePortalStmt; +} ClosePortalStmt; /* ---------------------- * Copy Statement @@ -120,7 +120,7 @@ typedef struct CopyStmt int direction; /* TO or FROM */ char *filename; /* if NULL, use stdin/stdout */ char *delimiter; /* delimiter character, \t by default */ -} CopyStmt; +} CopyStmt; /* ---------------------- * Create Table Statement @@ -130,23 +130,25 @@ typedef struct CreateStmt { NodeTag type; char *relname; /* the relation to create */ - List *tableElts; /* column definitions list of ColumnDef */ + List *tableElts; /* column definitions list of Column */ List *inhRelnames; /* relations to inherit from list of Value * (string) */ List *constraints; /* list of constraints (ConstaintDef) */ -} CreateStmt; +} CreateStmt; -typedef enum ConstrType +typedef enum ConstrType /* type of constaints */ { - CONSTR_NONE, CONSTR_CHECK /* type of constaints */ -} ConstrType; + CONSTR_NONE, CONSTR_NOTNULL, CONSTR_DEFAULT, CONSTR_CHECK, CONSTR_PRIMARY, CONSTR_UNIQUE +} ConstrType; -typedef struct ConstraintDef +typedef struct Constraint { - ConstrType type; + NodeTag type; + ConstrType contype; char *name; /* name */ void *def; /* definition */ -} ConstraintDef; + void *keys; /* list of primary keys */ +} Constraint; /* ---------------------- * Create/Drop TRIGGER Statements @@ -167,14 +169,14 @@ typedef struct CreateTrigStmt char *text; /* AS 'text' */ List *attr; /* UPDATE OF a, b,... (NI) or NULL */ char *when; /* WHEN 'a > 10 ...' (NI) or NULL */ -} CreateTrigStmt; +} CreateTrigStmt; typedef struct DropTrigStmt { NodeTag type; char *trigname; /* TRIGGER' name */ char *relname; /* triggered relation */ -} DropTrigStmt; +} DropTrigStmt; /* ---------------------- @@ -188,13 +190,13 @@ typedef struct CreatePLangStmt char *plhandler; /* PL call handler function */ char *plcompiler; /* lancompiler text */ bool pltrusted; /* PL is trusted */ -} CreatePLangStmt; +} CreatePLangStmt; typedef struct DropPLangStmt { NodeTag type; char *plname; /* PL name */ -} DropPLangStmt; +} DropPLangStmt; /* ---------------------- @@ -231,7 +233,7 @@ typedef struct CreateSeqStmt NodeTag type; char *seqname; /* the relation to create */ List *options; -} CreateSeqStmt; +} CreateSeqStmt; /* ---------------------- * Create Version Statement @@ -244,7 +246,7 @@ typedef struct VersionStmt int direction; /* FORWARD | BACKWARD */ char *fromRelname; /* relation to create a version */ char *date; /* date of the snapshot */ -} VersionStmt; +} VersionStmt; /* ---------------------- * Create {Operator|Type|Aggregate} Statement @@ -256,7 +258,7 @@ typedef struct DefineStmt int defType; /* OPERATOR|P_TYPE|AGGREGATE */ char *defname; List *definition; /* a list of DefElem */ -} DefineStmt; +} DefineStmt; /* ---------------------- * Drop Table Statement @@ -267,7 +269,7 @@ typedef struct DestroyStmt NodeTag type; List *relNames; /* relations to be dropped */ bool sequence; -} DestroyStmt; +} DestroyStmt; /* ---------------------- * Extend Index Statement @@ -280,7 +282,7 @@ typedef struct ExtendStmt Node *whereClause; /* qualifications */ List *rangetable; /* range table, filled in by * transformStmt() */ -} ExtendStmt; +} ExtendStmt; /* ---------------------- * Begin Recipe Statement @@ -290,7 +292,7 @@ typedef struct RecipeStmt { NodeTag type; char *recipeName; /* name of the recipe */ -} RecipeStmt; +} RecipeStmt; /* ---------------------- * Fetch Statement @@ -303,7 +305,7 @@ typedef struct FetchStmt int howMany; /* amount to fetch ("ALL" --> 0) */ char *portalname; /* name of portal (cursor) */ bool ismove; /* TRUE if MOVE */ -} FetchStmt; +} FetchStmt; /* ---------------------- * Create Index Statement @@ -322,7 +324,7 @@ typedef struct IndexStmt * transformStmt() */ bool *lossy; /* is index lossy? */ bool unique; /* is index unique? */ -} IndexStmt; +} IndexStmt; /* ---------------------- * Create Function Statement @@ -339,7 +341,7 @@ typedef struct ProcedureStmt List *withClause; /* a list of ParamString */ char *as; /* the SQL statement or filename */ char *language; /* C or SQL */ -} ProcedureStmt; +} ProcedureStmt; /* ---------------------- * Drop Aggregate Statement @@ -350,7 +352,7 @@ typedef struct RemoveAggrStmt NodeTag type; char *aggname; /* aggregate to drop */ char *aggtype; /* for this type */ -} RemoveAggrStmt; +} RemoveAggrStmt; /* ---------------------- * Drop Function Statement @@ -361,7 +363,7 @@ typedef struct RemoveFuncStmt NodeTag type; char *funcname; /* function to drop */ List *args; /* types of the arguments */ -} RemoveFuncStmt; +} RemoveFuncStmt; /* ---------------------- * Drop Operator Statement @@ -372,7 +374,7 @@ typedef struct RemoveOperStmt NodeTag type; char *opname; /* operator to drop */ List *args; /* types of the arguments */ -} RemoveOperStmt; +} RemoveOperStmt; /* ---------------------- * Drop {Type|Index|Rule|View} Statement @@ -383,7 +385,7 @@ typedef struct RemoveStmt NodeTag type; int removeType; /* P_TYPE|INDEX|RULE|VIEW */ char *name; /* name to drop */ -} RemoveStmt; +} RemoveStmt; /* ---------------------- * Alter Table Statement @@ -398,7 +400,7 @@ typedef struct RenameStmt * the new name. Otherwise, rename this * column name. */ char *newname; /* the new name */ -} RenameStmt; +} RenameStmt; /* ---------------------- * Create Rule Statement @@ -413,7 +415,7 @@ typedef struct RuleStmt struct Attr *object; /* object affected */ bool instead; /* is a 'do instead'? */ List *actions; /* the action statements */ -} RuleStmt; +} RuleStmt; /* ---------------------- * Notify Statement @@ -423,7 +425,7 @@ typedef struct NotifyStmt { NodeTag type; char *relname; /* relation to notify */ -} NotifyStmt; +} NotifyStmt; /* ---------------------- * Listen Statement @@ -433,7 +435,7 @@ typedef struct ListenStmt { NodeTag type; char *relname; /* relation to listen on */ -} ListenStmt; +} ListenStmt; /* ---------------------- * {Begin|Abort|End} Transaction Statement @@ -443,7 +445,7 @@ typedef struct TransactionStmt { NodeTag type; int command; /* BEGIN|END|ABORT */ -} TransactionStmt; +} TransactionStmt; /* ---------------------- * Create View Statement @@ -454,7 +456,7 @@ typedef struct ViewStmt NodeTag type; char *viewname; /* name of the view */ Query *query; /* the SQL statement */ -} ViewStmt; +} ViewStmt; /* ---------------------- * Load Statement @@ -464,7 +466,7 @@ typedef struct LoadStmt { NodeTag type; char *filename; /* file to load */ -} LoadStmt; +} LoadStmt; /* ---------------------- * Createdb Statement @@ -475,7 +477,7 @@ typedef struct CreatedbStmt NodeTag type; char *dbname; /* database to create */ char *dbpath; /* location of database */ -} CreatedbStmt; +} CreatedbStmt; /* ---------------------- * Destroydb Statement @@ -485,7 +487,7 @@ typedef struct DestroydbStmt { NodeTag type; char *dbname; /* database to drop */ -} DestroydbStmt; +} DestroydbStmt; /* ---------------------- * Cluster Statement (support pbrown's cluster index implementation) @@ -496,7 +498,7 @@ typedef struct ClusterStmt NodeTag type; char *relname; /* relation being indexed */ char *indexname; /* original index defined */ -} ClusterStmt; +} ClusterStmt; /* ---------------------- * Vacuum Statement @@ -509,7 +511,7 @@ typedef struct VacuumStmt bool analyze; /* analyze data */ char *vacrel; /* table to vacuum */ List *va_spec; /* columns to analyse */ -} VacuumStmt; +} VacuumStmt; /* ---------------------- * Explain Statement @@ -520,7 +522,7 @@ typedef struct ExplainStmt NodeTag type; Query *query; /* the query */ bool verbose; /* print plan info */ -} ExplainStmt; +} ExplainStmt; /* ---------------------- * Set Statement @@ -532,7 +534,7 @@ typedef struct VariableSetStmt NodeTag type; char *name; char *value; -} VariableSetStmt; +} VariableSetStmt; /* ---------------------- * Show Statement @@ -543,7 +545,7 @@ typedef struct VariableShowStmt { NodeTag type; char *name; -} VariableShowStmt; +} VariableShowStmt; /* ---------------------- * Reset Statement @@ -554,7 +556,7 @@ typedef struct VariableResetStmt { NodeTag type; char *name; -} VariableResetStmt; +} VariableResetStmt; /***************************************************************************** @@ -584,7 +586,7 @@ typedef struct DeleteStmt NodeTag type; char *relname; /* relation to delete from */ Node *whereClause; /* qualifications */ -} DeleteStmt; +} DeleteStmt; /* ---------------------- * Update Statement @@ -597,7 +599,7 @@ typedef struct ReplaceStmt List *targetList; /* the target list (of ResTarget) */ Node *whereClause; /* qualifications */ List *fromClause; /* the from clause */ -} ReplaceStmt; +} ReplaceStmt; /* ---------------------- * Create Cursor Statement @@ -614,7 +616,7 @@ typedef struct CursorStmt Node *whereClause; /* qualifications */ List *groupClause; /* group by clause */ List *sortClause; /* sort clause (a list of SortGroupBy's) */ -} CursorStmt; +} CursorStmt; /* ---------------------- * Select Statement @@ -632,7 +634,7 @@ typedef struct RetrieveStmt Node *havingClause; /* having conditional-expression */ List *selectClause; /* subselect parameters */ List *sortClause; /* sort clause (a list of SortGroupBy's) */ -} RetrieveStmt; +} RetrieveStmt; /**************************************************************************** @@ -651,7 +653,7 @@ typedef struct SubSelect Node *whereClause; /* qualifications */ List *groupClause; /* group by clause */ Node *havingClause; /* having conditional-expression */ -} SubSelect; +} SubSelect; /* * TypeName - specifies a type in definitions @@ -664,7 +666,7 @@ typedef struct TypeName bool setof; /* is a set? */ List *arrayBounds; /* array bounds */ int typlen; /* length for char() and varchar() */ -} TypeName; +} TypeName; /* * ParamNo - specifies a parameter reference @@ -674,7 +676,7 @@ typedef struct ParamNo NodeTag type; int number; /* the number of the parameter */ TypeName *typename; /* the typecast */ -} ParamNo; +} ParamNo; /* * A_Expr - binary expressions @@ -725,7 +727,8 @@ typedef struct ColumnDef TypeName *typename; /* type of column */ bool is_not_null; /* flag to NOT NULL constraint */ char *defval; /* default value of column */ -} ColumnDef; + List *constraints; /* constraints on column */ +} ColumnDef; /* * Ident - @@ -741,7 +744,7 @@ typedef struct Ident List *indirection; /* array references */ bool isRel; /* is a relation - filled in by * transformExpr() */ -} Ident; +} Ident; /* * FuncCall - a function/aggregate invocation @@ -751,7 +754,7 @@ typedef struct FuncCall NodeTag type; char *funcname; /* name of function */ List *args; /* the arguments (list of exprs) */ -} FuncCall; +} FuncCall; /* * A_Indices - array reference or bounds ([lidx:uidx] or [uidx]) @@ -774,7 +777,7 @@ typedef struct ResTarget List *indirection; /* array references */ Node *val; /* the value of the result (A_Expr or * Attr) (or A_Const) */ -} ResTarget; +} ResTarget; /* * ParamString - used in with clauses @@ -784,7 +787,7 @@ typedef struct ParamString NodeTag type; char *name; char *val; -} ParamString; +} ParamString; /* * RelExpr - relation expressions @@ -794,7 +797,7 @@ typedef struct RelExpr NodeTag type; char *relname; /* the relation name */ bool inh; /* inheritance query */ -} RelExpr; +} RelExpr; /* * SortGroupBy - for order by clause @@ -806,7 +809,7 @@ typedef struct SortGroupBy char *range; char *name; /* name of column to sort on */ char *useOp; /* operator to use */ -} SortGroupBy; +} SortGroupBy; /* * RangeVar - range variable, used in from clauses @@ -816,7 +819,7 @@ typedef struct RangeVar NodeTag type; RelExpr *relExpr; /* the relation expression */ char *name; /* the name to be referenced (optional) */ -} RangeVar; +} RangeVar; /* * IndexElem - index parameters (used in create index) @@ -828,7 +831,7 @@ typedef struct IndexElem List *args; /* if not NULL, function index */ char *class; TypeName *tname; /* type of index's keys (optional) */ -} IndexElem; +} IndexElem; /* * DefElem - @@ -839,7 +842,7 @@ typedef struct DefElem NodeTag type; char *defname; Node *arg; /* a (Value *) or a (TypeName *) */ -} DefElem; +} DefElem; /**************************************************************************** @@ -859,7 +862,7 @@ typedef struct TargetEntry Resdom *resdom; /* fjoin overload this to be a list?? */ Fjoin *fjoin; Node *expr; /* can be a list too */ -} TargetEntry; +} TargetEntry; /* * RangeTblEntry - @@ -882,7 +885,7 @@ typedef struct RangeTblEntry Oid relid; bool inh; /* inheritance? */ bool inFromCl; /* comes from From Clause */ -} RangeTblEntry; +} RangeTblEntry; /* * SortClause - @@ -893,7 +896,7 @@ typedef struct SortClause NodeTag type; Resdom *resdom; /* attributes in tlist to be sorted */ Oid opoid; /* sort operators */ -} SortClause; +} SortClause; /* * GroupClause - @@ -904,6 +907,6 @@ typedef struct GroupClause NodeTag type; TargetEntry *entry; /* attributes to group on */ Oid grpOpoid; /* the sort operator to use */ -} GroupClause; +} GroupClause; #endif /* PARSENODES_H */