]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Change Constraint structure to be a full node structure.
authorThomas G. Lockhart <lockhart@fourpalms.org>
Thu, 4 Dec 1997 23:55:52 +0000 (23:55 +0000)
committerThomas G. Lockhart <lockhart@fourpalms.org>
Thu, 4 Dec 1997 23:55:52 +0000 (23:55 +0000)
Add new constraint types PRIMARY, UNIQUE.

src/include/nodes/parsenodes.h

index 8674f456dd154c386bdf0929d3b51c0266920c0d..d6f866a4455ab000a5eee2555ba0a6c58c9d9cf2 100644 (file)
@@ -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 */