Change Constraint structure to be a full node structure.
authorThomas G. Lockhart
Thu, 4 Dec 1997 23:55:52 +0000 (23:55 +0000)
committerThomas G. Lockhart
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 */