From dc88e795d19b2874c6fa259379ac80a1979d25ce Mon Sep 17 00:00:00 2001
From: "Thomas G. Lockhart" <lockhart@fourpalms.org>
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 8674f456dd1..d6f866a4455 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 */
-- 
GitLab