mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Change Constraint structure to be a full node structure.
Add new constraint types PRIMARY, UNIQUE.
This commit is contained in:
parent
77356a7fc1
commit
dc88e795d1
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user