77 *
88 *
99 * IDENTIFICATION
10- * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.90 1999/08/09 06:20:23 momjian Exp $
10+ * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.91 1999/08/16 02:17:41 tgl Exp $
1111 *
1212 *-------------------------------------------------------------------------
1313 */
@@ -1030,10 +1030,6 @@ _copyRelOptInfo(RelOptInfo *from)
10301030newnode -> indexkeys [len ]= 0 ;
10311031}
10321032
1033- newnode -> relam = from -> relam ;
1034- newnode -> indproc = from -> indproc ;
1035- Node_Copy (from ,newnode ,indpred );
1036-
10371033if (from -> ordering )
10381034{
10391035for (len = 0 ;from -> ordering [len ]!= 0 ;len ++ )
@@ -1044,6 +1040,10 @@ _copyRelOptInfo(RelOptInfo *from)
10441040newnode -> ordering [len ]= 0 ;
10451041}
10461042
1043+ newnode -> relam = from -> relam ;
1044+ newnode -> indproc = from -> indproc ;
1045+ Node_Copy (from ,newnode ,indpred );
1046+
10471047Node_Copy (from ,newnode ,restrictinfo );
10481048Node_Copy (from ,newnode ,joininfo );
10491049Node_Copy (from ,newnode ,innerjoin );
@@ -1061,8 +1061,6 @@ _copyRelOptInfo(RelOptInfo *from)
10611061static void
10621062CopyPathFields (Path * from ,Path * newnode )
10631063{
1064- newnode -> pathtype = from -> pathtype ;
1065-
10661064/*
10671065 * Modify the next line, since it causes the copying to cycle (i.e.
10681066 * the parent points right back here! -- JMH, 7/7/92. Old version:
@@ -1072,32 +1070,9 @@ CopyPathFields(Path *from, Path *newnode)
10721070
10731071newnode -> path_cost = from -> path_cost ;
10741072
1075- newnode -> pathorder = makeNode (PathOrder );
1076- newnode -> pathorder -> ordtype = from -> pathorder -> ordtype ;
1077- if (from -> pathorder -> ordtype == SORTOP_ORDER )
1078- {
1079- int len ,
1080- i ;
1081- Oid * ordering = from -> pathorder -> ord .sortop ;
1082-
1083- if (ordering )
1084- {
1085- for (len = 0 ;ordering [len ]!= 0 ;len ++ )
1086- ;
1087- newnode -> pathorder -> ord .sortop = (Oid * )palloc (sizeof (Oid )* (len + 1 ));
1088- for (i = 0 ;i < len ;i ++ )
1089- newnode -> pathorder -> ord .sortop [i ]= ordering [i ];
1090- newnode -> pathorder -> ord .sortop [len ]= 0 ;
1091- }
1092- }
1093- else
1094- Node_Copy (from ,newnode ,pathorder -> ord .merge );
1073+ newnode -> pathtype = from -> pathtype ;
10951074
10961075Node_Copy (from ,newnode ,pathkeys );
1097-
1098- newnode -> outerjoincost = from -> outerjoincost ;
1099-
1100- newnode -> joinid = listCopy (from -> joinid );
11011076}
11021077
11031078/* ----------------
@@ -1135,32 +1110,20 @@ _copyIndexPath(IndexPath *from)
11351110 */
11361111newnode -> indexid = listCopy (from -> indexid );
11371112Node_Copy (from ,newnode ,indexqual );
1138-
1139- if (from -> indexkeys )
1140- {
1141- int i ,
1142- len ;
1143-
1144- for (len = 0 ;from -> indexkeys [len ]!= 0 ;len ++ )
1145- ;
1146- newnode -> indexkeys = (int * )palloc (sizeof (int )* (len + 1 ));
1147- for (i = 0 ;i < len ;i ++ )
1148- newnode -> indexkeys [i ]= from -> indexkeys [i ];
1149- newnode -> indexkeys [len ]= 0 ;
1150- }
1113+ newnode -> joinrelids = listCopy (from -> joinrelids );
11511114
11521115return newnode ;
11531116}
11541117
11551118/* ----------------
1156- *CopyNestPathFields
1119+ *CopyJoinPathFields
11571120 *
1158- *This function copies the fields of theNestPath node. It is used by
1159- *all the copy functions for classes which inherit fromNestPath .
1121+ *This function copies the fields of theJoinPath node. It is used by
1122+ *all the copy functions for classes which inherit fromJoinPath .
11601123 * ----------------
11611124 */
11621125static void
1163- CopyNestPathFields ( NestPath * from ,NestPath * newnode )
1126+ CopyJoinPathFields ( JoinPath * from ,JoinPath * newnode )
11641127{
11651128Node_Copy (from ,newnode ,pathinfo );
11661129Node_Copy (from ,newnode ,outerjoinpath );
@@ -1181,7 +1144,7 @@ _copyNestPath(NestPath *from)
11811144 * ----------------
11821145 */
11831146CopyPathFields ((Path * )from , (Path * )newnode );
1184- CopyNestPathFields ( from ,newnode );
1147+ CopyJoinPathFields (( JoinPath * ) from , ( JoinPath * ) newnode );
11851148
11861149return newnode ;
11871150}
@@ -1200,7 +1163,7 @@ _copyMergePath(MergePath *from)
12001163 * ----------------
12011164 */
12021165CopyPathFields ((Path * )from , (Path * )newnode );
1203- CopyNestPathFields (( NestPath * )from , (NestPath * )newnode );
1166+ CopyJoinPathFields (( JoinPath * )from , (JoinPath * )newnode );
12041167
12051168/* ----------------
12061169 *copy the remainder of the node
@@ -1227,76 +1190,32 @@ _copyHashPath(HashPath *from)
12271190 * ----------------
12281191 */
12291192CopyPathFields ((Path * )from , (Path * )newnode );
1230- CopyNestPathFields (( NestPath * )from , (NestPath * )newnode );
1193+ CopyJoinPathFields (( JoinPath * )from , (JoinPath * )newnode );
12311194
12321195/* ----------------
12331196 *copy remainder of node
12341197 * ----------------
12351198 */
12361199Node_Copy (from ,newnode ,path_hashclauses );
1237- Node_Copy (from ,newnode ,outerhashkeys );
1238- Node_Copy (from ,newnode ,innerhashkeys );
12391200
12401201return newnode ;
12411202}
12421203
12431204/* ----------------
1244- *_copyOrderKey
1205+ *_copyPathKeyItem
12451206 * ----------------
12461207 */
1247- static OrderKey *
1248- _copyOrderKey ( OrderKey * from )
1208+ static PathKeyItem *
1209+ _copyPathKeyItem ( PathKeyItem * from )
12491210{
1250- OrderKey * newnode = makeNode (OrderKey );
1211+ PathKeyItem * newnode = makeNode (PathKeyItem );
12511212
12521213/* ----------------
12531214 *copy remainder of node
12541215 * ----------------
12551216 */
1256- newnode -> attribute_number = from -> attribute_number ;
1257- newnode -> array_index = from -> array_index ;
1258-
1259- return newnode ;
1260- }
1261-
1262-
1263- /* ----------------
1264- *_copyJoinKey
1265- * ----------------
1266- */
1267- static JoinKey *
1268- _copyJoinKey (JoinKey * from )
1269- {
1270- JoinKey * newnode = makeNode (JoinKey );
1271-
1272- /* ----------------
1273- *copy remainder of node
1274- * ----------------
1275- */
1276- Node_Copy (from ,newnode ,outer );
1277- Node_Copy (from ,newnode ,inner );
1278-
1279- return newnode ;
1280- }
1281-
1282- /* ----------------
1283- *_copyMergeOrder
1284- * ----------------
1285- */
1286- static MergeOrder *
1287- _copyMergeOrder (MergeOrder * from )
1288- {
1289- MergeOrder * newnode = makeNode (MergeOrder );
1290-
1291- /* ----------------
1292- *copy remainder of node
1293- * ----------------
1294- */
1295- newnode -> join_operator = from -> join_operator ;
1296- newnode -> left_operator = from -> left_operator ;
1297- newnode -> right_operator = from -> right_operator ;
1298- newnode -> left_type = from -> left_type ;
1299- newnode -> right_type = from -> right_type ;
1217+ Node_Copy (from ,newnode ,key );
1218+ newnode -> sortop = from -> sortop ;
13001219
13011220return newnode ;
13021221}
@@ -1315,83 +1234,16 @@ _copyRestrictInfo(RestrictInfo *from)
13151234 * ----------------
13161235 */
13171236Node_Copy (from ,newnode ,clause );
1318-
13191237newnode -> selectivity = from -> selectivity ;
1320-
1321- Node_Copy (from ,newnode ,indexids );
1322- Node_Copy (from ,newnode ,mergejoinorder );
1238+ Node_Copy (from ,newnode ,subclauseindices );
1239+ newnode -> mergejoinoperator = from -> mergejoinoperator ;
1240+ newnode -> left_sortop = from -> left_sortop ;
1241+ newnode -> right_sortop = from -> right_sortop ;
13231242newnode -> hashjoinoperator = from -> hashjoinoperator ;
13241243
13251244return newnode ;
13261245}
13271246
1328- /* ----------------
1329- *CopyJoinMethodFields
1330- *
1331- *This function copies the fields of the JoinMethod node. It is used by
1332- *all the copy functions for classes which inherit from JoinMethod.
1333- * ----------------
1334- */
1335- static void
1336- CopyJoinMethodFields (JoinMethod * from ,JoinMethod * newnode )
1337- {
1338- Node_Copy (from ,newnode ,jmkeys );
1339- Node_Copy (from ,newnode ,clauses );
1340- return ;
1341- }
1342-
1343- /* ----------------
1344- *_copyJoinMethod
1345- * ----------------
1346- */
1347- static JoinMethod *
1348- _copyJoinMethod (JoinMethod * from )
1349- {
1350- JoinMethod * newnode = makeNode (JoinMethod );
1351-
1352- CopyJoinMethodFields (from ,newnode );
1353-
1354- return newnode ;
1355- }
1356-
1357- /* ----------------
1358- *_copyHashInfo
1359- * ----------------
1360- */
1361- static HashInfo *
1362- _copyHashInfo (HashInfo * from )
1363- {
1364- HashInfo * newnode = makeNode (HashInfo );
1365-
1366- /* ----------------
1367- *copy remainder of node
1368- * ----------------
1369- */
1370- CopyJoinMethodFields ((JoinMethod * )from , (JoinMethod * )newnode );
1371- newnode -> hashop = from -> hashop ;
1372-
1373- return newnode ;
1374- }
1375-
1376- /* ----------------
1377- *_copyMergeInfo
1378- * ----------------
1379- */
1380- static MergeInfo *
1381- _copyMergeInfo (MergeInfo * from )
1382- {
1383- MergeInfo * newnode = makeNode (MergeInfo );
1384-
1385- /* ----------------
1386- *copy remainder of node
1387- * ----------------
1388- */
1389- CopyJoinMethodFields ((JoinMethod * )from , (JoinMethod * )newnode );
1390- Node_Copy (from ,newnode ,m_ordering );
1391-
1392- return newnode ;
1393- }
1394-
13951247/* ----------------
13961248 *_copyJoinInfo
13971249 * ----------------
@@ -1408,9 +1260,6 @@ _copyJoinInfo(JoinInfo *from)
14081260newnode -> unjoined_relids = listCopy (from -> unjoined_relids );
14091261Node_Copy (from ,newnode ,jinfo_restrictinfo );
14101262
1411- newnode -> mergejoinable = from -> mergejoinable ;
1412- newnode -> hashjoinable = from -> hashjoinable ;
1413-
14141263return newnode ;
14151264}
14161265
@@ -1756,27 +1605,12 @@ copyObject(void *from)
17561605case T_HashPath :
17571606retval = _copyHashPath (from );
17581607break ;
1759- case T_OrderKey :
1760- retval = _copyOrderKey (from );
1761- break ;
1762- case T_JoinKey :
1763- retval = _copyJoinKey (from );
1764- break ;
1765- case T_MergeOrder :
1766- retval = _copyMergeOrder (from );
1608+ case T_PathKeyItem :
1609+ retval = _copyPathKeyItem (from );
17671610break ;
17681611case T_RestrictInfo :
17691612retval = _copyRestrictInfo (from );
17701613break ;
1771- case T_JoinMethod :
1772- retval = _copyJoinMethod (from );
1773- break ;
1774- case T_HashInfo :
1775- retval = _copyHashInfo (from );
1776- break ;
1777- case T_MergeInfo :
1778- retval = _copyMergeInfo (from );
1779- break ;
17801614case T_JoinInfo :
17811615retval = _copyJoinInfo (from );
17821616break ;