77 *
88 *
99 * IDENTIFICATION
10- * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.28 1998/01/09 05:48:10 momjian Exp $
10+ * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.29 1998/01/11 20:01:53 momjian Exp $
1111 *
1212 *-------------------------------------------------------------------------
1313 */
@@ -82,6 +82,7 @@ CopyPlanFields(Plan *from, Plan *newnode)
8282newnode -> cost = from -> cost ;
8383newnode -> plan_size = from -> plan_size ;
8484newnode -> plan_width = from -> plan_width ;
85+ newnode -> plan_tupperpage = from -> plan_tupperpage ;
8586newnode -> state = from -> state ;
8687newnode -> targetlist = copyObject (from -> targetlist );
8788newnode -> qual = copyObject (from -> qual );
@@ -153,6 +154,7 @@ _copyAppend(Append *from)
153154 * ----------------
154155 */
155156Node_Copy (from ,newnode ,unionplans );
157+ Node_Copy (from ,newnode ,unionrts );
156158newnode -> unionrelid = from -> unionrelid ;
157159Node_Copy (from ,newnode ,unionrtentries );
158160Node_Copy (from ,newnode ,unionstate );
@@ -190,7 +192,7 @@ _copyScan(Scan *from)
190192 * ----------------
191193 */
192194CopyPlanFields ((Plan * )from , (Plan * )newnode );
193- CopyScanFields (from ,newnode );
195+ CopyScanFields (( Scan * ) from , ( Scan * ) newnode );
194196
195197return newnode ;
196198}
@@ -310,7 +312,6 @@ static MergeJoin *
310312_copyMergeJoin (MergeJoin * from )
311313{
312314MergeJoin * newnode = makeNode (MergeJoin );
313- List * newlist ;
314315
315316/* ----------------
316317 *copy node superclass fields
@@ -326,7 +327,6 @@ _copyMergeJoin(MergeJoin *from)
326327Node_Copy (from ,newnode ,mergeclauses );
327328
328329newnode -> mergesortop = from -> mergesortop ;
329- newlist = NIL ;
330330
331331newnode -> mergerightorder = (Oid * )palloc (sizeof (Oid )* 2 );
332332newnode -> mergerightorder [0 ]= from -> mergerightorder [0 ];
@@ -458,7 +458,9 @@ _copySort(Sort *from)
458458 * ----------------
459459 */
460460Node_Copy (from ,newnode ,sortstate );
461-
461+ Node_Copy (from ,newnode ,psortstate );
462+ newnode -> cleaned = from -> cleaned ;
463+
462464return newnode ;
463465}
464466
@@ -473,8 +475,7 @@ _copyGroup(Group *from)
473475Group * newnode = makeNode (Group );
474476
475477CopyPlanFields ((Plan * )from , (Plan * )newnode );
476- CopyTempFields ((Temp * )from , (Temp * )newnode );
477-
478+
478479newnode -> tuplePerGroup = from -> tuplePerGroup ;
479480newnode -> numCols = from -> numCols ;
480481newnode -> grpColIdx = palloc (from -> numCols * sizeof (AttrNumber ));
@@ -495,14 +496,11 @@ _copyAgg(Agg *from)
495496int i ;
496497
497498CopyPlanFields ((Plan * )from , (Plan * )newnode );
498- CopyTempFields ((Temp * )from , (Temp * )newnode );
499499
500500newnode -> numAgg = from -> numAgg ;
501501newnode -> aggs = palloc (sizeof (Aggreg * ));
502502for (i = 0 ;i < from -> numAgg ;i ++ )
503- {
504503newnode -> aggs [i ]= copyObject (from -> aggs [i ]);
505- }
506504
507505Node_Copy (from ,newnode ,aggstate );
508506
@@ -518,8 +516,8 @@ _copyGroupClause(GroupClause *from)
518516{
519517GroupClause * newnode = makeNode (GroupClause );
520518
519+ Node_Copy (from ,newnode ,entry );
521520newnode -> grpOpoid = from -> grpOpoid ;
522- newnode -> entry = copyObject (from -> entry );
523521
524522return newnode ;
525523}
@@ -545,6 +543,8 @@ _copyUnique(Unique *from)
545543 *copy remainder of node
546544 * ----------------
547545 */
546+ newnode -> uniqueAttr = pstrdup (from -> uniqueAttr );
547+ newnode -> uniqueAttrNum = from -> uniqueAttrNum ;
548548Node_Copy (from ,newnode ,uniquestate );
549549
550550return newnode ;
@@ -599,13 +599,7 @@ _copyResdom(Resdom *from)
599599newnode -> reslen = from -> reslen ;
600600
601601if (from -> resname != NULL )
602- {
603- newnode -> resname = palloc (strlen (from -> resname )+ 1 );
604- strcpy (newnode -> resname ,from -> resname );
605- }
606- else
607- newnode -> resname = (char * )NULL ;
608-
602+ newnode -> resname = pstrdup (from -> resname );
609603newnode -> reskey = from -> reskey ;
610604newnode -> reskeyop = from -> reskeyop ;
611605newnode -> resjunk = from -> resjunk ;
@@ -630,14 +624,12 @@ _copyFjoin(Fjoin *from)
630624
631625newnode -> fj_results = (DatumPtr )
632626palloc ((from -> fj_nNodes )* sizeof (Datum ));
633-
634- newnode -> fj_alwaysDone = (BoolPtr )
635- palloc ((from -> fj_nNodes )* sizeof (bool ));
636-
637627memmove (from -> fj_results ,
638628newnode -> fj_results ,
639629(from -> fj_nNodes )* sizeof (Datum ));
640630
631+ newnode -> fj_alwaysDone = (BoolPtr )
632+ palloc ((from -> fj_nNodes )* sizeof (bool ));
641633memmove (from -> fj_alwaysDone ,
642634newnode -> fj_alwaysDone ,
643635(from -> fj_nNodes )* sizeof (bool ));
@@ -741,6 +733,8 @@ _copyConst(Const *from)
741733/* ----------------
742734 *XXX super cheesy hack until parser/planner
743735 *puts in the right values here.
736+ *
737+ * But I like cheese.
744738 * ----------------
745739 */
746740if (!from -> constisnull && cached_type != from -> consttype )
@@ -826,6 +820,8 @@ _copyConst(Const *from)
826820}
827821newnode -> constisnull = from -> constisnull ;
828822newnode -> constbyval = from -> constbyval ;
823+ newnode -> constisset = from -> constisset ;
824+ newnode -> constiscast = from -> constiscast ;
829825
830826return newnode ;
831827}
@@ -847,12 +843,7 @@ _copyParam(Param *from)
847843newnode -> paramid = from -> paramid ;
848844
849845if (from -> paramname != NULL )
850- {
851846newnode -> paramname = pstrdup (from -> paramname );
852- }
853- else
854- newnode -> paramname = (char * )NULL ;
855-
856847newnode -> paramtype = from -> paramtype ;
857848Node_Copy (from ,newnode ,param_tlist );
858849
@@ -899,11 +890,9 @@ _copyAggreg(Aggreg *from)
899890newnode -> aggname = pstrdup (from -> aggname );
900891newnode -> basetype = from -> basetype ;
901892newnode -> aggtype = from -> aggtype ;
902- newnode -> usenulls = from -> usenulls ;
903-
904893Node_Copy (from ,newnode ,target );
905-
906894newnode -> aggno = from -> aggno ;
895+ newnode -> usenulls = from -> usenulls ;
907896
908897return newnode ;
909898}
@@ -937,9 +926,9 @@ _copyArrayRef(ArrayRef *from)
937926 *copy remainder of node
938927 * ----------------
939928 */
940- newnode -> refelemtype = from -> refelemtype ;
941929newnode -> refattrlength = from -> refattrlength ;
942930newnode -> refelemlength = from -> refelemlength ;
931+ newnode -> refelemtype = from -> refelemtype ;
943932newnode -> refelembyval = from -> refelembyval ;
944933
945934Node_Copy (from ,newnode ,refupperindexpr );
@@ -982,24 +971,19 @@ _copyRel(Rel *from)
982971newnode -> tuples = from -> tuples ;
983972newnode -> size = from -> size ;
984973newnode -> width = from -> width ;
985- newnode -> indproc = from -> indproc ;
986-
987974Node_Copy (from ,newnode ,targetlist );
988975Node_Copy (from ,newnode ,pathlist );
989976Node_Copy (from ,newnode ,unorderedpath );
990977Node_Copy (from ,newnode ,cheapestpath );
991978newnode -> pruneable = from -> pruneable ;
992- newnode -> relam = from -> relam ;
993979
994980if (from -> classlist )
995981{
996982for (len = 0 ;from -> classlist [len ]!= 0 ;len ++ )
997983;
998984newnode -> classlist = (Oid * )palloc (sizeof (Oid )* (len + 1 ));
999985for (i = 0 ;i < len ;i ++ )
1000- {
1001986newnode -> classlist [i ]= from -> classlist [i ];
1002- }
1003987newnode -> classlist [len ]= 0 ;
1004988}
1005989
@@ -1009,21 +993,21 @@ _copyRel(Rel *from)
1009993;
1010994newnode -> indexkeys = (int * )palloc (sizeof (int )* (len + 1 ));
1011995for (i = 0 ;i < len ;i ++ )
1012- {
1013996newnode -> indexkeys [i ]= from -> indexkeys [i ];
1014- }
1015997newnode -> indexkeys [len ]= 0 ;
1016998}
1017999
1000+ newnode -> relam = from -> relam ;
1001+ newnode -> indproc = from -> indproc ;
1002+ Node_Copy (from ,newnode ,indpred );
1003+
10181004if (from -> ordering )
10191005{
10201006for (len = 0 ;from -> ordering [len ]!= 0 ;len ++ )
10211007;
10221008newnode -> ordering = (Oid * )palloc (sizeof (Oid )* (len + 1 ));
10231009for (i = 0 ;i < len ;i ++ )
1024- {
10251010newnode -> ordering [i ]= from -> ordering [i ];
1026- }
10271011newnode -> ordering [len ]= 0 ;
10281012}
10291013
@@ -1070,15 +1054,9 @@ CopyPathFields(Path *from, Path *newnode)
10701054newnode -> p_ordering .ord .sortop =
10711055(Oid * )palloc (sizeof (Oid )* (len + 1 ));
10721056for (i = 0 ;i < len ;i ++ )
1073- {
10741057newnode -> p_ordering .ord .sortop [i ]= ordering [i ];
1075- }
10761058newnode -> p_ordering .ord .sortop [len ]= 0 ;
10771059}
1078- else
1079- {
1080- newnode -> p_ordering .ord .sortop = NULL ;
1081- }
10821060}
10831061else
10841062{
@@ -1138,9 +1116,7 @@ _copyIndexPath(IndexPath *from)
11381116;
11391117newnode -> indexkeys = (int * )palloc (sizeof (int )* (len + 1 ));
11401118for (i = 0 ;i < len ;i ++ )
1141- {
11421119newnode -> indexkeys [i ]= from -> indexkeys [i ];
1143- }
11441120newnode -> indexkeys [len ]= 0 ;
11451121}
11461122
@@ -1364,6 +1340,7 @@ _copyHInfo(HInfo *from)
13641340 *copy remainder of node
13651341 * ----------------
13661342 */
1343+ CopyJoinMethodFields ((JoinMethod * )from , (JoinMethod * )newnode );
13671344newnode -> hashop = from -> hashop ;
13681345
13691346return newnode ;
@@ -1382,6 +1359,7 @@ _copyMInfo(MInfo *from)
13821359 *copy remainder of node
13831360 * ----------------
13841361 */
1362+ CopyJoinMethodFields ((JoinMethod * )from , (JoinMethod * )newnode );
13851363Node_Copy (from ,newnode ,m_ordering );
13861364
13871365return newnode ;
@@ -1429,15 +1407,17 @@ _copyStream(Stream *from)
14291407newnode -> pathptr = from -> pathptr ;
14301408newnode -> cinfo = from -> cinfo ;
14311409newnode -> clausetype = from -> clausetype ;
1432- newnode -> groupup = from -> groupup ;
1433- newnode -> groupcost = from -> groupcost ;
1434- newnode -> groupsel = from -> groupsel ;
1410+
14351411newnode -> upstream = (StreamPtr )NULL ;/* only copy nodes
14361412 * downwards! */
14371413Node_Copy (from ,newnode ,downstream );
14381414if (newnode -> downstream )
14391415((Stream * )newnode -> downstream )-> upstream = (Stream * )newnode ;
14401416
1417+ newnode -> groupup = from -> groupup ;
1418+ newnode -> groupcost = from -> groupcost ;
1419+ newnode -> groupsel = from -> groupsel ;
1420+
14411421return newnode ;
14421422}
14431423
@@ -1462,12 +1442,15 @@ _copyRangeTblEntry(RangeTblEntry *from)
14621442{
14631443RangeTblEntry * newnode = makeNode (RangeTblEntry );
14641444
1465- memcpy (newnode ,from ,sizeof (RangeTblEntry ));
14661445if (from -> relname )
14671446newnode -> relname = pstrdup (from -> relname );
14681447if (from -> refname )
14691448newnode -> refname = pstrdup (from -> refname );
1449+ newnode -> relid = from -> relid ;
1450+ newnode -> inh = from -> inh ;
1451+ newnode -> inFromCl = from -> inFromCl ;
14701452
1453+
14711454return newnode ;
14721455}
14731456
@@ -1499,13 +1482,8 @@ _copyTypeName(TypeName *from)
14991482TypeName * newnode = makeNode (TypeName );
15001483
15011484if (from -> name )
1502- {
15031485newnode -> name = pstrdup (from -> name );
1504- }
1505- else
1506- {
1507- from -> name = (char * )0 ;
1508- }
1486+ newnode -> timezone = from -> timezone ;
15091487newnode -> setof = from -> setof ;
15101488Node_Copy (from ,newnode ,arrayBounds );
15111489newnode -> typlen = from -> typlen ;
@@ -1524,40 +1502,25 @@ _copyQuery(Query *from)
15241502{
15251503NotifyStmt * from_notify = (NotifyStmt * )from -> utilityStmt ;
15261504NotifyStmt * n = makeNode (NotifyStmt );
1527- int length = strlen (from_notify -> relname );
15281505
1529- n -> relname = palloc (length + 1 );
1530- strcpy (n -> relname ,from_notify -> relname );
1506+ n -> relname = pstrdup (from_notify -> relname );
15311507newnode -> utilityStmt = (Node * )n ;
15321508}
15331509newnode -> resultRelation = from -> resultRelation ;
1534- /* probably should dup this string instead of just pointing */
1535- /* to the old one --djm */
15361510if (from -> into )
1537- {
15381511newnode -> into = pstrdup (from -> into );
1539- }
1540- else
1541- {
1542- newnode -> into = (char * )0 ;
1543- }
15441512newnode -> isPortal = from -> isPortal ;
15451513newnode -> isBinary = from -> isBinary ;
15461514newnode -> unionall = from -> unionall ;
15471515if (from -> uniqueFlag )
1548- {
1549- newnode -> uniqueFlag = (char * )palloc (strlen (from -> uniqueFlag )+ 1 );
1550- strcpy (newnode -> uniqueFlag ,from -> uniqueFlag );
1551- }
1552- else
1553- newnode -> uniqueFlag = NULL ;
1516+ newnode -> uniqueFlag = pstrdup (from -> uniqueFlag );
15541517Node_Copy (from ,newnode ,sortClause );
15551518Node_Copy (from ,newnode ,rtable );
15561519Node_Copy (from ,newnode ,targetList );
15571520Node_Copy (from ,newnode ,qual );
15581521
15591522Node_Copy (from ,newnode ,groupClause );
1560- Node_Copy (from ,newnode ,havingQual );/* currently ignored */
1523+ Node_Copy (from ,newnode ,havingQual );
15611524
15621525newnode -> qry_numAgg = from -> qry_numAgg ;
15631526if (from -> qry_numAgg > 0 )
@@ -1567,8 +1530,6 @@ _copyQuery(Query *from)
15671530for (i = 0 ;i < from -> qry_numAgg ;i ++ )
15681531newnode -> qry_aggs [i ]= _copyAggreg (from -> qry_aggs [i ]);
15691532}
1570- else
1571- newnode -> qry_aggs = NULL ;
15721533
15731534if (from -> unionClause )
15741535{
@@ -1578,8 +1539,6 @@ _copyQuery(Query *from)
15781539temp_list = lappend (temp_list ,copyObject (lfirst (ulist )));
15791540newnode -> unionClause = temp_list ;
15801541}
1581- else
1582- newnode -> unionClause = NULL ;
15831542
15841543return newnode ;
15851544}