aboutsummaryrefslogtreecommitdiff
path: root/src/backend/nodes/copyfuncs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/nodes/copyfuncs.c')
-rw-r--r--src/backend/nodes/copyfuncs.c78
1 files changed, 55 insertions, 23 deletions
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index 808ffbd075a..1a0f4623978 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -15,7 +15,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.123 2000/09/29 18:21:29 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.124 2000/10/05 19:11:27 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -176,7 +176,6 @@ _copyAppend(Append *from)
* ----------------
*/
Node_Copy(from, newnode, appendplans);
- Node_Copy(from, newnode, unionrtables);
newnode->inheritrelid = from->inheritrelid;
Node_Copy(from, newnode, inheritrtable);
@@ -565,6 +564,33 @@ _copyUnique(Unique *from)
return newnode;
}
+/* ----------------
+ * _copySetOp
+ * ----------------
+ */
+static SetOp *
+_copySetOp(SetOp *from)
+{
+ SetOp *newnode = makeNode(SetOp);
+
+ /* ----------------
+ * copy node superclass fields
+ * ----------------
+ */
+ CopyPlanFields((Plan *) from, (Plan *) newnode);
+
+ /* ----------------
+ * copy remainder of node
+ * ----------------
+ */
+ newnode->cmd = from->cmd;
+ newnode->numCols = from->numCols;
+ newnode->dupColIdx = palloc(from->numCols * sizeof(AttrNumber));
+ memcpy(newnode->dupColIdx, from->dupColIdx, from->numCols * sizeof(AttrNumber));
+ newnode->flagColIdx = from->flagColIdx;
+
+ return newnode;
+}
/* ----------------
* _copyHash
@@ -1696,28 +1722,26 @@ _copyQuery(Query *from)
newnode->isPortal = from->isPortal;
newnode->isBinary = from->isBinary;
newnode->isTemp = from->isTemp;
- newnode->unionall = from->unionall;
newnode->hasAggs = from->hasAggs;
newnode->hasSubLinks = from->hasSubLinks;
Node_Copy(from, newnode, rtable);
Node_Copy(from, newnode, jointree);
- Node_Copy(from, newnode, targetList);
-
newnode->rowMarks = listCopy(from->rowMarks);
- Node_Copy(from, newnode, distinctClause);
- Node_Copy(from, newnode, sortClause);
+ Node_Copy(from, newnode, targetList);
+
Node_Copy(from, newnode, groupClause);
Node_Copy(from, newnode, havingQual);
-
- /* why is intersectClause missing? */
- Node_Copy(from, newnode, unionClause);
+ Node_Copy(from, newnode, distinctClause);
+ Node_Copy(from, newnode, sortClause);
Node_Copy(from, newnode, limitOffset);
Node_Copy(from, newnode, limitCount);
+ Node_Copy(from, newnode, setOperations);
+
/*
* We do not copy the planner internal fields: base_rel_list,
* join_rel_list, equi_key_list, query_pathkeys. Not entirely clear if
@@ -1734,17 +1758,9 @@ _copyInsertStmt(InsertStmt *from)
if (from->relname)
newnode->relname = pstrdup(from->relname);
- Node_Copy(from, newnode, distinctClause);
Node_Copy(from, newnode, cols);
Node_Copy(from, newnode, targetList);
- Node_Copy(from, newnode, fromClause);
- Node_Copy(from, newnode, whereClause);
- Node_Copy(from, newnode, groupClause);
- Node_Copy(from, newnode, havingClause);
- Node_Copy(from, newnode, unionClause);
- newnode->unionall = from->unionall;
- Node_Copy(from, newnode, intersectClause);
- Node_Copy(from, newnode, forUpdate);
+ Node_Copy(from, newnode, selectStmt);
return newnode;
}
@@ -1790,15 +1806,11 @@ _copySelectStmt(SelectStmt *from)
Node_Copy(from, newnode, whereClause);
Node_Copy(from, newnode, groupClause);
Node_Copy(from, newnode, havingClause);
- Node_Copy(from, newnode, intersectClause);
- Node_Copy(from, newnode, exceptClause);
- Node_Copy(from, newnode, unionClause);
Node_Copy(from, newnode, sortClause);
if (from->portalname)
newnode->portalname = pstrdup(from->portalname);
newnode->binary = from->binary;
newnode->istemp = from->istemp;
- newnode->unionall = from->unionall;
Node_Copy(from, newnode, limitOffset);
Node_Copy(from, newnode, limitCount);
Node_Copy(from, newnode, forUpdate);
@@ -1806,6 +1818,20 @@ _copySelectStmt(SelectStmt *from)
return newnode;
}
+static SetOperationStmt *
+_copySetOperationStmt(SetOperationStmt *from)
+{
+ SetOperationStmt *newnode = makeNode(SetOperationStmt);
+
+ newnode->op = from->op;
+ newnode->all = from->all;
+ Node_Copy(from, newnode, larg);
+ Node_Copy(from, newnode, rarg);
+ newnode->colTypes = listCopy(from->colTypes);
+
+ return newnode;
+}
+
static AlterTableStmt *
_copyAlterTableStmt(AlterTableStmt *from)
{
@@ -2553,6 +2579,9 @@ copyObject(void *from)
case T_Unique:
retval = _copyUnique(from);
break;
+ case T_SetOp:
+ retval = _copySetOp(from);
+ break;
case T_Hash:
retval = _copyHash(from);
break;
@@ -2700,6 +2729,9 @@ copyObject(void *from)
case T_SelectStmt:
retval = _copySelectStmt(from);
break;
+ case T_SetOperationStmt:
+ retval = _copySetOperationStmt(from);
+ break;
case T_AlterTableStmt:
retval = _copyAlterTableStmt(from);
break;