OSDN Git Service

First phase of applying Rod Taylor's pg_depend patch. This just adds
[pg-rex/syncrep.git] / src / backend / nodes / copyfuncs.c
index 65bd5f2..739161b 100644 (file)
  * different executor state node types.
  *
  *
- * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.149 2001/08/04 19:38:59 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.192 2002/07/01 15:27:51 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -310,6 +310,23 @@ _copySubqueryScan(SubqueryScan *from)
        return newnode;
 }
 
+/* ----------------
+ *             _copyFunctionScan
+ * ----------------
+ */
+static FunctionScan *
+_copyFunctionScan(FunctionScan *from)
+{
+       FunctionScan *newnode = makeNode(FunctionScan);
+
+       /*
+        * copy node superclass fields
+        */
+       CopyPlanFields((Plan *) from, (Plan *) newnode);
+       CopyScanFields((Scan *) from, (Scan *) newnode);
+
+       return newnode;
+}
 
 /* ----------------
  *             CopyJoinFields
@@ -732,18 +749,6 @@ _copyVar(Var *from)
        return newnode;
 }
 
-static Attr *
-_copyAttr(Attr *from)
-{
-       Attr       *newnode = makeNode(Attr);
-
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
-       Node_Copy(from, newnode, attrs);
-
-       return newnode;
-}
-
 /* ----------------
  *             _copyOper
  * ----------------
@@ -759,6 +764,7 @@ _copyOper(Oper *from)
        newnode->opno = from->opno;
        newnode->opid = from->opid;
        newnode->opresulttype = from->opresulttype;
+       newnode->opretset = from->opretset;
        /* Do not copy the run-time state, if any */
        newnode->op_fcache = NULL;
 
