Change Constraint structure to be a full node structure.

Add new constraint types PRIMARY, UNIQUE.
This commit is contained in:
Thomas G. Lockhart 1997-12-04 23:55:52 +00:00
parent 77356a7fc1
commit dc88e795d1
1 changed files with 70 additions and 67 deletions

View File

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