@@ -782,7 +788,6 @@ _copyConst(Const *from)
 
        if (from->constbyval || from->constisnull)
        {
-
                /*
                 * passed by value so just copy the datum. Also, don't try to copy
                 * struct when value is null!
@@ -792,7 +797,6 @@ _copyConst(Const *from)
        }
        else
        {
-
                /*
                 * not passed by value. datum contains a pointer.
                 */
@@ -849,7 +853,8 @@ _copyFunc(Func *from)
         * copy remainder of node
         */
        newnode->funcid = from->funcid;
-       newnode->functype = from->functype;
+       newnode->funcresulttype = from->funcresulttype;
+       newnode->funcretset = from->funcretset;
        /* Do not copy the run-time state, if any */
        newnode->func_fcache = NULL;
 
@@ -865,11 +870,7 @@ _copyAggref(Aggref *from)
 {
        Aggref     *newnode = makeNode(Aggref);
 
-       /*
-        * copy remainder of node
-        */
-       newnode->aggname = pstrdup(from->aggname);
-       newnode->basetype = from->basetype;
+       newnode->aggfnoid = from->aggfnoid;
        newnode->aggtype = from->aggtype;
        Node_Copy(from, newnode, target);
        newnode->aggstar = from->aggstar;
@@ -972,8 +973,7 @@ _copyJoinExpr(JoinExpr *from)
        Node_Copy(from, newnode, using);
        Node_Copy(from, newnode, quals);
        Node_Copy(from, newnode, alias);
-       Node_Copy(from, newnode, colnames);
-       Node_Copy(from, newnode, colvars);
+       newnode->rtindex = from->rtindex;
 
        return newnode;
 }
@@ -1024,7 +1024,7 @@ _copyCaseWhen(CaseWhen *from)
 static NullTest *
 _copyNullTest(NullTest *from)
 {
-       NullTest *newnode = makeNode(NullTest);
+       NullTest   *newnode = makeNode(NullTest);
 
        /*
         * copy remainder of node
@@ -1083,16 +1083,13 @@ _copyArrayRef(ArrayRef *from)
  *             _copyRelOptInfo
  * ----------------
  */
-/*
- *     when you change this, also make sure to fix up xfunc_copyRelOptInfo in
- *     planner/path/xfunc.c accordingly!!!
- *             -- JMH, 8/2/93
- */
 static RelOptInfo *
 _copyRelOptInfo(RelOptInfo *from)
 {
        RelOptInfo *newnode = makeNode(RelOptInfo);
 
+       newnode->reloptkind = from->reloptkind;
+
        newnode->relids = listCopy(from->relids);
 
        newnode->rows = from->rows;
@@ -1105,12 +1102,15 @@ _copyRelOptInfo(RelOptInfo *from)
        Node_Copy(from, newnode, cheapest_total_path);
        newnode->pruneable = from->pruneable;
 
-       newnode->issubquery = from->issubquery;
+       newnode->rtekind = from->rtekind;
        Node_Copy(from, newnode, indexlist);
        newnode->pages = from->pages;
        newnode->tuples = from->tuples;
        Node_Copy(from, newnode, subplan);
 
+       newnode->joinrti = from->joinrti;
+       newnode->joinrteids = listCopy(from->joinrteids);
+
        Node_Copy(from, newnode, baserestrictinfo);
        newnode->baserestrictcost = from->baserestrictcost;
        newnode->outerjoinset = listCopy(from->outerjoinset);
@@ -1166,7 +1166,6 @@ _copyIndexOptInfo(IndexOptInfo *from)
        newnode->indproc = from->indproc;
        Node_Copy(from, newnode, indpred);
        newnode->unique = from->unique;
-       newnode->lossy = from->lossy;
 
        return newnode;
 }
@@ -1181,7 +1180,6 @@ _copyIndexOptInfo(IndexOptInfo *from)
 static void
 CopyPathFields(Path *from, Path *newnode)
 {
-
        /*
         * Modify the next line, since it causes the copying to cycle (i.e.
         * the parent points right back here! -- JMH, 7/7/92. Old version:
@@ -1410,6 +1408,8 @@ _copyRestrictInfo(RestrictInfo *from)
         */
        newnode->left_pathkey = NIL;
        newnode->right_pathkey = NIL;
+       newnode->left_mergescansel = from->left_mergescansel;
+       newnode->right_mergescansel = from->right_mergescansel;
        newnode->hashjoinoperator = from->hashjoinoperator;
        newnode->left_bucketsize = from->left_bucketsize;
        newnode->right_bucketsize = from->right_bucketsize;
@@ -1435,17 +1435,6 @@ _copyJoinInfo(JoinInfo *from)
        return newnode;
 }
 
-static Iter *
-_copyIter(Iter *from)
-{
-       Iter       *newnode = makeNode(Iter);
-
-       Node_Copy(from, newnode, iterexpr);
-       newnode->itertype = from->itertype;
-
-       return newnode;
-}
-
 static Stream *
 _copyStream(Stream *from)
 {
@@ -1489,10 +1478,12 @@ _copyRangeTblEntry(RangeTblEntry *from)
 {
        RangeTblEntry *newnode = makeNode(RangeTblEntry);
 
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
+       newnode->rtekind = from->rtekind;
        newnode->relid = from->relid;
        Node_Copy(from, newnode, subquery);
+       Node_Copy(from, newnode, funcexpr);
+       newnode->jointype = from->jointype;
+       Node_Copy(from, newnode, joinaliasvars);
        Node_Copy(from, newnode, alias);
        Node_Copy(from, newnode, eref);
        newnode->inh = from->inh;
@@ -1511,8 +1502,7 @@ _copyFkConstraint(FkConstraint *from)
 
        if (from->constr_name)
                newnode->constr_name = pstrdup(from->constr_name);
-       if (from->pktable_name)
-               newnode->pktable_name = pstrdup(from->pktable_name);
+       Node_Copy(from, newnode, pktable);
        Node_Copy(from, newnode, fk_attrs);
        Node_Copy(from, newnode, pk_attrs);
        if (from->match_type)
@@ -1541,46 +1531,53 @@ _copyAExpr(A_Expr *from)
        A_Expr     *newnode = makeNode(A_Expr);
 
        newnode->oper = from->oper;
-       if (from->opname)
-               newnode->opname = pstrdup(from->opname);
+       Node_Copy(from, newnode, name);
        Node_Copy(from, newnode, lexpr);
        Node_Copy(from, newnode, rexpr);
 
        return newnode;
 }
 
-static A_Const *
-_copyAConst(A_Const *from)
+static ColumnRef *
+_copyColumnRef(ColumnRef *from)
 {
-       A_Const    *newnode = makeNode(A_Const);
+       ColumnRef          *newnode = makeNode(ColumnRef);
 
-       newnode->val = *((Value *) (copyObject(&(from->val))));
-       Node_Copy(from, newnode, typename);
+       Node_Copy(from, newnode, fields);
+       Node_Copy(from, newnode, indirection);
 
        return newnode;
 }
 
-static ParamNo *
-_copyParamNo(ParamNo *from)
+static ParamRef *
+_copyParamRef(ParamRef *from)
 {
-       ParamNo    *newnode = makeNode(ParamNo);
+       ParamRef    *newnode = makeNode(ParamRef);
 
        newnode->number = from->number;
-       Node_Copy(from, newnode, typename);
+       Node_Copy(from, newnode, fields);
        Node_Copy(from, newnode, indirection);
 
        return newnode;
 }
 
+static A_Const *
+_copyAConst(A_Const *from)
+{
+       A_Const    *newnode = makeNode(A_Const);
+
+       newnode->val = *((Value *) (copyObject(&(from->val))));
+       Node_Copy(from, newnode, typename);
+
+       return newnode;
+}
+
 static Ident *
 _copyIdent(Ident *from)
 {
        Ident      *newnode = makeNode(Ident);
 
-       if (from->name)
-               newnode->name = pstrdup(from->name);
-       Node_Copy(from, newnode, indirection);
-       newnode->isRel = from->isRel;
+       newnode->name = pstrdup(from->name);
 
        return newnode;
 }
@@ -1590,8 +1587,7 @@ _copyFuncCall(FuncCall *from)
 {
        FuncCall   *newnode = makeNode(FuncCall);
 
-       if (from->funcname)
-               newnode->funcname = pstrdup(from->funcname);
+       Node_Copy(from, newnode, funcname);
        Node_Copy(from, newnode, args);
        newnode->agg_star = from->agg_star;
        newnode->agg_distinct = from->agg_distinct;
@@ -1610,6 +1606,18 @@ _copyAIndices(A_Indices *from)
        return newnode;
 }
 
+static ExprFieldSelect *
+_copyExprFieldSelect(ExprFieldSelect *from)
+{
+       ExprFieldSelect    *newnode = makeNode(ExprFieldSelect);
+
+       Node_Copy(from, newnode, arg);
+       Node_Copy(from, newnode, fields);
+       Node_Copy(from, newnode, indirection);
+
+       return newnode;
+}
+
 static ResTarget *
 _copyResTarget(ResTarget *from)
 {
@@ -1628,10 +1636,11 @@ _copyTypeName(TypeName *from)
 {
        TypeName   *newnode = makeNode(TypeName);
 
-       if (from->name)
-               newnode->name = pstrdup(from->name);
+       Node_Copy(from, newnode, names);
+       newnode->typeid = from->typeid;
        newnode->timezone = from->timezone;
        newnode->setof = from->setof;
+       newnode->pct_type = from->pct_type;
        newnode->typmod = from->typmod;
        Node_Copy(from, newnode, arrayBounds);
 
@@ -1643,22 +1652,38 @@ _copySortGroupBy(SortGroupBy *from)
 {
        SortGroupBy *newnode = makeNode(SortGroupBy);
 
-       if (from->useOp)
-               newnode->useOp = pstrdup(from->useOp);
+       Node_Copy(from, newnode, useOp);
        Node_Copy(from, newnode, node);
 
        return newnode;
 }
 
+static Alias *
+_copyAlias(Alias *from)
+{
+       Alias      *newnode = makeNode(Alias);
+
+       if (from->aliasname)
+               newnode->aliasname = pstrdup(from->aliasname);
+       Node_Copy(from, newnode, colnames);
+
+       return newnode;
+}
+
 static RangeVar *
 _copyRangeVar(RangeVar *from)
 {
        RangeVar   *newnode = makeNode(RangeVar);
 
+       if (from->catalogname)
+               newnode->catalogname = pstrdup(from->catalogname);
+       if (from->schemaname)
+               newnode->schemaname = pstrdup(from->schemaname);
        if (from->relname)
                newnode->relname = pstrdup(from->relname);
        newnode->inhOpt = from->inhOpt;
-       Node_Copy(from, newnode, name);
+       newnode->istemp = from->istemp;
+       Node_Copy(from, newnode, alias);
 
        return newnode;
 }
@@ -1669,7 +1694,18 @@ _copyRangeSubselect(RangeSubselect *from)
        RangeSubselect *newnode = makeNode(RangeSubselect);
 
        Node_Copy(from, newnode, subquery);
-       Node_Copy(from, newnode, name);
+       Node_Copy(from, newnode, alias);
+
+       return newnode;
+}
+
+static RangeFunction *
+_copyRangeFunction(RangeFunction *from)
+{
+       RangeFunction   *newnode = makeNode(RangeFunction);
+
+       Node_Copy(from, newnode, funccallnode);
+       Node_Copy(from, newnode, alias);
 
        return newnode;
 }
@@ -1692,9 +1728,9 @@ _copyIndexElem(IndexElem *from)
 
        if (from->name)
                newnode->name = pstrdup(from->name);
+       Node_Copy(from, newnode, funcname);
        Node_Copy(from, newnode, args);
-       if (from->class)
-               newnode->class = pstrdup(from->class);
+       Node_Copy(from, newnode, opclass);
 
        return newnode;
 }
@@ -1708,7 +1744,6 @@ _copyColumnDef(ColumnDef *from)
                newnode->colname = pstrdup(from->colname);
        Node_Copy(from, newnode, typename);
        newnode->is_not_null = from->is_not_null;
-       newnode->is_sequence = from->is_sequence;
        Node_Copy(from, newnode, raw_default);
        if (from->cooked_default)
                newnode->cooked_default = pstrdup(from->cooked_default);
@@ -1753,13 +1788,12 @@ _copyQuery(Query *from)
        newnode->commandType = from->commandType;
        Node_Copy(from, newnode, utilityStmt);
        newnode->resultRelation = from->resultRelation;
-       if (from->into)
-               newnode->into = pstrdup(from->into);
+       Node_Copy(from, newnode, into);
        newnode->isPortal = from->isPortal;
        newnode->isBinary = from->isBinary;
-       newnode->isTemp = from->isTemp;
        newnode->hasAggs = from->hasAggs;
        newnode->hasSubLinks = from->hasSubLinks;
+       newnode->originalQuery = from->originalQuery;
 
        Node_Copy(from, newnode, rtable);
        Node_Copy(from, newnode, jointree);
@@ -1782,8 +1816,8 @@ _copyQuery(Query *from)
 
        /*
         * We do not copy the planner internal fields: base_rel_list,
-        * other_rel_list, join_rel_list, equi_key_list, query_pathkeys.
-        * Not entirely clear if this is right?
+        * other_rel_list, join_rel_list, equi_key_list, query_pathkeys. Not
+        * entirely clear if this is right?
         */
 
        return newnode;
@@ -1794,8 +1828,7 @@ _copyInsertStmt(InsertStmt *from)
 {
        InsertStmt *newnode = makeNode(InsertStmt);
 
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
+       Node_Copy(from, newnode, relation);
        Node_Copy(from, newnode, cols);
        Node_Copy(from, newnode, targetList);
        Node_Copy(from, newnode, selectStmt);
@@ -1808,10 +1841,8 @@ _copyDeleteStmt(DeleteStmt *from)
 {
        DeleteStmt *newnode = makeNode(DeleteStmt);
 
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
+       Node_Copy(from, newnode, relation);
        Node_Copy(from, newnode, whereClause);
-       newnode->inhOpt = from->inhOpt;
 
        return newnode;
 }
@@ -1821,12 +1852,10 @@ _copyUpdateStmt(UpdateStmt *from)
 {
        UpdateStmt *newnode = makeNode(UpdateStmt);
 
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
+       Node_Copy(from, newnode, relation);
        Node_Copy(from, newnode, targetList);
        Node_Copy(from, newnode, whereClause);
        Node_Copy(from, newnode, fromClause);
-       newnode->inhOpt = from->inhOpt;
 
        return newnode;
 }
@@ -1837,9 +1866,8 @@ _copySelectStmt(SelectStmt *from)
        SelectStmt *newnode = makeNode(SelectStmt);
 
        Node_Copy(from, newnode, distinctClause);
-       if (from->into)
-               newnode->into = pstrdup(from->into);
-       newnode->istemp = from->istemp;
+       Node_Copy(from, newnode, into);
+       Node_Copy(from, newnode, intoColNames);
        Node_Copy(from, newnode, targetList);
        Node_Copy(from, newnode, fromClause);
        Node_Copy(from, newnode, whereClause);
@@ -1880,9 +1908,7 @@ _copyAlterTableStmt(AlterTableStmt *from)
        AlterTableStmt *newnode = makeNode(AlterTableStmt);
 
        newnode->subtype = from->subtype;
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
-       newnode->inhOpt = from->inhOpt;
+       Node_Copy(from, newnode, relation);
        if (from->name)
                newnode->name = pstrdup(from->name);
        Node_Copy(from, newnode, def);
@@ -1894,12 +1920,12 @@ _copyAlterTableStmt(AlterTableStmt *from)
 static GrantStmt *
 _copyGrantStmt(GrantStmt *from)
 {
-       GrantStmt *newnode = makeNode(GrantStmt);
+       GrantStmt  *newnode = makeNode(GrantStmt);
 
        newnode->is_grant = from->is_grant;
-       Node_Copy(from, newnode, relnames);
-       if (from->privileges)
-               newnode->privileges = pstrdup(from->privileges);
+       newnode->objtype = from->objtype;
+       Node_Copy(from, newnode, objects);
+       newnode->privileges = listCopy(from->privileges);
        Node_Copy(from, newnode, grantees);
 
        return newnode;
@@ -1918,6 +1944,26 @@ _copyPrivGrantee(PrivGrantee *from)
        return newnode;
 }
 
+static FuncWithArgs *
+_copyFuncWithArgs(FuncWithArgs *from)
+{
+       FuncWithArgs *newnode = makeNode(FuncWithArgs);
+
+       Node_Copy(from, newnode, funcname);
+       Node_Copy(from, newnode, funcargs);
+
+       return newnode;
+}
+
+static InsertDefault *
+_copyInsertDefault(InsertDefault *from)
+{
+       InsertDefault *newnode = makeNode(InsertDefault);
+
+       return newnode;
+}
+
+
 static ClosePortalStmt *
 _copyClosePortalStmt(ClosePortalStmt *from)
 {
@@ -1934,8 +1980,7 @@ _copyClusterStmt(ClusterStmt *from)
 {
        ClusterStmt *newnode = makeNode(ClusterStmt);
 
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
+       Node_Copy(from, newnode, relation);
        if (from->indexname)
                newnode->indexname = pstrdup(from->indexname);
 
@@ -1947,17 +1992,11 @@ _copyCopyStmt(CopyStmt *from)
 {
        CopyStmt   *newnode = makeNode(CopyStmt);
 
-       newnode->binary = from->binary;
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
-       newnode->oids = from->oids;
-       newnode->direction = from->direction;
+       Node_Copy(from, newnode, relation);
+       newnode->is_from = from->is_from;
        if (from->filename)
                newnode->filename = pstrdup(from->filename);
-       if (from->delimiter)
-               newnode->delimiter = pstrdup(from->delimiter);
-       if (from->null_print)
-               newnode->null_print = pstrdup(from->null_print);
+       Node_Copy(from, newnode, options);
 
        return newnode;
 }
@@ -1967,24 +2006,11 @@ _copyCreateStmt(CreateStmt *from)
 {
        CreateStmt *newnode = makeNode(CreateStmt);
 
-       newnode->istemp = from->istemp;
-       newnode->relname = pstrdup(from->relname);
+       Node_Copy(from, newnode, relation);
        Node_Copy(from, newnode, tableElts);
-       Node_Copy(from, newnode, inhRelnames);
+       Node_Copy(from, newnode, inhRelations);
        Node_Copy(from, newnode, constraints);
-
-       return newnode;
-}
-
-static VersionStmt *
-_copyVersionStmt(VersionStmt *from)
-{
-       VersionStmt *newnode = makeNode(VersionStmt);
-
-       newnode->relname = pstrdup(from->relname);
-       newnode->direction = from->direction;
-       newnode->fromRelname = pstrdup(from->fromRelname);
-       newnode->date = pstrdup(from->date);
+       newnode->hasoids = from->hasoids;
 
        return newnode;
 }
@@ -1995,7 +2021,7 @@ _copyDefineStmt(DefineStmt *from)
        DefineStmt *newnode = makeNode(DefineStmt);
 
        newnode->defType = from->defType;
-       newnode->defname = pstrdup(from->defname);
+       Node_Copy(from, newnode, defnames);
        Node_Copy(from, newnode, definition);
 
        return newnode;
@@ -2006,8 +2032,9 @@ _copyDropStmt(DropStmt *from)
 {
        DropStmt   *newnode = makeNode(DropStmt);
 
-       Node_Copy(from, newnode, names);
+       Node_Copy(from, newnode, objects);
        newnode->removeType = from->removeType;
+       newnode->behavior = from->behavior;
 
        return newnode;
 }
@@ -2017,7 +2044,7 @@ _copyTruncateStmt(TruncateStmt *from)
 {
        TruncateStmt *newnode = makeNode(TruncateStmt);
 
-       newnode->relName = pstrdup(from->relName);
+       Node_Copy(from, newnode, relation);
 
        return newnode;
 }
@@ -2028,11 +2055,10 @@ _copyCommentStmt(CommentStmt *from)
        CommentStmt *newnode = makeNode(CommentStmt);
 
        newnode->objtype = from->objtype;
-       newnode->objname = pstrdup(from->objname);
-       if (from->objproperty)
-               newnode->objproperty = pstrdup(from->objproperty);
-       Node_Copy(from, newnode, objlist);
-       newnode->comment = pstrdup(from->comment);
+       Node_Copy(from, newnode, objname);
+       Node_Copy(from, newnode, objargs);
+       if (from->comment)
+               newnode->comment = pstrdup(from->comment);
 
        return newnode;
 }
@@ -2056,10 +2082,9 @@ _copyIndexStmt(IndexStmt *from)
        IndexStmt  *newnode = makeNode(IndexStmt);
 
        newnode->idxname = pstrdup(from->idxname);
-       newnode->relname = pstrdup(from->relname);
+       Node_Copy(from, newnode, relation);
        newnode->accessMethod = pstrdup(from->accessMethod);
        Node_Copy(from, newnode, indexParams);
-       Node_Copy(from, newnode, withClause);
        Node_Copy(from, newnode, whereClause);
        Node_Copy(from, newnode, rangetable);
        newnode->unique = from->unique;
@@ -2068,17 +2093,17 @@ _copyIndexStmt(IndexStmt *from)
        return newnode;
 }
 
-static ProcedureStmt *
-_copyProcedureStmt(ProcedureStmt *from)
+static CreateFunctionStmt *
+_copyCreateFunctionStmt(CreateFunctionStmt *from)
 {
-       ProcedureStmt *newnode = makeNode(ProcedureStmt);
+       CreateFunctionStmt *newnode = makeNode(CreateFunctionStmt);
 
-       newnode->funcname = pstrdup(from->funcname);
+       newnode->replace = from->replace;
+       Node_Copy(from, newnode, funcname);
        Node_Copy(from, newnode, argTypes);
        Node_Copy(from, newnode, returnType);
+       Node_Copy(from, newnode, options);
        Node_Copy(from, newnode, withClause);
-       Node_Copy(from, newnode, as);
-       newnode->language = pstrdup(from->language);
 
        return newnode;
 }
@@ -2088,8 +2113,9 @@ _copyRemoveAggrStmt(RemoveAggrStmt *from)
 {
        RemoveAggrStmt *newnode = makeNode(RemoveAggrStmt);
 
-       newnode->aggname = pstrdup(from->aggname);
+       Node_Copy(from, newnode, aggname);
        Node_Copy(from, newnode, aggtype);
+       newnode->behavior = from->behavior;
 
        return newnode;
 }
@@ -2099,8 +2125,9 @@ _copyRemoveFuncStmt(RemoveFuncStmt *from)
 {
        RemoveFuncStmt *newnode = makeNode(RemoveFuncStmt);
 
-       newnode->funcname = pstrdup(from->funcname);
+       Node_Copy(from, newnode, funcname);
        Node_Copy(from, newnode, args);
+       newnode->behavior = from->behavior;
 
        return newnode;
 }
@@ -2110,8 +2137,9 @@ _copyRemoveOperStmt(RemoveOperStmt *from)
 {
        RemoveOperStmt *newnode = makeNode(RemoveOperStmt);
 
-       newnode->opname = pstrdup(from->opname);
+       Node_Copy(from, newnode, opname);
        Node_Copy(from, newnode, args);
+       newnode->behavior = from->behavior;
 
        return newnode;
 }
@@ -2121,12 +2149,12 @@ _copyRenameStmt(RenameStmt *from)
 {
        RenameStmt *newnode = makeNode(RenameStmt);
 
-       newnode->relname = pstrdup(from->relname);
-       newnode->inhOpt = from->inhOpt;
-       if (from->column)
-               newnode->column = pstrdup(from->column);
+       Node_Copy(from, newnode, relation);
+       if (from->oldname)
+               newnode->oldname = pstrdup(from->oldname);
        if (from->newname)
                newnode->newname = pstrdup(from->newname);
+       newnode->renameType = from->renameType;
 
        return newnode;
 }
@@ -2136,10 +2164,10 @@ _copyRuleStmt(RuleStmt *from)
 {
        RuleStmt   *newnode = makeNode(RuleStmt);
 
+       Node_Copy(from, newnode, relation);
        newnode->rulename = pstrdup(from->rulename);
        Node_Copy(from, newnode, whereClause);
        newnode->event = from->event;
-       Node_Copy(from, newnode, object);
        newnode->instead = from->instead;
        Node_Copy(from, newnode, actions);
 
@@ -2151,8 +2179,7 @@ _copyNotifyStmt(NotifyStmt *from)
 {
        NotifyStmt *newnode = makeNode(NotifyStmt);
 
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
+       Node_Copy(from, newnode, relation);
 
        return newnode;
 }
@@ -2162,8 +2189,7 @@ _copyListenStmt(ListenStmt *from)
 {
        ListenStmt *newnode = makeNode(ListenStmt);
 
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
+       Node_Copy(from, newnode, relation);
 
        return newnode;
 }
@@ -2173,8 +2199,7 @@ _copyUnlistenStmt(UnlistenStmt *from)
 {
        UnlistenStmt *newnode = makeNode(UnlistenStmt);
 
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
+       Node_Copy(from, newnode, relation);
 
        return newnode;
 }
@@ -2194,8 +2219,7 @@ _copyViewStmt(ViewStmt *from)
 {
        ViewStmt   *newnode = makeNode(ViewStmt);
 
-       if (from->viewname)
-               newnode->viewname = pstrdup(from->viewname);
+       Node_Copy(from, newnode, view);
        Node_Copy(from, newnode, aliases);
        Node_Copy(from, newnode, query);
 
@@ -2213,6 +2237,18 @@ _copyLoadStmt(LoadStmt *from)
        return newnode;
 }
 
+static CreateDomainStmt *
+_copyCreateDomainStmt(CreateDomainStmt *from)
+{
+       CreateDomainStmt *newnode = makeNode(CreateDomainStmt);
+
+       Node_Copy(from, newnode, domainname);
+       Node_Copy(from, newnode, typename);
+       Node_Copy(from, newnode, constraints);
+
+       return newnode;
+}
+
 static CreatedbStmt *
 _copyCreatedbStmt(CreatedbStmt *from)
 {
@@ -2220,11 +2256,21 @@ _copyCreatedbStmt(CreatedbStmt *from)
 
        if (from->dbname)
                newnode->dbname = pstrdup(from->dbname);
-       if (from->dbpath)
-               newnode->dbpath = pstrdup(from->dbpath);
-       if (from->dbtemplate)
-               newnode->dbtemplate = pstrdup(from->dbtemplate);
-       newnode->encoding = from->encoding;
+       Node_Copy(from, newnode, options);
+
+       return newnode;
+}
+
+static AlterDatabaseSetStmt *
+_copyAlterDatabaseSetStmt(AlterDatabaseSetStmt *from)
+{
+       AlterDatabaseSetStmt *newnode = makeNode(AlterDatabaseSetStmt);
+
+       if (from->dbname)
+               newnode->dbname = pstrdup(from->dbname);
+       if (from->variable)
+               newnode->variable = pstrdup(from->variable);
+       Node_Copy(from, newnode, value);
 
        return newnode;
 }
@@ -2248,9 +2294,9 @@ _copyVacuumStmt(VacuumStmt *from)
        newnode->vacuum = from->vacuum;
        newnode->full = from->full;
        newnode->analyze = from->analyze;
+       newnode->freeze = from->freeze;
        newnode->verbose = from->verbose;
-       if (from->vacrel)
-               newnode->vacrel = pstrdup(from->vacrel);
+       Node_Copy(from, newnode, relation);
        Node_Copy(from, newnode, va_cols);
 
        return newnode;
@@ -2263,6 +2309,7 @@ _copyExplainStmt(ExplainStmt *from)
 
        Node_Copy(from, newnode, query);
        newnode->verbose = from->verbose;
+       newnode->analyze = from->analyze;
 
        return newnode;
 }
@@ -2272,8 +2319,7 @@ _copyCreateSeqStmt(CreateSeqStmt *from)
 {
        CreateSeqStmt *newnode = makeNode(CreateSeqStmt);
 
-       if (from->seqname)
-               newnode->seqname = pstrdup(from->seqname);
+       Node_Copy(from, newnode, sequence);
        Node_Copy(from, newnode, options);
 
        return newnode;
@@ -2286,8 +2332,8 @@ _copyVariableSetStmt(VariableSetStmt *from)
 
        if (from->name)
                newnode->name = pstrdup(from->name);
-       if (from->value)
-               newnode->value = pstrdup(from->value);
+       Node_Copy(from, newnode, args);
+       newnode->is_local = from->is_local;
 
        return newnode;
 }
@@ -2321,10 +2367,8 @@ _copyCreateTrigStmt(CreateTrigStmt *from)
 
        if (from->trigname)
                newnode->trigname = pstrdup(from->trigname);
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
-       if (from->funcname)
-               newnode->funcname = pstrdup(from->funcname);
+       Node_Copy(from, newnode, relation);
+       Node_Copy(from, newnode, funcname);
        Node_Copy(from, newnode, args);
        newnode->before = from->before;
        newnode->row = from->row;
@@ -2340,21 +2384,21 @@ _copyCreateTrigStmt(CreateTrigStmt *from)
        newnode->isconstraint = from->isconstraint;
        newnode->deferrable = from->deferrable;
        newnode->initdeferred = from->initdeferred;
-       if (from->constrrelname)
-               newnode->constrrelname = pstrdup(from->constrrelname);
+       Node_Copy(from, newnode, constrrel);
 
        return newnode;
 }
 
-static DropTrigStmt *
-_copyDropTrigStmt(DropTrigStmt *from)
+static DropPropertyStmt *
+_copyDropPropertyStmt(DropPropertyStmt *from)
 {
-       DropTrigStmt *newnode = makeNode(DropTrigStmt);
+       DropPropertyStmt *newnode = makeNode(DropPropertyStmt);
 
-       if (from->trigname)
-               newnode->trigname = pstrdup(from->trigname);
-       if (from->relname)
-               newnode->relname = pstrdup(from->relname);
+       Node_Copy(from, newnode, relation);
+       if (from->property)
+               newnode->property = pstrdup(from->property);
+       newnode->removeType = from->removeType;
+       newnode->behavior = from->behavior;
 
        return newnode;
 }
@@ -2366,8 +2410,8 @@ _copyCreatePLangStmt(CreatePLangStmt *from)
 
        if (from->plname)
                newnode->plname = pstrdup(from->plname);
-       if (from->plhandler)
-               newnode->plhandler = pstrdup(from->plhandler);
+       Node_Copy(from, newnode, plhandler);
+       Node_Copy(from, newnode, plvalidator);
        if (from->plcompiler)
                newnode->plcompiler = pstrdup(from->plcompiler);
        newnode->pltrusted = from->pltrusted;
@@ -2382,6 +2426,7 @@ _copyDropPLangStmt(DropPLangStmt *from)
 
        if (from->plname)
                newnode->plname = pstrdup(from->plname);
+       newnode->behavior = from->behavior;
 
        return newnode;
 }
@@ -2410,6 +2455,20 @@ _copyAlterUserStmt(AlterUserStmt *from)
        return newnode;
 }
 
+static AlterUserSetStmt *
+_copyAlterUserSetStmt(AlterUserSetStmt *from)
+{
+       AlterUserSetStmt *newnode = makeNode(AlterUserSetStmt);
+
+       if (from->user)
+               newnode->user = pstrdup(from->user);
+       if (from->variable)
+               newnode->variable = pstrdup(from->variable);
+       Node_Copy(from, newnode, value);
+
+       return newnode;
+}
+
 static DropUserStmt *
 _copyDropUserStmt(DropUserStmt *from)
 {
@@ -2425,8 +2484,8 @@ _copyLockStmt(LockStmt *from)
 {
        LockStmt   *newnode = makeNode(LockStmt);
 
-       Node_Copy(from, newnode, rellist);
-       
+       Node_Copy(from, newnode, relations);
+
        newnode->mode = from->mode;
 
        return newnode;
@@ -2485,6 +2544,7 @@ _copyReindexStmt(ReindexStmt *from)
        ReindexStmt *newnode = makeNode(ReindexStmt);
 
        newnode->reindexType = from->reindexType;
+       Node_Copy(from, newnode, relation);
        if (from->name)
                newnode->name = pstrdup(from->name);
        newnode->force = from->force;
@@ -2493,6 +2553,19 @@ _copyReindexStmt(ReindexStmt *from)
        return newnode;
 }
 
+static CreateSchemaStmt *
+_copyCreateSchemaStmt(CreateSchemaStmt *from)
+{
+       CreateSchemaStmt *newnode = makeNode(CreateSchemaStmt);
+
+       newnode->schemaname = pstrdup(from->schemaname);
+       if (from->authid)
+               newnode->authid = pstrdup(from->authid);
+       Node_Copy(from, newnode, schemaElts);
+
+       return newnode;
+}
+
 
 /* ****************************************************************
  *                                     pg_list.h copy functions
@@ -2536,7 +2609,6 @@ copyObject(void *from)
 
        switch (nodeTag(from))
        {
-
                        /*
                         * PLAN NODES
                         */
@@ -2564,6 +2636,9 @@ copyObject(void *from)
                case T_SubqueryScan:
                        retval = _copySubqueryScan(from);
                        break;
+               case T_FunctionScan:
+                       retval = _copyFunctionScan(from);
+                       break;
                case T_Join:
                        retval = _copyJoin(from);
                        break;
@@ -2640,9 +2715,6 @@ copyObject(void *from)
                case T_ArrayRef:
                        retval = _copyArrayRef(from);
                        break;
-               case T_Iter:
-                       retval = _copyIter(from);
-                       break;
                case T_FieldSelect:
                        retval = _copyFieldSelect(from);
                        break;
@@ -2769,9 +2841,6 @@ copyObject(void *from)
                case T_CreateStmt:
                        retval = _copyCreateStmt(from);
                        break;
-               case T_VersionStmt:
-                       retval = _copyVersionStmt(from);
-                       break;
                case T_DefineStmt:
                        retval = _copyDefineStmt(from);
                        break;
@@ -2790,8 +2859,8 @@ copyObject(void *from)
                case T_IndexStmt:
                        retval = _copyIndexStmt(from);
                        break;
-               case T_ProcedureStmt:
-                       retval = _copyProcedureStmt(from);
+               case T_CreateFunctionStmt:
+                       retval = _copyCreateFunctionStmt(from);
                        break;
                case T_RemoveAggrStmt:
                        retval = _copyRemoveAggrStmt(from);
@@ -2826,9 +2895,15 @@ copyObject(void *from)
                case T_LoadStmt:
                        retval = _copyLoadStmt(from);
                        break;
+               case T_CreateDomainStmt:
+                       retval = _copyCreateDomainStmt(from);
+                       break;
                case T_CreatedbStmt:
                        retval = _copyCreatedbStmt(from);
                        break;
+               case T_AlterDatabaseSetStmt:
+                       retval = _copyAlterDatabaseSetStmt(from);
+                       break;
                case T_DropdbStmt:
                        retval = _copyDropdbStmt(from);
                        break;
@@ -2853,8 +2928,8 @@ copyObject(void *from)
                case T_CreateTrigStmt:
                        retval = _copyCreateTrigStmt(from);
                        break;
-               case T_DropTrigStmt:
-                       retval = _copyDropTrigStmt(from);
+               case T_DropPropertyStmt:
+                       retval = _copyDropPropertyStmt(from);
                        break;
                case T_CreatePLangStmt:
                        retval = _copyCreatePLangStmt(from);
@@ -2868,6 +2943,9 @@ copyObject(void *from)
                case T_AlterUserStmt:
                        retval = _copyAlterUserStmt(from);
                        break;
+               case T_AlterUserSetStmt:
+                       retval = _copyAlterUserSetStmt(from);
+                       break;
                case T_DropUserStmt:
                        retval = _copyDropUserStmt(from);
                        break;
@@ -2892,19 +2970,22 @@ copyObject(void *from)
                case T_CheckPointStmt:
                        retval = (void *) makeNode(CheckPointStmt);
                        break;
+               case T_CreateSchemaStmt:
+                       retval = _copyCreateSchemaStmt(from);
+                       break;
 
                case T_A_Expr:
                        retval = _copyAExpr(from);
                        break;
-               case T_Attr:
-                       retval = _copyAttr(from);
+               case T_ColumnRef:
+                       retval = _copyColumnRef(from);
+                       break;
+               case T_ParamRef:
+                       retval = _copyParamRef(from);
                        break;
                case T_A_Const:
                        retval = _copyAConst(from);
                        break;
-               case T_ParamNo:
-                       retval = _copyParamNo(from);
-                       break;
                case T_Ident:
                        retval = _copyIdent(from);
                        break;
@@ -2914,6 +2995,9 @@ copyObject(void *from)
                case T_A_Indices:
                        retval = _copyAIndices(from);
                        break;
+               case T_ExprFieldSelect:
+                       retval = _copyExprFieldSelect(from);
+                       break;
                case T_ResTarget:
                        retval = _copyResTarget(from);
                        break;
@@ -2923,12 +3007,18 @@ copyObject(void *from)
                case T_SortGroupBy:
                        retval = _copySortGroupBy(from);
                        break;
+               case T_Alias:
+                       retval = _copyAlias(from);
+                       break;
                case T_RangeVar:
                        retval = _copyRangeVar(from);
                        break;
                case T_RangeSubselect:
                        retval = _copyRangeSubselect(from);
                        break;
+               case T_RangeFunction:
+                       retval = _copyRangeFunction(from);
+                       break;
                case T_TypeName:
                        retval = _copyTypeName(from);
                        break;
@@ -2974,6 +3064,12 @@ copyObject(void *from)
                case T_PrivGrantee:
                        retval = _copyPrivGrantee(from);
                        break;
+               case T_FuncWithArgs:
+                       retval = _copyFuncWithArgs(from);
+                       break;
+               case T_InsertDefault:
+                       retval = _copyInsertDefault(from);
+                       break;
 
                default:
                        elog(ERROR, "copyObject: don't know how to copy node type %d",